Skip to content

jjtronics/SoundPanel7

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

128 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎚️ SoundPanel 7

A connected wall panel for sound awareness, precision timing, and calm workspaces.

Built on ESP32-S3 with a 7" touchscreen for real-time dB monitoring, a large NTP clock, web administration, MQTT, OTA, and Home Assistant integration.

ESP32-S3 Waveshare 7 inch PlatformIO MQTT OTA Home Assistant License MIT

Animated tour of the SoundPanel 7 dashboards on the device

Animated preview of the on-device dashboards: principal view, clock, LIVE mode, sound meter, PIN screen, calibration, and settings.

SoundPanel 7 installed in a recording studio

Measured in real environments: lab, studio, and day-to-day workspace.

Français · English

FR : Photos · Web UI · Démarrage · Dashboard · Notifications · Home Assistant · Calibration

EN : Visual Tour · Web UI · Quick Start · Dashboard · Alerting · Home Assistant · Calibration


🇫🇷 Français

Menu Français

✨ Vision

SoundPanel 7 est un panneau mural connecté qui rend plusieurs informations visibles en un coup d'œil :

  • le niveau sonore ambiant
  • l'heure réseau synchronisée à la seconde
  • l'état local du panneau, du Wi-Fi et des services

L'idée de départ était simple : créer un outil de pédagogie douce pour rendre le bruit visible sans agressivité.

Le projet a ensuite évolué vers un panneau autonome, lisible de loin, utile en open space, en studio, en régie, en podcast, en atelier ou sur un plateau.

SoundPanel 7 n'est donc pas seulement un sonomètre. C'est un panneau local de supervision pour le son, le temps, le réseau et les intégrations connectées.

📸 Aperçu visuel

Avant les détails techniques, voici le projet dans ses contextes réels : en labo, en studio, et en usage quotidien.

SoundPanel 7 dans la salle de labo

SoundPanel 7 dans un studio d'enregistrement SoundPanel 7 dans un studio d'enregistrement professionnel

SoundPanel 7 intégré dans un environnement studio SoundPanel 7 en format portrait dans un studio

🚀 Points forts

  • Grand affichage tactile 7" pour le bruit, l'heure et l'état du panneau
  • Mesure sonore en temps réel avec dB instantané, Leq et Peak
  • Grande horloge NTP avec secondes visibles, utile en studio comme en diffusion
  • Double interface : écran local LVGL + interface web sécurisée
  • Intégrations connectées : MQTT, MQTT Discovery, Home Assistant, OTA
  • Réglages persistants avec export, import, backup et restore

🎯 Cas d'usage

  • Open space trop bruyant : rendre le niveau sonore visible sans agressivité
  • Studio d'enregistrement : garder les niveaux et l'heure sous les yeux
  • Régie ou diffusion : afficher une heure réseau fiable avec secondes
  • Podcast ou voix off : suivre un top horaire ou un timing de prise
  • Soirée à la maison : garder un œil sur le volume quand les fêtards aiment le monter un peu trop fort
  • Atelier ou lieu public : afficher un indicateur simple, compréhensible par tous dans le genre des panneaux LIVE devant les studios d'enregistrement
  • Domotique personnelle : remonter les niveaux sonores pour traitement / exécution d'actions

🧩 Fonctionnalités

🔊 Monitoring sonore

  • mesure continue du niveau sonore
  • choix de la source audio : Demo, Analog Mic, PDM MEMS, INMP441
  • calcul du Leq
  • calcul du Peak
  • seuils visuels configurables
  • historique glissant configurable
  • mode de réponse Fast ou Slow
  • maintien du peak configurable
  • calibration micro en 3 ou 5 points
  • durée de capture de calibration configurable

🕒 Horloge et synchronisation

  • horloge grand format affichée en permanence
  • affichage des secondes pour les usages de diffusion, prise et synchro
  • synchronisation automatique via NTP
  • configuration du serveur NTP, de la timezone et de l'intervalle de synchro
  • statut de synchronisation visible dans l'UI et dans l'API

🖥️ Interface locale

  • pilotage tactile sur écran 7"
  • lecture immédiate des niveaux et de l'heure
  • consultation d'informations système
  • extinction de l'écran et shutdown depuis l'interface
  • protection par PIN local des pages sensibles (Calibration et Paramètres)
  • usage autonome sans navigateur

🌐 Interface web

  • supervision temps réel et administration
  • configuration UI, audio, Wi-Fi, NTP, OTA, MQTT et réseau
  • calibration depuis le navigateur et pilotage du mode LIVE
  • vérification et installation des releases firmware GitHub directement depuis l'interface web
  • authentification web avec bootstrap du premier compte, gestion d'utilisateurs et sessions
  • notifications sortantes via webhooks / API : Slack incoming webhook, Telegram Bot API, WhatsApp Cloud API, avec envoi de test
  • flux live SSE sur le port 81
  • export / import / backup / restore de configuration
  • reset partiel par section : ui, time, audio, calibration, ota, mqtt
  • actions système : reboot, shutdown, reset usine

📡 Connectivité

  • Wi-Fi via portail de configuration
  • mDNS / Zeroconf : _soundpanel7._tcp.local.
  • MQTT
  • MQTT Discovery pour Home Assistant
  • contrôle du mode LIVE via Web UI, API et MQTT
  • intégration Home Assistant native via Zeroconf/mDNS
  • OTA via espota

🩺 Diagnostic

  • uptime
  • température MCU
  • version firmware
  • environnement de build
  • état OTA / MQTT
  • charge LVGL, timings UI, heap interne / PSRAM
  • nombre d'objets LVGL
  • timestamp du dernier backup

🛠️ Matériel cible

🧠 Carte principale

  • Waveshare ESP32-S3-Touch-LCD-7
  • Waveshare ESP32-S3-Touch-LCD-7B
  • écran tactile 7"
  • ESP32-S3
  • Wi-Fi
  • Bluetooth
  • rétroéclairage pilotable (On/Off)
  • ...

Pour la documentation constructeur de la carte, voir aussi :

La carte ESP32-S3-Touch-LCD-7B utilise une géométrie d'affichage différente de la 7 (1024x600 au lieu de 800x480), donc elle nécessite des environnements PlatformIO dédiés (soundpanel7b_usb, soundpanel7b_ota) pour éviter les problèmes d'affichage.

🧱 Variantes matérielles supportées

Le firmware gère maintenant trois profils matériels distincts via PlatformIO :

  • soundpanel7_usb / soundpanel7_ota : profil Waveshare 7" avec écran tactile, UI locale LVGL, PIN local, contrôle d'affichage et admin web complète
  • soundpanel7b_usb / soundpanel7b_ota : profil Waveshare 7B 1024x600 avec écran tactile, UI locale LVGL, PIN local, contrôle d'affichage et admin web complète
  • soundpanel7_headless_usb / soundpanel7_headless_ota : profil ESP32-S3 standard sans écran, pour un sonomètre web only

