4 Leds + 4 Buttons + ESP NOW

Hallo zusammen,

ich arbeite seit kurzem mit ESP32 und Arduino.

ich versuche die Kommunikation zwischen zwei Boards herzustellen,

Master Board hat 4 Buttons + 4 Led

Slave Board hat 1 Button + 2 Led

es soll folgendes passieren: durch den Klick auf Master Seite auf einen von 4 Buttons soll die Lampe auf Slave Seite angehen.

Der Script für 4 Buttons klappt intern (wenn man den bestimmten Button klickt geht bestimmte Lampe an)

Aber wie ich es mit den anderen Board verbinden kann, weis ich leider momentan nicht.

Ich habe meinen momentan Script reingestellt, vielleicht hat jemand Ahnung was alles rein muss.

#include <esp_now.h>
#include <WiFi.h>
#include <SPI.h>


#define CHANNEL 3
#define IR_PIN 27
#define NUM_SLAVES 20                   // ESP-Now can handle a maximum of 20 slaves
#define PRINTSCANRESULTS 0


int slaveCount = 0;                     // Keeps count of no. of slaves with the defined prefix
esp_now_peer_info_t slaves[NUM_SLAVES]; // Stores the information of each of the slave that is added as a peer

void initESPNow();
void manageSlaves();
void scanForSlaves();
void onDataSent(const uint8_t *mac_addr, esp_now_send_status_t status);
void onDataRecv(const uint8_t *mac_add, const uint8_t *data, int data_len);
void sendData(uint8_t data);


int commandState;  

// LEDs
const int ledPinRed = 27; 
const int ledPinBlue = 26;
const int ledPinYellow = 25;
const int ledPinGreen = 33;



int ledPin[] ={27,26,25,33};


//Buttons
const int PushButton_Blue = 34; 
const int PushButton_Yellow = 18; 
const int PushButton_White = 19;
const int PushButton_Green = 17;
 
//const int analogInPin = 34; 

void setup() {  

  
  Serial.begin(115200);  

  

  pinMode (ledPinRed, OUTPUT);
  pinMode (ledPinBlue, OUTPUT);
  pinMode (ledPinYellow, OUTPUT);
  pinMode (ledPinGreen, OUTPUT);

  

 // setup pin 34 as a digital output pin 

  pinMode(PushButton_Blue, INPUT); 
  //pinMode(PushButton_Yellow, INPUT);
  //pinMode(PushButton_White, INPUT);
  //pinMode(PushButton_Green, INPUT);

}  

  

void loop() {   
  
   int Push_button_state = digitalRead(PushButton_Blue);
   int Push_button_state1 = digitalRead(PushButton_Yellow); 
   int Push_button_state2 = digitalRead(PushButton_White);
   int Push_button_state3 = digitalRead(PushButton_Green);

 Serial.println(Push_button_state); 
  if ( Push_button_state == HIGH ) 

  {  

    digitalWrite (ledPinBlue, HIGH);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds
    digitalWrite (ledPinBlue, LOW);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds  
  }

  else if ( Push_button_state1 == HIGH ) 

  {
    digitalWrite (ledPinYellow, HIGH);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds
    digitalWrite (ledPinYellow, LOW);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds 
  }

else if ( Push_button_state2 == HIGH ) 

  {
    digitalWrite (ledPinRed, HIGH);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds
    digitalWrite (ledPinRed, LOW);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds 
  }

  else if ( Push_button_state3 == HIGH ) 

  {
    digitalWrite (ledPinGreen, HIGH);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds
    digitalWrite (ledPinGreen, LOW);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds 
  }
  
 
  else{ 


// LED Pin 27
  digitalWrite (ledPinRed, HIGH);  // turn on the LED 

  delay(500); // wait for half a second or 500 milliseconds 

  digitalWrite (ledPinRed, LOW); // turn off the LED 

  delay(500); // wait for half a second or 500 milliseconds 

    } 
}

Ich sehe da nichts, was auf eine Kommunikation hindeuten würde. Sind beide Boards ESP32? Dann suche mal in dessen Libs nach Webserver und HttpClient.

Gruß Tommy

habe den Script überarbeitet.

Es sind 2 ESP32 Boards.

Folgende Schwierigkeit ist entstanden, wie kann ich die 2 Boards mit einander kommunizieren lassen?

Sprich, wenn ich auf Master den Button klicke, soll die Lampe auf Slave leuchten und umgekehrt.

Den Script habe ich überarbeitet.

Es sind 2x ESP32.

ESP_Master.doc (16.7 KB)

Hi,

wie sollen die Boards denn miteinander kommunizieren? Per Kabelverbindung, Wlan (Direkt oder Router), Bluetooth?

Wenn Du Dich entschieden hast, gibt es immer noch zahlreiche Wege und Möglichkeiten das umzusetzen.

