Station météo IoT temps réel – Arduino, ESP8266, DHT11 & ThingSpeak
Matériel
| Arduino Uno | 1 |
| Module ESP8266 ESP-01 (WiFi) | 1 |
| Capteur DHT11 température/humidité (3 broches) | 1 |
| Plaque d'essai + alimentation 5V/3,3V (module breadboard) | 1 |
| Fils de liaison | 1 lot |
Câblage
ESP-01 (attention : 3,3V uniquement !)
- VCC → 3,3V (alim breadboard, jumper sur 3,3V)
- GND → GND
- CH_PD → 3,3V (enable)
- RST → 3,3V
- TX → Pin 2 Arduino (SoftwareSerial RX)
- RX → Pin 3 Arduino (SoftwareSerial TX) via diviseur de tension 3,3V/5V recommandé
DHT11
- VCC → 5V
- DATA → A0
- GND → GND
Important : L'ESP8266 a des pics de courant > 300 mA. L'alim 3,3V de l'Arduino est insuffisante. Utilisez impérativement un module d'alimentation breadboard 5V/3,3V externe.
Configuration ThingSpeak
- Créez un compte sur ThingSpeak.
- New Channel → 2 champs : Field 1 = Temperature, Field 2 = Humidity.
- Notez la Write API Key (onglet API Keys).
Bibliothèques Arduino requises
Adafruit Unified Sensor: GitHubDHT sensor library: GitHub- Installation : Croquis → Inclure une bibliothèque → Ajouter la bibliothèque .ZIP
Sketch complet
String myAPIkey = "VOTRE_WRITE_API_KEY_ICI";
#include <SoftwareSerial.h>
#include <DHT.h>
SoftwareSerial ESP8266(2, 3); // RX, TX
#define DHTTYPE DHT11
#define DHTPIN A0
DHT dht(DHTPIN, DHTTYPE, 11); // 3e param = timing pour CPU 16MHz
float humidity, temp_f;
long writingTimer = 17; // intervalle en secondes (min 15s pour ThingSpeak gratuit)
long startTime = 0;
unsigned char check_connection = 0;
unsigned char times_check = 0;
void setup() {
Serial.begin(9600);
ESP8266.begin(9600);
dht.begin();
startTime = millis();
ESP8266.println("AT+RST");
delay(2000);
Serial.println("Connexion WiFi...");
while (check_connection == 0) {
Serial.print(".");
ESP8266.print("AT+CWJAP=\"VOTRE_SSID\",\"VOTRE_MOT_DE_PASSE\"\r\n");
ESP8266.setTimeout(5000);
if (ESP8266.find("WIFI CONNECTED\r\n") == 1) {
Serial.println("WIFI CONNECTED");
break;
}
times_check++;
if (times_check > 3) {
times_check = 0;
Serial.println("Reconnexion...");
}
}
}
void loop() {
long waitTime = millis() - startTime;
if (waitTime > (writingTimer * 1000)) {
readSensors();
writeThingSpeak();
startTime = millis();
}
}
void readSensors() {
temp_f = dht.readTemperature(); // °C
humidity = dht.readHumidity(); // %
}
void writeThingSpeak() {
startThingSpeakCmd();
String getStr = "GET /update?api_key=";
getStr += myAPIkey;
getStr += "&field1=" + String(temp_f);
getStr += "&field2=" + String(humidity);
getStr += "\r\n\r\n";
GetThingspeakcmd(getStr);
}
void startThingSpeakCmd() {
ESP8266.flush();
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "184.106.153.149"; // IP api.thingspeak.com
cmd += "\",80";
ESP8266.println(cmd);
Serial.print("Start: "); Serial.println(cmd);
if (ESP8266.find("Error")) {
Serial.println("AT+CIPSTART error");
return;
}
}
String GetThingspeakcmd(String getStr) {
String cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
ESP8266.println(cmd);
Serial.println(cmd);
if (ESP8266.find(">")) {
ESP8266.print(getStr);
Serial.println(getStr);
delay(500);
String messageBody = "";
while (ESP8266.available()) {
String line = ESP8266.readStringUntil('\n');
if (line.length() == 1) {
messageBody = ESP8266.readStringUntil('\n');
}
}
Serial.print("Response: "); Serial.println(messageBody);
return messageBody;
} else {
ESP8266.println("AT+CIPCLOSE");
Serial.println("AT+CIPCLOSE");
}
return "";
}
Résultat sur ThingSpeak
Graphiques température/humidité mis à jour toutes les 15–17 secondes. Visualisation publique ou privée, alertes configurables (ex. email si T > 30°C).
Dépannage courant
- Échec connexion WiFi : Vérifiez SSID/mot de passe (pas d'espaces), rapprochez l'ESP, vérifiez l'alim 3,3V stable.
- NaN sur capteur : Câblage DHT, résistance pull-up 4,7k sur DATA (souvent intégrée sur module 3 broches).
- Erreur AT+CIPSTART : IP ThingSpeak changée ? Faites un
nslookup api.thingspeak.comet mettez à jour.
Évolutions
- Remplacer ESP-01 par ESP-12E/NodeMCU (plus stable, plus de GPIO).
- Ajouter capteur pression BMP280, qualité air MQ135.
- Passer en deep-sleep ESP + alimentation batterie pour autonomie longue durée.
- Utiliser MQTT + propre serveur (Home Assistant, InfluxDB/Grafana).
Processus de fabrication
- Construction d'une station météo extérieure avec Raspberry Pi 2 et ADS‑WS1
- Construire une station météo Raspberry Pi qui envoie les données météo quotidiennes par email
- Station météo avancée v2.0 : Surveillance en temps réel de température, pression, humidité et altitude
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- Station Météo Arduino Portable à 10$ – Nano, DHT22, BMP180 et LCD