Horloge matrice LED haute précision : DS3231 RTC, météo BME280, lumière BH1750 & ESP01 NTP
Composants et fournitures
| Arduino Nano R3 | × | 1 |
| Module DS3231MPMB1 (Maxim Integrated) - Module pas cher eBay, résistance retirée pour éviter explosion batterie | × | 1 |
| Capteur atmosphérique BME280 (SparkFun) - Version pas cher eBay | × | 1 |
| Capteur de lumière BH1750 - eBay | × | 1 |
| Matrice LED 32x8 MAX7219 | × | 1 |
| Condensateur 10 µF | × | 2 |
| ESP8266 ESP-01 (Espressif) - Optionnel pour synchronisation NTP | × | 1 |
| Régulateur 3.3V LM3940IT3.3 - Pour ESP-01 | × | 1 |
| Convertisseur de niveau (Level Shifter) SparkFun - Requis pour ESP-01 | × | 1 |
À propos de ce projet
Tout a commencé avec l'horloge à mots LED de Nick. J'ai modifié son code pour ajouter capteurs, boutons et ESP-01.
- BH1750 : gradateur automatique selon luminosité, extinction nocturne possible.
- BME280 : affiche température, humidité, pression.
- ESP-01 : récupère l'heure via NTP (pool.ntp.org).
Boutons supplémentaires pour réglages faciles : seuils capteur lumière, polices, NTP/DST/UTC.
6 nouvelles polices ajoutées (créées via dotmatrixtool.com).
Code optimisé : plus de mots, passage en PROGMEM pour économiser la RAM.
Projet original de Nick : 123led.wordpress.com
Mon code : GitHub Ratti3/miniclock
Le code est finalisé (hors bugs inconnus et ajustements mineurs). Un boîtier est prévu.
Important : Ajustez le code du capteur de lumière selon vos conditions (codé en plein soleil près d'une fenêtre).
Fonctionnement ESP-01 NTP
L'ESP-01 dort (WiFi OFF) quand non utilisé, réveillé via série par l'Arduino pour récupérer l'heure en format UNIX. SSID et mot de passe transmis via code Arduino.
Gestion DST/UTC/BST intégrée, réglable/désactivable via menu.
Paramètres sauvegardés en EEPROM (persistants après coupure).
Fichiers code sur GitHub
Arduino LEDClock32x8.ino
ProgmemData.h
Arduino ESP-01_NTP.ino
LEDClock32x8_ESP01-NTP.ino
ProgmemData.h
Exemple sortie série (Arduino ↔ ESP-01)
Arduino : Envoi requête NTP à ESP01
ESP01 : Requête NTP reçue de Arduino [tentative 1/3]
Connexion à SSID: TheInternets....connecté
SSID: TheInternets, Adresse IP: 192.168.0.135
Force signal (RSSI): -42 dBm
Envoi paquet NTP vers: 195.195.221.100 [tentative 1]
Envoi paquet NTP vers: 195.195.221.100 [tentative 2]
UNIX1562848457
Désactivation WiFi....ok
Photos du projet






























Assemblage final














Câblage
DS3231, BH1750, BME280 : SCL = A5, SDA = A4, VCC = 3.3V
Matrice LED MAX7219 : CLK = D11, CS = D10, DIN = D12, VCC = 5V
Boutons : D2 = Menu, D3 = Date/+, D4 = Temp/-, D5 = Options affichage
ESP-01 (optionnel) : D7 = TX ESP01, D6 = RX ESP01
Variables globales configurables (avec adresses EEPROM entre crochets)
// Réglages horloge
// [200] Intensité/luminosité défaut (0-15), réglable via menu
byte intensity = 2;
// [201] Mode horloge défaut. 0 = mode_basique
byte clock_mode = 0;
// [206] Mode aléatoire - change type affichage toutes les quelques heures. 0 = désactivé
bool random_mode = 0;
// [207] Mode police aléatoire - change police toutes les quelques heures. 1 = activé
bool random_font_mode = 0;
// [208] Format 12/24h. 0 = 24h, 1 = 12h
bool ampm = 0;
// Réglages lumière
// [202] Mode affichage ON/OFF par capteur lumière. 0=normal, 1=toujours ON, 2=toujours OFF, 3-5=défini par hour_off_1,2,3
byte display_mode = 5;
// [209] Intensité auto par capteur lumière
bool auto_intensity = 1;
// Heures d'extinction possible si assez sombre (format 24h, vérifié entre 8h et ces valeurs)
byte hour_off_1 = 21;
byte hour_off_2 = 22;
byte hour_off_3 = 23;
// Réglages police (via menu, voir set_font_case() pour défauts)
// [203] Style police grande horloge
byte font_style = 2;
// [204] Décalage police
byte font_offset = 1;
// [205] Ajustement colonnes police
byte font_cols = 6;
// DST, NTP, UTC
// [210] Activer DST (1=oui, 0=non)
bool dst_mode = 1;
// [211] Activer NTP (1=oui, 0=non)
bool ntp_mode = 1;
// Secondes d'ajustement NTP avant application DS3231 (quelques centaines ms traitement)
byte ntp_adjust = 1;
// [213] Décalage UTC (heures)
int8_t utc_offset = 0;
// Heure synchronisation quotidienne NTP/DST (laisser 2h si mode DST)
byte ntp_dst_hour = 2;
// Tentatives requête NTP (1 = ~35s total, valeurs 1-9)
byte ntp_max_retry = 3;
// Timeout pour quitter ntp() si pas de données (secondes, multiplié par ntp_max_retry)
byte ntp_timeout = 45;
// Constantes globales - WiFi (transmis à ESP01 via SoftwareSerial)
// Longueur combinée SSID + mot de passe ≤ 72 caractères
const byte ssid_len = 8; // Longueur SSID (ex: "MyWifi" = 6)
const char ssid[] = "YourSSID"; // Votre SSID
const byte pass_len = 12; // Longueur mot de passe
const char pass[] = "YourPassword"; // Votre mot de passe
Processus de fabrication
- Horloge Arduino temps réel pour les heures de prière islamiques
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Horloge à persistance rétinienne (POV) style analogique — Arduino Nano 17 LEDs
- Lampe matricielle LED à colle chaude DIY – Créez votre propre affichage coloré
- Contrôler une LED Arduino avec Cortana via Bluetooth sur Windows 10
- Horloge à bascule Arduino avec matrice LED 8×8 – Projet DIY d'horloge temps réel
- Maîtriser une matrice LED 8×8 avec Arduino Uno : Guide pas à pas
- Horloge GPS précise : Précision et fiabilité abordables
- Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO