respiration.ino
El ESP8266 tiene un solo canal PWM por hardware, pero analogWrite() lo enruta a cualquier pin a ~44 kHz. El sketch reajusta frecuencia y rango e invierte el ciclo para el LED activo-bajo.
Hardware necesario
Un módulo ESP-12E (ESP8266EX, Wi-Fi 2,4 GHz) montado en una placa NodeMCU / Wemos D1 mini, alimentada por micro-USB. 1 LED + resistencia de 330 Ω (o el LED integrado).
Cableado
LED en D4 por 330 Ω a 3,3 V (activo-bajo) o a GND con un transistor pequeño. Solo un pin PWM a la vez en el 8266.
Funcionamiento
analogWriteFreq/analogWriteRange reprograman el PWM global; el bucle rampa el ciclo 0-255. La inversión 255-nivel compensa la electrónica del LED integrado. En el Arduino IDE, instale el paquete « esp8266 », elija « NodeMCU 1.0 (ESP-12E Module) » y suba (mantenga GPIO0 a LOW si falla). El ADC A0 lee 0-1 V (divisor NodeMCU: 0-3,3 V).
Para ir más lejos
Controle un MOSFET pequeño para regular la luminosidad de una lámpara, o sincronice dos NodeMCU por 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);
}