En mode headless :

  • il n'y a pas d'interface tactile locale
  • les réglages liés à l'écran, au tactile et au PIN local disparaissent de l'admin web
  • le mode TARDIS peut piloter la LED RGB intégrée de certaines cartes ESP32-S3 standard pour simuler l'éclairage de cabine
  • le reste reste identique : mesure audio, interface web, Wi-Fi, NTP, MQTT, OTA, Home Assistant, export/import de config

Version headless SoundPanel 7 intégrée dans une maquette TARDIS

Exemple de build headless : sonomètre web-only intégré dans une maquette TARDIS.

🔗 Article et achat

J'ai publié un article complet sur ce matériel, avec mon retour d'expérience, des photos et une note sur le blog :

Cet article contient aussi le lien d'affiliation utilisé pour l'achat de l'ESP32-S3 Touch LCD présenté dans ce projet.

🎤 Entrée audio

Le firmware permet maintenant de choisir la source audio directement dans l'admin web :

  • Demo : valeurs simulées pour le développement et les démos
  • Analog Mic : micro analogique type MAX4466
  • PDM MEMS : micro numérique PDM
  • INMP441 : micro numérique I2S

Exemples compatibles :

  • MAX4466 ou équivalent analogique à gain fixe
  • micro PDM MEMS 3.3 V
  • INMP441

Modèle à ne surtout pas utiliser :

  • MAX9814 : son gain automatique fausse la mesure pour ce projet

Important :

  • les pins audio ne se règlent pas dans l'interface web
  • le mapping des GPIO est sélectionné automatiquement selon l'environnement PlatformIO
  • profil Waveshare = pins Waveshare
  • profil headless = pins ESP32-S3 standard

🔌 Câblage audio par carte

Les tableaux ci-dessous documentent le câblage par défaut utilisé par le firmware actuel.

Waveshare ESP32-S3-Touch-LCD-7
Type de micro Signal module GPIO firmware Marquage visible sur la carte
Analog Mic (MAX4466) OUT GPIO6 Sensor AD
PDM MEMS CLK GPIO12 SCK
PDM MEMS DATA GPIO13 MISO
INMP441 SCK / BCLK GPIO12 SCK
INMP441 WS / LRCL GPIO11 MOSI
INMP441 SD GPIO13 MISO

Notes utiles :

  • sur la Waveshare, GPIO11, GPIO12 et GPIO13 correspondent aussi au bus TF exposé comme MOSI, SCK, MISO
  • si tu branches un micro numérique sur ces pins, évite d'utiliser la carte TF en même temps
  • pour INMP441, relier L/R à GND pour lire le canal gauche
Waveshare ESP32-S3-Touch-LCD-7B

Le profil soundpanel7b_* réutilise le même câblage audio par défaut que la Waveshare ESP32-S3-Touch-LCD-7.

Type de micro Signal module GPIO firmware Marquage visible sur la carte
Analog Mic (MAX4466) OUT GPIO6 Sensor AD
PDM MEMS CLK GPIO12 SCK
PDM MEMS DATA GPIO13 MISO
INMP441 SCK / BCLK GPIO12 SCK
INMP441 WS / LRCL GPIO11 MOSI
INMP441 SD GPIO13 MISO
ESP32-S3 standard headless

Le profil headless cible un ESP32-S3 DevKitC-1 ou équivalent, sans écran.

Type de micro Signal module GPIO firmware Sérigraphie habituelle sur la carte
Analog Mic (MAX4466) OUT GPIO4 4 / IO4
PDM MEMS CLK GPIO12 12 / IO12
PDM MEMS DATA GPIO13 13 / IO13
INMP441 SCK / BCLK GPIO12 12 / IO12
INMP441 WS / LRCL GPIO11 11 / IO11
INMP441 SD GPIO13 13 / IO13

Notes utiles :

  • sur un ESP32-S3 standard, ces libellés sont généralement sérigraphiés directement comme IO4, IO11, IO12, IO13 ou simplement 4, 11, 12, 13
  • pour INMP441, relier L/R à GND pour rester sur le canal gauche
  • toutes les masses doivent être communes entre le micro et la carte
  • certaines cartes ESP32-S3 N16R8 intègrent aussi une LED RGB adressable sur le PCB, exploitable par le mode TARDIS

Par défaut, le projet compile avec un mode audio mock pour faciliter le développement.

Dans platformio.ini, le flag suivant est actif par défaut :

-DSOUNDPANEL7_MOCK_AUDIO=1

Si tu branches une vraie entrée analogique, vérifie ce point avant d'évaluer le comportement du panneau.

⚡ Démarrage rapide

1. Cloner le dépôt

git clone https://github.com/jjtronics/SoundPanel7.git
cd SoundPanel7

2. Préparer l'environnement

Le plus simple :

  • VS Code
  • extension PlatformIO

Tu peux aussi utiliser pio en ligne de commande si PlatformIO Core est déjà installé.

3. Compiler

pio run

Build explicite par profil :

pio run -e soundpanel7_usb
pio run -e soundpanel7b_usb
pio run -e soundpanel7_headless_usb

L'environnement par défaut reste soundpanel7_usb. Pour une Waveshare ESP32-S3-Touch-LCD-7B, sélectionne explicitement soundpanel7b_usb.

4. Flasher en USB

L'environnement par défaut est soundpanel7_usb.

pio run -e soundpanel7_usb -t upload

Pour une Waveshare ESP32-S3-Touch-LCD-7B :

pio run -e soundpanel7b_usb -t upload

Pour un ESP32-S3 standard sans écran :

pio run -e soundpanel7_headless_usb -t upload

5. Ouvrir le moniteur série

pio device monitor -b 115200

6. Mettre à jour en OTA

Quand l'OTA est configurée sur l'appareil :

pio run -e soundpanel7_ota -t upload

Version 7B :

pio run -e soundpanel7b_ota -t upload

Version headless :

pio run -e soundpanel7_headless_ota -t upload

Les réglages locaux de machine et de réseau ne doivent pas être commités dans platformio.ini. Utilise plutôt un fichier local platformio.override.ini ignoré par Git, par exemple à partir de platformio.override.example.ini.

Exemple :

[env:soundpanel7_usb]
upload_port = /dev/cu.usbmodemXXXX
monitor_port = /dev/cu.usbmodemXXXX

[env:soundpanel7_ota]
upload_port = 192.168.1.137

Alternative ponctuelle :

pio run -e soundpanel7_ota -t upload --upload-port 192.168.1.137

Vérifie aussi que le poste qui lance espota est sur le même réseau Wi-Fi que l'appareil.

Les valeurs locales typiques à surcharger sont :

  • upload_port (son IP)
  • monitor_port
  • le mot de passe OTA si utilisé