Hallo,

die Boards sollen per Bluetooth mit einander kommunizieren.

Welche von oben genannten Möglichkeiten ist am stabilsten?
Kann mir jemand bei der Umsetzung helfen?

Soll ich den Script von Slave posten ?

Es ist eigentlich nicht relevant wie die Bords mit einander kommunizieren, dass wichtigen ist dass die Kommunikation stabil ist.

Also ich finde das schon relevant. Wenn die beiden Boards nebeneinander liegen, kann man sie verdrahten und sowohl verlässlich als auch performant mit einander kommunizieren lassen.

Bei Bluetooth hast Du ca. 5-15 Meter, die beide Module von einander entfernt sein können.

Per WiFi mit Router dazwischen, steigt die Entfernung natürlich massiv.

Aus der Anforderung ergibt sich dann erst, welches Protokoll, Seriell, I2C, Sockets, Http-Requests, usw. Sinn macht.

Für Bluetooth findest Du hier ein Tutorial wie das funktioniert: https://randomnerdtutorials.com/esp32-bluetooth-low-energy-ble-arduino-ide/

PS: Wenn Du Dich noch für keine Übertragungsart entschieden hast, wird Dein "Slave"-Code nicht weiterhelfen. Wir werden Dir das nicht fertig programmieren, das musst Du schon selbst machen. Wir geben nur die Hilfestellung dazu.

Danke für die Antwort. Ich schaue mir die Tutorial an.

Vielleicht werde ich daraus schlauer.

Momentan kommunizieren die über WiFi.

Könnte ich von Ihnen ein Ratschläge bekommen ob mein Script von Master soweit korrekt ist?

4_Buttons_4_Leds_Master.ino (9.86 KB)

Alex_Ti:
Vielleicht werde ich daraus schlauer.

Was soll das denn?
Warum teilst du dein Problem in zwei Threads auf ?

Ist das Problem so groß, dass es nicht in einen Thread passt ?

So sieht doch keiner mehr durch.

Und jetzt sag nicht, du bist neu hier und wüsstest nicht wie das geht.

Sorry, hatte Schwierigkeiten mich zurecht zu finden. :(

habe versucht diesen Threads zu finden. War für mich verwirrend.

Oje, wenn das schon verwirrt :confused:

Der Code sieht ja nach einem Beispiel-code aus. Esp Now ist also eine Library, die eine Master-Slave Verbindung bereitstellt. Der Master sucht die Slaves, speichert diese in einer Liste und versucht eine Verbindung aufzubauen. Soweit, so gut!

Nun musst Du prinzipiell nur noch die Methode sendData aufrufen und dem Slave mitteilen, dass ein Button gedrückt wurde. Das kannst Du theoretisch hier einfügen:

if ( Push_button_state == HIGH ) {  
    digitalWrite (ledPinBlue, HIGH);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds
    digitalWrite (ledPinBlue, LOW);  // turn on the LED  
    delay(500); // wait for half a second or 500 milliseconds  

    //Send pin number to slaves:
    sendData(PushButton_Blue)
  }

Das empfehle ich Dir aber nicht. Denn Du fragst die Buttons ungeprellt an und die ganzen delays sind auch nicht so sonderlich schön.

Schau Dir dazu mal unter Datei -> Beispiele -> Digital z.B. "Debounce" an.

Danke ich schaue es mir an. :)

Eine Frage zu delays, Sie haben geschrieben, dass sie nicht sonderlich schön aussehen.

Wie kann ich die besser(schöner) gestalten?

Genauso wie das entprellen der Buttons. Mit millis() anstelle des delays.
Denn das delay bremst Deinen Master dann aus und Du kannst keine Daten von den Slaves oder weitere gedrückte Buttons verarbeiten. Zumindest so lange das delay läuft.

Alex_Ti: Eine Frage zu delays, Sie haben geschrieben, dass sie nicht sonderlich schön aussehen.

Wie kann ich die besser(schöner) gestalten?

Dann lies dir mal das Beispiel "BlinkWithoutDelay" aus der IDE durch. Mit millis wird das "schöner".

Hi

Und: Wir sind hier im 'Du' ;) Zwar dürfen auch hier Höflichkeitsformeln beachtet werden, aber Anrede mit Titel ect.pp. sind eher weniger nötig - wenn doch Mal, dann kann man diesen Forenmitstreiter auch getrost mit Seinem Titel zusammen machen lassen, was Sie wollen :)

MfG

crosspost

english: https://forum.arduino.cc/index.php?topic=634638.0 german: https://forum.arduino.cc/index.php?topic=634301.0 german: https://forum.arduino.cc/index.php?topic=634448.0

bleib endlich bei EINEM Topic, oder schreibe wenigstens, dass du zwischenzeitlich Hilfe wo anders suchst.