Nou dat was wel een zware bevalling zeg ... maar ik heb gevonden waar het fout gaat.
Als eerste moeten we de array "liveweer" aanspreken, en daarvan het eerste element pakken ( [0] ).
Nou,... dat moet je ook maar weten. (ik vond de uitleg hier, na lang zoeken)
Dan komt daar nog bij dat jouw code waarschijnlijk nog niet helemaal af was met het lezen van de waarden (zie ook hier).
Dit was leuk om uit te zoeken ... 👍
Hier mijn werkende code.
Merk op: ik maak gebruik van de nieuwere stream methoden (StreamUtils library - via Tools -> Manage Libraries installeren).
Ik heb er ook een functie bij gemaakt die de windrichtingen omzet naar graden.
Uiteraard moet je zelf SSID (WIFISSID), WifiWachtwoord (WIFIWACHTWOORD), en jouw API key (JOUWAPIKEY) even intypen.
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <StreamUtils.h>
#include <ESP8266HTTPClient.h> // http web access library
#include <ArduinoJson.h> // JSON decoding library
// remove comment slashes to see debug output
// #define DEBUG
const char * ssid = "WIFISSID";
const char * password = "WIFIWACHTWOORD";
#define Richtingen 16
char * RichtingGraden [Richtingen][2] = { {"Noord", "0" },
{"NNO", "22.5" },
{"NO", "45" },
{"ONO", "67.5" },
{"Oost", "90" },
{"OZO", "112.5" },
{"ZO", "135" },
{"ZZO", "157.5" },
{"Zuid", "180" },
{"ZZW", "202.5" },
{"ZW", "225" },
{"WZW" "247.5" },
{"West", "270" },
{"WNW", "292.5" },
{"NW", "315" },
{"NNW", "337.5" } };
void setup() {
Serial.begin(115200);
delay(500);
Serial.print("Connecting.");
WiFi.begin(ssid, password); // access Wi-FI point
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("connected\r\n");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) { // Check WiFi connection status
HTTPClient http; // Declare an object of class HTTPClient
http.useHTTP10(true);
http.begin("http://weerlive.nl/api/json-data-10min.php?key=JOUWAPIKEY&locatie=Tilburg");
int httpCode = http.GET(); // send the request
// for debugging, dumps HTTP result (JSON) to serial monitor
#ifdef DEBUG
Serial.printf("HTTP Return code = %d\r\n",httpCode);
#endif
if (httpCode > 0) { // check the returning code (>0 may not be correct)
DynamicJsonDocument doc(2048);
#ifdef DEBUG
Serial.println("JSON Data:\r\n");
ReadLoggingStream loggingStream(http.getStream(), Serial);
Serial.println("\r\n\r\n");
DeserializationError error = deserializeJson(doc, loggingStream);
#else
DeserializationError error = deserializeJson(doc, http.getStream());
#endif
if (error) {
Serial.print("JSON Deserialization failed: ");
Serial.println(error.f_str());
}
float temp = (float)(doc["liveweer"][0]["temp"]); // get temperature (Celcius)
int humidity = doc["liveweer"][0]["lv"]; // get humidity (relatieve luchtvochtigheid)
float pressure = (float)(doc["liveweer"][0]["luchtd"]); // get pressure (luchtdruk)
float wind_speed = doc["liveweer"][0]["windms"]; // get wind speed (in m/s)
const char* winddirection = doc["liveweer"][0]["windr"]; // get wind degree (windrichting)
float feels_like = (float)(doc["liveweer"][0]["gtemp"]); // get feel_like (gevoelstemperatuur)
// print data
Serial.println("Het weer NU in Tilburg");
Serial.printf("Temperatuur = %.2f°C\r\n", temp);
Serial.printf("Voelt als = %.2f°C\r\n", feels_like);
Serial.printf("Vochtigheid = %d %%\r\n", humidity);
Serial.printf("Luchtdruk = %.3f millibar (hPa)\r\n", pressure);
Serial.printf("Wind snelheid = %.1f m/s\r\n", wind_speed);
Serial.printf("Wind richting = %s (%s°)\r\n\r\n", winddirection, RichtingNaarGraden(winddirection));
}
http.end(); // Close connection
}
// note: volgens de JSON filenaam wordt dit elke 10 minuten geupdate ...
// dus 10 minuten wachten is misschien beter?
delay(60000); // wait 1 minute
}
char* RichtingNaarGraden(const char* WindRichting) {
for(int Counter=0; Counter<Richtingen; Counter++) {
if ( strcmp(WindRichting, RichtingGraden[Counter][0]) == 0 )
return RichtingGraden[Counter][1];
}
}
Voorbeeld output met debugging UIT:
Connecting....connected
Het weer NU in Tilburg
Temperatuur = 15.50°C
Voelt als = 14.10°C
Vochtigheid = 49 %
Luchtdruk = 1028.900 millibar (hPa)
Wind snelheid = 3.0 m/s
Wind richting = ZO (135°)
En met Debugging AAN ( "//" voor "#define DEBUG" weghalen):
Connecting..............connected
HTTP Return code = 200
JSON Data:
{ "liveweer": [{"plaats": "Tilburg", "temp": "15.6", "gtemp": "13.4", "samenv": "Onbewolkt", "lv": "49", "windr": "ZO", "windms": "4", "winds": "3", "windk": "7.8", "windkmh": "14.4", "luchtd": "1028.9", "ldmmhg": "772", "dauwp": "4", "zicht": "20", "verw": "Zonnig, op de Wadden kans op mist. Vannacht lokaal mist", "sup": "07:19", "sunder": "18:24", "image": "zonnig", "d0weer": "zonnig", "d0tmax": "14", "d0tmin": "1", "d0windk": "2", "d0windknp": "4", "d0windms": "2", "d0windkmh": "7", "d0windr": "ZO", "d0neerslag": "0", "d0zon": "90", "d1weer": "halfbewolkt", "d1tmax": "11", "d1tmin": "0", "d1windk": "2", "d1windknp": "4", "d1windms": "2", "d1windkmh": "7", "d1windr": "ZW", "d1neerslag": "20", "d1zon": "70", "d2weer": "halfbewolkt_regen", "d2tmax": "5", "d2tmin": "2", "d2windk": "2", "d2windknp": "6", "d2windms": "3", "d2windkmh": "11", "d2windr": "N", "d2neerslag": "60", "d2zon": "10", "alarm": "0"}]}
Het weer NU in Tilburg
Temperatuur = 15.60°C
Voelt als = 13.40°C
Vochtigheid = 49 %
Luchtdruk = 1028.900 millibar (hPa)
Wind snelheid = 4.0 m/s
Wind richting = ZO (135°)
Hopelijk helpt dit ... 😊