Actionner un bouton sur un Arduino et transmettre via wifi l'information sur un autre pour allumer des leds

Bonjour bryansurf

Voici, je t'ai fait un exemple basé sur UDP, avec toutes les réserves signalées ci-dessus, ça peut être une bonne base de départ. C'est basé sur un ChatGPT que j'ai "retouché".
A l'émetteur il y a 3 boutons, VERT, ORANGE et ROUGE, ce texte est envoyé tel quel au récepteur, tu peux voir ceci dans la console à 115200:

Envoyé :VERT
	Quittance <<< :VERT
Envoyé :ORANGE
	Quittance <<< :ORANGE
Envoyé :ROUGE
	Quittance <<< :ROUGE

lequel allume la LED désignée et renvoie une quittance à l'émetteur:

Message reçu : VERT
	quittance >>> : VERT
Message reçu : ORANGE
	quittance >>> : ORANGE
Message reçu : ROUGE
	quittance >>> : ROUGE

Pour installer ce réseau, il faut d'abord lancer le récepteur afin d'avoir son adresse IP (qui est affichée dans la console) afin de renseigner la variable de l'émetteur:
const char* udpAddress = "192.168.1.122"; // Changez cela par l'adresse IP de votre récepteur

Le programme émetteur:

/*
Name:       Test_UDPsender.ino 
Created:	
Author:     jpbbricole/IA

Remarque:   https://forum.arduino.cc/t/actionner-un-bouton-sur-un-arduino-et-transmettre-via-wifi-linformation-sur-un-autre-pour-allumer-des-leds/1305509
*/

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

// Réseaux Wi-Fi (SSID et mot de passe)
const char* ssid = "ton-SSID";
const char* password = "ton-Password";

// Adresse IP du récepteur ESP32
const char* udpAddress = "192.168.1.122"; // Changez cela par l'adresse IP de votre récepteur
const int udpPort = 4510;

// Pin des boutons
const int btnVertPin = 13;
const int btnOrangePin = 12;
const int btnRougePin = 14;

WiFiUDP udp;
String couleur = "";

// Fonction pour se connecter au Wi-Fi
void connectToWiFi() {
  Serial.print("Connexion à ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connexion en cours...");
  }

  Serial.println("Connecté au WiFi!");
  Serial.print("Adresse IP : ");
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);

  // Connexion au réseau Wi-Fi
  connectToWiFi();

  // Configuration des pins des boutons
  pinMode(btnVertPin, INPUT_PULLUP);
  pinMode(btnOrangePin, INPUT_PULLUP);
  pinMode(btnRougePin, INPUT_PULLUP);
}

void loop() {
  // Lecture des boutons
  if (digitalRead(btnVertPin) == LOW) {
      udpEnvoiPaquet("VERT");
//    delay(1000); // Anti-rebond
  } else if (digitalRead(btnOrangePin) == LOW) {
      udpEnvoiPaquet("ORANGE");
 //   delay(1000); // Anti-rebond
  } else if (digitalRead(btnRougePin) == LOW) {
      udpEnvoiPaquet("ROUGE");
 //   delay(1000); // Anti-rebond
  }

  // Réception de la quittance
  int packetSize = udp.parsePacket();
  if (packetSize) {
    char incomingPacket[255];
    int len = udp.read(incomingPacket, 255);
    if (len > 0) {
      incomingPacket[len] = 0;
    }
    Serial.print("\tQuittance <<< :");
    Serial.println(incomingPacket);
  }
  delay(250);
}

void udpEnvoiPaquet(String btnCouleur){
    Serial.println("Envoyé :" + btnCouleur);
    udp.beginPacket(udpAddress, udpPort);
    udp.print(btnCouleur);
    udp.endPacket();
}

Le programme récepteur:

/*
Name:       Test_UDPreceiver.ino 
Created:	
Author:     jpbbricole

Remarque:   https://forum.arduino.cc/t/actionner-un-bouton-sur-un-arduino-et-transmettre-via-wifi-linformation-sur-un-autre-pour-allumer-des-leds/1305509
*/

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

// Réseaux Wi-Fi (SSID et mot de passe)
const char* ssid = "ton-SSID";
const char* password = "ton-Password";

// Port UDP pour recevoir les données
const int localUdpPort = 4510;

// Pin des LEDs
const int ledVertPin = 5;
const int ledOrangePin = 6;
const int ledRougePin = 7;

WiFiUDP udp;
char incomingPacket[255];  // Buffer pour recevoir les paquets

void setup() {
  Serial.begin(115200);

  // Connexion au réseau Wi-Fi
  connectToWiFi();

  // Démarrage UDP
  udp.begin(localUdpPort);
  Serial.println("Serveur UDP en écoute sur le port" + localUdpPort);

  // Configuration des pins des LEDs
  pinMode(ledVertPin, OUTPUT);
  pinMode(ledOrangePin, OUTPUT);
  pinMode(ledRougePin, OUTPUT);
}

void loop() {
  // Vérification des paquets UDP
  int packetSize = udp.parsePacket();
  if (packetSize) {
    // Réception du message UDP
    int len = udp.read(incomingPacket, 255);
    if (len > 0) {
      incomingPacket[len] = 0;
    }

    String udpData = (String)incomingPacket;
    udpData.trim();  // Nettoyage de la chaîne
    Serial.print("Message reçu : ");
    Serial.println(udpData);

    // Gestion des LEDs selon le message reçu
    if (udpData == "VERT") {
      digitalWrite(ledVertPin, HIGH);
      digitalWrite(ledOrangePin, LOW);
      digitalWrite(ledRougePin, LOW);
      udpQuittance(udpData);
    } else if (udpData == "ORANGE") {
      digitalWrite(ledVertPin, LOW);
      digitalWrite(ledOrangePin, HIGH);
      digitalWrite(ledRougePin, LOW);
      udpQuittance(udpData);
    } else if (udpData == "ROUGE") {
      digitalWrite(ledVertPin, LOW);
      digitalWrite(ledOrangePin, LOW);
      digitalWrite(ledRougePin, HIGH);
      udpQuittance(udpData);
    }
  }
}

// Fonction pour Envoyer la quittance à l'émetteur
void udpQuittance(String quittance) {
  Serial.println("\tquittance >>> : " + quittance);
  udp.beginPacket(udp.remoteIP(), udp.remotePort());
  udp.print(quittance);
  udp.endPacket();
}

// Fonction pour se connecter au Wi-Fi
void connectToWiFi() {
  Serial.print("Connexion à ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connexion en cours...");
  }

  Serial.println("Connecté au WiFi!");
  Serial.print("Adresse IP : ");
  Serial.println(WiFi.localIP());
}

Dès que j'au du temps, je te fais un exemple avec UDP, ou tu fais comme moi, tu pose la question à ChatGPT :wink:

Cordialement
jpbbricole