respiration.ino
L'ESP8266 n'a qu'un seul canal PWM matériel, mais analogWrite() le rout vers n'importe quelle broche à ~44 kHz. Le sketch ajuste fréquence et plage, et inverse le rapport cyclique pour la LED actif-bas.
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 LED + résistance 330 Ω (ou la LED embarquée).
Branchement
LED sur D4 via 330 Ω vers 3,3 V (actif-bas) ou vers GND avec un petit transistor. Une seule broche PWM à la fois sur le 8266.
Fonctionnement
analogWriteFreq/analogWriteRange reprogramment le PWM global ; la boucle rampe le rapport cyclique 0-255. L'inversion 255-niveau compense l'électronique de la LED embarquée. 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
Pilotez un petit MOSFET pour faire varier la luminosité d'une lampe, ou synchronisez deux NodeMCU par radio.
respiration.ino
// Respiration LED — analogWrite() de l'ESP8266 (PWM 1 canal, ~44 kHz).
const int LED = 2; // D4 (actif-bas : duty inverse)
int niveau = 0;
int sens = 3;
void setup() {
pinMode(LED, OUTPUT);
analogWriteFreq(1000); // 1 kHz : evite le scintillement
analogWriteRange(255);
Serial.begin(115200);
}
void loop() {
niveau += sens;
if (niveau >= 255 || niveau <= 0) sens = -sens;
analogWrite(LED, 255 - niveau); // inversion actif-bas
delay(10);
}