Construisez un réveil parlant à l’aide du XIAO ESP32-S3

Build a Speaking Alarm Clock Using XIAO ESP32-S3

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

Composants requis pour construire le réveil parlant ESP32 : XIAO ESP32-S3, amplificateur MAX98357A, écran OLED, haut-parleur, bouton-poussoir et fils de connexion

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

Schéma de circuit du réveil parlant ESP32 montrant XIAO ESP32-S3 câblé à un amplificateur MAX98357A I2S, un écran OLED SSD1306, un haut-parleur et un bouton-poussoir

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

Tableau de bord Wit.ai montrant le champ du jeton d'accès au serveur utilisé pour configurer l'API TTS du réveil parlant ESP32
Capture d'écran de l'interface du serveur Web

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é
Réveil parlant ESP32 – Améliorations recommandées
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 :

YouTube video

  • 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