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

kingzone
Offline
Зарегистрирован: 08.09.2022

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

Код написал элементарный, использовал delay. Знаю, что лучше использовать таймер, но для такого кода, мне кажется, и так сойдет. библиотека для телеги от Алекса Гайвера.

#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);
  }
}

 

negavoid2
negavoid2 аватар
Offline
Зарегистрирован: 06.05.2020

Полагаю, дело в библиотеке/частоте опросов телеграма. Сделайте опрос сами, и ставьте задержку между опросами в 1 секунду, а то сейчас выглядит так, как будто tick() постоянно опрашивает сервера телеграмма в цикле, и его запросто могут прибанивать/tarpit-ить, вот _http->get() и ждёт подолгу. А потом ещё сообщения начинаются с нуля, если их много, может буфер у есп-шки переполняются.