Hier mal das Beispiel für meine Klingelknöpfe, das sollte eigentlich für Deine Zwecke völlig ausreichen. Jeder ESP sendet nur seine Kennung und legt sich dann wieder aufs Ohr. Die Auswertung übernimmt der Empfänger:
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
//Identifier des Moduls (bei mehreren Klingeln)
//18:FE:34:DC:EE:F5 = 10
//18:FE:34:D2:B7:77 = 20
//18:FE:34:D2:B7:CE = 30
//18:FE:34:E4:64:AC = 40
//18:FE:34:DC:EE:E5 = 50
//Zugangsdaten Accesspoint(WLAN)
#define SSID "xxxxxxx"
#define PASSWORD "yyyyyy"
//kontaktierter Melde-Server
#define HOST "192.168.xxx.yyy"
//lausche auf folgendem Port
#define PORT 5444
WiFiUDP udpServer;
int conn_time;
int sensorID;
String mac;
void setup() {
//seriellen Monitor initialisieren
Serial.begin(9600);
delay(10);
//Verbinden mit WiFi-Netzwerk
Serial.println();
Serial.println();
Serial.print("Verbinde mit ");
Serial.println(SSID);
WiFi.begin(SSID, PASSWORD);
WiFi.config(IPAddress(192,168,xxx,yyy), IPAddress(192,168,xxx,yyy), IPAddress(255,255,255,0), IPAddress(192,168,xxx,yyy));
while (WiFi.status() != WL_CONNECTED) {
delay(500); // Serial.print("."); conn_time++; if (conn_time > 20) {break;}
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi Verbindung");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("mac address: ");
mac = WiFi.macAddress();
Serial.println(mac);
}
else {
Serial.println("");
Serial.println("keine WiFi Verbindung");
ESP.deepSleep(100000);
Serial.println("gehe schlafen");
}
//Sensor-ID zuweisen (für Auswertung am Server)
if (mac == "18:FE:34:DC:EE:F5") {
sensorID = 10;
}
if (mac == "18:FE:34:D2:B7:77") {
sensorID = 20;
}
if (mac == "18:FE:34:D2:B7:CE") {
sensorID = 30;
}
if (mac == "18:FE:34:E4:64:AC") {
sensorID = 40;
}
if (mac == "18:FE:34:DC:EE:E5") {
sensorID = 50;
}
Serial.print("Sensor ID: ");
Serial.println(sensorID);
// UDP-Server starten
udpServer.begin(PORT);
udpServer.beginPacket(HOST, PORT);
udpServer.print(sensorID + 2); //Kennung für Glockenschlag
udpServer.endPacket();
delay(100);
ESP.deepSleep(0, WAKE_RF_DEFAULT);
}
void loop() {
}
Der zweite Teil der Kennung kann bei Dir entfallen, ich gebe da lediglich noch für Testzwecke den angeforderten Klingelton mit. Auch kann die komplette serielle Kommunikation raus, dient lediglich Debug-Zwecken.
Gruß eMeS