Files
voice-assistant/firmware/src/WifiLink.h
T
Denis Defolie d20976fea2 Assistant vocal local ESP32 : étapes 1 à 15, et 15b écrite
État du projet au premier commit :
- firmware ESP32 : micro I2S, lecture anti-gigue, MQTT (état retenu, testament),
  mains libres, domotique de démonstration, chien de garde, présence du serveur ;
- serveur Python : sessions, VAD, faster-whisper, pyannote, identification,
  droits par profil, domotique, mot de réveil, Piper ;
- broker Mosquitto : configuration, comptes et ACL (non activés en développement) ;
- étape 15b écrite, en attente d'essai : agent MQTT pour machines Linux.

Étapes 1 à 15 validées. 203 tests, pyright sans erreur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:41:11 +02:00

45 lines
1.3 KiB
C++

#pragma once
#include <Arduino.h>
#include <WiFi.h>
/**
* @brief Connexion Wi-Fi en mode station, non bloquante, reconnexion automatique.
*
* begin() lance la connexion et rend la main aussitôt : l'audio ne doit jamais
* attendre le réseau. update() signale les changements d'état et, si le réseau
* reste absent plus de WIFI_RESTART_MS, relance la connexion de zéro (étape 15).
*/
class WifiLink {
public:
/**
* @param ssid Nom du réseau (2,4 GHz).
* @param password Mot de passe.
* @param hostname Nom de la carte sur le réseau local.
*/
WifiLink(const char* ssid, const char* password, const char* hostname);
/// Lance la connexion, sans attendre.
void begin();
/// À appeler à chaque tour de boucle : journalise connexion et perte, relance si besoin.
void update();
/// true si l'ESP32 a une adresse IP.
bool connected() const;
/// Puissance du signal reçu, en dBm (-50 excellent, -80 limite).
int rssi() const;
/// Adresse IP courante, ou 0.0.0.0.
IPAddress ip() const;
private:
const char* _ssid;
const char* _password;
const char* _hostname;
bool _wasConnected = false;
uint32_t _lostSinceMs = 0; ///< début de la coupure en cours, pour la journaliser
uint32_t _retrySinceMs = 0; ///< dernière relance de la connexion
};