Table des matières
ESP32-7SEG : Une horloge embarquée avec configuration réseau
ESP32-7SEG relie une horloge sur ESP32 à une configuration réseau et une interface HTTP. Le démarrage détermine si les paramètres Wi-Fi sauvegardés peuvent être réutilisés ou si le parcours de configuration est nécessaire.
- Langages
- 3Répartition du code
- Composants documentés
- 2Explorer les modules
- Documents source
- 2Lire les instructions
Langages du dépôtKotlin 58.26%3
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| Kotlin | 62 877 | |
| C++ | 42 693 | |
| C | 2 350 |
1. Aperçu
1.1. Pourquoi il existe
Firmware embarqué et contrôleur pour affichage 7 segments multi-chiffres sur microcontrôleur ESP32.
1.2. Cas d’usage
Affichage matériel déporté pour métriques ou domotique.
2. Cas d’utilisation
Un micrologiciel ESP32 et une appli Android qui pilotent un afficheur 7 segments I2C en minuterie ou chronomètre par Wi-Fi.
- Connecter la carte au Wi-Fi
- Opérateur de minuterieESP32 + afficheur
Sans identifiants enregistrés, wifi.cpp lance un point d’accès ESPTimer ; la page / sert alors le formulaire, et POST /connect enregistre SSID et mot de passe en NVS.
- Lancer minuterie ou chrono
- Opérateur de minuterieESP32 + afficheur
POST /timer-action avec action, mode, minutes et seconds démarre, met en pause ou arrête une tâche FreeRTOS (COUNTDOWN ou STOPWATCH) dans display.cpp.
- Fixer l’affichage directement
- Opérateur de minuterieESP32 + afficheur
POST /update-display avec minutes et seconds appelle updateDisplay() et diffuse un message displayUpdated.
- Suivre l’état en direct
- Appli AndroidESP32 + afficheur
Le WebSocket /ws diffuse des messages JSON timerStarted, timerStopped et displayUpdated ; le WebSocketClient Android les écoute.
- Piloter depuis Android
- Opérateur de minuterieAppli Android
TimerApiService.kt reprend les mêmes points d’accès avec Retrofit (/timer-action, /connect, /scan, /update-display, /device-info) derrière les fragments TimerControl et WiFiConnect.
2.1. Scénario : Préparer un compte à rebours de 5 minutes sur une carte neuve
- Câbler le module I2C Adafruit sur SDA, SCL, VCC et GND, puis flasher avec pio run -t upload (env firebeetle).
- Au premier démarrage, rien n’est en NVS : rejoindre le point d’accès ESPTimer et ouvrir la page de la carte.
- Choisir un réseau dans /scan et l’envoyer à /connect ; la carte l’enregistre et rejoint le réseau local.
- Lire la nouvelle adresse IP au moniteur série à 115200 bauds et l’ouvrir dans un navigateur ou l’appli Android.
- Envoyer action=start, mode=countdown, minutes=5, seconds=0 à /timer-action ; l’afficheur décompte et /ws signale chaque mise à jour.
Fichiers consultésREADME.mdplatformio.inisrc/main.cppsrc/wifi.cppsrc/web_server.cppsrc/display.cppinclude/display.handroid/app/src/main/java/com/esptimer/api/TimerApiService.kt.github/workflows/firmware.yml
3. Démarrage
Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.
4. Références du dépôt
Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.
Prérequis et premier essai
4.1. Prerequisites
README.md
- Hardware: ESP32 FireBeetle board (v1.0), Adafruit 7-segment display (I2C backpack), breadboard, and jumper wires.
- Software: Git, PlatformIO or Arduino IDE, and necessary ESP32 libraries.
4.2. Software Installation
README.md
- Clone the Repository:
- Open and Configure the Project: Load the project into PlatformIO or the Arduino IDE. Install any required libraries as specified in platformio.ini or the project documentation.
- Upload to the ESP32: Compile and upload the code to your ESP32 board to start the project.
4.3. Software Installation (readme.md)
readme.md
- Clone the repository to your local machine.
- Open the project with your preferred IDE or editor that supports PlatformIO or the Arduino IDE.
- Install the necessary libraries mentioned in the platformio.ini file or the Arduino project.
- Upload the code to your ESP32 FireBeetle board.
Configuration et utilisation
4.4. Hardware Setup
README.md
- Display Connections: Connect the Adafruit 7-segment display to the ESP32 using the I2C interface. Make sure to connect the SCL and SDA pins correctly, along with VCC and GND for power.
- Power Supply: Power the ESP32 board through USB or an external power supply to ensure stable operation.
4.5. Usage
README.md
- Access the Web Server: After booting, the ESP32 launches a web server. Find its IP address in the serial monitor and navigate to it using a web browser.
- Update Display via Web Interface: Use the web interface to input and submit the content you want to be displayed. The ESP32 will update the 7-segment display in real-time.
4.6. Hardware Setup (readme.md)
readme.md
- Connect the 7-segment display to the ESP32 according to the provided wiring diagram.
- Ensure a stable power supply for the ESP32 board.
4.7. Usage (readme.md)
readme.md
After uploading the code to your ESP32 board:
- Connect the ESP32 to a power source.
- The ESP32 starts a web server accessible within your local network.
- Find the ESP32’s IP address from your serial monitor and visit the provided IP using a web browser.
- Use the web interface to update the 7-segment display’s content.
Développement et contributions
4.8. Contributing
README.md
4.9. Contributing (readme.md)
readme.md
5. Fonctions et composants 2
- Démarrage et connectivité
- setup initialise NVS et vérifie le résultat. Il charge les paramètres enregistrés, tente une connexion et revient à setupWiFi en cas d’échec. Ce parcours sert aussi lorsqu’aucun paramètre n’est sauvegardé.
- Modules d’affichage et web
- Après la configuration réseau, main.cpp appelle startClockDisplay et setupWebServer. display.cpp, wifi.cpp et web_server.cpp séparent l’affichage matériel, la connexion et le traitement HTTP.
6. Architecture
Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.
Démarrage ESP32
- Vers Paramètres NVS
Paramètres NVS
- Depuis Démarrage ESP32
- Vers Connexion ou configuration Wi-Fi
Connexion ou configuration Wi-Fi
- Depuis Paramètres NVS
- Vers Affichage de l’horloge
- Vers Interface HTTP
Affichage de l’horloge
Interface HTTP
Mermaid Diagramme interactif
Vue générale des composants et des échanges vérifiés dans le dépôt.

