My WeMos D1 Mini запускает скрипт, который должен выполнять определенные действия, если он получает определенные строки в пакетах udp.
Он работает большую часть времени, но иногда он просто не реагирует ни на что , Обычно достаточно просто подождать несколько минут или отправить пакет пару раз. Я предполагаю, что это может go в какой-то глубокий сон. Иногда единственное, что помогает, это перезапустить его.
Я пытался реализовать сторожевой таймер, но это не сработало (но это отдельная проблема), и я не уверен, что это решит проблему. Я отправляю пакеты через Netcat, и сила WiFi в порядке (но не велика). Все находится в локальной сети.
Пожалуйста, посмотрите на мой код и проверьте его на наличие ошибок / улучшений.
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#define SSID "XXX"
#define PASSWORD "XXX"
#define PORT XXX
WiFiUDP udpServer;
char MESSAGE[] = "message";
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
wifiStrength();
udpServer.begin(PORT);
delay(100);
}
void wifiStrength(){
if (WiFi.status() != WL_CONNECTED) {
Serial.println("no wifi, reconnecting...");
delay(3000);
WiFi.begin(SSID, PASSWORD);
}
long rssi = WiFi.RSSI();
Serial.print("connected, RSSI:");
Serial.println(rssi);
}
void loop() {
if (udpServer.parsePacket()) {
char receiveBuffer[WIFICLIENT_MAX_PACKET_SIZE + 1];
udpServer.read(receiveBuffer, sizeof(receiveBuffer) - 1);
if (strstr(receiveBuffer, MESSAGE)) {
Serial.println("do stuff...");
}
}
}