Ce que vous construirez : un réveil parlant ESP32 autonome
- Utilise une voix d’intelligence artificielle pour indiquer l’heure exacte avec un message de rappel personnalisé utilisant un vrai haut-parleur
- Synchronise automatiquement l’heure en utilisant le Wi-Fi sans avoir de module RTC
- Contient une page Web de gestion des alarmes accessible via un navigateur Web sur votre réseau informatique local.
- Peut prendre en charge différentes alarmes qui ont chacune leur propre message vocal unique
- Aura un «OLED» de 0,96 avec des données d’horloge en direct et des alarmes suivantes.
| Sous-système | Matériel / Service | Rôle |
| Microcontrôleur | XIAO ESP32-S3 | Contrôle central, Wi-Fi, serveur Web, logique d’alarme |
| Chronométrage | NTP (pool.ntp.org) + millis() | Horloge précise en temps réel sans puce RTC dédiée |
| Synthèse vocale | API Wit.ai Cloud TTS | Convertit le texte du message d’alarme en audio vocal naturel |
| Sortie audio | MAX98357A Amplificateur I2S + haut-parleur | Amplifie l’audio numérique I2S pour piloter un haut-parleur 4 Ω/8 Ω |
| Afficher | OLED I²C de 0,96 pouce (SSD1306) | Affiche l’horloge en direct et la prochaine alarme sans ouvrir de navigateur |
| Entrée de l’utilisateur | Bouton poussoir tactile | Coupe instantanément l’annonce d’alarme active |
| Interface utilisateur de configuration | Serveur Web HTTP ESP32 (port 80) | Interface de navigateur pour ajouter, modifier et supprimer des alarmes |
- Annonce l’heure actuelle et un message personnalisé en utilisant une voix naturelle au lieu d’un buzzer
- Se connecte au Wi-Fi pour une synchronisation automatique de l’heure
- Interface Web basée sur un navigateur pour définir, modifier et supprimer des alarmes
- Prend en charge plusieurs alarmes avec des messages individuels
- Un écran OLED pour afficher l’heure actuelle et la prochaine alarme
- Sortie audio numérique I2S pour un son clair
- Bouton poussoir physique pour arrêter instantanément l’alarme
- Conception matérielle compacte et à faible consommation
- Facile à modifier et à développer pour d’autres applications de notification ou de rappel

| Composant | Quantité | Remarques |
| Carte de développement XIAO ESP32 | 1 | Microcontrôleur avec prise en charge Wi-Fi |
| Amplificateur MAX98357A | 1 | Haut-parleur 4 ou 8 ohms pour lire l’audio |
| Conférencier | 1 | Pour annoncer l’alarme |
| Écran OLED de 0,96 pouces | 1 | Pour afficher l’heure et la prochaine alarme |
| Interrupteur à bouton-poussoir | 1 | Bouton d’arrêt d’alarme |
| Fils de connexion | Au besoin | Fils de connexion |

| Module | Signal/broche | Se connecte à la broche ESP32-S3 |
| Amplificateur MAX98357A | BCLK | D8 |
| LRC | D9 | |
| VACARME | J10 | |
| GND | GND | |
| Vin | 5V | |
| Écran OLED | SDA | J5 |
| SCL | D4 | |
| VCC | 3,3 V | |
| GND | GND | |
| Bouton poussoir | Un côté | D1 |
| Autre côté | GND |