Au boot, le firmware initialise successivement :

  1. le stockage des réglages
  2. l'affichage et le tactile, si le build inclut un écran
  3. le réseau
  4. l'OTA
  5. le MQTT
  6. l'interface web
  7. le moteur audio

⚙️ Configuration par défaut

Valeurs actuelles du firmware :

  • hostname : soundpanel7
  • serveur NTP : fr.pool.ntp.org
  • timezone POSIX : CET-1CEST,M3.5.0/2,M10.5.0/3
  • intervalle NTP : 180 min
  • OTA activée : oui
  • port OTA : 3232
  • MQTT activé : non
  • topic MQTT de base : soundpanel7
  • sources audio disponibles : Demo, Analog Mic, PDM MEMS, INMP441
  • pin analogique par défaut profil Waveshare : GPIO6
  • pin analogique par défaut profil headless : GPIO4
  • pins numériques par défaut : GPIO11, GPIO12, GPIO13
  • source audio par défaut : Analog Mic
  • fenêtre RMS analogique : 256 samples
  • réponse audio par défaut : Fast
  • peak hold : 5000 ms
  • calibration par défaut : 3 points, capture 3 s

Ces réglages sont définis dans src/SettingsStore.h.

🌐 Interface web

Une fois l'appareil connecté au Wi-Fi :

  • http://IP_DU_SOUNDPANEL/
  • http://soundpanel7.local/ si le mDNS est disponible
  • flux live : http://IP_DU_SOUNDPANEL:81/api/events

Aperçu des dashboards

Dashboard web principal de SoundPanel 7 Dashboard horloge de SoundPanel 7

Dashboard sonomètre de SoundPanel 7 Dashboard calibration de SoundPanel 7

L'interface permet notamment de régler :

  • luminosité
  • seuils de couleur
  • source micro : Demo, Analog Mic, PDM MEMS, INMP441
  • durée d'historique
  • mode de réponse audio
  • durée des alertes orange / rouge
  • mode LIVE et page d'ouverture par défaut
  • contrôle de l'affichage du dashboard local : page affichée, tactile actif/inactif, mode plein écran sans menu du haut
  • paramètres Wi-Fi
  • NTP, timezone, intervalle de synchro et hostname
  • paramètres OTA
  • paramètres MQTT
  • notifications sortantes : Slack incoming webhook, Telegram Bot API, WhatsApp Cloud API
  • calibration micro
  • PIN local d'accès
  • comptes utilisateurs web
  • backup / restore / import / export des réglages

En build headless, les blocs liés à l'écran local, au tactile et au code PIN sont masqués automatiquement.

En build headless, un bloc Mode TARDIS permet aussi de piloter l'éclairage cabine :

  • Alerte sonore : la LED intérieure suit l'état du sonomètre
  • Couleur fixe : choix manuel via palette de couleur
  • Décollage TARDIS : animation bleue non bloquante inspirée de la lueur de la TARDIS

Sur les cartes compatibles, la LED RGB intégrée est utilisée pour l'intérieur, tandis que la LED extérieure reste pilotée par la sortie GPIO dédiée.

Mode TARDIS avec éclairage cabine bleu sur une maquette TARDIS headless

Le mode TARDIS peut réutiliser la LED RGB intégrée pour animer l'éclairage cabine en bleu.

Zone Paramètres

Animation complète des réglages :

Animation des paramètres web de SoundPanel 7

Endpoints principaux exposés par le firmware :

GET   /api/auth/status
POST  /api/auth/login
POST  /api/auth/logout
POST  /api/auth/bootstrap
GET   /api/users
POST  /api/users/create
POST  /api/users/password
POST  /api/users/delete
GET   /api/homeassistant
POST  /api/homeassistant
GET   /api/ha/status
GET   /api/status
POST  /api/pin
POST  /api/ui
GET   /api/live
POST  /api/live
GET   /api/wifi
POST  /api/wifi
GET   /api/time
POST  /api/time
GET   /api/config/export
POST  /api/config/import
POST  /api/config/backup
POST  /api/config/restore
POST  /api/config/reset_partial
GET   /api/ota
POST  /api/ota
GET   /api/release
POST  /api/release/check
POST  /api/release/install
GET   /api/mqtt
POST  /api/mqtt
GET   /api/notifications
POST  /api/notifications
POST  /api/notifications/test
POST  /api/calibrate
POST  /api/calibrate/clear
POST  /api/calibrate/mode
POST  /api/reboot
POST  /api/shutdown
POST  /api/factory_reset

Le GET /api/status renvoie notamment :

  • dB, Leq, Peak
  • historique glissant
  • uptime
  • statut Wi-Fi, IP et RSSI
  • état NTP / heure courante
  • température MCU
  • version firmware et environnement de build
  • état OTA / MQTT
  • état LIVE, PIN et calibration
  • stats runtime LVGL / heap

🖥️ Affichage du dashboard

L'interface web permet aussi de piloter finement l'affichage du panneau tactile 7" :

  • choisir la vue affichée : principal, horloge, LIVE ou sonomètre
  • activer ou désactiver complètement le tactile
  • activer un mode plein écran par vue pour masquer la barre du haut sur l'écran local
  • appliquer ces changements immédiatement sans reflasher le firmware

Ces réglages sont sauvegardés via l'API UI du firmware et restent actifs après redémarrage.

Sur un build headless, cette section n'est pas applicable : il n'y a pas d'écran local à piloter.

🔐 Sécurité web et PIN

Le projet combine deux niveaux de protection :

  • authentification web avec création du premier compte au bootstrap
  • gestion de comptes locaux avec changement de mot de passe et suppression d'utilisateur
  • sessions web pour l'administration et l'accès au flux live
  • code PIN local pour protéger les pages sensibles sur le panneau tactile

Le code PIN local n'existe que sur les builds avec écran.

Endpoints associés :

GET   /api/auth/status
POST  /api/auth/login
POST  /api/auth/logout
POST  /api/auth/bootstrap
GET   /api/users
POST  /api/users/create
POST  /api/users/password
POST  /api/users/delete
POST  /api/pin

📡 Wi-Fi multi-AP

Le panneau peut mémoriser jusqu'à 4 réseaux Wi-Fi pour s'adapter à plusieurs lieux d'usage :

  • maison, bureau, studio, partage de connexion, etc.
  • conservation du mot de passe déjà stocké si le champ reste vide
  • prise en charge des réseaux ouverts si aucun mot de passe n'est renseigné
  • état de connexion visible dans l'interface web

Endpoints associés :

GET   /api/wifi
POST  /api/wifi

💾 Gestion de configuration

Le firmware intègre une vraie gestion des réglages pour éviter de tout refaire à la main :

  • export JSON complet de la configuration
  • import de configuration depuis l'interface web
  • backup local du dernier état connu
  • restore du backup en un clic
  • reset partiel par section : ui, time, audio, calibration, ota, mqtt
  • horodatage du dernier backup visible dans le statut

