luxmetre.ino
L'ADC de l'ESP8266 est atypique : pleine échelle 1 V (0,1 V sans le diviseur NodeMCU). Le sketch moyenne 16 lectures, convertit en volts puis en lux approximatifs, et catégorise l'ambiance.
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 photorésistance (LDR) + résistance 10 kΩ en diviseur, ou capteur lumineux module 3 broches.
Branchement
Diviseur LDR/10 kΩ entre 3,3 V et GND, curseur sur A0. Sur NodeMCU nu (sans diviseur), ajouter 2 diviseurs 10 kΩ/20 kΩ.
Fonctionnement
analogRead renvoie 0-1023 rapporté à la pleine échelle du convertisseur ; la moyenne logicielle lisse le bruit. La conversion lux est linéaire et fausse au sens strict — elle sert de niveau relatif. 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
Déclenchez l'allumage d'une LED sous un seuil, ou envoyez le niveau horodaté vers un serveur toutes les minutes.
luxmetre.ino
// Photorésistance sur A0 — l'ADC de l'ESP8266 lit 0 a 1 V seulement !
// Sur NodeMCU, le diviseur embarque ramene la pleine echelle a ~3,3 V.
const unsigned long PERIODE = 500;
unsigned long precedent = 0;
void setup() {
Serial.begin(115200);
analogReadResolution(10); // 0..1023 par defaut
}
void loop() {
if (millis() - precedent < PERIODE) return;
precedent = millis();
long brut = 0;
for (int i = 0; i < 16; i++) brut += analogRead(A0); // moyenne 16
brut /= 16;
float volts = brut * (3.3 / 1023.0); // apres diviseur NodeMCU
float lux = volts * 500.0; // grossier : a calibrer au LUXmetre
Serial.printf("brut=%ld %.2f V ~%.0f lux %s\n", brut, volts, lux,
lux < 30 ? "NOIR" : lux < 300 ? "interieur" : "lumineux");
}