const char* WIFI_SSID = "WIFI-SSID";
const char* WIFI_PASSWORD = "WIFI-PASSWORD";
const char* WIT_TOKEN = "WIT.AI-API-KEY";
uint32_t nowEpochUTC() { return baseEpochUTC + (millis() - baseMillis) / 1000;}
Alarm alarms[MAX_ALARMS];
WebServer server(80);
if(h24==alarms[i].hour && m==alarms[i].minute)
tts.speak("The time is "+String(h12)+" "+String(m)+" "+ap+". "+alarms[i].message);
Applications pratiques
- Réveil parlant intelligent de chevet
- Rappels de médicaments et de santé pour les utilisateurs âgés
- Alertes sur le calendrier des études et des tests pour les étudiants
- Notifications de réunions et de tâches au bureau
- Système de rappel vocal pour les utilisateurs malvoyants
- Annonce générale IoT ou dispositif de notification
Limites actuelles
- Nécessite une connexion Internet active pour la fonctionnalité de synthèse vocale
- Les alarmes sont perdues après une réinitialisation ou un redémarrage
- Pas de protection par mot de passe pour l’interface Web
- Prend en charge uniquement un nombre fixe d’alarmes
- Fonctionne uniquement sur le réseau Wi-Fi configuré
| Renforcement | Avantage | Conseil de mise en œuvre |
| Stockage d’alarme persistant | Les alarmes survivent aux redémarrages et aux coupures de courant | Utiliser Preferences ou SPIFFS / LittleFS pour sérialiser le réseau d’alarmes pour qu’il clignote à chaque changement |
| Buzzer hors ligne / secours audio préenregistré | L’alarme se déclenche même sans Internet | Stockez des fichiers WAV courts dans SPIFFS et lisez-les via I2S lorsque la requête TTS échoue ou expire |
| Protection par mot de passe de l’interface Web | Empêche les modifications d’alarme non autorisées | Ajoutez HTTP Basic Auth ou une simple page PIN avant de servir les routes de gestion des alarmes |
| Mises à jour du micrologiciel Over-the-Air (OTA) | Mettre à jour le firmware sans connexion USB | Activer ArduinoOTA bibliothèque dans setup(); protéger avec un mot de passe |
| Prise en charge de plusieurs fuseaux horaires et langues | Utilisabilité internationale | Stocker le décalage horaire en flash ; passer voice paramètre de l’API Wit.ai pour les TTS non anglais |
| Batterie de secours (LiPo + TP4056) | Fonctionnement ininterrompu lors des coupures de courant | Ajoutez un module de charge TP4056 et un LiPo de 1 000 mAh ; le XIAO ESP32-S3 prend en charge la connexion directe de la batterie |
| Contrôle du volume (matériel ou logiciel) | Volume d’annonce réglable | Mettez à l’échelle les valeurs d’échantillon I2S dans le micrologiciel ou connectez un potentiomètre de 10 kΩ entre la sortie MAX98357A et le haut-parleur. |
| Prise en charge des alarmes récurrentes (quotidiennement / en semaine) | Pas besoin de rajouter des alarmes chaque jour | Ajouter un repeat champ (aucun/quotidien/lundi-ven) à la structure Alarme et modifiez le played réinitialiser la logique en conséquence |
par conséquent. Améliorations possibles de l’ESP32 :
- Stockez les alarmes dans la mémoire flash afin qu’elles persistent après le redémarrage
- Ajoutez une voix préenregistrée hors ligne ou un buzzer de secours lorsque Internet n’est pas disponible
- Implémenter une protection par login ou mot de passe pour l’interface Web
- Ajoutez des mises à jour du micrologiciel en direct pour une maintenance facile
- Prise en charge de plusieurs fuseaux horaires et options de langue
- Inclut une batterie de secours pour un fonctionnement ininterrompu
- Ajoutez un contrôle du volume ou des options de haut-parleurs externes
- Augmentez le nombre d’alarmes prises en charge
| Problème | Cause possible | Solution |
| L’appareil ne se connecte pas au Wi-Fi | SSID ou mot de passe incorrect | Vérifiez les informations d’identification dans le code et téléchargez à nouveau le micrologiciel |
| La page Web ne s’ouvre pas | Mauvaise adresse IP ou mDNS non détecté | Vérifiez le moniteur série pour IP et ouvrez-le directement |
| Aucun son ne sort du haut-parleur | Problème de câblage ou d’amplificateur I2S | Revérifiez les connexions et l’alimentation du MAX98357A. |
| Discours non généré | Jeton Wit.ai invalide ou manquant | Régénérez le token et mettez à jour le firmware |
| Écran OLED vierge | Câblage I2C ou incompatibilité d’adresse | Vérifiez SDA, SCL et l’adresse d’affichage |
| L’alarme ne se déclenche pas | Heure non synchronisée | Redémarrez l’appareil et confirmez la connexion Internet |
| L’alarme ne s’arrête pas | Problème de câblage des boutons | Vérifier la connexion des boutons et la configuration LOW active |
Code de projet complet
Copier le code
#include
#include
#include
#include
#include
// -------- OLED ADDITIONS --------
#include
#include
#include
// ================= CREDENTIALS =================
const char* WIFI_SSID = "YOUR_WIFI_SSID";
const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";
const char* WIT_TOKEN = "YOUR_API_KEY";
// ================= I2S (XIAO ESP32-S3) =================
#define I2S_BCLK 7
#define I2S_LRC 8
#define I2S_DIN 9
#define BTN_STOP 2 // Active LOW
WitAITTS tts(I2S_BCLK, I2S_LRC, I2S_DIN);
WebServer server(80);
// ================= TIME =================
uint32_t baseEpochUTC = 0;
uint32_t baseMillis = 0;
const uint32_t IST_OFFSET = 19800;
uint32_t nowEpochUTC() {
return baseEpochUTC + (millis() - baseMillis) / 1000;
}
// ================= ALARMS =================
#define MAX_ALARMS 10
struct Alarm {
uint8_t hour;
uint8_t minute;
String message;
bool played;
};
Alarm alarms[MAX_ALARMS];
uint8_t alarmCount = 0;
bool alarmKilled = false;
// ================= OLED DEFINITIONS (ADD ONLY) =================
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ================= WEB PAGE =================
const char PAGE[] PROGMEM = R"rawliteral(
Speaking Alarm Clock
Speaking Alarm Clock
+ Add Alarm
« + »
« +a.msg+ »
« + »
Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

-
Rissler Horloge Parlante - Voix Française Claire - pour Alzheimer, Malvoyante ou Personne Agée - Idée Cadeau pour Grand Père - avec Réveil Alarme sonore pour Senior (Rouge et Blanc)
-
Stab High Tech Parts Réveil numérique à Fonction vocale RTALK3 – L’Heure à portée de Voix - Idéal pour Personnes âgées, malvoyantes – Annonce Heure/Minute/température en français – Mode 12/24h
