Outils pour utilisateurs

Outils du site


start:arduino:esp32:now

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:arduino:esp32:now [2022/01/05 19:27] – [Tester et aller plus loin] gerardadminstart:arduino:esp32:now [2024/11/06 21:08] (Version actuelle) – [Tester et aller plus loin] gerardadmin
Ligne 17: Ligne 17:
 La première étape va consister à noter les adresses MAC de chaque appareil que nous voulons faire communiquer. Pour mémoire, l'adresse MAC (Media Access Control) est un identifiant unique matériel qui identifie chaque appareil sur un réseau. Chaque ESP32 possède, en sortie d'usine, une adresse MAC différente, composée de 6 octets. Il est possible de changer de manière logicielle l'adresse MAC de l'ESP, mais cela ne survit pas à un reboot, il faut donc l'inclure dans le code exécuté à chaque fois (tuto ici). La première étape va consister à noter les adresses MAC de chaque appareil que nous voulons faire communiquer. Pour mémoire, l'adresse MAC (Media Access Control) est un identifiant unique matériel qui identifie chaque appareil sur un réseau. Chaque ESP32 possède, en sortie d'usine, une adresse MAC différente, composée de 6 octets. Il est possible de changer de manière logicielle l'adresse MAC de l'ESP, mais cela ne survit pas à un reboot, il faut donc l'inclure dans le code exécuté à chaque fois (tuto ici).
  
-Téléverser le code suivant dans chaque ESP, et noter soigneusement le résultat qui va s'afficher dans la console.+Téléverser le code suivant dans chaque ESP, et **noter soigneusement le résultat qui va s'afficher dans la console.** 
 + 
 +<code c exemple001b.ino> 
 +/* 
 +  Rui Santos & Sara Santos - Random Nerd Tutorials 
 +  Complete project details at https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/ 
 +  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 <WiFi.h> 
 +#include <esp_wifi.h> 
 + 
 +void readMacAddress(){ 
 +  uint8_t baseMac[6]; 
 +  esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac); 
 +  if (ret == ESP_OK) { 
 +    Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n", 
 +                  baseMac[0], baseMac[1], baseMac[2], 
 +                  baseMac[3], baseMac[4], baseMac[5]); 
 +  } else { 
 +    Serial.println("Failed to read MAC address"); 
 +  } 
 +}
  
-<code c exempl001.ino> 
-#include "WiFi.h" 
-  
 void setup(){ void setup(){
   Serial.begin(115200);   Serial.begin(115200);
-  WiFi.mode(WIFI_MODE_STA); + 
-  Serial.println(WiFi.macAddress());+  WiFi.mode(WIFI_STA); 
 +  WiFi.STA.begin(); 
 + 
 +  Serial.print("[DEFAULT] ESP32 Board MAC Address: ")
 +  readMacAddress();
 } }
    
Ligne 32: Ligne 55:
 } }
 </code> </code>
 +
  
 Cette étape manuelle permettra d'appairer facilement chaque module. Néanmoins, il est à noter qu'une méthode très astucieuse permet de se passer de cette manip préalable, et de connecter de manière automatique chaque module. Néanmoins, elle est un peu plus complexe.  Cette étape manuelle permettra d'appairer facilement chaque module. Néanmoins, il est à noter qu'une méthode très astucieuse permet de se passer de cette manip préalable, et de connecter de manière automatique chaque module. Néanmoins, elle est un peu plus complexe. 
Ligne 66: Ligne 90:
 Ci-dessous, le code commenté: Ci-dessous, le code commenté:
  
-<code c > +<code c emetteur001.ino
-// Référence technique: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_now.html +/
- +  Rui Santos & Sara Santos - Random Nerd Tutorials 
- +  Complete project details at https://RandomNerdTutorials.com/esp-now-esp32-arduino-ide/ 
-/Inclure les librairies+  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 <esp_now.h> #include <esp_now.h>
 #include <WiFi.h> #include <WiFi.h>
  
-// Stockage de l'adresse MAC du récepteur pour usage ultérieur. Remplacer les 'FF' par les valeur notées plus avant. +// REPLACE WITH YOUR RECEIVER MAC Address 
-uint8_t MAC_recepteur[] = {0xFF0xFF0xFF0xFF0xFF0xFF};+uint8_t broadcastAddress[] = {0x580xbf0x250x140x240x34};
  
-// La variable qui sera envoyée au récepteur (nous générerons une valeur aléatoire pour l'exemple)+// Structure example to send data 
 +// Must match the receiver structure 
 +typedef struct struct_message { 
 +  char a[32]; 
 +  int b; 
 +  float c; 
 +  bool d; 
 +} struct_message;
  
-float maValeurEnvoyee;+// Create a struct_message called myData 
 +struct_message myData;
  
-// La fonction de rappel qui nous assurera de la bonne livraison du message +esp_now_peer_info_t peerInfo; 
-void quand_donnees_Envoyees(const uint8_t *mac_addr, esp_now_send_status_t status) { + 
-  Serial.print("\r\nDernier paquet envoyé:\t"); +// callback when data is sent 
-  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Succès" : "Échec");+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 ? "Delivery Success" : "Delivery Fail");
 } }
- 
-// Une variable qui servira à stocker les réglages concernant le récepteur 
-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 ESP-NOW+  // Init ESP-NOW
   if (esp_now_init() != ESP_OK) {   if (esp_now_init() != ESP_OK) {
-    Serial.println("Erreur d'initialisation ESP-NOW");+    Serial.println("Error initializing ESP-NOW");
     return;     return;
   }   }
  
-  // Si ESP-NOW a correctement démarréil est temps d'enregistrer la fonction de rappel: +  // Once ESPNow is successfully Initwe 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'appairage avec notre récepteur: +  // Register peer 
-  memcpy(infosRecepteur.peer_addr, MAC_recepteur, 6);+  memcpy(peerInfo.peer_addr, broadcastAddress, 6)
 +  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(&peerInfo) != ESP_OK){ 
- +    Serial.println("Failed to add peer");
-  // On ne chiffre pas les échanges +
-  infosRecepteur.encrypt = false; +
-   +
-  // Appairage         +
-  if (esp_now_add_peer(&infosRecepteur) != ESP_OK){ +
-    Serial.println("Échec de l'appairage");+
     return;     return;
   }   }
Ligne 124: Ligne 153:
    
 void loop() { void loop() {
 +  // Set values to send
 +  strcpy(myData.a, "THIS IS A CHAR");
 +  myData.b = random(1,20);
 +  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 via ESP-NOW 
-  maValeurEnvoyee = random(1,20); +  esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
-   +
-  // On envoie le message +
-  esp_err_t resultat = esp_now_send(MAC_recepteur, (uint8_t *) &maValeurEnvoyee, sizeof(maValeurEnvoyee));+
        
-  if (resultat == ESP_OK) { +  if (result == ESP_OK) { 
-    Serial.println("Envoi OK");+    Serial.println("Sent with success");
   }   }
   else {   else {
-    Serial.println("Erreur envoi");+    Serial.println("Error sending the data");
   }   }
 +  delay(10000);// envoie des données toutes les 10 secondes
 +}
  
-  // On effectue cette opération toutes les secondes 
-  delay(1000); 
 } }
 </code> </code>
Ligne 147: Ligne 181:
 Voici le code du récepteur, commenté en détail: Voici le code du récepteur, commenté en détail:
  
-<code c>+<code c recepteur001.ino> 
 + 
 +/* 
 +  Rui Santos & Sara Santos - Random Nerd Tutorials 
 +  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. 
 +*/
  
