В метеостанции на ESP8266 с датчиком температуры и влажности DHT22, датчиком содержания CO2 MH-Z19 и отправкой данных на Blynk зависают показания MH-Z19, при этом, значения температуры и влажности отправляются на сервер Блинка нормально. После перезагрузки устройства информация с MH-Z19 снова нормально отправляется на Блинк и читается на экране 128*64 какое-то время, затем снова показания с MH-Z19 "замерзают".
Поскольку в скетче наворочено много переменных, библиотек, составил простейший скетч, в котором информация с MH-Z19 выводится только на монитор платформы Arduino IDE (скетч в приложении) .
На 11-ой минуте после загрузки скетча в ESP8266 - wdt reset ( protocol_MH-Z19_02022018.txt). Заметил, что после предварительного сброса ESP до заводских настроек скетч mh-z19_vb4f.ino работает по крайней мере десятки(!) часов.
Загрузил в модуль после форматирования памяти другой простой скетч, в котором данные с датчика отправляются на Blynk:
Данные на Blynk перестали поступать примерно через 2 часа после загрузки (скрин S80204_mh-z19.png).
В чем причина или, хотя бы, как объяснить подобную работу устройства?
Поскольку в скетче наворочено много переменных, библиотек, составил простейший скетч, в котором информация с MH-Z19 выводится только на монитор платформы Arduino IDE (скетч в приложении) .
На 11-ой минуте после загрузки скетча в ESP8266 - wdt reset ( protocol_MH-Z19_02022018.txt). Заметил, что после предварительного сброса ESP до заводских настроек скетч mh-z19_vb4f.ino работает по крайней мере десятки(!) часов.
Загрузил в модуль после форматирования памяти другой простой скетч, в котором данные с датчика отправляются на Blynk:
Код:
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(13, 15); // GPIO15 (TX) and GPIO13 (RX)
char auth[] = "b0bf3e0d02f648c6b7aff07028хххх";
static byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
byte response[9];
byte crc = 0;
int ppm = 0;
int i = 0;
void readCO2()
{
while (mySerial.available())mySerial.read();//очистка буфера UART перед запросом
memset(response, 0, 9);// очистка ответа
mySerial.write(cmd,9);// запрос
mySerial.readBytes(response, 9);//чтение 9 байт сенсора
//расчет CRC
crc = 0;
for (int i = 1; i <= 7; i++)
{
crc += response[i];
}
crc = ((~crc)+1);
{
//проверка CRC
if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) )
{
Serial.println("CRC error");
} else
{
ppm = (((unsigned int) response[2])<<8) + response[3];
Blynk.virtualWrite(V4, ppm); //отправка на Blynk
Serial.println("CO2: " + String(ppm) + "ppm");
}
}
}
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
Blynk.begin(auth, "ххххххх", "ххххххх", "blynk-cloud.com", 8442);
}
void loop(){
Blynk.run();
i++;
Serial.println("time: " + String(i) + " *10s");
if (i>=60) i = 0;
readCO2();
delay(10000);
}
В чем причина или, хотя бы, как объяснить подобную работу устройства?
Вложения
-
1.4 KB Просмотры: 15
-
2.2 KB Просмотры: 8
-
424.6 KB Просмотры: 6
Последнее редактирование: