======== 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);
}
}