ESP8266 имеет проблемы с получением пакетов udp - PullRequest
0 голосов
/ 22 апреля 2020

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...");
    } 
  }
}
...