======== Travaux pratique Esp32 Now ======== == Materiels == *2 Esp32 wroom ou equivalent *2 Breadboards avec câbles *1 Mini bouton poussoir *1 LED 5mm ou 3 mm *2 Câbles mini USB d'alimentation et données *1 Résistance 220 ohms 1W (pour LED) *1 Résistance 1 Kohms 1W (pour Bp1) ==== Emetteur avec Bouton poussoir ==== == Schema de raccordement == {{ :start:arduino:esp32:tp:capture_d_ecran_du_2024-11-07_10-17-59.png?direct&400 |}} {{ :start:arduino:esp32:tp:capture_d_ecran_du_2024-11-07_10-19-28.png?direct&400 |}} /* EMETTEUR Raccorder un Bouton poussoir sur la broche 2 ( pour essai) Et remplacer l'adresse MAC par l'@Mac de votre ESP32 recepteur Apres le telechargement du programme sur l'ESP32, faire un reset de l'esp32 il faut appuyer environ 1 s sur le Bp1 */ #include #include const int Bp1 = 2; int MemLed1 = 0; int MemBp1 = 0; int tempo = 50; String result = " "; // Indiquer l'MAC Address de l 'ESP32 distant uint8_t broadcastAddress[] = {0x58, 0xbf, 0x25, 0x14, 0x24, 0x34}; // Structure d'envoi du message typedef struct struct_message { char a[32]; int b; float c; bool d; } struct_message; // Creation d une structure de message appellée myData struct_message myData; esp_now_peer_info_t peerInfo; // Retour de message de status l'autre esp 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 ? "Bouton OK" : "Erreur Bouton"); } void setup() { Serial.begin(115200); pinMode(Bp1, INPUT); WiFi.mode(WIFI_STA); // Initiation ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } //Recupere le status du paquet envoyer esp_now_register_send_cb(OnDataSent); // test l'adress Mac , Envoi sur canal 0, et ne pas crypter le paquer envoyer memcpy(peerInfo.peer_addr, broadcastAddress, 6); peerInfo.channel = 0; peerInfo.encrypt = false; if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); return; } } void loop() { int valeurBp1 = digitalRead(Bp1);// On lit la valeur de Bp1 au début de la boucle delay(tempo); strcpy(myData.a, " data1"); myData.b = 0; myData.c = 0.5; //Temps 1 if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 0) { myData.d = 1;;MemBp1 =1;MemLed1 = 1; esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); } //Temps 2 if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 1) { myData.d = 1;;MemBp1 =0;MemLed1 = 1; } //Temps 3 if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 1) { myData.d = 0;;MemBp1 =1;MemLed1 = 0; } //Temps 4 if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 0) { myData.d = 0;;MemBp1 =0;MemLed1 = 0; esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); } Serial.println(myData.d);// affiche la valeur envoyée mydata.d ==> booleen if (result == ESP_OK) { Serial.println("Sent with success"); } if (result == " " ){ Serial.println("Attente d'appui !!!"); } else { Serial.println("Error sending the data"); } delay(1000); } ==== Recepteur avec Led ==== == Schema raccordement == {{ :start:arduino:esp32:tp:capture_d_ecran_du_2024-11-07_10-28-27.png?direct&400 |}} {{ :start:arduino:esp32:tp:capture_d_ecran_du_2024-11-07_10-28-47.png?direct&400 |}} /* RECEPTEUR Raccorder la led sur la sortie 34 Apres le telechargement du programme sur l'ESP32, faire un reset de l'esp32 */ #include #include int led1 = 34; int tempo = 50; // Structure example to receive data // Must match the sender structure typedef struct struct_message { char a[32]; int b; float c; bool d; } struct_message; // Create a struct_message called myData struct_message myData; // callback function that will be executed when data is received void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Bytes received: "); Serial.println(len); Serial.print("Char: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Float: "); Serial.println(myData.c); Serial.print("Bool: "); Serial.println(myData.d); Serial.println(); } void setup() { // Initialize Serial Monitor Serial.begin(115200); pinMode(led1, OUTPUT); // Set device as a Wi-Fi Station WiFi.mode(WIFI_STA); // Init ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } } void loop() { esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv)); delay(1000); if (myData.d == true) { digitalWrite(led1, HIGH); } if (myData.d == false) { digitalWrite(led1, LOW); } }