// SoftSerial-espnow-sender-receiver.ino #include #include #include #define MYPORT_TX 5 // D1 -> green -> RXD der Gegenstelle #define MYPORT_RX 4 // D2 <- yellow <- TXD der Gegenstelle SoftwareSerial myPort; uint8_t receiverAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; const byte nachricht_length = 64; typedef struct struct_message { char nachricht[nachricht_length]; } struct_message; struct_message myData; struct_message myData_in; String nachricht[nachricht_length]; const boolean test_mode = true; byte LED1 = 2; // GPIO2 => D4 - onboard LED auf ESP8266 12E byte LED2 = 16; // GPIO16 => D0 - onboard LED auf NodeMCU Amica void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { if (sendStatus == 0) { if (test_mode) Serial.println("Delivery success"); } else { if (test_mode) Serial.println("Delivery NOT success"); } } void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData_in, incomingData, sizeof(myData_in)); if (test_mode) { // Serial.println(String(len) + " - " + String(myData_in.nachricht)); Serial.println(String(myData_in.nachricht)); } myPort.println(String(myData_in.nachricht)); } void setup() { Serial.begin(9600); delay(500); while ( Serial.available() ) Serial.read(); Serial.println("\n\nSoftwareSerial-espnow-sender-receiver.ino\n"); pinMode(LED1, OUTPUT); digitalWrite(LED1, 1); //Aus pinMode(LED2, OUTPUT); digitalWrite(LED2, 0); //AN delay(1000); digitalWrite(LED1, 1); digitalWrite(LED2, 1); delay(1000); Serial.println("Initializing ESP-NOW ... "); WiFi.mode(WIFI_STA); while (esp_now_init() != 0) { if (test_mode) Serial.println("."); delay(1000); digitalWrite(LED1, not digitalRead(LED1)); } Serial.println("... ESP-NOW okay"); esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_register_send_cb(OnDataSent); esp_now_add_peer(receiverAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0); esp_now_register_recv_cb(OnDataRecv); myPort.begin(9600, SWSERIAL_8N1, MYPORT_RX, MYPORT_TX, false); Serial.println("Teste SoftwareSerial ."); while (!myPort) { digitalWrite(LED1, not digitalRead(LED1)); Serial.print("."); delay (500); } Serial.println("\n OK"); while (myPort.available()) { myPort.read(); } } byte result; void loop() { if (test_mode && Serial.available()) { Serial.print("Eingabe: "); String eingabe = Serial.readStringUntil('\n'); eingabe.trim(); if (test_mode) Serial.println(eingabe); myPort.println(eingabe); } digitalWrite(LED2, not digitalRead(LED2)); if (myPort.available()) { String nachricht = ""; char zeichen; while (myPort.available()) { zeichen = myPort.read(); nachricht = nachricht + zeichen; } //String nachricht = myPort.readStringUntil('\n'); nachricht.trim(); nachricht.toCharArray( myData.nachricht, nachricht_length ); Serial.println("Sende " + nachricht); result = esp_now_send(receiverAddress, (uint8_t *) &myData, sizeof(myData)); digitalWrite(LED1, not digitalRead(LED1)); } else { //strcpy(myData.nachricht, "Nichts empfangen!"); //Serial.println("Sende 'Nichts empfangen!'"); digitalWrite(LED2, not digitalRead(LED2)); } digitalWrite(LED2, not digitalRead(LED2)); if (result != 0) { if (test_mode) Serial.println("\n Sending error"); digitalWrite(LED1, not digitalRead(LED1)); } else { if (test_mode) Serial.print("."); } delay(1000); }