servo.ino
La bibliothèque Servo du paquet esp8266 génère l'impulsion 50 Hz par interruption : le Wi-Fi continue de tourner pendant que le servo balaie. Le vrai sujet est l'alimentation séparée, pas le code.
Matériel requis
Un module ESP-12E (ESP8266EX, Wi-Fi 2,4 GHz) monté sur une carte NodeMCU / Wemos D1 mini, alimentée par micro-USB. 1 servo SG90 + alimentation 5 V externe (2 piles AA ou régulateur dédié).
Branchement
Signal sur D1, + alimentation externe, GND relié à la carte. Un servo qui tire sur le 3,3 V/USB fait redémarrer le module en boucle.
Fonctionnement
write(angle) place l'impulsion entre 1 et 2 ms ; le port ESP8266 utilise le timer 1 par interruption, d'où la cohabitation possible avec le Wi-Fi (au prix de micro-jitters radio). Dans l'Arduino IDE, installez le paquet « esp8266 », choisissez « NodeMCU 1.0 (ESP-12E Module) » puis Téléverser (GPIO0 à LOW si le flash échoue). L'ADC A0 lit 0-1 V (diviseur NodeMCU : 0-3,3 V).
Pour aller plus loin
Piloter l'angle depuis le serveur web du sketch dédié, ou asservir sur un capteur de distance ultrasonique.
servo.ino
// Servo SG90 sur D1 (GPIO5) — bibliotheque Servo (port ESP8266).
// Alimenter le servo par une source 5 V EXTERNE, masses communes.
#include <Servo.h>
Servo servo;
int angle = 0;
int pas = 7;
void setup() {
Serial.begin(115200);
servo.attach(5); // D1
Serial.println("Balayage 0-180 (le 8266 reste dispo pour le Wi-Fi)");
}
void loop() {
angle += pas;
if (angle >= 180 || angle <= 0) pas = -pas;
servo.write(angle);
if (angle % 35 == 0) Serial.printf("%d degres\n", angle);
delay(25);
}