Endpoints associés :

GET   /api/config/export
POST  /api/config/import
POST  /api/config/backup
POST  /api/config/restore
POST  /api/config/reset_partial

🕒 Horloge NTP

SoundPanel 7 fait aussi office de grande horloge réseau. Dans un studio, une régie ou un setup podcast, avoir une heure fiable avec les secondes en grand est souvent aussi utile que la mesure sonore.

Le firmware gère :

  • la synchronisation NTP automatique
  • le paramétrage du serveur NTP
  • la timezone POSIX
  • l'intervalle de resynchronisation
  • l'affichage local HH:MM avec badge secondes
  • l'heure complète côté interface web

Par défaut, le serveur NTP configuré est fr.pool.ntp.org.

📶 MQTT

Le panneau peut publier ses mesures vers un broker MQTT.

Paramètres disponibles :

  • host
  • port
  • username / password
  • client ID
  • topic racine
  • intervalle de publication
  • retain

Topics effectivement publiés :

soundpanel7/availability
soundpanel7/state
soundpanel7/db
soundpanel7/leq
soundpanel7/peak
soundpanel7/live/state
soundpanel7/live/set
soundpanel7/wifi/rssi
soundpanel7/wifi/ip

Avec MQTT Discovery, le firmware publie automatiquement les entités Home Assistant suivantes :

  • dB Instant
  • Leq
  • Peak
  • LIVE
  • WiFi RSSI
  • WiFi IP

🚨 Notifications sortantes

Le panneau peut envoyer des alertes vers des services externes lorsqu'un seuil est dépassé ou lors du retour à la normale.

Canaux pris en charge :

  • Slack via incoming webhook
  • Telegram via Bot API
  • WhatsApp via Cloud API

Fonctionnalités disponibles :

  • notification des alertes warning et/ou critique
  • notification optionnelle du retour à la normale
  • résumé des cibles actives
  • mémorisation du dernier résultat et du dernier succès
  • envoi de test depuis l'interface web

Endpoints associés :

GET   /api/notifications
POST  /api/notifications
POST  /api/notifications/test

🏠 Home Assistant

Deux approches sont proposées :

Option 1 : MQTT Discovery

La plus simple si Home Assistant utilise déjà MQTT : tu actives MQTT sur le SoundPanel 7, tu renseignes le broker, et les entités sont créées automatiquement.

Option 2 : intégration native Home Assistant

Une intégration custom est fournie dans :

custom_components/soundpanel7

Le firmware annonce le service :

_soundpanel7._tcp.local.

L'intégration interroge l'endpoint dédié /api/ha/status avec un bearer token Home Assistant.

Capteurs exposés par l'intégration native :

  • dB Instant
  • Leq
  • Peak
  • WiFi RSSI
  • WiFi IP
  • Uptime
Installation via HACS

Le dépôt peut maintenant être ajouté dans HACS comme custom repository.

Pré-requis :

  • une release GitHub publiée (ex. v0.1.0)
  • HACS installé dans Home Assistant

Étapes :

  1. ouvrir HACS > Integrations
  2. ouvrir le menu en haut à droite puis Custom repositories
  3. ajouter https://github.com/jjtronics/SoundPanel7
  4. choisir la catégorie Integration
  5. rechercher SoundPanel 7 dans HACS puis l'installer
  6. redémarrer Home Assistant
  7. redémarrer le SoundPanel 7
  8. ouvrir Paramètres > Appareils et services
  9. attendre la découverte automatique
Installation manuelle

Copier custom_components/soundpanel7 dans le dossier de configuration Home Assistant :

config/custom_components/soundpanel7

Exemple :

mkdir -p /config/custom_components
cp -R custom_components/soundpanel7 /config/custom_components/

Puis :

  1. dans l'interface web du panneau, ouvrir Paramètres > Home Assistant
  2. générer ou définir un token dédié
  3. redémarrer Home Assistant
  4. redémarrer le SoundPanel 7
  5. ouvrir Paramètres > Appareils et services
  6. attendre la découverte automatique

Le flow de configuration demandera ce token.

Si rien n'apparaît, vérifier en priorité :

  • que le token Home Assistant est bien configuré côté panneau
  • que Home Assistant et le panneau sont sur le même réseau
  • que manifest.json est bien présent côté Home Assistant
  • que le panneau répond bien sur son interface web
  • que le mDNS n'est pas perturbé par le réseau ou les VLANs

🚀 OTA

Le projet gère maintenant deux modes OTA complémentaires :

  • OTA réseau classique depuis PlatformIO / espota
  • OTA GitHub intégrée directement depuis l'interface web de la tablette

OTA réseau via PlatformIO

Une fois l'OTA classique configurée sur l'appareil, la mise à jour se fait avec :

pio run -e soundpanel7_ota -t upload

Dans platformio.ini, l'environnement OTA repose sur :

  • upload_protocol = espota
  • port par défaut 3232
  • mot de passe OTA configurable

Pour éviter de commit des IP ou ports locaux, garde platformio.ini générique et place tes réglages perso dans platformio.override.ini, ignoré par Git. Un exemple est fourni dans platformio.override.example.ini.

Tu peux aussi passer l'IP à la volée :

pio run -e soundpanel7_ota -t upload --upload-port 192.168.1.137

Pour la variante 7B :

pio run -e soundpanel7b_ota -t upload
pio run -e soundpanel7b_ota -t upload --upload-port 192.168.1.138

L'OTA espota suppose que le poste de build et l'appareil sont sur le même réseau joignable.

OTA GitHub depuis l'interface web

Le firmware sait aussi :

  • vérifier la dernière release publiée sur GitHub
  • comparer cette release avec la version courante du firmware
  • télécharger firmware.bin directement depuis les assets de release
  • vérifier le SHA-256 avant application
  • écrire l'image dans la partition OTA inactive puis redémarrer automatiquement

Le point d'entrée utilisé par l'appareil est :

https://github.com/jjtronics/SoundPanel7/releases/latest/download/release-manifest.json

Flux recommandé :

  1. publier une release GitHub
  2. ouvrir Paramètres > GitHub Releases sur la tablette
  3. cliquer Vérifier les mises à jour
  4. cliquer Installer

À partir de v0.2.7, le flux OTA GitHub embarqué est considéré comme fiable pour une mise à jour complète directement depuis l'appareil.

🎚️ Calibration

Le système de calibration fonctionne en 3 ou 5 points.

Procédure recommandée :

  1. placer un sonomètre de référence à côté du SoundPanel 7
  2. générer ou mesurer un niveau stable
  3. saisir la valeur réelle
  4. capturer les points de référence

Valeurs typiques utiles en mode 3 points :

  • 45 dB
  • 65 dB
  • 85 dB

