ESP, IoT ESP отваливается от WiFi

kingzone

✩✩✩✩✩✩✩
8 Сен 2022
3
0
Всем добрый день! Делаю для себя небольшой проект: устройство для нажатия кнопки через Telegram. Использую плату Wemos D1 mini и мосфет транзистор для замыкания контактов. Проблема в том, что после продолжительного простоя плата отключается от роутера и приходится его перезагружать. Перезагрузка платы почему-то не помогает. Иногда бывает, что ответ по команде приходит спустя 5-10 минут без перезагрузки. Дома есть еще несколько устройств на esp8266: это светодиодная лента на WLED плата NodeMCU и несколько выключателей Tuya. С ними все нормально, они не отключаются. Как можно решить проблему? Питается плата от usb компьютера. Схему условно нарисовал: лампочка и аккумулятор - как раз то, что нужно замыкать.изображение_2022-09-08_133629400.png

Код написал элементарный, использовал delay. Знаю, что лучше использовать таймер, но для такого кода, мне кажется, и так сойдет. библиотека для телеги от Алекса.
C++:
#include <ESP8266WiFi.h>
#include <FastBot.h>
#define WIFI_SSID "*********"
#define WIFI_PASS "*********"
#define BOT_TOKEN "******************"


FastBot bot(BOT_TOKEN);

void setup() {
  pinMode(4, OUTPUT);
  digitalWrite(4, 0);
  delay(500);
  Serial.begin(115200);
  while (!Serial) {
    ; // * Ждём завершения инициализации шины UART.
  }
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected");
  Serial.println(WiFi.localIP());
  bot.attach(newMsg);

}

void loop() {
  bot.tick();
}

void newMsg(FB_msg& msg) {
  Serial.println(msg.toString());
  if (msg.text == "/on") {
    digitalWrite(4, 1);
    delay(200);
    digitalWrite(4, 0);
    bot.sendMessage("Включен", msg.chatID);
  }
  if (msg.text == "/off") {
    digitalWrite(4, 1);
    delay(15000);
    digitalWrite(4, 0);
    bot.sendMessage("Отключен", msg.chatID);
  }
}
 

Сотнег

★★★★★★★
15 Янв 2020
4,122
1,439
@kingzone, попробуйте такой код:
C-like:
void loop() {
  delay(100); 
  bot.tick();
}
А вот ваша строчка
delay(15000);
Вроде, вообще должна перезагрузку платы провоцировать по таймеру WatchDog.
 

kingzone

✩✩✩✩✩✩✩
8 Сен 2022
3
0
@Сотнег, там, где задержка 15000 прочти не используется. Это команда экстренного отключения, я её использовал только на тестах, а так всегда использую первую. С задержкой внутри loop проверю
 

kingzone

✩✩✩✩✩✩✩
8 Сен 2022
3
0
@Сотнег, с delay внутри loop вроде работает. Иногда есть задержка где-то в минуту, но это не страшно. Большое спасибо!