Имеется на руках NodeMCU. Программирую в среде Ардуино. Вот весь код:
Спойлер
Код: Выделить всё
//
// Libraries needed:
// Time.h & TimeLib.h: https://github.com/PaulStoffregen/Time
// Timezone.h: https://github.com/JChristensen/Timezone
// SSD1306.h & SSD1306Wire.h: https://github.com/squix78/esp8266-oled-ssd1306
// NTPClient.h: https://github.com/arduino-libraries/NTPClient
// ESP8266WiFi.h & WifiUDP.h: https://github.com/ekstrand/ESP8266wifi
//
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <String.h>
#include <epd.h>
#include "DHT.h"
#include <Ticker.h>
#include <stdio.h>
#include "string.h"
// Define NTP properties
#define NTP_OFFSET 60 * 60 // In seconds
#define NTP_INTERVAL 60 * 1000 // In miliseconds
#define NTP_ADDRESS "ua.pool.ntp.org" // change this to whatever pool is closest (see ntp.org)
#define DHTPIN 13
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
Ticker ClockTimer;
#define ssid "DIR-615" // insert your own ssid
#define pass "HomeMade" // and password
#define mqtt_server "hairdresser.cloudmqtt.com" // Имя сервера MQTT
#define mqtt_port 18608 // Порт для подключения к серверу MQTT
#define mqtt_user "user" // Логин от сервер
#define mqtt_pass "pass" // Пароль от сервера
byte ss = 0;
byte mm = 0;
byte hh = 0;
byte tu = 0;
float Hum = 0.0;
float Temp = 0.0;
char str_temp[6];
float hic = 0.0;
byte d1 = 1;
byte d2 = 1;
byte d3 = 1;
byte d4 = 20;
//const char * days[] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"} ;
//const char * months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} ;
//const byte monthsCodes[] = {1, 4, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6};
float Voltage = 0.0;
boolean DisplayUpdate = true;
boolean WIFITimeUpdate = true;
boolean WiFiConected = false;
boolean MQTTConected = false;
boolean epdStopmode = false;
byte epdStopmodeCount = 0;
byte m1;
byte h1;
byte d21 = 1;
byte d31 = 1;
float WStationVoltage = 0.0;
char DateString[] = "00.00.0000";
char TimeString[] = "00.00.00";
#define wake_up 14
char Buffer[] = "";
void timerIsr()
{
if (epdStopmode){
epdStopmodeCount++;
if (epdStopmodeCount > 1){
epdStopmodeCount = 0;
epdStopmode = false;
epd_enter_stopmode();
}
}
ss++; // Seconds
if (ss > 59){
ss = 0;
mm++; // Minutes
DisplayUpdate = true;
if (mm > 59){
mm = 0;
hh++; // Hours
if (hh > 23){
hh = 0;
d1++; // Day of week
d2++; // Day of month
//d3++; // Month
if (d1 > 6) d1 = 0;
if (d2 > 31) d2 = 0;
if (d3 > 11) d3 = 0;
}
tu++;
if (tu > 20){ // Pause update via WiFi (*hours)
tu = 0;
WIFITimeUpdate = true;
}
}
}
}
void callback(const MQTT::Publish& pub) // Функция получения данных от сервера
{
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(" => ");
Serial.println(pub.payload_string()); // выводим в сериал порт значение полученных данных
String payload = pub.payload_string();
if(String(pub.topic()) == "WStation/Battery") // получаем данные из топика о напряжении аккумулятора
{
WStationVoltage = payload.toFloat(); // преобразуем полученные данные в тип integer
}
if(String(pub.topic()) == "WStation/Date") // получаем данные из топика Даты
{
payload.toCharArray(DateString, 11);
}
if(String(pub.topic()) == "WStation/Time") // получаем данные из топика Времени
{
//TimeString = payload;
payload.toCharArray(TimeString, 9);
}
}
WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);
void setup ()
{
//Serial.begin(115200); // most ESP-01's use 115200 but this could vary
// Инициализация Serial есть в библиотеке дисплея - epd.h
pinMode(2, OUTPUT);
epd_init();
pinMode(wake_up, OUTPUT);
wakeup();
epd_set_memory(MEM_TF);
delay(1000);
epd_clear();
epd_set_color(BLACK, WHITE);
epd_set_en_font(ASCII64);
sprintf(Buffer,"Connecting to: %s . . .", ssid);
epd_disp_string(Buffer, 0, 0);
epd_udpate();
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
d31++;
if (d31 > 100){
break;
}
}
d31=1;
epd_disp_string("Connected.", 0, 80);
epd_disp_string("Connecting to: MQTT...", 0, 160);
epd_udpate();
Serial.println("");
Serial.print("Connected to WiFi at ");
Serial.print(WiFi.localIP());
Serial.println("");
ClockTimer.attach(1, timerIsr);
dht.begin();
delay(2000);
epd_clear();
digitalWrite(2, HIGH);
}
void loop()
{
WiFiupd();
if (DisplayUpdate){
DisplayUpdate = false;
wakeup();
epd_disp_bitmap("FON1.BMP", 0, 0);
if (WiFiConected){
epd_disp_bitmap("WON.BMP", 582, 0); // выводим картинку подключенного WiFi
if (MQTTConected){
epd_disp_bitmap("MQON.BMP", 0, 136); // выводим картинку подключенного WiFi
}else{
epd_disp_bitmap("MQOF.BMP", 0, 136); // выводим картинку подключенного WiFi
}
}else{
epd_disp_bitmap("WOFF.BMP", 582, 0); // Выводим кортинку отключенного WiFi с переподключением
epd_disp_bitmap("MQOF.BMP", 0, 136); // выводим картинку подключенного WiFi
}
drawWStationData();
yield();
drawTime();
yield();
sonsorDHT();
yield();
drawBattery();
yield();
epd_set_color(DARK_GRAY, WHITE);
epd_set_en_font(ASCII32);
sprintf(Buffer,"%02d.%02d %02d:%02d", d21, d31+1, h1, m1);
epd_disp_string(Buffer, 25, 320);
//sprintf(Buffer,"%02d.%02d", d21, d31);
//epd_disp_string(Buffer, 30, 320);
epd_set_color(BLACK, WHITE);
epd_set_en_font(ASCII64);
epd_udpate();
epdStopmode = true;
}
}
void drawWStationData(){
yield();
Serial.println("-1-");
dtostrf(WStationVoltage, 4, 2, str_temp);
sprintf(Buffer,"%s V", str_temp); // напряжение на аккумуляторе погодной станции
epd_disp_string(Buffer, 62, 35);
}
void wakeup()
{
yield();
digitalWrite(wake_up, LOW);
delayMicroseconds(10);
digitalWrite(wake_up, HIGH);
delayMicroseconds(500);
digitalWrite(wake_up, LOW);
delay(10);
}
void sonsorDHT(){
yield();
Hum = dht.readHumidity();
Temp = dht.readTemperature();
//hic = dht.computeHeatIndex(Temp, Hum, false);
if (isnan(Hum) || isnan(Temp)) {
epd_disp_string("ERR", 265, 495);
epd_disp_string("ERR", 565, 495);
}else{
dtostrf(Temp, 4, 1, str_temp);
sprintf(Buffer,"%s", str_temp);
epd_disp_string(Buffer, 265, 495);
dtostrf(Hum, 4, 1, str_temp);
sprintf(Buffer,"%s", str_temp);
epd_disp_string(Buffer, 565, 495);
}
}
void drawTime(){
Date_Time();
yield();
m1 = mm;
h1 = hh;
d21 = d2;
d31 = d3;
/*epd_disp_string(days[d1-1], 317, 300);
sprintf(Buffer,"%d", d2);
epd_disp_string(Buffer, 649, 273);
epd_set_en_font(ASCII32);
epd_disp_string(months[d3-1], 622, 342);
epd_set_en_font(ASCII64);
*/
epd_disp_string(DateString, 360, 300);
byte NunbH = hh / 10;
byte NunbL = hh % 10;
sprintf(Buffer,"%d.BMP", NunbH);
epd_disp_bitmap(Buffer, 212, 84);
sprintf(Buffer,"%d.BMP", NunbL);
epd_disp_bitmap(Buffer, 345, 84);
NunbH = mm / 10;
NunbL = mm % 10;
sprintf(Buffer,"%d.BMP", NunbH);
epd_disp_bitmap(Buffer, 545, 84);
sprintf(Buffer,"%d.BMP", NunbL);
epd_disp_bitmap(Buffer, 679, 84);
}
void drawBattery(){
yield();
float sample = 0.0;
// 3.3 = 1024
for(int i=0;i< 50;i++)
{
sample = sample + analogRead(A0); //read the voltage from the divider circuit
delay (2);
}
sample = sample / 50;
Voltage = 1.5 * (sample * 3.3 / 1024.0);
if (Voltage > 4.6){
epd_disp_bitmap("BAT1.BMP", 681, 0);
}else if (Voltage > 4.1){
epd_disp_bitmap("BAT8.BMP", 681, 0);
}else if (Voltage > 3.98){
epd_disp_bitmap("BAT7.BMP", 681, 0);
}else if (Voltage > 3.87){
epd_disp_bitmap("BAT6.BMP", 681, 0);
}else if (Voltage > 3.75){
epd_disp_bitmap("BAT5.BMP", 681, 0);
}else if (Voltage > 3.64){
epd_disp_bitmap("BAT4.BMP", 681, 0);
}else if (Voltage > 3.52){
epd_disp_bitmap("BAT3.BMP", 681, 0);
}else if (Voltage > 3.41){
epd_disp_bitmap("BAT2.BMP", 681, 0);
}else{
epd_clear(); // Выключение
epd_udpate();
delay(2000);
epd_disp_bitmap("BATLOW.BMP", 0, 0);
epd_set_color(GRAY, WHITE);
epd_set_en_font(ASCII32);
sprintf(Buffer,"Shutdown time: %02d.%02d %02d:%02d", d2, d3+1, hh, mm);
epd_disp_string(Buffer, 0, 0);
sprintf(Buffer,"%02d.%02d %02d:%02d", d21, d31+1, h1, m1);
epd_disp_string(Buffer, 0, 40);
epd_udpate();
delay(2000);
epd_enter_stopmode();
delay(1000);
ESP.deepSleep(0);
}
}
void Date_Time(){
yield();
String myString;
//char myChar; // = DateString.charAt(0);
//int myNum; // = String(myChar).toInt();
/*if (myNum > 0){
myString = DateString.substring(0,2);
d2 = myString.toInt();
}else{
myChar = DateString.charAt(1);
d2 = String(myChar).toInt();
}
myChar = DateString.charAt(3);
myNum = String(myChar).toInt();
if (myNum > 0){
myString = DateString.substring(3,5);
d3 = myString.toInt();
}else{
myChar = DateString.charAt(4);
d3 = String(myChar).toInt();
}
myString = DateString.substring(8);
d4 = myString.toInt();
d1 = ((d2 + monthsCodes[d3-1] + ((6 + d4 + (d4/4))%7)) % 7)-1; // https://lifehacker.ru/kakoj-den-nedeli/
*/
char _el[3] ="";
int myNum = String(TimeString[0]).toInt();
if (myNum > 0){
strncpy(_el,&TimeString[0],2);
printf("%s",_el);
hh = String(_el).toInt();
}else{
hh = String(TimeString[0]).toInt();
}
yield();
myNum = String(TimeString[3]).toInt();
if (myNum > 0){
//_el[3] ="";
strncpy(_el,&TimeString[3],2);
printf("%s",_el);
mm = String(_el).toInt();
}else{
mm = String(TimeString[4]).toInt();
}
}
void WiFiupd(){
if (WiFi.status() != WL_CONNECTED) // attempt to connect to wifi again if disconnected
{
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);
WiFiConected = false;
}
if (WiFi.status() == WL_CONNECTED) //Check WiFi connection status
{
WiFiConected = true;
if (!client.connected()) {
yield();
Serial.println("Connecting to MQTT server");
if (client.connect(MQTT::Connect("WStationDisplay")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connected to MQTT server");
client.set_callback(callback);
client.subscribe("WStation/Time"); // подписывааемся по топик времени
client.subscribe("WStation/Battery"); // подписывааемся по топик с данными аккумулятора
client.subscribe("WStation/Date"); // подписывааемся по топик даты
MQTTConected = true;
} else {
Serial.println("Could not connect to MQTT server");
MQTTConected = false;
}
}
if (client.connected()){
MQTTConected = true;
yield();
client.loop();
}
}
}1) При запуске программы идет подключение а WiFi, только после этого программа идет дальше:
Код: Выделить всё
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
d31++;
if (d31 > 100){
break;
}
}if (WiFi.status() != WL_CONNECTED)
для меня не понятно, ведь подключение уже есть....
второе:
При старте программа ловит ошибку и уходит в "вечный" ребут. После 5-20 перезагрузок программа все таки стартует, и работает как обычно. Пробовал на другой ESP - результат тот же. Проблема точно не в питании, так как я пробовал на "голой" ESP. с хорошим питанием. Да и осциллографом смотрел - стабильное и без пульсаций
Вот лог:
Спойлер
Exception (9):epc1=0x372e3835 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000005 depc=0x00000000
>>>stack>>>
ctx: sys
sp: 3fffed70 end: 3fffffb0 offset: 01a0
3fffef10: 40231c1c 3ffee5d4 3ffedf50 40207d4e
3fffef20: 60000600 3ffee5d4 3ffedf50 40231c29
3fffef30: 40231c6e 3fffdab0 00000000 3fffdcb0
3fffef40: 3ffedf68 3fffdad0 3ffee964 40205e13
3fffef50: 40000f49 40000f49 3fffdab0 40000f49
3fffef60: 40000e19 40001878 00000004 00000000
3fffef70: 3fffff10 aa55aa55 000000ab 401049d5
3fffef80: 401049db 00000004 00000000 5f3b002b
3fffef90: 4010000d de4cd58a eaf2637a e02954ea
3fffefa0: 402299b4 3fffef3c 4022996d 3fffff48
3fffefb0: 3fffffc0 00000000 00000000 feefeffe
3fffefc0: feefeffe feefeffe feefeffe feefeffe
3fffefd0: feefeffe feefeffe feefeffe feefeffe
3fffefe0: feefeffe feefeffe feefeffe feefeffe
3fffeff0: feefeffe feefeffe feefeffe feefeffe
3ffff000: feefeffe feefeffe feefeffe feefeffe
3ffff010: feefeffe feefeffe feefeffe feefeffe
3ffff020: feefeffe feefeffe feefeffe feefeffe
3ffff030: feefeffe feefeffe feefeffe feefeffe
3ffff040: feefeffe feefeffe feefeffe feefeffe
3ffff050: feefeffe feefeffe feefeffe feefeffe
3ffff060: feefeffe feefeffe feefeffe feefeffe
3ffff070: feefeffe feefeffe feefeffe feefeffe
3ffff080: feefeffe feefeffe feefeffe feefeffe
3ffff090: feefeffe feefeffe feefeffe feefeffe
3ffff0a0: feefeffe feefeffe feefeffe feefeffe
3ffff0b0: feefeffe feefeffe feefeffe feefeffe
3ffff0c0: feefeffe feefeffe feefeffe feefeffe
3ffff0d0: feefeffe feefeffe feefeffe feefeffe
3ffff0e0: feefeffe feefeffe feefeffe feefeffe
3ffff0f0: feefeffe feefeffe feefeffe feefeffe
3ffff100: feefeffe feefeffe feefeffe feefeffe
3ffff110: feefeffe feefeffe feefeffe feefeffe
3ffff120: feefeffe feefeffe feefeffe feefeffe
3ffff130: feefeffe feefeffe feefeffe feefeffe
3ffff140: feefeffe feefeffe feefeffe feefeffe
3ffff150: feefeffe feefeffe feefeffe feefeffe
3ffff160: feefeffe feefeffe feefeffe feefeffe
3ffff170: feefeffe feefeffe feefeffe feefeffe
3ffff180: feefeffe feefeffe feefeffe feefeffe
3ffff190: feefeffe feefeffe feefeffe feefeffe
3ffff1a0: feefeffe feefeffe feefeffe feefeffe
3ffff1b0: feefeffe feefeffe feefeffe feefeffe
3ffff1c0: feefeffe feefeffe feefeffe feefeffe
3ffff1d0: feefeffe feefeffe feefeffe feefeffe
3ffff1e0: feefeffe feefeffe feefeffe feefeffe
3ffff1f0: feefeffe feefeffe feefeffe feefeffe
3ffff200: feefeffe feefeffe feefeffe feefeffe
3ffff210: feefeffe feefeffe feefeffe feefeffe
3ffff220: feefeffe feefeffe feefeffe feefeffe
3ffff230: feefeffe feefeffe feefeffe feefeffe
3ffff240: feefeffe feefeffe feefeffe feefeffe
3ffff250: feefeffe feefeffe feefeffe feefeffe
3ffff260: feefeffe feefeffe feefeffe feefeffe
3ffff270: feefeffe feefeffe feefeffe feefeffe
3ffff280: feefeffe feefeffe feefeffe feefeffe
3ffff290: feefeffe feefeffe feefeffe feefeffe
3ffff2a0: feefeffe feefeffe feefeffe feefeffe
3ffff2b0: feefeffe feefeffe feefeffe feefeffe
3ffff2c0: feefeffe feefeffe feefeffe feefeffe
3ffff2d0: feefeffe feefeffe feefeffe feefeffe
3ffff2e0: feefeffe feefeffe feefeffe feefeffe
3ffff2f0: feefeffe feefeffe feefeffe feefeffe
3ffff300: feefeffe feefeffe feefeffe feefeffe
3ffff310: feefeffe feefeffe feefeffe feefeffe
3ffff320: feefeffe feefeffe feefeffe feefeffe
3ffff330: feefeffe feefeffe feefeffe feefeffe
3ffff340: feefeffe feefeffe feefeffe feefeffe
3ffff350: feefeffe feefeffe feefeffe feefeffe
3ffff360: feefeffe feefeffe feefeffe feefeffe
3ffff370: feefeffe feefeffe feefeffe feefeffe
3ffff380: feefeffe feefeffe feefeffe feefeffe
3ffff390: feefeffe feefeffe feefeffe feefeffe
3ffff3a0: feefeffe feefeffe feefeffe feefeffe
3ffff3b0: feefeffe feefeffe feefeffe feefeffe
3ffff3c0: feefeffe feefeffe feefeffe feefeffe
3ffff3d0: feefeffe feefeffe feefeffe feefeffe
3ffff3e0: feefeffe feefeffe feefeffe feefeffe
3ffff3f0: feefeffe feefeffe feefeffe feefeffe
3ffff400: feefeffe feefeffe feefeffe feefeffe
3ffff410: feefeffe feefeffe feefeffe feefeffe
3ffff420: feefeffe feefeffe feefeffe feefeffe
3ffff430: feefeffe feefeffe feefeffe feefeffe
3ffff440: feefeffe feefeffe feefeffe feefeffe
3ffff450: feefeffe feefeffe feefeffe feefeffe
3ffff460: feefeffe feefeffe feefeffe feefeffe
3ffff470: feefeffe feefeffe feefeffe feefeffe
3ffff480: feefeffe feefeffe feefeffe feefeffe
3ffff490: feefeffe feefeffe feefeffe feefeffe
3ffff4a0: feefeffe feefeffe feefeffe feefeffe
3ffff4b0: feefeffe feefeffe feefeffe feefeffe
3ffff4c0: feefeffe feefeffe feefeffe feefeffe
3ffff4d0: feefeffe feefeffe feefeffe feefeffe
3ffff4e0: feefeffe feefeffe feefeffe feefeffe
3ffff4f0: feefeffe feefeffe feefeffe feefeffe
3ffff500: feefeffe feefeffe feefeffe feefeffe
3ffff510: feefeffe feefeffe feefeffe feefeffe
3ffff520: feefeffe feefeffe feefeffe feefeffe
3ffff530: feefeffe feefeffe feefeffe feefeffe
3ffff540: feefeffe feefeffe feefeffe feefeffe
3ffff550: feefeffe feefeffe feefeffe feefeffe
3ffff560: feefeffe feefeffe feefeffe feefeffe
3ffff570: feefeffe feefeffe feefeffe feefeffe
3ffff580: feefeffe feefeffe feefeffe feefeffe
3ffff590: feefeffe feefeffe feefeffe feefeffe
3ffff5a0: feefeffe feefeffe feefeffe feefeffe
3ffff5b0: feefeffe feefeffe feefeffe feefeffe
3ffff5c0: feefeffe feefeffe feefeffe feefeffe
3ffff5d0: feefeffe feefeffe feefeffe feefeffe
3ffff5e0: feefeffe feefeffe feefeffe feefeffe
3ffff5f0: feefeffe feefeffe feefeffe feefeffe
3ffff600: feefeffe feefeffe feefeffe feefeffe
3ffff610: feefeffe feefeffe feefeffe feefeffe
3ffff620: feefeffe feefeffe feefeffe feefeffe
3ffff630: feefeffe feefeffe feefeffe feefeffe
3ffff640: feefeffe feefeffe feefeffe feefeffe
3ffff650: feefeffe feefeffe feefeffe feefeffe
3ffff660: feefeffe feefeffe feefeffe feefeffe
3ffff670: feefeffe feefeffe feefeffe feefeffe
3ffff680: feefeffe feefeffe feefeffe feefeffe
3ffff690: feefeffe feefeffe feefeffe feefeffe
3ffff6a0: feefeffe feefeffe feefeffe feefeffe
3ffff6b0: feefeffe feefeffe feefeffe feefeffe
3ffff6c0: feefeffe feefeffe feefeffe feefeffe
3ffff6d0: feefeffe feefeffe feefeffe feefeffe
3ffff6e0: feefeffe feefeffe feefeffe feefeffe
3ffff6f0: feefeffe feefeffe feefeffe feefeffe
3ffff700: feefeffe feefeffe feefeffe feefeffe
3ffff710: feefeffe feefeffe feefeffe feefeffe
3ffff720: feefeffe feefeffe feefeffe feefeffe
3ffff730: feefeffe feefeffe feefeffe feefeffe
3ffff740: feefeffe feefeffe feefeffe feefeffe
3ffff750: feefeffe feefeffe feefeffe feefeffe
3ffff760: feefeffe feefeffe feefeffe feefeffe
3ffff770: feefeffe feefeffe feefeffe feefeffe
3ffff780: feefeffe feefeffe feefeffe feefeffe
3ffff790: feefeffe feefeffe feefeffe feefeffe
3ffff7a0: feefeffe feefeffe feefeffe feefeffe
3ffff7b0: feefeffe feefeffe feefeffe feefeffe
3ffff7c0: feefeffe feefeffe feefeffe feefeffe
3ffff7d0: feefeffe feefeffe feefeffe feefeffe
3ffff7e0: feefeffe feefeffe feefeffe feefeffe
3ffff7f0: feefeffe feefeffe feefeffe feefeffe
3ffff800: feefeffe feefeffe feefeffe feefeffe
3ffff810: feefeffe feefeffe feefeffe feefeffe
3ffff820: feefeffe feefeffe feefeffe feefeffe
3ffff830: feefeffe feefeffe feefeffe feefeffe
3ffff840: feefeffe feefeffe feefeffe feefeffe
3ffff850: feefeffe feefeffe feefeffe feefeffe
3ffff860: feefeffe feefeffe feefeffe feefeffe
3ffff870: feefeffe feefeffe feefeffe feefeffe
3ffff880: feefeffe feefeffe feefeffe feefeffe
3ffff890: feefeffe feefeffe feefeffe feefeffe
3ffff8a0: feefeffe feefeffe feefeffe feefeffe
3ffff8b0: feefeffe feefeffe feefeffe feefeffe
3ffff8c0: feefeffe feefeffe feefeffe feefeffe
3ffff8d0: feefeffe feefeffe feefeffe feefeffe
3ffff8e0: feefeffe feefeffe feefeffe feefeffe
3ffff8f0: feefeffe feefeffe feefeffe feefeffe
3ffff900: feefeffe feefeffe feefeffe feefeffe
3ffff910: feefeffe feefeffe feefeffe feefeffe
3ffff920: feefeffe feefeffe feefeffe feefeffe
3ffff930: feefeffe feefeffe feefeffe feefeffe
3ffff940: feefeffe feefeffe feefeffe feefeffe
3ffff950: feefeffe feefeffe feefeffe feefeffe
3ffff960: feefeffe feefeffe feefeffe feefeffe
3ffff970: feefeffe feefeffe feefeffe feefeffe
3ffff980: feefeffe feefeffe feefeffe feefeffe
3ffff990: feefeffe feefeffe feefeffe feefeffe
3ffff9a0: feefeffe feefeffe feefeffe feefeffe
3ffff9b0: feefeffe feefeffe feefeffe feefeffe
3ffff9c0: feefeffe feefeffe feefeffe feefeffe
3ffff9d0: feefeffe feefeffe feefeffe feefeffe
3ffff9e0: feefeffe feefeffe feefeffe feefeffe
3ffff9f0: feefeffe feefeffe feefeffe feefeffe
3ffffa00: feefeffe feefeffe feefeffe feefeffe
3ffffa10: feefeffe feefeffe feefeffe feefeffe
3ffffa20: feefeffe feefeffe feefeffe feefeffe
3ffffa30: feefeffe feefeffe feefeffe feefeffe
3ffffa40: feefeffe feefeffe feefeffe feefeffe
3ffffa50: feefeffe feefeffe feefeffe feefeffe
3ffffa60: feefeffe feefeffe feefeffe feefeffe
3ffffa70: feefeffe feefeffe feefeffe feefeffe
3ffffa80: feefeffe feefeffe feefeffe feefeffe
3ffffa90: feefeffe feefeffe feefeffe feefeffe
3ffffaa0: feefeffe feefeffe feefeffe feefeffe
3ffffab0: feefeffe feefeffe feefeffe feefeffe
3ffffac0: feefeffe feefeffe feefeffe feefeffe
3ffffad0: feefeffe feefeffe feefeffe feefeffe
3ffffae0: feefeffe feefeffe feefeffe feefeffe
3ffffaf0: feefeffe feefeffe feefeffe feefeffe
3ffffb00: feefeffe feefeffe feefeffe feefeffe
3ffffb10: feefeffe feefeffe feefeffe feefeffe
3ffffb20: feefeffe feefeffe feefeffe feefeffe
3ffffb30: feefeffe feefeffe feefeffe feefeffe
3ffffb40: feefeffe feefeffe feefeffe feefeffe
3ffffb50: feefeffe feefeffe 4022bc2f 00000001
3ffffb60: ffffffff 00000000 3ffe8d91 00000008
3ffffb70: 4022bc7e 3ffec3d8 3ffef06c 00000001
3ffffb80: 00000002 00000000 00000020 4010017c
3ffffb90: 00000005 00000005 00000002 40101624
3ffffba0: 3ffe8c42 4022ad3b 3ffec3d8 00000020
3ffffbb0: 00000000 4021e2e3 3ffed868 3ffef06c
3ffffbc0: 00000000 00000002 00000000 3ffec3d8
3ffffbd0: 3fff0222 40104f1f 3fff01ac 3ffeea2c
3ffffbe0: 00000005 00000000 00000020 4010017c
3ffffbf0: 3ffe8c42 4020f901 00000005 40101624
3ffffc00: 3ffe8c45 401048cf 3ffec6d0 4010017c
3ffffc10: 401021bb 3ffec6d0 00000000 00000000
3ffffc20: 00000024 004a252b 3ffed0e8 40102398
3ffffc30: 00000000 00000000 00000020 4010017c
3ffffc40: 00000024 004a252b 00000000 40101624
3ffffc50: 3ffe8c40 401048b7 3ffefec4 00000001
3ffffc60: 00000001 40103a92 3ffecdc0 40101624
3ffffc70: 00000000 00000000 0000001f 4010017c
3ffffc80: 3ffe94cc 00000000 3fffc228 40105175
3ffffc90: 4000050c 00000000 0000001f 4010017c
3ffffca0: 4000dcfe 00000030 00000010 ffffffff
3ffffcb0: 4000066d 004cb8bd 4bc6a7f0 0000004c
3ffffcc0: 00000000 00000000 00000000 fffffffe
3ffffcd0: ffffffff 3fffc6fc 00000001 004cb8bd
3ffffce0: 4bc6a7f0 004cb8bd 00000000 00000030
3ffffcf0: ffffffff 3fffc6fc 00000001 004c7b17
3ffffd00: 00000000 00000000 0000001f 4010017c
3ffffd10: 00000000 00000000 3fffc228 40105175
3ffffd20: 4000050c 00000000 0000000a 00000000
3ffffd30: 40204c44 00000030 00000013 ffffffff
3ffffd40: 40204c3a 0000002f 00000000 00000001
3ffffd50: 60000808 00000004 00000020 00000009
3ffffd60: 00000009 3fffc6fc 00000001 3ffee5e8
3ffffd70: 3fffff70 3fffff70 3ffee964 00000030
3ffffd80: 0000a000 3ffffe73 3ffffee0 4020e066
3ffffd90: 00000c30 3ffffe83 40209f79 00000001
3ffffda0: 00000000 4bc6a7f0 a76c8b43 00000000
3ffffdb0: 00000000 00000000 4bc6a7f0 00000000
3ffffdc0: 40105035 0017fecc 40100274 000013c8
3ffffdd0: 00000000 181fef1c 0017fe00 00000000
3ffffde0: 0016e001 0017fecc 3ffee9c4 00000000
3ffffdf0: 3ffedf50 3ffee9c4 00000001 3ffee5e8
3ffffe00: 00000000 00000000 3ffee5e8 40204b7d
3ffffe10: 401002cc 3ffee5e8 00000000 401002f5
3ffffe20: 3fffff70 3fffff68 3ffee5e8 40204c3a
3ffffe30: 0000004f 00000028 0000004e 00000029
3ffffe40: 00000054 00000029 00000054 00000029
3ffffe50: 00000054 00000029 00000054 00000029
3ffffe60: 00000054 00000075 00000054 00000027
3ffffe70: 0000006a 00000028 00000055 00000074
3ffffe80: 00000055 00000074 00000055 00000074
3ffffe90: 00000055 00000028 00000055 00000074
3ffffea0: 00000055 00000074 00000055 00000027
3ffffeb0: 0000006a 00000028 00000055 00000028
3ffffec0: 00000055 00000028 00000055 00000028
3ffffed0: 00000055 00000028 00000055 00000028
3ffffee0: 00000055 00000028 00000055 00000026
3ffffef0: 0000006a 00000075 00000054 00000075
3fffff00: 4023da25 00000004 00000000 00000075
3fffff10: 4023dccb 00000004 00000000 0000002b
3fffff20: 4023df00 00000004 00000000 4023718a
3fffff30: 401052b9 00181b32 3ffee9c4 00000000
3fffff40: 3ffedf50 3ffee9c4 00000002 3ffee9c4
3fffff50: 0000002a 3ffee964 40205e64 3fffefa0
3fffff60: 3ffee9c4 0000002a 3ffee964 40206676
3fffff70: 3ffee5e8 00000000 45e4b800 402014ff
3fffff80: 3fffdad0 00000000 00000001 3ffee964
3fffff90: 3fffdad0 00000000 00000001 40201cf8
3fffffa0: 3fffdad0 00000000 3ffee924 40205f7c
<<<stack<<<
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
Нашел одну странность. У меня есть еще одна ESP, которая шлет данные на MQTT сервер. Если код приемника (приведенный выше) запустить раньше чем передатчика (вторая ESP, которая шлет данные), то приемник уходит в вечный ребут, и выходит из него как только начинают приходить данные с MQTT сервера...
Такое чувство, что в коде идет попытка чтения несуществующих данных от MQTT...
Может вы увидите где ошибка?
Добавлено after 1 hour 8 minutes 12 seconds:
Код делает что хочет... И ведет себя совершенно странно.
я сделал условие на вызов функции только 1 раз:
Код: Выделить всё
if (GetNewDateTimeData){
GetNewDateTimeData = false;
Date_Time();
}Жаль нет смайлика бьющегося головой об стену....
Разрешение происходит телько при получении данных от MQTT:
Код: Выделить всё
void callback(const MQTT::Publish& pub) // Функция получения данных от сервера
{
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(" => ");
Serial.println(pub.payload_string()); // выводим в сериал порт значение полученных данных
String payload = pub.payload_string();
if(String(pub.topic()) == "WStation/Battery") // получаем данные из топика о напряжении аккумулятора
{
WStationVoltage = payload.toFloat(); // преобразуем полученные данные в тип integer
}
if(String(pub.topic()) == "WStation/Date") // получаем данные из топика Даты
{
payload.toCharArray(DateString, 11);
GetNewDateTimeData = true;
Serial.println("-3-");
}
if(String(pub.topic()) == "WStation/Time") // получаем данные из топика Времени
{
//TimeString = payload;
payload.toCharArray(TimeString, 9);
GetNewDateTimeData = true;
Serial.println("-2-");
}
}То вообще программа вылетала просто при обращении к конкретной переменной.... Не смог это победить, пришлось переменную напрочь убрать
И памяти вроде хватает
Спойлер
Executable segment sizes:IROM : 260592 - code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 27720 / 32768 - code in IRAM (ICACHE_RAM_ATTR, ISRs...)
DATA : 1296 ) - initialized variables (global, static) in RAM/HEAP
RODATA : 1272 ) / 81920 - constants (global, static) in RAM/HEAP
BSS : 25880 ) - zeroed variables (global, static) in RAM/HEAP
Скетч использует 290880 байт (27%) памяти устройства. Всего доступно 1044464 байт.
Глобальные переменные используют 28448 байт (34%) динамической памяти, оставляя 53472 байт для локальных переменных. Максимум: 81920 байт.
esptool.py v2.8
Serial port COM35
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: b4:e6:2d:23:37:0a
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 295040 bytes to 213055...
Writing at 0x00000000... (7 %)
...
Writing at 0x00034000... (100 %)
Wrote 295040 bytes (213055 compressed) at 0x00000000 in 19.0 seconds (effective 124.4 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...