Le firmware permet aussi :

  • de choisir le mode 3 points ou 5 points
  • de régler la durée de capture
  • d'effacer la calibration
  • de conserver des offsets de secours dans la configuration

Le firmware stocke ensuite les points et corrige la lecture.

Exemple d'import JSON pour micro analogique MAX4466

Pour réinjecter rapidement une calibration connue via l'interface web (Configuration > Importer JSON), voici un exemple prêt à l'emploi pour un MAX4466 :

{
  "type": "soundpanel7-config",
  "version": 8,
  "audioSource": 1,
  "calibrationPointCount": 5,
  "calibrationCaptureSec": 3,
  "analogBaseOffsetDb": 0,
  "analogExtraOffsetDb": 15,
  "calPointRefDb": [35, 50, 70, 80, 90],
  "calPointRawLogRms": [1.3779, 1.4131, 1.9797, 2.4076, 2.9448],
  "calPointValid": [1, 1, 1, 1, 1],
  "analogCalibrationPointCount": 5,
  "analogCalibrationCaptureSec": 3,
  "analogBaseOffsetDb": 0,
  "analogExtraOffsetDb": 15,
  "analogCalPointRefDb": [35, 50, 70, 80, 90],
  "analogCalPointRawLogRms": [1.3779, 1.4131, 1.9797, 2.4076, 2.9448],
  "analogCalPointValid": [1, 1, 1, 1, 1]
}

audioSource: 1 correspond à Analog Mic. Cet exemple remplit à la fois la calibration active et le profil analogique persistant.

Validation avec sonomètre de référence

Une vidéo de démonstration montre le SoundPanel 7 à côté d'un vrai sonomètre professionnel, pendant une montée progressive de bruit blanc, afin de vérifier que les mesures restent cohérentes.

Aperçu de la vidéo de validation comparative SoundPanel 7 vs sonomètre de référence

Cliquer sur l'image pour ouvrir la vidéo comparative MP4.

🧠 Architecture

Le cœur du projet reste volontairement simple :

AudioEngine -> SharedHistory -> UI / Web / MQTT
                  |
                  -> stockage et restitution des mesures

Composants principaux :

📁 Arborescence

.
├── src/                       Firmware principal
├── custom_components/         Intégration Home Assistant
├── include/                   Headers partagés
├── assets/                    Polices
└── platformio.ini             Build, flash et environnements

🔧 État du projet

Le projet est déjà exploitable, mais reste évolutif :

  • la chaîne audio dépend encore beaucoup du capteur analogique réel
  • le rendu final dépend de la calibration
  • certains paramètres de platformio.ini sont ajustés pour la machine de dev actuelle
  • la documentation hardware et câblage peut encore être enrichie

En clair : c'est un projet sérieux, vivant, et déjà très utile.

🤝 Contribution

Les contributions sont bienvenues, surtout sur :

  • documentation
  • guide hardware et câblage
  • calibration
  • UX de l'interface
  • intégration et fiabilité réseau

Point d'entrée recommandé :

  1. compiler
  2. flasher
  3. valider l'affichage local
  4. tester l'interface web
  5. tester MQTT, OTA et Home Assistant

🇬🇧 English

English Menu

✨ Overview

SoundPanel 7 is a connected wall panel that makes several things instantly visible:

  • ambient sound level
  • network-synchronized time down to the second
  • local device, Wi-Fi, and service status

The original idea came from a very practical problem: the open space where I work was simply too noisy.

The goal was to build a gentle awareness tool: something visible, factual, calm, and readable enough to reduce noise without policing people.

From there, the device evolved into a standalone panel for offices, studios, control rooms, podcast setups, workshops, and other real workspaces.

SoundPanel 7 is not just a sound meter. It is a local monitoring panel for sound, time, network visibility, diagnostics, and connected integrations.

📸 Visual tour

Before getting into firmware and integration details, here is the project in real environments: lab space, recording studio, and day-to-day use.

SoundPanel 7 installed in the lab

SoundPanel 7 in a recording studio SoundPanel 7 in a professional studio setup

SoundPanel 7 integrated into a studio workspace Portrait view of SoundPanel 7 in a studio

🚀 Key features

  • Large 7" touchscreen for sound, time, and device status at a glance
  • Real-time sound monitoring with instant dB, Leq, and Peak
  • Large NTP clock with visible seconds for studio and broadcast-style timing
  • Dual interface: local LVGL UI plus secure embedded web administration
  • Connected integrations: MQTT, Discovery, Home Assistant, and OTA
  • Persistent settings with export, import, backup, and restore

🎯 Use cases

  • Noisy open space: make sound levels visible without turning into the noise police
  • Recording studio: keep both sound level and precise time in view
  • Broadcast or control room: display reliable network time with seconds
  • Podcast or voice booth: follow timing and on-air references
  • Workshop or public space: show a simple, readable ambient indicator
  • Smart home wall panel: useful information, not just decoration

🧩 Features

🔊 Sound monitoring

  • continuous sound level measurement
  • selectable audio source: Demo, Analog Mic, PDM MEMS, INMP441
  • Leq calculation
  • Peak calculation
  • configurable visual thresholds
  • configurable rolling history
  • Fast or Slow response mode
  • configurable peak hold
  • microphone calibration in 3 or 5 points
  • configurable calibration capture duration

🕒 Clock and synchronization

  • always-visible large clock
  • visible seconds for broadcast, recording, and sync use cases
  • automatic NTP synchronization
  • configurable NTP server, timezone, and sync interval
  • sync status visible in the UI and the API

🖥️ Local interface

  • direct touch control on the 7" panel
  • immediate reading of sound levels and time
  • access to local system information
  • screen off and shutdown from the interface
  • local PIN protection for sensitive pages
  • fully usable without a browser

🌐 Web interface

  • real-time monitoring and administration
  • UI, audio, Wi-Fi, NTP, OTA, MQTT, and network configuration
  • browser-based calibration and LIVE mode control
  • GitHub firmware release check and install directly from the web UI
  • web authentication with first-account bootstrap, user management, and sessions
  • outbound notifications via webhooks / API: Slack incoming webhook, Telegram Bot API, WhatsApp Cloud API, with test delivery
  • live SSE stream on port 81
  • config export / import / backup / restore
  • partial reset by scope: ui, time, audio, calibration, ota, mqtt
  • system actions: reboot, shutdown, factory reset

📡 Connectivity

  • Wi-Fi through configuration portal
  • mDNS / Zeroconf: _soundpanel7._tcp.local.
  • MQTT
  • MQTT Discovery for Home Assistant
  • LIVE control through both Web UI and MQTT
  • native Home Assistant integration through Zeroconf/mDNS
  • OTA through espota

🩺 Diagnostics

  • uptime
  • MCU temperature
  • firmware version
  • build environment
  • OTA / MQTT state
  • LVGL load, UI timings, internal heap / PSRAM
  • LVGL object count
  • last backup timestamp