-// Inclure les librairies 
 #include <esp_now.h> #include <esp_now.h>
 #include <WiFi.h> #include <WiFi.h>
  
-// La variable qui sera envoyée au récepteur (nous générerons une valeur aléatoire pour l'exemple) +// Structure example to receive data 
-float maValeurRecue;+// 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;
  
-// La fonction de rappel qui nous assurera de la bonne livraison du message +// callback function that will be executed when data is received 
-void quand_donnees_Recues(const uint8_t * mac, const uint8_t *data_reception, int taille) { +void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { 
-  memcpy(&maValeurRecuedata_reception, sizeof(maValeurRecue));+  memcpy(&myDataincomingData, sizeof(myData));
   Serial.print("Bytes received: ");   Serial.print("Bytes received: ");
-  Serial.println(taille); +  Serial.println(len); 
-  Serial.print("valeur reçue: "); +  Serial.print("Char: "); 
-  Serial.println(maValeurRecue);+  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();   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 ESP-NOW+  // Init ESP-NOW
   if (esp_now_init() != ESP_OK) {   if (esp_now_init() != ESP_OK) {
-    Serial.println("Erreur d'initialisation ESP-NOW");+    Serial.println("Error initializing ESP-NOW");
     return;     return;
   }   }
- 
-  // Si ESP-NOW a correctement démarré, il est temps d'enregistrer la fonction de rappel: 
-  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() {
-  +
 } }
 +
  
 </code> </code>
Ligne 196: 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 !
  
-[[https://wiki-fablab.grandbesancon.fr/lib/exe/fetch.php?media=howto:arduino-esp:esp-now_programmes.zip|arduino-esp:esp-now_programmes.zip]]+===== Travaux pratique Esp32 Now ====
  
 +[[start:arduino:esp32:TP:now|Travaux pratique Esp32 Now]]
  
/home/chanteri/www/fablab37110/data/attic/start/arduino/esp32/now.1641407271.txt.gz · Dernière modification : (modification externe)