читайте об это здесь:Из эксперементов: ESP8266 когда просыпается то сама подключается с DHCP, а вот если в Setup вставить WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS); то DHCP отключен и соединение происходит быстрее. Пики на графике - DHCP, ровная линия - примерно 190 мс millis без DHCP.
Попробуйте еще добавить этоИз эксперементов: ESP8266 когда просыпается то сама подключается с DHCP, а вот если в Setup вставить WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS); то DHCP отключен и соединение происходит быстрее.
#include <Arduino.h>
#include <esp8266RTCmemory.h>
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.printf("RTC free space = %d byte.\n", esp8266RTCmemory::freeSpace());//Свободная память
int8_t arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // масив. Не кратен 4 байтам
esp8266RTCmemory RTC(sizeof(arr)); // выделяю память в ртс при создании экземпляра. Займет 12 байт в RTC
Serial.printf("RTC free space = %d byte.\n", esp8266RTCmemory::freeSpace());
RTC.write(arr); // запоминаю в ртс. Функция возвращает true/false
int8_t newArr[sizeof(arr)];//Новый массив, куда будем восстанавливать данные из RTC
RTC.read(newArr); // читаю из ртс в новый массив. Функция возвращает true/false что сообщает о корректности считанных данных
for (int i = 0; i < (int)sizeof(arr); i++)
{
Serial.printf("newArr[%d]=%d\n", i, newArr[i]);
}
byte x = 5;
esp8266RTCmemory rtc2(sizeof(x)); //Займет 4 байта в RTC
Serial.printf("RTC free space = %d byte.\n", esp8266RTCmemory::freeSpace());
rtc2.write(x);
byte y = 0;
rtc2.read(y);
Serial.printf("rtc2= %d\n", y);
typedef struct __attribute__((packed, aligned(1)))
{
uint32_t var1 : 1;
uint32_t var2 : 2;
uint32_t var3 : 3;
uint32_t var4 : 11;
uint32_t var5 : 5;
uint32_t var6 : 7;
} B;
B b;
B c;
b.var1 = 1;
b.var2 = 2;
b.var3 = 3;
b.var4 = 4;
b.var5 = 5;
b.var6 = 6;
esp8266RTCmemory rtc3(sizeof(b)); //Займет 4 байта в RTC
Serial.printf("RTC free space = %d byte.\n", esp8266RTCmemory::freeSpace());
rtc3.write(b);
rtc3.read(c);
Serial.printf("%d, %d, %d, %d, %d, %d\n", c.var1, c.var2, c.var3, c.var4, c.var5, c.var6);
}
void loop()
{
delay(1000);
}
#include <esp8266RTCmemory.h>
esp8266RTCmemory numberReboots(sizeof(int32_t)); // Создаем экземпляр класса, с которым будем работать как с переменной
esp8266RTCmemory doubleValue(sizeof(double));// Еще один
void setup()
{
Serial.begin(74880); // как и у лога ESP
if (numberReboots.crcOk() == false)//Проверяем контрольную сумму в RTC памяти у любого экземпляра.
{
Serial.printf("\nПервая загрузка или сбой!\n");
numberReboots = 0; // Обязательно присвоить значение для записи crc при первом включении
doubleValue = 0.0;
}
else
{
numberReboots++; // не работает для переменных с плавающей точкой
if (numberReboots % 4 == 0)// Каждую 4ю загрузку увеличиваем doubleValue.
{
doubleValue += 0.5;
}
Serial.printf("\nЗагрузка № %d doubleValue = %f\n", (int32_t)numberReboots, (double)doubleValue);
}
ESP.deepSleep(5e6);
}
void loop() {}
Главное, чтобы эта структура не занимала больше 512 байт в памяти.
- RTC memory layout:
|<--system data (256-bytes)-->|<--OTA (128-bytes)|--user data (512-bytes)-->|
0 31 127
ESP.rtcUserMemoryWrite(32, dataBuffer, sizeof(dataBuffer)); //запись в ячеку 32