🛠️ Hardware target

🧠 Main board

  • Waveshare ESP32-S3-Touch-LCD-7
  • Waveshare ESP32-S3-Touch-LCD-7B
  • 7" touchscreen
  • ESP32-S3
  • Wi-Fi
  • PSRAM
  • USB
  • controllable backlight

For the official board documentation, see also:

The ESP32-S3-Touch-LCD-7B uses a different display geometry than the 7 (1024x600 instead of 800x480), so it requires dedicated PlatformIO environments (soundpanel7b_usb, soundpanel7b_ota) to avoid display issues.

🧱 Supported hardware profiles

The firmware now supports three distinct hardware profiles through PlatformIO:

  • soundpanel7_usb / soundpanel7_ota: Waveshare 7-inch touchscreen profile with local LVGL UI, local PIN, display control, and full web administration
  • soundpanel7b_usb / soundpanel7b_ota: Waveshare 7B 1024x600 touchscreen profile with local LVGL UI, local PIN, display control, and full web administration
  • soundpanel7_headless_usb / soundpanel7_headless_ota: standard ESP32-S3 without screen for a web-only sound meter

In headless mode:

  • there is no local touch UI
  • screen, touch, and local PIN settings disappear from the web admin
  • TARDIS mode can drive the onboard RGB LED found on some standard ESP32-S3 boards to simulate the cabin light
  • the rest stays the same: audio metering, web UI, Wi-Fi, NTP, MQTT, OTA, Home Assistant, config export/import

Headless SoundPanel 7 build integrated into a TARDIS model

Example headless build: a web-only sound meter integrated into a TARDIS model.

🔗 Article and purchase link

I published a full write-up about this hardware on my blog, including hands-on feedback, photos, and a final rating:

That article also includes the affiliate purchase link for the ESP32-S3 Touch LCD used in this project.

🎤 Audio input

The firmware now lets you choose the audio source directly from the web admin:

  • Demo: simulated values for development and demos
  • Analog Mic: analog microphone such as MAX4466
  • PDM MEMS: digital PDM microphone
  • INMP441: digital I2S microphone

Compatible examples:

  • MAX4466 or similar fixed-gain analog microphone modules
  • 3.3 V PDM MEMS microphones
  • INMP441

Model to definitely avoid:

  • MAX9814: its automatic gain control makes it unsuitable for reliable measurement here

Important:

  • audio pins are not configured from the web UI
  • GPIO mapping is selected automatically from the PlatformIO environment
  • Waveshare profile = Waveshare pin map
  • headless profile = standard ESP32-S3 pin map

🔌 Audio wiring by board

The tables below document the default wiring used by the current firmware.

Waveshare ESP32-S3-Touch-LCD-7
Microphone type Module signal Firmware GPIO Board label / silk screen
Analog Mic (MAX4466) OUT GPIO6 Sensor AD
PDM MEMS CLK GPIO12 SCK
PDM MEMS DATA GPIO13 MISO
INMP441 SCK / BCLK GPIO12 SCK
INMP441 WS / LRCL GPIO11 MOSI
INMP441 SD GPIO13 MISO

Useful notes:

  • on the Waveshare board, GPIO11, GPIO12, and GPIO13 are also the exposed TF bus labeled MOSI, SCK, MISO
  • if you wire a digital microphone there, avoid using the TF card at the same time
  • for INMP441, connect L/R to GND to read the left channel
Waveshare ESP32-S3-Touch-LCD-7B

The soundpanel7b_* profile reuses the same default audio wiring as the Waveshare ESP32-S3-Touch-LCD-7.

Microphone type Module signal Firmware GPIO Board label / silk screen
Analog Mic (MAX4466) OUT GPIO6 Sensor AD
PDM MEMS CLK GPIO12 SCK
PDM MEMS DATA GPIO13 MISO
INMP441 SCK / BCLK GPIO12 SCK
INMP441 WS / LRCL GPIO11 MOSI
INMP441 SD GPIO13 MISO
Standard ESP32-S3 headless board

The headless profile targets an ESP32-S3 DevKitC-1 or equivalent without a screen.

Microphone type Module signal Firmware GPIO Usual board silk screen
Analog Mic (MAX4466) OUT GPIO4 4 / IO4
PDM MEMS CLK GPIO12 12 / IO12
PDM MEMS DATA GPIO13 13 / IO13
INMP441 SCK / BCLK GPIO12 12 / IO12
INMP441 WS / LRCL GPIO11 11 / IO11
INMP441 SD GPIO13 13 / IO13

Useful notes:

  • on a standard ESP32-S3 board, these labels are usually printed directly as IO4, IO11, IO12, IO13 or simply 4, 11, 12, 13
  • for INMP441, connect L/R to GND to stay on the left channel
  • make sure the microphone and the board share a common ground
  • some ESP32-S3 N16R8 boards also expose an onboard addressable RGB LED that can be used by TARDIS mode

By default, the project builds with a mock audio mode to make development easier without a real measurement chain.

In platformio.ini, this flag is enabled by default:

-DSOUNDPANEL7_MOCK_AUDIO=1

If you connect a real analog input, check that setting first before judging the panel's behavior.

On headless builds, the web admin also exposes a TARDIS mode block for the cabin lighting:

  • Sound alert: the interior LED follows the meter alert level
  • Fixed color: manual selection through a color picker
  • TARDIS takeoff: non-blocking blue animated effect inspired by the TARDIS beacon glow

On compatible boards, the onboard RGB LED is used for the interior light, while the exterior light remains driven through its dedicated GPIO output.

TARDIS mode using the onboard RGB LED for blue cabin lighting

TARDIS mode can reuse the onboard RGB LED to animate the cabin glow in blue.

⚡ Quick start

1. Clone the repository

git clone https://github.com/jjtronics/SoundPanel7.git
cd SoundPanel7

2. Prepare the environment

The easiest setup is:

  • VS Code
  • PlatformIO extension

You can also use the pio CLI if PlatformIO Core is already installed.

3. Build

pio run

Explicit per-profile builds:

pio run -e soundpanel7_usb
pio run -e soundpanel7b_usb
pio run -e soundpanel7_headless_usb

The default environment remains soundpanel7_usb. For a Waveshare ESP32-S3-Touch-LCD-7B, explicitly select soundpanel7b_usb.

4. Flash over USB

The default environment is soundpanel7_usb.

pio run -e soundpanel7_usb -t upload

For a Waveshare ESP32-S3-Touch-LCD-7B:

pio run -e soundpanel7b_usb -t upload

For a standard ESP32-S3 without screen:

pio run -e soundpanel7_headless_usb -t upload

5. Open the serial monitor

pio device monitor -b 115200

6. Update over OTA

Once OTA is configured on the device:

pio run -e soundpanel7_ota -t upload

