Ce code reçoit les données de température des deux ESP32 précédents et les affiche via la console série.
# include# include typedef struct struct_message { float temp; } struct_message; struct_message incomingReadings; void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&incomingReadings, incomingData, sizeof(incomingReadings)); Serial.print("Temperature Received: "); Serial.println(incomingReadings.temp); } void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); Serial.println(WiFi.macAddress()); if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } esp_now_register_recv_cb(OnDataRecv); } void loop() { // Boucle vide, les données sont reçues via le callback OnDataRecv }
Domotique – informatique – électronique – dictionnaire – projets
Copyright 2024
ESP-NOW est un protocole de communication sans fil développé par Espressif Systems, l’entreprise derrière les microcontrôleurs ESP8266 et ESP32. Ce protocole permet une communication rapide, de faible puissance et sans connexion entre les appareils ESP, sans avoir besoin d’un point d’accès Wi-Fi. Voici une explication détaillée de ce protocole et de ses caractéristiques principales : envoyer des messages à tout moment.
Voici un aperçu de leur fonctionnement :
ESP-NOW est un protocole de communication efficace et performant pour des applications nécessitant une communication rapide, fiable et à faible consommation d’énergie entre les appareils ESP. Sa simplicité de mise en œuvre et ses faibles exigences en matière d’infrastructure en font une solution idéale pour de nombreux projets IoT (Internet of Things).
Pour illustrer comment utiliser ESP-NOW pour lire les températures extérieure et intérieure à partir de deux ESP32 (un pour chaque température) et envoyer ces données à un troisième ESP32 pour les afficher, voici un exemple pratique.
Trois ESP32
Deux capteurs de température (par exemple, DHT22 ou DS18B20)
Câbles de connexion
Configuration des ESP32
Capteur extérieur (ESP32 #1)
Capteur intérieur (ESP32 #2)
Récepteur et affichage (ESP32 #3)
# include# include # include #define DHTPIN 4 // Pin où le capteur DHT est connecté #define DHTTYPE DHT22 // Type de capteur DHT DHT dht(DHTPIN, DHTTYPE); typedef struct struct_message { float temp; } struct_message; struct_message myData; // Adresse MAC du récepteur uint8_t broadcastAddress[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC}; 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"); } void setup() { Serial.begin(115200); dht.begin(); WiFi.mode(WIFI_STA); Serial.println(WiFi.macAddress()); if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } esp_now_register_send_cb(OnDataSent); esp_now_peer_info_t peerInfo; 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() { myData.temp = dht.readTemperature(); esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (result == ESP_OK) { Serial.println("Sent with success"); } else { Serial.println("Error sending the data"); } delay(2000); }
Le code pour le capteur intérieur est presque identique à celui du capteur extérieur, avec une différence dans l’adresse MAC.
# include# include # include #define DHTPIN 4 // Pin où le capteur DHT est connecté #define DHTTYPE DHT22 // Type de capteur DHT DHT dht(DHTPIN, DHTTYPE); typedef struct struct_message { float temp; } struct_message; struct_message myData; // Adresse MAC du récepteur uint8_t broadcastAddress[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC}; 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"); } void setup() { Serial.begin(115200); dht.begin(); WiFi.mode(WIFI_STA); Serial.println(WiFi.macAddress()); if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } esp_now_register_send_cb(OnDataSent); esp_now_peer_info_t peerInfo; 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() { myData.temp = dht.readTemperature(); esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (result == ESP_OK) { Serial.println("Sent with success"); } else { Serial.println("Error sending the data"); } delay(2000); }
Ce code reçoit les données de température des deux ESP32 précédents et les affiche via la console série.
# include# include typedef struct struct_message { float temp; } struct_message; struct_message incomingReadings; void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&incomingReadings, incomingData, sizeof(incomingReadings)); Serial.print("Temperature Received: "); Serial.println(incomingReadings.temp); } void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); Serial.println(WiFi.macAddress()); if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } esp_now_register_recv_cb(OnDataRecv); } void loop() { // Boucle vide, les données sont reçues via le callback OnDataRecv }
Domotique – informatique – électronique – dictionnaire – projets
Copyright 2024