Hallo, ich versuche meinen ESP32 und meine ESP8266(3 Stück) über ESPnow zu verbinden. Dazu will ich einen Broadcast nutzen und ich habe mich im Internet dazu informiert.
Nach einiger Zeit hab ich einen Code gefunden der meinen Ideen fast entspricht und ich habe diesen Code umgewandelt das er das erfüllen soll was ich möchte. Da ich aber den Code für den ESP32 umgewandelt habe, musste ich für denn ESP8266 nochmals umschreiben aufgrund von den anderen Libraries. Um die Fehlermeldungen zu beseitigen habe ich einige für mich unbrauchbar aussehende Codezeilen entfernt.
Jetzt kann ich es auf den ESP8266 laden aber ich bekomme keine Daten vom ESP32 auf den ESP8266.
Ich habe einfach keinen plan mehr und sitze da schon seit Wochen dran.
Ich bin nicht vom Fach und ein Anfänger was diese Sache angeht.
Kann mir vielleicht jemand helfen oder hat jemand einen Tipp wie ich es besser machen kann.
Funktion vom Code:
Jedes Board soll eine Zahl haben (1-4).
Am Anfang wird durch den ESP32 eine Zufallszahl(1-4) bestimmt im Loop.
Dann soll die Zahl mit allen Boards geteilt werden.
Dann sollen die Boards die Zahl in eine Variable abspeichern.
Dann wird im Loop abgefragt ob die Zahl die Zahl vom Board ist und ob ein Bestimmter Pin HIGH ist.
Wenn das erfüllt ist soll die nächste Zahl geteilt werden durch das Zufallsprinzip im Loop.
Es geht aber nicht um den Loop sondern ehr um die Versendung über ESPnow zwischen den Geräten.
Habe ich dort Zeilen gelöscht ohne die es nicht funktioniert ?
Gibt es andere Zeilenstücke die ich in den Code des ESP8266 schreiben kann das es funktioniert ?
Danke schonmal im voraus.
Hier der Code :
#include <esp_now.h>
#include <WiFi.h>
#define CHANNEL 1
// Vibrationssensor
#define checkPin 2
uint8_t Zufallszahl;
// Universal MAC Address
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// Aktuelle Zahl über Broadcast
int incomingLED_status;
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message
{
int but_status;
} struct_message;
// Create a struct_message called myData
struct_message myData;
struct_message incomingReadings;
// Create peer interface
esp_now_peer_info_t peerInfo;
// callback when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.println(incomingReadings.but_status);
}
void setup() {
// Init Serial Monitor
Serial.begin(115200);
pinMode(checkPin, INPUT);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
WiFi.begin();
// Wait for WiFi connection
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Send Callback Function
esp_now_register_send_cb(OnDataSent);
// Receive Callback Function
esp_now_register_recv_cb(OnDataRecv);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
}
void loop()
{
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
Zufallszahl = 1;
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
Zufallszahl = 2;
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
Zufallszahl = 3;
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
Zufallszahl = 4;
}
#include <espnow.h>
#include <ESP8266WiFi.h>
// Vibrationssensor
#define checkPin 5
uint8_t Zufallszahl;
// Universal MAC Address
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// Aktuelle Zahl über Broadcast
int incomingLED_status;
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message
{
int but_status;
} struct_message;
// Create a struct_message called myData
struct_message myData;
struct_message incomingReadings;
// callback when data is sent
void OnDataSent( uint8_t *mac_addr, uint8_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.print(".");
}
void OnDataRecv( uint8_t * mac, uint8_t *incomingData, uint8_t len) {
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings));
Serial.print("Bytes received: ");
Serial.println(incomingReadings.but_status);
}
void setup() {
// Init Serial Monitor
Serial.begin(9600);
pinMode(checkPin, INPUT);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
WiFi.begin();
// Send Callback Function
esp_now_register_send_cb(OnDataSent);
// Receive Callback Function
esp_now_register_recv_cb(OnDataRecv);
}
void loop()
{
Zufallszahl = 4;
Serial.print(".");
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
delay(1000);
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
Zufallszahl = 1;
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
Zufallszahl = 2;
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
Zufallszahl = 3;
//if(currentNumber == boardNumber){
// Überprüfe den Status des Pins 2
if (digitalRead(checkPin) == HIGH) {
// Generiere eine neue Zufallszahl
// Sende die aktualisierte Broadcast-Nachricht
myData.but_status = Zufallszahl;
Serial.println(Zufallszahl);
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// Gib die aktuelle Zahl in der seriellen Konsole aus
delay(1000);
}
// }
}