7B variant:

pio run -e soundpanel7b_ota -t upload

Headless variant:

pio run -e soundpanel7_headless_ota -t upload

Machine- and network-specific values should not be committed in platformio.ini. Use a local platformio.override.ini file ignored by Git instead, for example from platformio.override.example.ini.

Example:

[env:soundpanel7_usb]
upload_port = /dev/cu.usbmodemXXXX
monitor_port = /dev/cu.usbmodemXXXX

[env:soundpanel7_ota]
upload_port = 192.168.1.137

One-shot alternative:

pio run -e soundpanel7_ota -t upload --upload-port 192.168.1.137

Also make sure the machine running espota is on the same reachable Wi-Fi/network as the device.

Typical local values to override are:

  • upload_port
  • monitor_port
  • OTA password if used

At boot, the firmware initializes:

  1. settings storage
  2. display and touch, when the build includes a screen
  3. networking
  4. OTA
  5. MQTT
  6. web interface
  7. audio engine

⚙️ Default configuration

Current firmware defaults:

  • hostname: soundpanel7
  • NTP server: fr.pool.ntp.org
  • POSIX timezone: CET-1CEST,M3.5.0/2,M10.5.0/3
  • NTP sync interval: 180 min
  • OTA enabled: yes
  • OTA port: 3232
  • MQTT enabled: no
  • MQTT base topic: soundpanel7
  • analog pin: GPIO6
  • default audio source: analog sensor
  • analog RMS window: 256 samples
  • default audio response: Fast
  • peak hold: 5000 ms
  • default calibration: 3 points, 3 s capture

These settings are defined in src/SettingsStore.h.

🌐 Web interface

Once the device is connected to Wi-Fi:

  • http://DEVICE_IP/
  • http://soundpanel7.local/ if mDNS is available
  • live stream: http://DEVICE_IP:81/api/events

Dashboard overview

SoundPanel 7 main web dashboard SoundPanel 7 clock dashboard

SoundPanel 7 sound meter dashboard SoundPanel 7 calibration dashboard

The interface lets you configure:

  • brightness
  • color thresholds
  • history duration
  • audio response mode
  • orange / red alert hold time
  • LIVE mode and default dashboard page
  • control over the local dashboard display: selected page, touch enabled/disabled, fullscreen mode without the top menu
  • Wi-Fi settings
  • NTP, timezone, sync interval, and hostname
  • OTA settings
  • MQTT settings
  • outbound notifications: Slack incoming webhook, Telegram Bot API, WhatsApp Cloud API
  • microphone calibration
  • local access PIN
  • web user accounts
  • backup / restore / import / export of settings

Settings flow

Animated walkthrough of the settings area:

Animated SoundPanel 7 settings walkthrough

Main endpoints exposed by the firmware:

GET   /api/auth/status
POST  /api/auth/login
POST  /api/auth/logout
POST  /api/auth/bootstrap
GET   /api/users
POST  /api/users/create
POST  /api/users/password
POST  /api/users/delete
GET   /api/homeassistant
POST  /api/homeassistant
GET   /api/ha/status
GET   /api/status
POST  /api/pin
POST  /api/ui
GET   /api/live
POST  /api/live
GET   /api/wifi
POST  /api/wifi
GET   /api/time
POST  /api/time
GET   /api/config/export
POST  /api/config/import
POST  /api/config/backup
POST  /api/config/restore
POST  /api/config/reset_partial
GET   /api/ota
POST  /api/ota
GET   /api/release
POST  /api/release/check
POST  /api/release/install
GET   /api/mqtt
POST  /api/mqtt
GET   /api/notifications
POST  /api/notifications
POST  /api/notifications/test
POST  /api/calibrate
POST  /api/calibrate/clear
POST  /api/calibrate/mode
POST  /api/reboot
POST  /api/shutdown
POST  /api/factory_reset

GET /api/status includes:

  • dB, Leq, Peak
  • rolling history
  • uptime
  • Wi-Fi status, IP, and RSSI
  • NTP state / current time
  • MCU temperature
  • firmware version and build environment
  • OTA / MQTT state
  • LIVE, PIN, and calibration state
  • LVGL / heap runtime statistics

🖥️ Dashboard display

The web interface also lets you control how the 7" local panel is displayed:

  • choose the active view: overview, clock, LIVE, or sound meter
  • enable or disable touch input entirely
  • enable fullscreen per view to hide the top bar on the local screen
  • apply changes immediately without reflashing the firmware

These settings are stored through the firmware UI API and persist across reboots.

🔐 Web security and PIN

The project combines two protection layers:

  • web authentication with first-user bootstrap
  • local user management with password changes and user deletion
  • web sessions for administration and access to the live stream
  • local PIN protection for sensitive pages on the touchscreen panel

Associated endpoints:

GET   /api/auth/status
POST  /api/auth/login
POST  /api/auth/logout
POST  /api/auth/bootstrap
GET   /api/users
POST  /api/users/create
POST  /api/users/password
POST  /api/users/delete
POST  /api/pin

📡 Wi-Fi multi-AP

The panel can store up to 4 Wi-Fi networks so it can move between different environments more easily:

  • home, office, studio, phone hotspot, and similar setups
  • keep an already stored password when the field is left empty
  • support open networks when no password is provided
  • show the current connection state in the web interface

Associated endpoints:

GET   /api/wifi
POST  /api/wifi

💾 Configuration management

The firmware includes real configuration lifecycle tooling so settings do not have to be rebuilt manually:

  • full JSON export of the current configuration
  • configuration import from the web interface
  • local backup of the latest known state
  • one-click backup restore
  • partial reset by scope: ui, time, audio, calibration, ota, mqtt
  • last backup timestamp visible in status

Associated endpoints:

GET   /api/config/export
POST  /api/config/import
POST  /api/config/backup
POST  /api/config/restore
POST  /api/config/reset_partial

🕒 NTP clock

SoundPanel 7 also works as a large network clock. In a studio, control room, podcast setup, or broadcast workflow, reliable time with visible seconds is often just as useful as the sound reading itself.

The firmware handles:

  • automatic NTP synchronization
  • configurable NTP server
  • POSIX timezone support
  • configurable resync interval
  • local HH:MM display with a seconds badge
  • full time display in the web interface

The default NTP server is fr.pool.ntp.org.

📶 MQTT and Home Assistant

The panel can publish its metrics to an MQTT broker.

Available settings:

  • host
  • port
  • username / password
  • client ID
  • base topic
  • publish interval
  • retain

Published topics:

soundpanel7/availability
soundpanel7/state
soundpanel7/db
soundpanel7/leq
soundpanel7/peak
soundpanel7/live/state
soundpanel7/live/set
soundpanel7/wifi/rssi
soundpanel7/wifi/ip

