Примеры кода — ESP и UDP 9009

Минимальный код, максимум пользы

ESP8266: отправка devping и devstate

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
WiFiUDP udp;
unsigned long pingTimer = 0;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  udp.begin(0);
}

void loop() {
  if (millis() - pingTimer >= 180000) {
    sendPing();
    pingTimer = millis();
  }
}

void sendPing() {
  String packet = "devping:esp01_relay_01:sys_uptime:" + String(millis()/1000);
  udp.beginPacket("255.255.255.255", 9009);
  udp.write(packet.c_str(), packet.length());
  udp.endPacket();
}

ESP32: быстрая реакция и события

#include <WiFi.h>
#include <WiFiUdp.h>

WiFiUDP udp;

void setup() {
  Serial.begin(115200);
  WiFi.begin("YOUR_SSID", "YOUR_PASS");
  while (WiFi.status() != WL_CONNECTED) delay(500);
  udp.begin(0);
}

void loop() {
  if (hitDetected) {
    String pkt = "devstate:target_01:event:hit:value:true";
    udp.beginPacket("255.255.255.255", 9009);
    udp.write(pkt.c_str(), pkt.length());
    udp.endPacket();
  }
}

Cold start: отправка devstate при включении

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  udp.begin(0);

  // Отправляем начальное состояние
  String pkt = "devstate:esp01_relay_01:event:boot:value:ready";
  udp.beginPacket("255.255.255.255", 9009);
  udp.write(pkt.c_str(), pkt.length());
  udp.endPacket();
}

Муксис: отправка голосовой команды (ESP32 + SU-03T)

// SU-03T распознаёт команду -> отправляет по UART на ESP32
// ESP32 формирует UDP-пакет в сеть 4DUK

void onVoiceCommand(String cmd) {
  String packet = "devstate:muxis_01:event:voice_command:value:" + cmd;
  udp.beginPacket("255.255.255.255", 9009);
  udp.write(packet.c_str(), packet.length());
  udp.endPacket();
}

Фильтрация входящих пакетов

void parsePacket() {
  int packetSize = udp.parsePacket();
  if (packetSize) {
    char buffer[256];
    int len = udp.read(buffer, sizeof(buffer) - 1);
    buffer[len] = '\0';

    if (strncmp(buffer, "device:", 7) == 0) {
      // обработка команды
    } else if (strncmp(buffer, "devstate:", 9) == 0) {
      // обновление состояния
    } else if (strncmp(buffer, "devping:", 8) == 0) {
      // keep-alive
    }
  }
}

Нюансы

Степаныч, давай охолаживай: меньше кода — больше надёжности.