ESP32 Arduino means, an ESP32 dev board (which costs $8) and Arduino IDE configured for ESP32 in the way we described in an earlier guides. Our examples with IBM Watson IoT not fully easy guides for the newbie. This guide on Internet of Things (IoT) is relatively easier than them.
To follow this guide, you need to sign-up for free account on OpenWeatherMap :
1 | https://openweathermap.org/api |
They will send an email with API key. It takes around an hour after new account creation to get the API working. The code like our other codes (like to read a response) :
---
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <WiFi.h> #include <HTTPClient.h> const char* ssid = "yourNetworkName"; const char* password = "yourNetworkPass"; const String endpoint = "api.openweathermap.org/data/2.5/weather?q=Kolkata,IN&APPID="; const String key = "yourAPIkey"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } Serial.println("Connected to the WiFi network"); } void loop() { if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status HTTPClient http; http.begin(endpoint + key); //construct the URL int httpCode = http.GET(); //send request if (httpCode > 0) { String payload = http.getString(); Serial.println(httpCode); Serial.println(payload); } else { Serial.println("Error on HTTP request"); } http.end(); } delay(30000); } |
Open the serial monitor of Arduino IDE and you will get output like :
1 2 | 200 {"coord":{"lon":88.35,"lat":22.57},"weather":[{"id":721,"main":"Haze","description":"haze","icon":"50n"}],"base":"stations","main":{"temp":299.15,"pressure":1004,"humidity":88,"temp_min":299.15,"temp_max":299.15},"visibility":4000,"wind":{"speed":3.6,"deg":170},"clouds":{"all":40},"dt":1559497631,"sys":{"type":1,"id":9114,"message":0.0047,"country":"IN","sunrise":1559431309,"sunset":1559479650},"timezone":19800,"id":1275004,"name":"Kolkata","cod":200} |
Obviously, you can change the city reading their documentation :
1 | https://openweathermap.org/current |
I have shown Kolkata, India in the above example :
1 | const String endpoint = "api.openweathermap.org/data/2.5/weather?q=Kolkata,IN&APPID="; |
It is JSON response. To make it human readable data we need to parse it using some other Arduino Library such as ArduinoJSON
and some extra code :
1 | https://arduinojson.org/v6/example/ |
Parsing JSON response requires work with basic things than starting with an HTTP response. The above ArduinoJSON library has an assistant :
1 | https://arduinojson.org/v6/assistant/ |
We wanted to show a simple example of sending API request to fetch data. You can also read our similar guide on how to fetch time using ESP32 Arduino. We can deserialize using one line of code :
1 | deserializeJson(doc, wifiClient); |
You can try yourself to code to print the values.
Tagged With arduino ESP32 MTTG home assistant weather , arduino fetch weather data , arduino get current weather , arduino get local weather , arduinojson esp32 parse , arduinojson openweather forecast payload , esp32 arduino weather json6 , esp32 pharsing data , fetch weather arduino