Или парсим данные о погоде с сайта openweathermap.org и narodmon.ru при помощи ESP8266
Код:
GET запрос
// GET запрос к http://api.openweathermap.org #include <ESP8266WiFi.h> const char* ssid = "WLAN1"; // тут SSID и пароль к WIFI const char* password = "1231234123"; const char* host = "api.openweathermap.org"; // тут адрес сервера void setup() { Serial.begin(115200); delay(10); // в сетапе как обычно подключаемся к сети Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Get(); // при включении выполняем функцию } void loop() { } void Get() { // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { /// подключаемся к серверу Serial.println("connection failed"); return; } /// если подключились, отправляем чего от сервера хотим // сам GET запрос с ID и ключем client.println("GET /data/2.5/weather?id=542420&appid=6a4ba421859c9f4166697758b68d889b HTTP/1.1"); // говорим к какому хосту обращаемся (на сервере может быть несколько сайтов) client.println("Host: api.openweathermap.org"); // говорим что закончили client.println("Connection: close"); client.println(); delay(1000); // ждем немного // читаем ответ и отправляем его в Serial while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); }
парсинг погоды с api.openweathermap.org
// парсинг погоды с http://api.openweathermap.org // Arduino JSON library // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "WLAN1"; const char* password = "1231234123"; const char* host = "api.openweathermap.org"; String line; void setup() { Serial.begin(115200); delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); jsonGet(); } void loop() { StaticJsonBuffer<2000> jsonBuffer; /// буфер на 2000 символов JsonObject& root = jsonBuffer.parseObject(line); // скармиваем String if (!root.success()) { Serial.println("parseObject() failed"); // если ошибка, сообщаем об этом jsonGet(); // пинаем сервер еще раз return; // и запускаем заного } /// отправка в Serial Serial.println(); String name = root["name"]; // достаем имя, Serial.print("name:"); Serial.println(name); float tempK = root["main"]["temp"]; // достаем температуру из структуры main float tempC = tempK - 273.15; // переводим кельвины в цельси Serial.print("temp: "); Serial.print(tempC); // отправляем значение в сериал Serial.println(" C"); float tempKmin = root["main"]["temp_min"]; // и так далее float tempCmin = tempKmin - 273.15; Serial.print("temp min: "); Serial.print(tempCmin); Serial.println(" C"); float tempKmax = root["main"]["temp_max"]; float tempCmax = tempKmax - 273.15; Serial.print("temp max: "); Serial.print(tempCmax); Serial.println(" C"); int pressurehPa = root["main"]["pressure"]; float pressure = pressurehPa/1.333; Serial.print("pressure: "); Serial.print(pressure); Serial.println(" mmHc"); int humidity = root["main"]["humidity"]; Serial.print("humidity: "); Serial.print(humidity); Serial.println(" %"); float windspeed = root["wind"]["speed"]; Serial.print("wind speed: "); Serial.print(windspeed); Serial.println(" m/s"); int winddeg = root["wind"]["deg"]; Serial.print("wind deg :"); Serial.println(winddeg); Serial.println(); Serial.println(); delay(50000); } void jsonGet() { // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } client.println("GET /data/2.5/weather?id=542420&appid=6a4ba421859c9f4166697758b68d889b HTTP/1.1"); client.println("Host: api.openweathermap.org"); client.println("Connection: close"); client.println(); delay(1500); // Read all the lines of the reply from server and print them to Serial while(client.available()){ line = client.readStringUntil('\r'); } Serial.print(line); Serial.println(); Serial.println("closing connection"); }
парсинг погоды с narodmon.ru
// Arduino JSON library // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "WLAN1"; const char* password = "1231234123"; const char* host = "narodmon.ru"; String line; void setup() { Serial.begin(115200); delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); jsonGet(); } void loop() { StaticJsonBuffer<2000> jsonBuffer; JsonObject& root = jsonBuffer.parseObject(line); if (!root.success()) { Serial.println("parseObject() failed"); jsonGet(); // пинаем сервер еще раз return; // и запускаем заного } Serial.println(); /// отправка в Serial String owner = root["owner"]; Serial.print("owner: "); Serial.println(owner); String name = root["name"]; Serial.print("name: "); Serial.println(name); Serial.println(); int val = 0; while(1){ int sensorsID = root["sensors"][val]["id"]; if (sensorsID == 0) break; Serial.print("sensorsID: "); Serial.println(sensorsID); String name = root["sensors"][val]["name"]; Serial.print("name: "); Serial.println(name); float value = root["sensors"][val]["value"]; Serial.print("value: "); Serial.print(value); String unit = root["sensors"][val]["unit"]; Serial.println(unit); Serial.println(); val++; } Serial.println(); Serial.println(); delay(50000); } void jsonGet() { // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } client.println("GET /api/sensorsOnDevice?id=10705&uuid=4ce0bec67fe735f4997426101dd5292b&api_key=43MGvb.5IUhRE&lang=en HTTP/1.1"); client.println("Host: narodmon.ru"); client.println("Connection: close"); client.println(); delay(1000); // Read all the lines of the reply from server and print them to Serial while(client.available()){ line = client.readStringUntil('\r'); } Serial.print(line); Serial.println(); Serial.println("closing connection"); }