• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czytanie poprawnie danych API
#4
POLECAM Ci te API (darmowe) : api.weatherapi.com

u mnie działa bez zarzutu (na ESP-WROVER 8MB PS-RAM)
wycinek z programu - tylko że ja korzystam z modułu z pamięcią PS-RAM i tam alokuje dane)
ale może się przyda
Kod:
void AirUpdate()
{
    if (!F_ptrAir) ptrAirMalloc();    // jesli pamięć nie utworzona stwórz ją w PSRAM
   
    #if SERIAL
        #if ENGLISH
            Serial.printf("\n[Air Update] Try Downloading JSON File from https://api.weatherapi.com/");
        #endif
        #if POLISH
            Serial.printf("\n[Air Update] Próbuję pobrać plik JSON z https://api.weatherapi.com/");
        #endif
    #endif

    #if ENGLISH
        String path = "http://api.weatherapi.com/v1/current.json?key=" + PogodaToken + "&q=" + PogodaMiasto + "&aqi=yes";
    #endif
    #if POLISH
        String path = "http://api.weatherapi.com/v1/current.json?key=" + PogodaToken + "&q=" + PogodaMiasto + "&aqi=yes";
    #endif   
       
    HTTPClient http;
    http.useHTTP10(true);
    http.begin(client, path);
    http.GET();

    DynamicJsonDocument doc(2048);
    DeserializationError error = deserializeJson(doc, http.getStream());
       
    if(error)
    {
        F_AirUpdate = false;      // aktualizacja nie powiodła się
        #if SERIAL
            #if ENGLISH
                Serial.printf("\n[Air Update] DeserializeJson() failed: ");
                Serial.println(error.c_str());
            #endif
            #if POLISH
                Serial.printf("\n[Air Update] DeserializeJson() error: ");
                Serial.println(error.c_str());
            #endif        
        #endif 
    }
    else
    {
        F_AirUpdate = true;
    }

    http.end();
   
    if(F_AirUpdate)
    {
        #if SERIAL
            #if ENGLISH
                Serial.printf("\n[ESP] [Air Update] JsonDocument Usage Memory : %s bytes", String(doc.memoryUsage()));                 
                Serial.printf("\n[ESP] [Air Update] [FREE RAM]                : %d kB\n", ESP.getFreeHeap());      
            #endif
            #if POLISH
                Serial.printf("\n[ESP] [Air Update] JsonDocument zaalokował pamięć : %s bajtów", String(doc.memoryUsage())); 
                Serial.printf("\n[ESP] [Air Update] [FREE RAM]                     : %d kB\n", ESP.getFreeHeap());      
            #endif
        #endif

        // --- update struct Air in PSRAM !!! -------------------------------------------------- //

        ptrAir->co    = doc["current"]["air_quality"]["co"].as<double>();
        ptrAir->o3    = doc["current"]["air_quality"]["o3"].as<double>();
        ptrAir->no2   = doc["current"]["air_quality"]["no2"].as<double>();
        ptrAir->so2   = doc["current"]["air_quality"]["so2"].as<double>();
        ptrAir->pm25  = doc["current"]["air_quality"]["pm2_5"].as<double>();
        ptrAir->pm10  = doc["current"]["air_quality"]["pm10"].as<double>();
        ptrAir->defra = doc["current"]["air_quality"]["gb-defra-index"];
        ptrAir->epa   = doc["current"]["air_quality"]["us-epa-index"];

        switch (ptrAir->epa)
        {
            #if POLISH
                case    1:  strcpy(ptrAir->description,  "dobra"); break;
                case    2:  strcpy(ptrAir->description,  "umiarkowana"); break;
                case    3:  strcpy(ptrAir->description,  "niezdrowa dla alergików"); break;
                case    4:  strcpy(ptrAir->description,  "niezdrowa"); break;
                case    5:  strcpy(ptrAir->description,  "bardzo niezdrowa"); break;
                case    6:  strcpy(ptrAir->description,  "niebezpieczna"); break;
                default  :  strcpy(ptrAir->description,  "błąd parsowania"); break;
            #endif
            #if ENGLISH
                case    1:  strcpy(ptrAir->description,  "good"); break;
                case    2:  strcpy(ptrAir->description,  "moderate"); break;
                case    3:  strcpy(ptrAir->description,  "unhealthy for allergy sufferers"); break;
                case    4:  strcpy(ptrAir->description,  "unhealthy"); break;
                case    5:  strcpy(ptrAir->description,  "very unhealthy"); break;
                case    6:  strcpy(ptrAir->description,  "dangerous"); break;
                default  :  strcpy(ptrAir->description,  "parsing error"); break;
            #endif
        }

        // --- update struct Air in PSRAM !!! -------------------------------------------------- //

        #if SERIAL
            if (F_AirUpdate) AirShow();      // pokaż jeśli SERIAl jest TRUE   
        #endif
    }
}
 
Odpowiedź
  


Wiadomości w tym wątku
Czytanie poprawnie danych API - przez HeniuGG - 17-02-2022, 23:43
RE: Czytanie poprawnie danych API - przez kaczakat - 18-02-2022, 22:16
RE: Czytanie poprawnie danych API - przez elvis - 19-02-2022, 00:04
RE: Czytanie poprawnie danych API - przez powerTGS - 20-03-2022, 08:55
RE: Czytanie poprawnie danych API - przez powerTGS - 20-03-2022, 09:04
RE: Czytanie poprawnie danych API - przez powerTGS - 20-03-2022, 09:14

Skocz do:


Przeglądający: 1 gości