L’ESP8266 Arduino core est la couche logicielle qui amène l’API Arduino (setup(), loop(), digitalWrite, Serial…) sur les cartes ESP8266, avec le Wi-Fi en plus. C’est la porte unique de l’ESP8266 : on reste « en Arduino », mais il faut composer avec quelques particularités de la puce — un décalage entre les étiquettes des broches et leurs numéros GPIO, des broches de démarrage à respecter, un seul ADC, et une pile Wi-Fi qui tourne en tâche de fond qu’il ne faut pas affamer. La structuration générale du firmware relève de firmware. Pour les concepts Wi-Fi, l’ESP32 sert de référence (API quasi identique).
À quoi ça sert ?
L’Arduino-core ESP8266 permet d’écrire un objet connecté en Wi-Fi avec le vocabulaire Arduino familier :
Réutiliser ce qu’on sait — tout le vocabulaire Arduino fonctionne (pinMode, digitalWrite, analogRead, Serial, Wire, SPI…) ;
Ajouter le Wi-Fi simplement — la bibliothèque ESP8266WiFi connecte la carte à un réseau en quelques lignes ;
Au plus simple — pour un petit capteur qui publie une mesure sur le réseau, l’ESP8266 fait le travail avec une seule bibliothèque et sans radio externe.
C’est le bon (et seul) point d’entrée. Les particularités ci-dessous ne sont pas un autre environnement, mais des points de vigilance à connaître une fois.
Le même code qu’Arduino, avec des particularités
Un sketch ESP8266 a la forme d’un sketch Arduino — setup() une fois, loop() en boucle. Quatre particularités à intégrer :
Les étiquettes Dxx ≠ les numéros GPIO
Sur NodeMCU / D1 mini, la sérigraphie note les broches D0, D1, D2…, qui ne correspondent pas aux numéros GPIO. Par exemple D1 = GPIO5, D2 = GPIO4, D5 = GPIO14. Le plus sûr est d’utiliser les constantes Dxx (déjà définies par le core) plutôt que les numéros bruts :
const int RELAIS = D1; // = GPIO5, mais on raisonne avec l'étiquette de la carte
Les broches de démarrage
GPIO0, GPIO2 et GPIO15 conditionnent le mode au reset (exécution normale vs flashage). Les utiliser en sortie de manière à forcer un mauvais état au démarrage empêche la puce de booter. En pratique : éviter d’y mettre une charge qui les tire au mauvais niveau, et préférer d’autres broches pour les sorties libres. GPIO16 est particulier (pas d’interruption, et sert au réveil de deep sleep en le reliant à RST).
Un seul ADC
L’ESP8266 n’a qu’une entrée analogique (A0), sur 10 bits. Sur la puce, elle lit 0–1 V. Les cartes NodeMCU / D1 mini ajoutent un diviseur pour lire 0–3,3 V à la broche. À vérifier selon la carte avant de brancher un capteur analogique.
La pile Wi-Fi tourne en tâche de fond
Le Wi-Fi est géré en arrière-plan par la puce. Si loop() exécute un calcul long sans rendre la main, le chien de garde (watchdog) finit par redémarrer la carte. La règle : garder la boucle courte, et insérer yield() (ou un delay()) dans toute attente prolongée. C’est la contrepartie du Wi-Fi intégré. Il faut laisser respirer la pile.
Exemple — Se connecter au Wi-Fi
Ce sketch connecte la carte à un réseau Wi-Fi et affiche son adresse IP. Il illustre la porte (Arduino + ESP8266WiFi) et la bonne pratique du delay() qui laisse tourner la pile.
#include <ESP8266WiFi.h> // pile Wi-Fi de l'ESP8266const char* ssid = "MonReseau"; // nom du réseau à rejoindreconst char* motdepasse = "MonMotDePasse"; // sa clé WPAvoid setup() { Serial.begin(115200); // ouvre le moniteur série pour suivre la connexion WiFi.begin(ssid, motdepasse); // lance la connexion (elle n'est pas instantanée) Serial.print("Connexion"); while (WiFi.status() != WL_CONNECTED) { // tant que la liaison n'est pas établie delay(500); // delay() rend la main à la pile Wi-Fi (évite le watchdog) Serial.print("."); // un point par tentative, pour voir que ça avance } Serial.println(); Serial.print("Connecte. IP : "); Serial.println(WiFi.localIP()); // l'adresse attribuée par la box}void loop() { // boucle courte : laisser la pile Wi-Fi respirer}
Au moniteur série, on voit la connexion progresser, puis l’adresse IP attribuée à la carte. À partir de là, le code est identique à celui d’un ESP32 : l’API ESP8266WiFi reflète celle de l’ESP32. Pour les concepts (mode station vs point d’accès, reconnexion, client/serveur), voir le Wi-Fi de l’ESP32.
La sortie du moniteur raconte la connexion :
Connexion.....
Connecte. IP : 192.168.X.X
Chaque point est un tour de la boucle d’attente, donc une demi-seconde : leur nombre mesure le temps qu’a pris l’association au réseau. L’adresse, elle, est attribuée par la box. Celle de votre carte sera différente, et c’est elle qu’il faudra taper dans le navigateur pour joindre la carte.
Pièges
Confondre Dxx et GPIO. D1 n’est pas GPIO1. Utiliser les constantes Dxx, ou connaître le décalage de la carte.
Bloquer une broche de boot. GPIO0/2/15 en sortie au mauvais niveau au reset → pas de démarrage. Réserver d’autres broches pour les sorties libres.
Mésestimer l’ADC. Une seule entrée A0, 0–1 V sur la puce (0–3,3 V sur carte via diviseur), 10 bits. Vérifier la carte.
Affamer la pile Wi-Fi. Un calcul long sans yield()/delay() déclenche le watchdog et redémarre la carte. Garder loop() courte.
Appliquer 5 V. L’ESP8266 n’est pas tolérant 5 V : adapter le niveau des signaux entrants.
Croire au Bluetooth. L’ESP8266 n’a pas de Bluetooth. Si le projet en a besoin, c’est l’ESP32.
Exercices
Exercice 1 — La bonne broche
Faites clignoter une LED externe câblée sur D6. Quel GPIO est-ce réellement, et pourquoi vaut-il mieux écrire D6 que le numéro ?
Le montage est celui de la prise en main — résistance en série puis anode de la LED, cathode à GND — sur D6 au lieu de D5.
Corrigé
const int LED = D6; // D6 = GPIO12 sur NodeMCUvoid setup() { pinMode(LED, OUTPUT); }void loop() { digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW); delay(500);}
D6 = GPIO12. Écrire D6 (la constante du core) plutôt que 12 évite l’erreur classique « D6 = GPIO6 » : les étiquettes de la carte et les numéros GPIO ne coïncident pas.
Exercice 2 — Connexion + qualité du signal
Connectez la carte au Wi-Fi, puis affichez l’adresse IP et la puissance du signal reçu (RSSI, en dBm). Indice : WiFi.RSSI().
Le RSSI (typiquement entre −30 dBm tout près du routeur et −90 dBm en limite de portée) donne une idée de la qualité de la liaison, utile pour diagnostiquer des déconnexions. L’API est la même que sur ESP32.
Cas particulier — au-delà du premier Wi-Fi
Serveur / client HTTP, MQTT — l’ESP8266 héberge un petit serveur web ou publie en MQTT comme l’ESP32. Les bibliothèques et la démarche sont communes (voir Wi-Fi ESP32).
Deep sleep — ESP.deepSleep(µs) met la puce en veille profonde. Le réveil passe par un reset, ce qui impose de relier GPIO16 à RST. Principe proche de l’deep sleep ESP32.
Raccrochage projet
Étape 4 de la phase de preuve de concept — l’Arduino-core ESP8266 est l’environnement de la PoC d’un objet connecté Wi-Fi bâti sur une carte déjà disponible : on valide tôt la connexion réseau et la lecture capteur, en gardant à l’esprit les contraintes de broches.
Choix de cible — si la PoC révèle un besoin de Bluetooth, de plus de broches ou de puissance, c’est le signal de migrer vers l’ESP32. Le code Wi-Fi se reporte presque tel quel.
Connaître les quatre particularités (étiquettes, broches de boot, ADC unique, pile Wi-Fi à ménager) suffit à exploiter l’ESP8266 sereinement : le reste est de l’Arduino, et le Wi-Fi est celui de l’ESP32.