Bonjour,
Je me suis procuré un petit module composé d'un capteur de température-humidité et d'un ESP8266 : https://fr.aliexpress.com/item/1005005698085258.html?gatewayAdapt=glo2fra
[https://www.aliexpress.com/item/1005005698085258.html?spm=a2g0o.order_list.order_list_main.4.21ef5e5brKbwj8]
Mon but final est de transmettre les données vers un Arduino via WIFI.
Je trouve des infos pour que l' ESP-01serve d'antenne à un UNO par exemple et des infos pour brancher un DHT22 à un Arduino mais rien pour que DHT22+ESP-01 envoient des données de façon autonome.
Mon PC détecte bien le module en WIFI quand je l'alimente, mais je ne vois pas ce que je peux en faire.
Si quelqu'un peut me mettre sur les rails ...
Merci
Vous avez un DHT22 et un ESP-01S
Vous pouvez programmer votre ESP depuis l’IDE
Premier lien Google Comment programmer un ESP01 avec Arduino - Idehack
Malheureusement transmettre des données par WIFI ne veut pas dire grand chose, ou en faite il y a plusieurs solution.
J'ai l'impression que tu n'a pas encore définit comment tu aller recevoir l'information.
Pour te répondre correctement, il faudrait que tu nous en dit plus sur ce que tu veux faire exactement.
Bonjour, merci de vous intéresser à mon projet.
Je vais voir si j'ai le matériel pour raccorder mon ESP-01 avec la solution proposée par J-M-L. Sinon j'ai aussi trouvé ça : Programmer ESP8266 en WIFI.
terwal, je voudrais utiliser mon module comme une sonde déportée de température/humidité qui me permettrait de la consulter via le Web (comme un serveur) et/ou renvoyer ses mesures vers un Arduino qui gèrerait du chauffage ou de la ventilation.
Je pense que la première partie de la solution se trouve là : ESP8266 WebServeur
En choisissant un ESP-01 vous ne vous êtes pas simplifié la vie… pas simple à connecter à votre PC (faut un adaptateur usb - série en plus) et composant très limite en capacités.
Personnellement je n’en utilise plus. Il y a d’autres ESP qui rendent la vie bcp plus simple !
Bon, j'ai regardé dans mon fourbi, l'adaptateur auquel je pensais est un ST-Link V2 fait pour du STM8 ou 32. Donc pas bon pour mon ESP ...
Du coup, quitte à racheter quelque chose, quel composant satisferait mon objectif, de façon plus simple ?
Est-ce que la consommation du système est un point critique pour cette future sonde ? (Sera-t-elle alimentée par un transfo ou elle fonctionnera sur batterie ?)
Perso dans la gamme des ESP je prends des ESP32
Pour la sonde et sa radio de préférence 1an d'autonomie dans une boite de dérivation 10x10 max, mais j'ai la possibilité du transfo si la solution autonome n'est pas réaliste.
L'ESP-01 avait l'avantage de se fixer directement sur la mini carte du DHT22 ...
L'ESP32 se connecte directement en USB sans adaptateur, c'est évidemment un plus !
Celle-ci est "Low Power" : ESP32 low power
cette carte est pas mal apparement. il faut effectivement en prendre une conçue pour le low power
il existe d'autres cartes comme la bee-s3 ou la firebeetle mais il faut se méfier des annonces spectaculaires sur la consommation et mesurer par soi même
il y a cet article sur un test en situation réelle
# Resultats
Le tableau suivant présente les résultats par ordre croissant de puissance consommée :
Carte Courant @5V Puissance ESP32 FireBeetle DFR0478 10 µA 0.052 mW ESP32 FireBeetle DFR0654 (Low Power Mode) 11.6 µA 0.058 mW ESP32 AZ-Delivery LOLIN32 12 µA 0.06 mW ESP32 FireBeetle DFR0654 520 µA 2.7 mW ESP32-DevKitC V4 3.8 mA 19 mW ESP32 Thing Plus 4.1 mA 20.5 mW
la taille de la batterie et le nombre de réveils sera bien sûr un élément clé de la durée de vie
Il faut aussi biens sûr pouvoir couper l'alimentation du capteur DHT22 dans votre design
Merci, c'est très intéressant ! C'est stupéfiant l'étendue de l'offre de nos jours.
Je vais choisir le coup de pouce à une équipe française (uPesy) pour aller vers notre indépendance technologique ![]()
oui enfin c'est quand même un ESP32 chinois qu'ils mettent dedans ![]()
Un premier pas ... ![]()
Je reviendrai après réception de l'ESP32 ![]()
Tu peux le programmer avec ton Arduino, un lien sur un article qui pourrait t'aider.
Alors oui et non, si tu veux que ton montage soit autonome sur batterie, tu ne pourra pas hébergé le site WEB sur ton ESP8266.
De plus tu semble dire que c'est ta sonde qui envois les données à ton Arduino.
Tu as deux ESP-01 et tu compte en mettre un sur ton Arduino pour communiquer avec ta sonde.
En faite c'était ma question, comment tu compte ajouter le WIFI sur ton Arduino ?
Sinon si tu as bien un ESP8266 sur ton Arduino, tu peux utiliser cette exemple pour ESP8266.
Bonsoir,
J'ai reçu mon ESP32 et j'essaie de faire communiquer l'ESP-01 (ESP8266 sur laquelle sera branché le DHT22) avec l'ESP32 qui recevra les données via "ESP-NOW". Mais pour le moment mon code bloque.
#include <ESP8266WiFi.h>
#include <espnow.h>
#include <DHT.h>
#include <ESP8266WiFiMulti.h>
// Paramètres Wi-Fi (non utilisés)
const char* ssid = "NomDeVotreWiFi";
const char* password = "MotDePasseWiFi";
// Paramètres du capteur DHT22
#define DHTPIN 4 // Broche de connexion du DHT22 (GPIO4, équivalent à D2)
DHT dht(DHTPIN, DHT22);
// Structure pour stocker les données à envoyer
struct SensorData {
float temperature;
float humidity;
};
// Déclaration de esp_now_peer_info_t
esp_now_peer_info_t peerInfo;
// Adresse MAC du récepteur (à personnaliser)
uint8_t MAC_ADDRESS_DU_RECEPTEUR[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Remplacez par l'adresse MAC de l'ESP32 récepteur
// Fonction de réception des données (non utilisée dans l'émetteur)
void onDataSent(uint8_t* mac, uint8_t sendStatus) {
// Gérer la confirmation d'envoi (si nécessaire)
}
void setup() {
Serial.begin(115200);
// Initialisez le capteur DHT
dht.begin();
// Initialisez ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Configurez le pair ESP-NOW
memset(&peerInfo, 0, sizeof(peerInfo));
memcpy(peerInfo.peer_addr, MAC_ADDRESS_DU_RECEPTEUR, 6);
peerInfo.channel = 0; // Utilisez un canal différent si nécessaire
peerInfo.encrypt = false;
// Ajoutez le pair
if (esp_now_add_peer(&peerInfo) != 0) {
Serial.println("Failed to add peer");
return;
}
// Enregistrez la fonction de réception des données
esp_now_register_send_cb(onDataSent);
}
void loop() {
// Lecture des données du capteur
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (!isnan(temperature) && !isnan(humidity)) {
// Créez une structure pour stocker les données
SensorData data;
data.temperature = temperature;
data.humidity = humidity;
// Envoi des données via ESP-NOW
esp_now_send(peerInfo.peer_addr, (uint8_t*)&data, sizeof(data));
Serial.println("Données envoyées via ESP-NOW");
}
delay(10000); // Attendez 10 secondes entre les envois
}
C:\Arduino\libraries\ESP8266-DHT22-emetteur\ESP8266-DHT22-emetteur.ino:23:1: error: 'esp_now_peer_info_t' does not name a type; did you mean 'esp_now_deinit'?
23 | esp_now_peer_info_t peerInfo;
| ^~~~~~~~~~~~~~~~~~~
| esp_now_deinit
C:\Arduino\libraries\ESP8266-DHT22-emetteur\ESP8266-DHT22-emetteur.ino: In function 'void setup()':
C:\Arduino\libraries\ESP8266-DHT22-emetteur\ESP8266-DHT22-emetteur.ino:46:11: error: 'peerInfo' was not declared in this scope
46 | memset(&peerInfo, 0, sizeof(peerInfo));
| ^~~~~~~~
C:\Arduino\libraries\ESP8266-DHT22-emetteur\ESP8266-DHT22-emetteur.ino: In function 'void loop()':
C:\Arduino\libraries\ESP8266-DHT22-emetteur\ESP8266-DHT22-emetteur.ino:73:18: error: 'peerInfo' was not declared in this scope
73 | esp_now_send(peerInfo.peer_addr, (uint8_t*)&data, sizeof(data));
| ^~~~~~~~
Plusieurs bibliothèque trouvées pour "DHT.h"
Utilisé: C:\Arduino\libraries\libraries\DHT_sensor_library
Non utilisé: C:\Arduino\libraries\libraries\dht11esp8266examples
Non utilisé: C:\Arduino\libraries\libraries\dht11esp8266
exit status 1
Compilation error: 'esp_now_peer_info_t' does not name a type; did you mean 'esp_now_deinit'?
Ce n’est pas plutôt
#include <esp_now.h>
(De mémoire, je ne suis plus sûr - c’est peut-être pour l’esp32)
D'après ce que j'ai pu trouver sur la toile, c'est bien espnow.h pour le 8266
Effectivement j’ai vu cela aussi
Testez le code de ce tuto
Merci pour cette info.
J'ai modifié mon code sur le 8266 il compile sans erreur.
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <espnow.h>
#include <DHT.h> // Inclure la bibliothèque DHT
// Mac address de l'ESP32 récepteur
uint8_t esp32Mac[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB}; // Remplacez par la MAC de l'ESP32
// Mac address de l'ESP8266
uint8_t esp8266Mac[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
typedef struct message {
float temperature; // Ajoutez la mesure de température
float humidity; // Ajoutez la mesure d'humidité
};
struct message myMessage;
// Créez une instance du capteur DHT en spécifiant la broche (numéro de broche) et le type (DHT22)
DHT dht(4, DHT22); // Exemple : Utilisez la broche 4 pour le DHT22
void onSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.println("Status:");
Serial.println(sendStatus);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Initialisation de la bibliothèque DHT
dht.begin();
}
void loop() {
// Lire les données du capteur DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
myMessage.temperature = temperature;
myMessage.humidity = humidity;
Serial.println("Send a new message");
esp_now_send(NULL, (uint8_t *) &myMessage, sizeof(myMessage));
delay(60000);
}
Je vais m'attaquer au côté récepteur ESP32
OK le tuto montre comment faire cela aussi
C'est bon, l'ESP8266 envoie bien la température et l'humidité et l'ESP32 les récupère pour les afficher sur le moniteur du PC. Je vais pouvoir avancer vers le pilotage de mon accumulateur (radiateur).
Code du récepteur:
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
typedef struct message {
float temperature;
float humidity;
};
struct message myMessage;
void onDataReceiver(const uint8_t * mac, const uint8_t *incomingData, int len) {
Serial.println("Réception des données");
// We don't use mac to verify the sender
// Let us transform the incomingData into our message structure
memcpy(&myMessage, incomingData, sizeof(myMessage));
//Serial.println("=== Data ===");
//Serial.print("Mac address: ");
for (int i = 0; i < 6; i++) {
//Serial.print("0x");
//Serial.print(mac[i], HEX);
//Serial.print(":");
}
Serial.print("\n\nTemperature: ");
Serial.println(myMessage.temperature);
Serial.print("\nHumidity: ");
Serial.println(myMessage.humidity);
Serial.println();
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Get Mac Add
//Serial.print("Mac Address: ");
Serial.print(WiFi.macAddress());
Serial.println("ESP32 ESP-Now Broadcast");
// Initializing the ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Problem during ESP-NOW init");
return;
}
esp_now_register_recv_cb(onDataReceiver);
}
void loop() {
// put your main code here, to run repeatedly:
}
Code du 8266:
/**
* ESP-NOW
*
* Sender
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <espnow.h>
#include <SPI.h>
#include <Wire.h>
#include <DHT.h>
#define DHTTYPE DHT22
#define DHTPin 2
uint8_t peer1[] = {0x, 0x, 0x, 0x, 0x, 0x};// MAC du récepteur
typedef struct message {
float temperature;
float humidity;
};
struct message myMessage;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);
void onSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.println("Status:");
Serial.println(sendStatus);
}
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.mode(WIFI_STA);
// Get Mac Add
//Serial.print("Mac Address: ");
Serial.print(WiFi.macAddress());
Serial.println("ESP-Now Sender");
// Initializing the ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Problem during ESP-NOW init");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
// Register the peer
Serial.println("Registering a peer");
esp_now_add_peer(peer1, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
Serial.println("Registering send callback function");
esp_now_register_send_cb(onSent);
}
void loop() {
myMessage.temperature = dht.readTemperature();
myMessage.humidity = dht.readHumidity();
Serial.println("Send a new message");
esp_now_send(NULL, (uint8_t *) &myMessage, sizeof(myMessage));
delay(1000);
}
J'essaie d'ajouter un accès Web à l'ESP32 pour pouvoir lire les données à distance, mais pour le moment quand j'accède à l'adresse IP les valeurs sont figées à 0° et 0%