Aller au contenu
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.

Matériel et infographie
  • Mis à jour
  • 1
  • Kotlin · 58.26%
  • MIT
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.

Kotlin58.26%
58.26%62 877 octets
C++39.56%
39.56%42 693 octets
C2.18%
2.18%2 350 octets
Langage%Octets
Kotlin58.26%62 877
C++39.56%42 693
C2.18%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.

Diagramme de cas d’utilisation de ESP32-7SEG : Connecter la carte au Wi-Fi; Lancer minuterie ou chrono; Fixer l’affichage directement; Suivre l’état en direct; Piloter depuis AndroidESP32-7SEGConnecter la carte au Wi-FiLancer minuterie ou chronoFixer l’affichage directementSuivre l’état en directPiloter depuis AndroidOpérateur de minuterie«système»ESP32 + afficheur«système»Appli Android
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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

  1. Câbler le module I2C Adafruit sur SDA, SCL, VCC et GND, puis flasher avec pio run -t upload (env firebeetle).
  2. Au premier démarrage, rien n’est en NVS : rejoindre le point d’accès ESPTimer et ouvrir la page de la carte.
  3. Choisir un réseau dans /scan et l’envoyer à /connect ; la carte l’enregistre et rejoint le réseau local.
  4. Lire la nouvelle adresse IP au moniteur série à 115200 bauds et l’ouvrir dans un navigateur ou l’appli Android.
  5. 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.
Lire les instructions complètes ↗

4.2. Software Installation

README.md

  1. Clone the Repository:
  2. 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.
  3. Upload to the ESP32: Compile and upload the code to your ESP32 board to start the project.
Lire les instructions complètes ↗

4.3. Software Installation (readme.md)

readme.md

  1. Clone the repository to your local machine.
  2. Open the project with your preferred IDE or editor that supports PlatformIO or the Arduino IDE.
  3. Install the necessary libraries mentioned in the platformio.ini file or the Arduino project.
  4. Upload the code to your ESP32 FireBeetle board.
Lire les instructions complètes ↗
Configuration et utilisation

4.4. Hardware Setup

README.md

  1. 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.
  2. Power Supply: Power the ESP32 board through USB or an external power supply to ensure stable operation.
Lire les instructions complètes ↗

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.
Lire les instructions complètes ↗

4.6. Hardware Setup (readme.md)

readme.md

  1. Connect the 7-segment display to the ESP32 according to the provided wiring diagram.
  2. Ensure a stable power supply for the ESP32 board.
Lire les instructions complètes ↗

4.7. Usage (readme.md)

readme.md

After uploading the code to your ESP32 board:

  1. Connect the ESP32 to a power source.
  2. The ESP32 starts a web server accessible within your local network.
  3. Find the ESP32’s IP address from your serial monitor and visit the provided IP using a web browser.
  4. Use the web interface to update the 7-segment display’s content.
Lire les instructions complètes ↗
Développement et contributions

4.8. Contributing

README.md

We welcome contributions! If you have suggestions for improvements or find a bug, please feel free to fork the repository, make your changes, and submit a pull request.
Lire les instructions complètes ↗

4.9. Contributing (readme.md)

readme.md

Contributions to improve the project are welcome. Please feel free to fork the repository and submit pull requests.
Lire les instructions complètes ↗
Documentation source

2 documents lus parmi 2 candidats.

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.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de ESP32-7SEG
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
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
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
android/resPrésentation390.xml
android/esptimerServices applicatifs1114.kt
includeSource principale60.h
srcSource principale51.cpp
android/exampleServices applicatifs22.kt
android/mainServices applicatifs10.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
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
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
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
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
  1. Firmware startup vers Wi-Fi setup loads or configures
  2. Firmware startup vers Timer display starts display
  3. Firmware startup vers HTTP and WebSocket server starts server
  4. Timer controls vers HTTP client setup requests timer actions
  5. Timer controls vers WebSocket client opens timer socket
  6. Timer controls vers Timer stop receiver registers timer events
  7. Wi-Fi onboarding vers HTTP client setup sends credentials
  8. Settings vers Settings list adapter uses adapter
  9. Settings vers HTTP client setup loads device data
  10. User vers Browser controls
  11. User vers Android navigation uses app
  12. Wi-Fi setup vers Wi-Fi credentials reads and writes
  13. Timer display vers 7-segment display drives display
  14. HTTP and WebSocket server vers Wi-Fi setup handles Wi-Fi routes
  15. HTTP and WebSocket server vers Timer display dispatches timer updates
  16. HTTP and WebSocket server vers Browser interface serves pages
  17. HTTP client setup vers Timer API contract creates service
  18. HTTP client setup vers App preferences initializes preferences
  19. WebSocket client vers HTTP and WebSocket server connects to socket
  20. Browser vers HTTP and WebSocket server submits controls
  21. 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

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

7.6. Services

Adaptateur 1

Service 1

  • TimerApiServiceperformTimerAction, resetWifiCredentials, connectToWiFi et 4 autres

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éNaturePremiers champs
SettingItemEnregistrement ou interface
CallbacksStructure de donnéestimerCallback, 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.

TimerControlFragment Services applicatifs, 27 méthodes
onCreateView, onViewCreated, onStart, onStop, setupUI, showPopupMenu
WiFiConnectFragment Services applicatifs, 15 méthodes
onCreateView, onViewCreated, requestLocationPermission, checkLocationServiceAndInitiateWifiScan, isLocationEnabled, askToEnableLocation
SettingsFragment Services applicatifs, 9 méthodes
onCreateView, onViewCreated, fetchDeviceInfo, checkWifiPermissionAndFetchSSID, onRequestPermissionsResult, fetchWifiSSID
MainActivity Services applicatifs, 5 méthodes
onCreate, onRequestPermissionsResult, loadWifiNetworks, connectToWifi, onDestroy
WebBrowserFragment Services applicatifs, 3 méthodes
onCreate, onCreateView, onDestroyView
TimerControl Services applicatifs, 2 méthodes
onCreate, callApi
WebSocketEventListener Points d’entrée et API, 4 méthodes
onOpen, onMessage, onClosing, onFailure

7.9. Base de données et persistance

7.10. Intégrations externes

Clients HTTP

fetch OkHttp / Retrofit

Hôtes nommés dans le code

7.11. Stack et dépendances

Embedded (PlatformIO) platformio.ini 1 à l’exécution

platform espressif32 board esp32dev framework arduino

Ouvrir le manifeste

JVM (Gradle) android/app/build.gradle.kts 19 à l’exécution, 3 dev

compileSdk 34 minSdk 24 targetSdk 34 jvmTarget 1

Ouvrir le manifeste

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
Dépendances externes
PaquetVersionUsageRôleRegistre
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
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
Build and Release Firmware
.github/workflows/firmware.yml
push
  • build ubuntu-latest
    Checkout Repository · Set up Python · Install PlatformIO · Build Firmware · Archive Production Artifacts · Upload Artifact
  • release ← build ubuntu-latest
    Download Firmware Artifact · Create GitHub Release
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
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

  1. antoinebou12. (2026, 5 novembre). ESP32-7SEG. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). ESP32-7SEG: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). src/main.cpp. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). src/display.cpp. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). src/web_server.cpp. [Source file] github.com.
  6. antoinebou12. (2026, 5 novembre). platformio.ini. [Source file] github.com.
  7. Boucher, A. (2026, 13 avril). ESP32-7SEG. [Project article] antoineboucher.info.
  8. 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.