start:arduino:esp32:now
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
start:arduino:esp32:now [2022/01/05 19:17] – gerardadmin | start:arduino:esp32:now [2024/11/06 21:08] (Version actuelle) – [Tester et aller plus loin] gerardadmin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
======== ESP 32 NOW ======== | ======== ESP 32 NOW ======== | ||
- | ESP-NOW | ||
ESP-NOW est un protocole d' | ESP-NOW est un protocole d' | ||
Ligne 18: | Ligne 17: | ||
La première étape va consister à noter les adresses MAC de chaque appareil que nous voulons faire communiquer. Pour mémoire, l' | La première étape va consister à noter les adresses MAC de chaque appareil que nous voulons faire communiquer. Pour mémoire, l' | ||
- | Téléverser le code suivant dans chaque ESP, et noter soigneusement le résultat qui va s' | + | Téléverser le code suivant dans chaque ESP, et **noter soigneusement le résultat qui va s' |
+ | |||
+ | <code c exemple001b.ino> | ||
+ | /* | ||
+ | Rui Santos & Sara Santos - Random Nerd Tutorials | ||
+ | Complete project details at https:// | ||
+ | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. | ||
+ | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | ||
+ | */ | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | void readMacAddress(){ | ||
+ | uint8_t baseMac[6]; | ||
+ | esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, | ||
+ | if (ret == ESP_OK) { | ||
+ | Serial.printf(" | ||
+ | baseMac[0], baseMac[1], baseMac[2], | ||
+ | baseMac[3], baseMac[4], baseMac[5]); | ||
+ | } else { | ||
+ | Serial.println(" | ||
+ | } | ||
+ | } | ||
- | <code c exempl001.ino> | ||
- | #include " | ||
- | |||
void setup(){ | void setup(){ | ||
Serial.begin(115200); | Serial.begin(115200); | ||
- | | + | |
- | | + | |
+ | | ||
+ | |||
+ | Serial.print(" | ||
+ | readMacAddress(); | ||
} | } | ||
Ligne 32: | Ligne 54: | ||
} | } | ||
+ | </ | ||
- | </ | + | Cette étape manuelle permettra d' |
- | Cette étape manuelle permettra d' | + | L' |
====Principe de communication==== | ====Principe de communication==== | ||
Ligne 57: | Ligne 80: | ||
À Chaque étape listée ci-dessus va correspondre une fonction spécifique à l' | À Chaque étape listée ci-dessus va correspondre une fonction spécifique à l' | ||
- | esp_now_init() Initialiser ESP-NOW. Il faut initialiser le wifi avant d' | + | ***esp_now_init()** Initialiser ESP-NOW. Il faut initialiser le wifi avant d' |
- | esp_now_add_peer() On appelle cette fonction pour appairer un ESP, on passe son adresse MAC en argument. | + | ***esp_now_add_peer()** On appelle cette fonction pour appairer un ESP, on passe son adresse MAC en argument. |
- | esp_now_send() Envoie des données avec ESP-NOW. | + | ***esp_now_send()** Envoie des données avec ESP-NOW. |
- | esp_now_register_send_cb() Enregistre une fonction de rappel qui sera déclenchée lorsque l'on envoie des données. | + | ***esp_now_register_send_cb()** Enregistre une fonction de rappel qui sera déclenchée lorsque l'on envoie des données. |
- | esp_now_register_rcv_cb() Enregistre une fonction de rappel qui sera déclenchée lorsque l'on reçoit des données. | + | ***esp_now_register_rcv_cb()** Enregistre une fonction de rappel qui sera déclenchée lorsque l'on reçoit des données. |
- | Code de l' | + | |
+ | ==Code de l' | ||
Ci-dessous, le code commenté: | Ci-dessous, le code commenté: | ||
- | // Référence technique: | + | <code c emetteur001.ino> |
- | + | /* | |
- | <code c> | + | Rui Santos & Sara Santos - Random Nerd Tutorials |
- | // Inclure les librairies | + | Complete project details at https://RandomNerdTutorials.com/esp-now-esp32-arduino-ide/ |
+ | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. | ||
+ | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | ||
+ | */ | ||
#include < | #include < | ||
#include < | #include < | ||
- | </ | ||
- | // Stockage de l' | + | // REPLACE WITH YOUR RECEIVER |
- | uint8_t | + | uint8_t |
- | // La variable qui sera envoyée au récepteur (nous générerons une valeur aléatoire pour l' | + | // Structure example to send data |
- | <code c> | + | // Must match the receiver structure |
- | float maValeurEnvoyee; | + | typedef struct struct_message { |
- | </ | + | char a[32]; |
- | // La fonction de rappel qui nous assurera de la bonne livraison du message | + | int b; |
- | <code c> | + | |
- | void quand_donnees_Envoyees(const uint8_t *mac_addr, esp_now_send_status_t status) { | + | bool d; |
- | Serial.print(" | + | } struct_message; |
- | Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Succès" : "Échec"); | + | |
+ | // Create a struct_message called myData | ||
+ | struct_message myData; | ||
+ | |||
+ | esp_now_peer_info_t peerInfo; | ||
+ | |||
+ | // callback when data is sent | ||
+ | void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { | ||
+ | Serial.print(" | ||
+ | Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail"); | ||
} | } | ||
- | </ | ||
- | // Une variable qui servira à stocker les réglages concernant le récepteur | ||
- | <code c> | ||
- | esp_now_peer_info_t infosRecepteur; | ||
- | </ | ||
void setup() { | void setup() { | ||
- | // On initie la comm série à 115200 Bauds | + | // Init Serial Monitor |
Serial.begin(115200); | Serial.begin(115200); | ||
- | // On démarre le Wifi en mode Station | + | // Set device as a Wi-Fi Station |
WiFi.mode(WIFI_STA); | WiFi.mode(WIFI_STA); | ||
- | // Puis on initialise | + | // Init ESP-NOW |
if (esp_now_init() != ESP_OK) { | if (esp_now_init() != ESP_OK) { | ||
- | Serial.println(" | + | Serial.println(" |
return; | return; | ||
} | } | ||
- | // Si ESP-NOW a correctement démarré, il est temps d' | + | // Once ESPNow is successfully Init, we will register for Send CB to |
- | esp_now_register_send_cb(quand_donnees_Envoyees); | + | // get the status of Trasnmitted packet |
+ | esp_now_register_send_cb(OnDataSent); | ||
| | ||
- | // Tout est prêt pour l' | + | // Register peer |
- | memcpy(infosRecepteur.peer_addr, | + | memcpy(peerInfo.peer_addr, |
+ | peerInfo.channel = 0; | ||
+ | peerInfo.encrypt = false; | ||
| | ||
- | // On définit un canal (0 utilisera automatiquement le même canal que celui utilisé par le wifi) | + | // Add peer |
- | infosRecepteur.channel = 0; | + | if (esp_now_add_peer(& |
- | + | Serial.println(" | |
- | // On ne chiffre pas les échanges | + | |
- | infosRecepteur.encrypt = false; | + | |
- | + | ||
- | // Appairage | + | |
- | if (esp_now_add_peer(& | + | |
- | Serial.println(" | + | |
return; | return; | ||
} | } | ||
Ligne 126: | Ligne 153: | ||
void loop() { | void loop() { | ||
+ | // Set values to send | ||
+ | strcpy(myData.a, | ||
+ | myData.b = random(1, | ||
+ | myData.c = 1.2; | ||
+ | myData.d = false; | ||
+ | Serial.println(myData.b); | ||
+ | Serial.println(myData.c); | ||
+ | Serial.println(myData.d); | ||
| | ||
- | // On définit la valeur de la variable à envoyer à l'aide d'un générateur aléatoire | + | // Send message |
- | maValeurEnvoyee = random(1, | + | esp_err_t |
- | + | ||
- | // On envoie le message | + | |
- | esp_err_t | + | |
- | if (resultat | + | if (result |
- | Serial.println(" | + | Serial.println(" |
} | } | ||
else { | else { | ||
- | Serial.println(" | + | Serial.println(" |
} | } | ||
+ | delay(10000);// | ||
+ | } | ||
- | // On effectue cette opération toutes les secondes | ||
- | delay(1000); | ||
} | } | ||
+ | </ | ||
- | Code du récepteur | + | ==Code du récepteur== |
Voici le code du récepteur, commenté en détail: | Voici le code du récepteur, commenté en détail: | ||
- | // Inclure les librairies | + | <code c recepteur001.ino> |
+ | |||
+ | /* | ||
+ | Rui Santos & Sara Santos - Random Nerd Tutorials | ||
+ | Complete project details at https:// | ||
+ | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. | ||
+ | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | ||
+ | */ | ||
#include < | #include < | ||
#include < | #include < | ||
- | // La variable qui sera envoyée au récepteur (nous générerons une valeur aléatoire pour l' | + | // Structure example to receive data |
- | float maValeurRecue; | + | // Must match the sender structure |
+ | typedef struct struct_message { | ||
+ | char a[32]; | ||
+ | int b; | ||
+ | | ||
+ | bool d; | ||
+ | } struct_message; | ||
- | // La fonction de rappel qui nous assurera de la bonne livraison du message | + | // Create a struct_message called myData |
- | void quand_donnees_Recues(const uint8_t * mac, const uint8_t *data_reception, int taille) { | + | struct_message myData; |
- | memcpy(& | + | |
+ | // callback function that will be executed when data is received | ||
+ | void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { | ||
+ | memcpy(& | ||
Serial.print(" | Serial.print(" | ||
- | Serial.println(taille); | + | Serial.println(len); |
- | Serial.print(" | + | Serial.print(" |
- | Serial.println(maValeurRecue); | + | Serial.println(myData.a); |
+ | Serial.print(" | ||
+ | Serial.println(myData.b); | ||
+ | Serial.print(" | ||
+ | Serial.println(myData.c); | ||
+ | Serial.print(" | ||
+ | Serial.println(myData.d); | ||
Serial.println(); | Serial.println(); | ||
} | } | ||
void setup() { | void setup() { | ||
- | // On initie la comm série à 115200 Bauds | + | // Initialize Serial Monitor |
Serial.begin(115200); | Serial.begin(115200); | ||
- | + | | |
- | // On démarre le Wifi en mode Station | + | // Set device as a Wi-Fi Station |
WiFi.mode(WIFI_STA); | WiFi.mode(WIFI_STA); | ||
- | // Puis on initialise | + | // Init ESP-NOW |
if (esp_now_init() != ESP_OK) { | if (esp_now_init() != ESP_OK) { | ||
- | Serial.println(" | + | Serial.println(" |
return; | return; | ||
} | } | ||
- | |||
- | // Si ESP-NOW a correctement démarré, il est temps d' | ||
- | esp_now_register_recv_cb(quand_donnees_Recues); | ||
| | ||
+ | // Once ESPNow is successfully Init, we will register for recv CB to | ||
+ | // get recv packer info | ||
+ | esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv)); | ||
} | } | ||
void loop() { | void loop() { | ||
- | | + | |
} | } | ||
- | Tester et aller plus loin | + | |
+ | </ | ||
+ | |||
+ | ==Tester et aller plus loin== | ||
Lorsque vous regarderez les console série des deux ESP, vous constaterez que les messages sont bien expédiés, bien reçus et leur contenu correctement interprété côté récepteur. Les différentes sources trouvées sur le net parlent d'une portée en extérieur supérieur à 200 mètres, avec les deux antennes pointant l'une vers l' | Lorsque vous regarderez les console série des deux ESP, vous constaterez que les messages sont bien expédiés, bien reçus et leur contenu correctement interprété côté récepteur. Les différentes sources trouvées sur le net parlent d'une portée en extérieur supérieur à 200 mètres, avec les deux antennes pointant l'une vers l' | ||
Ligne 193: | Ligne 252: | ||
Nous vous renvoyons aux exemples disponibles dans la bibliothèque Arduino pour aller plus loin ! | Nous vous renvoyons aux exemples disponibles dans la bibliothèque Arduino pour aller plus loin ! | ||
+ | ===== Travaux pratique Esp32 Now ==== | ||
+ | |||
+ | [[start: | ||
/home/chanteri/www/fablab37110/data/attic/start/arduino/esp32/now.1641406679.txt.gz · Dernière modification : (modification externe)