flowchart LR
node_operator(("User"))
node_browser(("Browser"))
node_display_hw{{"7-segment display"}}
subgraph group_firmware["ESP32 firmware"]
node_boot["Firmware startup<br/>[main.cpp]"]
node_wifi["Wi-Fi setup<br/>[wifi.cpp]"]
node_credentials[("Wi-Fi credentials<br/>[wifi.cpp]")]
node_timer_display["Timer display<br/>[display.cpp]"]
end
subgraph group_web["Web control"]
node_http_server["HTTP and WebSocket server<br/>[web_server.cpp]"]
node_web_pages["Browser interface<br/>[web_page.h]"]
end
subgraph group_android["Android app"]
node_android_entry["Android navigation<br/>[MainActivity.kt]"]
node_timer_ui["Timer controls"]
node_wifi_ui["Wi-Fi onboarding"]
node_settings_ui["Settings"]
node_browser_ui["Embedded browser view"]
node_stop_receiver["Timer stop receiver"]
node_settings_adapter["Settings list adapter<br/>[SettingsAdapter.kt]"]
end
subgraph group_android_net["Android networking"]
node_timer_api["Timer API contract<br/>[TimerApiService.kt]"]
node_retrofit["HTTP client setup"]
node_ws_client["WebSocket client<br/>[WebSocketClient.kt]"]
node_preferences[("App preferences")]
end
node_operator -->|"controls"| node_browser
node_browser -->|"submits controls"| node_http_server
node_boot -->|"loads or configures"| node_wifi
node_boot -->|"starts display"| node_timer_display
node_boot -->|"starts server"| node_http_server
node_wifi -->|"reads and writes"| node_credentials
node_http_server -->|"handles Wi-Fi routes"| node_wifi
node_http_server -->|"dispatches timer updates"| node_timer_display
node_http_server -->|"serves pages"| node_web_pages
node_timer_display -->|"drives display"| node_display_hw
node_operator -.->|"uses app"| node_android_entry
node_settings_ui -->|"uses adapter"| node_settings_adapter
node_retrofit -->|"creates service"| node_timer_api
node_retrofit -->|"initializes preferences"| node_preferences
node_timer_ui -->|"registers timer events"| node_stop_receiver
node_timer_api -.->|"calls matching routes"| node_http_server
node_ws_client -.->|"connects to socket"| node_http_server
group_android --> group_android_net
class node_boot,node_wifi,node_credentials,node_timer_display,node_operator,node_browser toneBlue
class node_http_server,node_web_pages toneAmber
class node_android_entry,node_timer_ui,node_wifi_ui,node_settings_ui,node_browser_ui,node_stop_receiver,node_settings_adapter toneMint
class node_timer_api,node_retrofit,node_ws_client,node_preferences toneRose
class node_display_hw toneIndigo
Un micrologiciel ESP32 pour une minuterie à afficheur sept segments contrôlée par le réseau, avec une application Android. Le démarrage charge le Wi-Fi, lance l’affichage et le serveur web, puis les interfaces envoient les commandes de minuterie et de configuration.
- Composants
- 20
- Connexions
- 21
- Liens appuyés par le code
- 18/21
Version texte du diagramme
Le diagramme regroupe les liens parallèles entre groupes : il en montre 18 sur 21. Liste complète :
- User → Browser (controls)
- Browser → HTTP and WebSocket server (submits controls)
- Firmware startup → Wi-Fi setup (loads or configures)
- Firmware startup → Timer display (starts display)
- Firmware startup → HTTP and WebSocket server (starts server)
- Wi-Fi setup → Wi-Fi credentials (reads and writes)
- HTTP and WebSocket server → Wi-Fi setup (handles Wi-Fi routes)
- HTTP and WebSocket server → Timer display (dispatches timer updates)
- HTTP and WebSocket server → Browser interface (serves pages)
- Timer display → 7-segment display (drives display)
- User → Android navigation (uses app)
- Timer controls → HTTP client setup (requests timer actions)
- Timer controls → WebSocket client (opens timer socket)
- Wi-Fi onboarding → HTTP client setup (sends credentials)
- Settings → Settings list adapter (uses adapter)
- Settings → HTTP client setup (loads device data)
- HTTP client setup → Timer API contract (creates service)
- HTTP client setup → App preferences (initializes preferences)
- Timer controls → Timer stop receiver (registers timer events)
- Timer API contract → HTTP and WebSocket server (calls matching routes)
- WebSocket client → HTTP and WebSocket server (connects to socket)
Suivre un parcours dans le code
Suivez la branche des paramètres sauvegardés dans setup. Le réseau mémorisé est essayé d’abord, mais un échec rejoint setupWiFi. L’affichage et le serveur web démarrent après cette branche.
7. Dossier technique
Établi à partir du code au commit 6cac20e (39 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.
7.1. Couches et modules
Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.
Mermaid Vue en couches
flowchart TB
subgraph L_presentation["Présentation"]
direction TB
presentation_0["android/res<br/>39 fichiers"]
end
subgraph L_interface["Points d’entrée et API"]
direction TB
interface_0["android/esptimer<br/>3 fichiers"]
interface_1["src<br/>2 fichiers"]
interface_2["include<br/>1 fichier"]
end
subgraph L_application["Services applicatifs"]
direction TB
application_0["android/esptimer<br/>8 fichiers"]
application_1["android/example<br/>2 fichiers"]
application_2["android/main<br/>1 fichier"]
end
subgraph L_core["Source principale"]
direction TB
core_0["include<br/>5 fichiers"]
core_1["src<br/>3 fichiers"]
end
subgraph L_tests["Tests"]
direction TB
tests_0["android<br/>4 fichiers"]
end
subgraph L_hosting["Build, CI et hébergement"]
direction TB
hosting_0["(root)<br/>1 fichier"]
hosting_1[".github<br/>1 fichier"]
end
L_presentation ~~~ L_interface
L_interface ~~~ L_application
L_application ~~~ L_core
L_core ~~~ L_tests
L_core ~~~ L_hosting
| Module | Couche | Fichiers | Types | Extensions |
|---|---|---|---|---|
android/res | Présentation | 39 | 0 | .xml |
android/esptimer | Services applicatifs | 11 | 14 | .kt |
include | Source principale | 6 | 0 | .h |
src | Source principale | 5 | 1 | .cpp |
android/example | Services applicatifs | 2 | 2 | .kt |
android/main | Services applicatifs | 1 | 0 | .xml |
7.2. Modèle C4
Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.
UML 1 · Contexte du système
La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
System(SYS, "ESP32-7SEG", "ESP32-7SEG relie une horloge sur ESP32 à une configuration réseau et …")
@enduml
UML 2 · Conteneurs
Un niveau plus près : les parties qui s’exécutent séparément dans le projet, leur langage principal et le chemin des appels entre elles. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
System_Boundary(SYS, "ESP32-7SEG") {
Container(APP, "ESP32-7SEG", "Kotlin")
}
@enduml
UML 3 · Composants et couches
Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "ESP32-7SEG") {
Boundary(L0, "Présentation", "layer") {
Component(M0_0, "android/res", ".xml", "39 fichiers")
}
Boundary(L1, "Points d’entrée et API", "layer") {
Component(M1_0, "android/esptimer", "Kotlin", "3 fichiers")
Component(M1_1, "src", "C++", "2 fichiers")
Component(M1_2, "include", "C/C++", "1 fichiers")
}
Boundary(L2, "Services applicatifs", "layer") {
Component(M2_0, "android/esptimer", "Kotlin", "8 fichiers")
Component(M2_1, "android/example", "Kotlin", "2 fichiers")
Component(M2_2, "android/main", ".xml", "1 fichiers")
}
Boundary(L3, "Source principale", "layer") {
Component(M3_0, "include", "C/C++", "5 fichiers")
Component(M3_1, "src", "C++", "3 fichiers")
}
Boundary(L4, "Tests", "layer") {
Component(M4_0, "android", "Kotlin", "4 fichiers")
}
Boundary(L5, "Build, CI et hébergement", "layer") {
Component(M5_0, "(root)", ".ini", "1 fichiers")
Component(M5_1, ".github", ".yml", "1 fichiers")
}
}
@enduml
UML 4 · Code
Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.
Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "ESP32-7SEG" {
package "android/app/src/main/java/com/esptimer/fragment/TimerControlFragment.kt" as F0 {
class "TimerControlFragment" as T0_0 {
onCreateView()
onViewCreated()
onStart()
onStop()
setupUI()
showPopupMenu()
}
}
package "android/app/src/main/java/com/esptimer/fragment/WiFiConnectFragment.kt" as F1 {
class "WiFiConnectFragment" as T1_0 {
onCreateView()
onViewCreated()
requestLocationPermission()
checkLocationServiceAndInitiateWifiScan()
isLocationEnabled()
askToEnableLocation()
}
}
package "android/app/src/main/java/com/esptimer/fragment/SettingsFragment.kt" as F2 {
class "SettingsFragment" as T2_0 {
onCreateView()
onViewCreated()
fetchDeviceInfo()
checkWifiPermissionAndFetchSSID()
onRequestPermissionsResult()
fetchWifiSSID()
}
}
package "android/app/src/main/java/com/example/esptimer/MainActivity.kt" as F3 {
class "MainActivity" as T3_0 {
onCreate()
onRequestPermissionsResult()
loadWifiNetworks()
connectToWifi()
onDestroy()
}
}
package "android/app/src/main/java/com/esptimer/fragment/WebBrowserFragment.kt" as F4 {
class "WebBrowserFragment" as T4_0 {
onCreate()
onCreateView()
onDestroyView()
}
}
package "android/app/src/main/java/com/example/esptimer/TimerControl.kt" as F5 {
class "TimerControl" as T5_0 {
onCreate()
callApi()
}
}
package "android/app/src/main/java/com/esptimer/api/WebSocketClient.kt" as F6 {
class "WebSocketEventListener" as T6_0 {
onOpen()
onMessage()
onClosing()
onFailure()
}
}
package "android/app/src/main/java/com/esptimer/adapter/SettingsAdapter.kt" as F7 {
class "SettingItem" as T7_0 {
}
}
package "src/display.cpp" as F8 {
class "Callbacks" as T8_0 {
timerCallback
displayCallback
callbacks
}
}
}
@enduml
7.3. Flux de données
Les appels du diagramme GitDiagram, dans l’ordre où on les rencontre depuis les points d’entrée. GitDiagram produit ce graphe par IA; les chemins de fichiers cités ont été comparés à l’arbre du dépôt.
Mermaid Diagramme de séquence
sequenceDiagram
autonumber
participant P0 as Firmware startup
participant P1 as Wi-Fi setup
participant P2 as Timer display
participant P3 as HTTP and WebSocket server
participant P4 as Timer controls
participant P5 as HTTP client setup
participant P6 as WebSocket client
participant P7 as Timer stop receiver
participant P8 as Wi-Fi onboarding
participant P9 as Settings
participant P10 as Settings list adapter
participant P11 as User
participant P12 as Browser
participant P13 as Android navigation
participant P14 as Wi-Fi credentials
participant P15 as 7-segment display
participant P16 as Browser interface
P0->>P1: loads or configures
P0->>P2: starts display
P0->>P3: starts server
P4->>P5: requests timer actions
P4->>P6: opens timer socket
P4->>P7: registers timer events
P8->>P5: sends credentials
P9->>P10: uses adapter
P9->>P5: loads device data
P11->>P12: controls
P11--)P13: uses app
P1->>P14: reads and writes
P2->>P15: drives display
P3->>P1: handles Wi-Fi routes
P3->>P2: dispatches timer updates
P3->>P16: serves pages
Étapes en texte
- Firmware startup vers Wi-Fi setup loads or configures
- Firmware startup vers Timer display starts display
- Firmware startup vers HTTP and WebSocket server starts server
- Timer controls vers HTTP client setup requests timer actions
- Timer controls vers WebSocket client opens timer socket
- Timer controls vers Timer stop receiver registers timer events
- Wi-Fi onboarding vers HTTP client setup sends credentials
- Settings vers Settings list adapter uses adapter
- Settings vers HTTP client setup loads device data
- User vers Browser controls
- User vers Android navigation uses app
- Wi-Fi setup vers Wi-Fi credentials reads and writes
- Timer display vers 7-segment display drives display
- HTTP and WebSocket server vers Wi-Fi setup handles Wi-Fi routes
- HTTP and WebSocket server vers Timer display dispatches timer updates
- HTTP and WebSocket server vers Browser interface serves pages
- HTTP client setup vers Timer API contract creates service
- HTTP client setup vers App preferences initializes preferences
- WebSocket client vers HTTP and WebSocket server connects to socket
- Browser vers HTTP and WebSocket server submits controls
- Timer API contract vers HTTP and WebSocket server calls matching routes
7.4. Interface publique
Du code extérieur peut utiliser tout ce qui est listé ici. Le projet déclare aussi 17 types publics.
Points d’entrée
src/main.cppfichier d’entrée
En-têtes publics 6
include/ble.h include/config.h include/display.h include/web_page.h include/web_server.h include/wifi.h
7.5. Interface privée
Ces noms sont internes selon les conventions du langage: tiret bas initial, private, static ou pub(crate).
- Méthode privée ou interne
- 42
setupNavigationUIandroid/app/src/main/java/com/esptimer/MainActivity.kt:63hasPermissionsandroid/app/src/main/java/com/esptimer/MainActivity.kt:73fetchDeviceInfoandroid/app/src/main/java/com/esptimer/fragment/SettingsFragment.kt:41
7.6. Services
Adaptateur 1
SettingsAdapteronCreateViewHolder, onBindViewHolder, getItemCount
Service 1
TimerApiServiceperformTimerAction, resetWifiCredentials, connectToWiFi et 4 autres
Client 1
WebSocketClientconnect, send, close
7.7. Entités et modèle de données 2
Mermaid Diagramme de classes des entités
classDiagram
direction LR
class E0["SettingItem"] {
}
class E1["Callbacks"] {
+TimerCallback timerCallback
+DisplayCallback displayCallback
+static callbacks
}
Une flèche relie un champ à l’entité que son type nomme.
| Entité | Nature | Premiers champs |
|---|---|---|
SettingItem | Enregistrement ou interface | |
Callbacks | Structure de données | timerCallback, displayCallback, callbacks |
7.8. Logique métier
Une fois écartés le code d’interface et les services et entités ci-dessus, ces classes ont le plus de méthodes.
TimerControlFragmentServices applicatifs, 27 méthodesonCreateView, onViewCreated, onStart, onStop, setupUI, showPopupMenuWiFiConnectFragmentServices applicatifs, 15 méthodesonCreateView, onViewCreated, requestLocationPermission, checkLocationServiceAndInitiateWifiScan, isLocationEnabled, askToEnableLocationSettingsFragmentServices applicatifs, 9 méthodesonCreateView, onViewCreated, fetchDeviceInfo, checkWifiPermissionAndFetchSSID, onRequestPermissionsResult, fetchWifiSSIDMainActivityServices applicatifs, 5 méthodesonCreate, onRequestPermissionsResult, loadWifiNetworks, connectToWifi, onDestroyWebBrowserFragmentServices applicatifs, 3 méthodesonCreate, onCreateView, onDestroyViewTimerControlServices applicatifs, 2 méthodesonCreate, callApiWebSocketEventListenerPoints d’entrée et API, 4 méthodesonOpen, onMessage, onClosing, onFailure
7.9. Base de données et persistance
7.10. Intégrations externes
Clients HTTP
Hôtes nommés dans le code
esptimer.local3 fichiersandroid/app/src/main/java/com/esptimer/api/RetrofitInstance.kt:13
7.11. Stack et dépendances
Embedded (PlatformIO) platformio.ini 1 à l’exécution
platform espressif32 board esp32dev framework arduino
JVM (Gradle) android/app/build.gradle.kts 19 à l’exécution, 3 dev
compileSdk 34 minSdk 24 targetSdk 34 jvmTarget 1
Dépendances externes
19 paquets déclarés (16 à l’exécution, 3 pour le développement) dans platformio.ini, android/app/build.gradle.kts.
Tableau des paquets 19
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
bblanchon/ArduinoJson | — | exécution | — | registry.platformio.org |
androidx.core:core-ktx:1.12.0 | — | exécution | — | central.sonatype.com |
androidx.appcompat:appcompat:1.6.1 | — | exécution | — | central.sonatype.com |
androidx.preference:preference:1.2.1 | — | exécution | — | central.sonatype.com |
com.google.android.material:material:1.11.0 | — | exécution | — | central.sonatype.com |
androidx.constraintlayout:constraintlayout:2.1.4 | — | exécution | — | central.sonatype.com |
com.squareup.okhttp3:okhttp:4.12.0 | — | exécution | — | central.sonatype.com |
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0 | — | exécution | — | central.sonatype.com |
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 | — | exécution | — | central.sonatype.com |
androidx.cardview:cardview:1.0.0 | — | exécution | — | central.sonatype.com |
androidx.navigation:navigation-fragment-ktx:2.7.7 | — | exécution | — | central.sonatype.com |
androidx.navigation:navigation-ui-ktx:2.7.7 | — | exécution | — | central.sonatype.com |
com.squareup.retrofit2:retrofit:2.9.0 | — | exécution | — | central.sonatype.com |
com.squareup.retrofit2:converter-gson:2.9.0 | — | exécution | — | central.sonatype.com |
com.squareup.retrofit2:converter-scalars:2.9.0 | — | exécution | — | central.sonatype.com |
com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2 | — | exécution | — | central.sonatype.com |
junit:junit:4.13.2 | — | développement | — | central.sonatype.com |
androidx.test.ext:junit:1.1.5 | — | développement | — | central.sonatype.com |
androidx.test.espresso:espresso-core:3.5.1 | — | développement | — | central.sonatype.com |
7.12. Pipeline CI/CD
1 workflow GitHub Actions, 2 tâches. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.
Mermaid Déroulement du pipeline
flowchart LR
subgraph wf0["Build and Release Firmware"]
direction LR
wf0_build[["build<br/>ubuntu-latest"]]
wf0_release[["release<br/>ubuntu-latest"]]
end
t0(["push"])
d0[("Versions GitHub")]
t0 --> wf0_build
wf0_build --> wf0_release
wf0_release -.-> d0
| Workflow | Déclencheurs | Tâches | Publie vers |
|---|---|---|---|
Build and Release Firmware.github/workflows/firmware.yml | push |
| Versions GitHub |
7.13. Déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
ci[["GitHub Actions<br/>1 workflow"]]
pub_GitHub_Releases[("Versions GitHub")]
repo -->|"push ou demande de fusion"| ci
ci -->|"publie"| pub_GitHub_Releases
UML Déploiement
Le nœud extérieur est l’endroit où le code s’exécute. Chaque image de base pointe vers ce qu’elle construit, les flèches pleines mènent aux bases de données et les pointillées aux services externes. Rendu avec uml-mcp.
Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
node "Build firmware PlatformIO" as H {
artifact "ESP32-7SEG" as APP
}
cloud "WebSocket" as E0
APP ..> E0
@enduml
Où il s’exécute
Publié vers
7.14. Supervision
Ce que le code consigne, mesure et expose pour savoir s’il fonctionne.
7.15. Sécurité
Contrôles
Chaîne d’approvisionnement
7.16. Tests automatisés
- Fichiers de test
- 4
- Fichiers source
- 64
- Cas de test, environ
- 4
- Tests unitaires
- 4
Aucun rapport chiffré de couverture dans les sources analysées.
Où sont les tests
android/app/src/androidTest/java/com/esptimer 1 android/app/src/androidTest/java/com/example/esptimer 1 android/app/src/test/java/com/esptimer 1 android/app/src/test/java/com/example/esptimer 1
8. Types et structure des fichiers
21 types déclarés, dont 12 dans l’aperçu des relations de base.
Diagramme des types
classDiagram
direction TB
class t0f7089087495["Callbacks"] {
<<struct>>
}
class tc0b1722c8a7f["ExampleInstrumentedTest"] {
useAppContext()
}
class taaaa0937cb8a["ExampleInstrumentedTest"] {
useAppContext()
}
class t0fd594821bdd["MainActivity"] {
onCreate()
setupNavigationUI()
hasPermissions()
onRequestPermissionsResult()
}
class tf36f30cd8e65["SettingsAdapter"] {
onCreateViewHolder()
onBindViewHolder()
getItemCount()
}
class tb59d4cfbe0b1["SettingsViewHolder"] {
}
class tc5d344b351ed["SettingItem"] {
}
class tce24fcf8fc6e["TimerApiService"] {
performTimerAction()
resetWifiCredentials()
connectToWiFi()
scanForNetworks()
}
class t64725d5d3582["WebSocketClient"] {
connect()
send()
close()
}
class t181736c31b5e["WebSocketEventListener"] {
onOpen()
onMessage()
onClosing()
onFailure()
}
class tf5e33f3603df["PreferencesHelper"] {
}
class t1902f7090575["SettingsFragment"] {
onCreateView()
onViewCreated()
fetchDeviceInfo()
checkWifiPermissionAndFetchSSID()
}
class b4be9ca085545["AppCompatActivity"] {
<<unresolved_base>>
}
t0fd594821bdd ..> b4be9ca085545 : declared base
class bc58b80af594e["RecyclerView"] {
<<unresolved_base>>
}
tf36f30cd8e65 ..> bc58b80af594e : declared base
tb59d4cfbe0b1 ..> bc58b80af594e : declared base
class b995bb1f4b9f4["Fragment"] {
<<unresolved_base>>
}
t1902f7090575 ..> b995bb1f4b9f4 : declared base
Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.
9. Référence
36 / 36 fichiers admissibles lus (113 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 1 diagnostic de syntaxe.
Ce que couvre l’analyse
Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.
Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.
11. Fichiers à lire 4
12. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
HTTP
Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.
Port publié
Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.
Compilation
Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.
Micrologiciel
Un logiciel exécuté sur un appareil ou microcontrôleur pour contrôler son matériel et ses communications.
13. Références
- antoinebou12. (2026, 5 novembre). ESP32-7SEG. [Software repository] github.com.
- antoinebou12. (2026, 5 novembre). ESP32-7SEG: README. [Repository documentation] github.com.
- antoinebou12. (2026, 5 novembre). src/main.cpp. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). src/display.cpp. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). src/web_server.cpp. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). platformio.ini. [Source file] github.com.
- Boucher, A. (2026, 13 avril). ESP32-7SEG. [Project article] antoineboucher.info.
- Boucher, A. (2026, 23 octobre). ESP32-7SEG : Une horloge embarquée avec configuration réseau. [Project article] antoineboucher.info.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.