With MQTT Discovery, the firmware publishes these Home Assistant entities automatically:

  • dB Instant
  • Leq
  • Peak
  • LIVE
  • WiFi RSSI
  • WiFi IP

🚨 Outbound alerting

The panel can send alerts to external services when a threshold is exceeded or when the sound level returns to normal.

Supported channels:

  • Slack through an incoming webhook
  • Telegram through the Bot API
  • WhatsApp through the Cloud API

Available capabilities:

  • notify on warning and/or critical alerts
  • optional notification when the level returns to normal
  • summary of active targets
  • last result and last successful delivery tracking
  • test delivery from the web interface

Associated endpoints:

GET   /api/notifications
POST  /api/notifications
POST  /api/notifications/test

Home Assistant support is available in two ways:

Option 1: MQTT Discovery

If your Home Assistant setup already relies on MQTT, this is the quickest path: enable MQTT on the panel, configure the broker, and entities will be created automatically.

Option 2: Native Home Assistant integration

A custom integration is included in:

custom_components/soundpanel7

The firmware advertises:

_soundpanel7._tcp.local.

The integration queries the dedicated /api/ha/status endpoint with a Home Assistant bearer token.

Sensors exposed by the native integration:

  • dB Instant
  • Leq
  • Peak
  • WiFi RSSI
  • WiFi IP
  • Uptime
Installation via HACS

The repository can now be added to HACS as a custom repository.

Requirements:

  • a published GitHub release (for example v0.1.0)
  • HACS already installed in Home Assistant

Steps:

  1. open HACS > Integrations
  2. open the top-right menu and choose Custom repositories
  3. add https://github.com/jjtronics/SoundPanel7
  4. select the Integration category
  5. search for SoundPanel 7 in HACS and install it
  6. restart Home Assistant
  7. restart SoundPanel 7
  8. open Settings > Devices & Services
  9. wait for auto-discovery
Manual installation

Installation example:

mkdir -p /config/custom_components
cp -R custom_components/soundpanel7 /config/custom_components/

After that:

  1. in the panel web UI, open Settings > Home Assistant
  2. generate or set a dedicated token
  3. restart Home Assistant
  4. restart SoundPanel 7
  5. open Settings > Devices & Services
  6. wait for auto-discovery

The config flow will ask for that token.

If the device does not show up, check:

  • the Home Assistant token is configured on the panel
  • same local network on both sides
  • manifest.json correctly copied
  • panel reachable through its web UI
  • mDNS not blocked by network setup or VLAN segmentation

🚀 OTA updates

The project now supports two complementary OTA flows:

  • classic network OTA through PlatformIO / espota
  • built-in GitHub OTA directly from the tablet web UI

Network OTA through PlatformIO

Once classic OTA is configured on the device, updates use:

pio run -e soundpanel7_ota -t upload

In platformio.ini, the OTA environment uses:

  • upload_protocol = espota
  • default port 3232
  • configurable OTA password

To avoid committing local IPs or serial ports, keep platformio.ini generic and put personal overrides in platformio.override.ini, which is ignored by Git. An example is provided in platformio.override.example.ini.

You can also pass the target IP directly:

pio run -e soundpanel7_ota -t upload --upload-port 192.168.1.137

For the 7B variant:

pio run -e soundpanel7b_ota -t upload
pio run -e soundpanel7b_ota -t upload --upload-port 192.168.1.138

espota assumes the build machine and the device are on the same reachable network.

GitHub OTA from the web interface

The firmware can also:

  • check the latest published GitHub release
  • compare it with the currently running firmware version
  • download firmware.bin directly from the release assets
  • verify the SHA-256 before applying the update
  • write the image to the inactive OTA partition and reboot automatically

The device uses this stable manifest entry point:

https://github.com/jjtronics/SoundPanel7/releases/latest/download/release-manifest.json

Recommended flow:

  1. publish a GitHub release
  2. open Settings > GitHub Releases on the tablet
  3. click Check for updates
  4. click Install

Starting with v0.2.7, the built-in GitHub OTA flow is considered reliable for full end-to-end device updates.

🎚️ Calibration workflow

The calibration system uses 3 or 5 reference points.

Recommended process:

  1. place a reference sound meter next to SoundPanel 7
  2. generate or observe a stable sound level
  3. enter the real measured value
  4. capture the reference points

Typical useful values in 3-point mode:

  • 45 dB
  • 65 dB
  • 85 dB

The firmware also lets you:

  • switch between 3-point and 5-point modes
  • configure the capture duration
  • clear the current calibration
  • keep fallback offsets in settings

The firmware stores those points and applies the correction curve accordingly.

Example JSON import for an analog MAX4466 microphone

To quickly restore a known calibration through the web UI (Configuration > Import JSON), here is a ready-to-use example for a MAX4466:

{
  "type": "soundpanel7-config",
  "version": 8,
  "audioSource": 1,
  "calibrationPointCount": 5,
  "calibrationCaptureSec": 3,
  "analogBaseOffsetDb": 0,
  "analogExtraOffsetDb": 15,
  "calPointRefDb": [35, 50, 70, 80, 90],
  "calPointRawLogRms": [1.3779, 1.4131, 1.9797, 2.4076, 2.9448],
  "calPointValid": [1, 1, 1, 1, 1],
  "analogCalibrationPointCount": 5,
  "analogCalibrationCaptureSec": 3,
  "analogBaseOffsetDb": 0,
  "analogExtraOffsetDb": 15,
  "analogCalPointRefDb": [35, 50, 70, 80, 90],
  "analogCalPointRawLogRms": [1.3779, 1.4131, 1.9797, 2.4076, 2.9448],
  "analogCalPointValid": [1, 1, 1, 1, 1]
}

audioSource: 1 maps to Analog Mic. This example fills both the active calibration and the persisted analog profile.

Reference meter validation

A short demo video shows SoundPanel 7 next to a professional sound level meter while white noise is increased progressively, to confirm the readings stay aligned.

Preview of the SoundPanel 7 versus reference sound meter validation video

Click the image to open the comparative MP4 video.

🧠 Firmware architecture

The core flow remains intentionally simple:

AudioEngine -> SharedHistory -> UI / Web / MQTT
                  |
                  -> data storage and playback

Main components:

📁 Project layout

.
├── src/                       Main firmware
├── custom_components/         Home Assistant integration
├── include/                   Shared headers
├── assets/                    Fonts
└── platformio.ini             Build, flash, and environments

🔧 Project status

The project is already useful and operational, but still evolving:

  • the audio chain still depends heavily on the real analog sensor hardware
  • final accuracy depends on calibration quality
  • some platformio.ini values are tuned for the current development machine
  • hardware and wiring documentation can still be expanded

In short: this is a serious project, a living one, and already a very practical tool.

📜 License

This project is released under the MIT License.

See LICENSE.

About

Sonomètre connecté avec écran tactile 7", historique temps réel, MQTT, OTA et interface Web.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors