отправка погоды json
- Войдите на сайт для отправки комментариев
Сб, 30/01/2021 - 11:09
Здраствйте форумчание. Есть скечт на esp 01, получает тепературу на улице и передает на httml, хохотелось получать данные на другом устройстве, nodemcu 1602 и выводить на 1602, не могу найти видео или статью как это реолизовать по json, подскажите пожайлуста. Зарание спасибо
#include <ESP8266WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <dht11.h>
#include <Adafruit_Sensor.h> // Adafruit_Sensor
#include <DHT.h>
#include <OneWire.h>
#define DHTPIN 2 // Пин к которому подключен датчик
#define DHTTYPE DHT11
int temp_0;
DHT dht(DHTPIN, DHTTYPE);
#define DHT11_PIN 2
const char* ssid = "ssid";
const char* password = "password";
char auth[] = "8SjAfjfo72jlp6tD9WBPblf-mCVaQFK-"; //Токен сгенерированый Блинком (Проверьте почту)
SimpleTimer timer;
WiFiServer server(80);
dht11 DHT;
#define ONE_WIRE_BUS 0 // Указываем, к какому выводу подключена датчик
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
void setup()
{
Serial.begin(115200);
delay(10); // Пауза 10 мкс
dht.begin();
DS18B20.begin();
Serial.println(""); // Печать пустой строки
Serial.print("Connecting to "); // Печать "Подключение к:"
Serial.println(ssid); // Печать "Название Вашей WiFi сети"
WiFi.begin(ssid, password); // Подключение к WiFi Сети
if (WiFi.status() != WL_CONNECTED) // Проверка подключения к WiFi сети
{
delay(500); // Пауза 500 мкс
Serial.print("."); // Печать "."
}
Serial.println(""); // Печать пустой строки
Serial.println("WiFi connected"); // Печать "Подключение к WiFi сети осуществлено"
server.begin(); // Запуск Web сервера
Serial.println("Web server running."); // Печать "Веб-сервер запущен"
delay(10000); // Пауза 10 000 мкс
Serial.println(WiFi.localIP());
// See the connection status in Serial Monitor
Blynk.begin(auth, ssid, password); //сюда вписываем имя и пароль WiFi сети
timer.setInterval(1000L, sendUptime);
timer.setInterval(1000L, getSendData);
}
void sendUptime()
{
Blynk.virtualWrite(10, DHT.temperature); //Виртульный pin
Blynk.virtualWrite(11, DHT.humidity); // Виртульный pin
}
void loop()
{
Blynk.run(); // Initiates Blynk
timer.run(); // Initiates SimpleTimer
int chk;
chk = DHT.read(DHT11_PIN); // READ DATA
html();
}
void html()
{
WiFiClient client = server.available(); // Получаем данные, посылаемые клиентом
if (client){
Serial.println("New client"); // Отправка "Новый клиент"
boolean blank_line = true; // Создаем переменную, чтобы определить конец HTTP-запроса
while (client.connected()){ // Пока есть соединение с клиентом
if (client.available()){ // Если клиент активен
char c = client.read(); // Считываем посылаемую информацию в переменную "с"
if (c == '\n' && blank_line){
delay(3000);
float t = dht.readTemperature(); // Запрос на считывание температуры
float h = dht.readHumidity();
client.println("HTTP/1.1 200 OK"); // Стандартный заголовок HTTP
client.println("Content-Type: text/html");
client.println("Connection: close"); // Соединение будет закрыто после завершения ответа
client.println("Refresh: 10"); // Автоматическое обновление каждые 10 сек
client.println();
client.println("<!DOCTYPE HTML>"); // Веб-страница создается с использованием HTML
client.println("<html>"); // Открытие тега HTML
client.println("<head>");
client.print("<title>ESP8266 TEMP</title>"); // Название страницы
client.println("</head>");
client.println("<body>");
client.println("<h1>ESP8266 - Temperature & Humidity</h1>");
client.println("<h3>t = ");
client.println(t); // Отображение температуры
client.println("*C</h3>");
client.println("</head>");
client.println("<body>");
client.println("<h3>H= ");
client.println(h); // Отображение влажности
client.println("</h3>");
client.println("<h3>Temperature = ");
client.println(DS18B20.getTempCByIndex(0),0);
client.println("</body>");
client.println("</html>"); // Закрытие тега HTML
break; // Выход
}
if (c == '\n'){ // Если "с" равен символу новой строки
blank_line = true; // Тогда начинаем новую строку
}
else if (c != '\r'){ // Если "с" не равен символу возврата курсора на начало строки
blank_line = false; // Тогда получаем символ на текущей строке
}
}
}
client.stop(); // Закрытие соединения
Serial.println("Client disconnected.");
ESP.restart();
}
}
void getSendData()
{
DS18B20.requestTemperatures();
temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
Blynk.virtualWrite(9, temp_0); //выврд данных на виртуальный пин V10
}
Каким образом и где искали?
в гугле, получение отправка данных в json, искал сайты где пишут про json, в ютубе, нашел 1 видео, с отправкой данных, немного не понял, пытался по нему делать, не чего не оплучатся. При переходе на страницу, у меня происходит перезагрузка скетча.
Странный гугл используете. Наверное один из первых релизов.
Мой по фразе "ESP JSON" наваливает так, что монитор во все стороны раздувает.
Немного не в ту степь ушел, нашел как получать данные по /json, но теперь неполучатся сделать страницу с тепературой.
#include <ESP8266WebServer.h> #include <OneWire.h> #include <DallasTemperature.h> #define BLYNK_PRINT Serial // Comment this out to disable prints and save space #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <SimpleTimer.h> //#include <dht11.h> #include <Adafruit_Sensor.h> // Adafruit_Sensor #include <DHT.h> #include <OneWire.h> ESP8266WebServer HTTP(80); #define DHTPIN 2 // Пин к которому подключен датчик #define DHTTYPE DHT11 int temp_0; DHT dht(DHTPIN, DHTTYPE); #define DHT11_PIN 2 const char* ssid = "ssid"; const char* password = "password"; char auth[] = "8SjAfjfo72jlp6tD9WBPblf-/-"; //Токен сгенерированый Блинком (Проверьте почту) SimpleTimer timer; WiFiServer server(80); //dht11 DHT; #define ONE_WIRE_BUS 0 // Указываем, к какому выводу подключена датчик OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); char temperatureCString[6]; void setup() { Serial.begin(115200); Serial.println(""); Serial.println("Start 1-WIFI"); //Запускаем WIFI //Настраиваем и запускаем HTTP интерфейс Serial.println("Start 2-WebServer"); HTTP_init(); } void loop() { HTTP.handleClient(); delay(1); } void HTTP_init(void) { HTTP.on("/restart", handle_Restart); // Перезагрузка модуля по запросу вида http://192.168.0.101/restart?device=ok HTTP.on("/configs.json", handle_ConfigJSON); // формирование configs.json страницы для передачи данных в web интерфейс HTTP.on("/",html); HTTP.begin(); } // Перезагрузка модуля по запросу вида http://192.168.0.101/restart?device=ok void handle_Restart() { String restart = HTTP.arg("device"); if (restart == "ok") ESP.restart(); HTTP.send(200, "text/plain", "OK"); } void html() { int val = 123; HTTP.send(200, "text/plain", "yt"); HTTP.send(val); float t = dht.readTemperature(); // Запрос на считывание температуры float h = dht.readHumidity(); HTTP.send(t); WiFiClient client = server.available(); // Получаем данные, посылаемые клиентом if (client) { Serial.println("New client"); // Отправка "Новый клиент" boolean blank_line = true; // Создаем переменную, чтобы определить конец HTTP-запроса while (client.connected()) { // Пока есть соединение с клиентом if (client.available()) { // Если клиент активен char c = client.read(); // Считываем посылаемую информацию в переменную "с" if (c == '\n' && blank_line) { delay(3000); float t = dht.readTemperature(); // Запрос на считывание температуры float h = dht.readHumidity(); client.println("HTTP/1.1 200 OK"); // Стандартный заголовок HTTP client.println("Content-Type: text/html"); client.println("Connection: close"); // Соединение будет закрыто после завершения ответа client.println("Refresh: 10"); // Автоматическое обновление каждые 10 сек client.println(); client.println("<!DOCTYPE HTML>"); // Веб-страница создается с использованием HTML client.println("<html>"); // Открытие тега HTML client.println("<head>"); client.print("<title>ESP8266 TEMP</title>"); // Название страницы client.println("</head>"); client.println("<body>"); client.println("<h1>ESP8266 - Temperature & Humidity</h1>"); client.println("<h3>t = "); client.println(t); // Отображение температуры client.println("*C</h3>"); client.println("</head>"); client.println("<body>"); client.println("<h3>H= "); client.println(h); // Отображение влажности client.println("</h3>"); client.println("<h3>Temperature = "); client.println(DS18B20.getTempCByIndex(0), 0); client.println("</body>"); client.println("</html>"); HTTP_init(); handle_ConfigJSON(); break; // Выход } if (c == '\n') { // Если "с" равен символу новой строки blank_line = true; // Тогда начинаем новую строку } else if (c != '\r') { // Если "с" не равен символу возврата курсора на начало строки blank_line = false; // Тогда получаем символ на текущей строке } } } client.stop(); // Закрытие соединения Serial.println("Client disconnected."); // Печать "Клиент отключен" ESP.restart(); } } void getSendData() { DS18B20.requestTemperatures(); temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях Blynk.virtualWrite(9, temp_0); //выврд данных на виртуальный пин V10 } void handle_ConfigJSON() { String json = "{"; // Формировать строку для отправки в браузер json формат //{"SSDP":"SSDP-test","ssid":"home","password":"i12345678","ssidAP":"WiFi","passwordAP":"","ip":"192.168.0.101"} //json += ; json += ssid; // Пароль сети json += ", " ; json += password; json += ", "; json += WiFi.localIP().toString(); json += "\"}"; HTTP.send(200, "text/json", json); }