# hasona57/pcb-drone architecture

> Architecture diagram of the GitHub repository hasona57/pcb-drone, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hasona57/pcb-drone
- Repository: https://github.com/hasona57/pcb-drone

## Overview

This repository combines a custom ESP32 drone PCB project with ESP-Drone firmware. The principal runtime workflow is app-issued flight commands entering the firmware, being interpreted as setpoints, processed by stabilization and control, then sent to the motors; sensor readings inform state estimation along the way. The tree also shows communications, positioning, persistent storage, and configuration capabilities. Most firmware source was not excerpted, so several connections are shown as dashed, unverified relationships rather than asserted call paths.

Main entry points: [`Firmware/esp-drone/components/core/crazyflie/modules/src/stabilizer.c`](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/stabilizer.c) (Stabilizer), [`Firmware/esp-drone/components/core/crazyflie/hal/src/wifilink.c`](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/hal/src/wifilink.c) (Wi-Fi link), [`Firmware/esp-drone/components/core/crazyflie/modules/src/commander.c`](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/commander.c) (Command handling), [`Firmware/esp-drone/main/main.c`](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/main/main.c) (Firmware entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_comms["Command and communications"]
  node_main["Firmware entry<br/>[main.c]"]
  node_wifi["Wi-Fi link<br/>[wifilink.c]"]
  node_commander["Command handling<br/>[commander.c]"]
  node_crtp["CRTP transport<br/>[crtp.c]"]
end

subgraph group_flight["Flight control"]
  node_stabilizer["Stabilizer<br/>[stabilizer.c]"]
  node_estimator["State estimation<br/>[estimator.c]"]
  node_indi["INDI control<br/>[controller_indi.c]"]
  node_position["Position control"]
end

subgraph group_hardware["Board and hardware"]
  node_motors["Motor output<br/>[motors.c]"]
  node_sensors["Sensor drivers<br/>[sensors.c]"]
  node_pcb["ESP32 drone PCB"]
end

subgraph group_positioning["Positioning"]
  node_tdoa["TDoA engine<br/>[tdoaEngine.c]"]
  node_tdoa_storage["Anchor data<br/>[tdoaStorage.c]"]
  node_clock["Clock correction"]
end

subgraph group_support["Firmware services"]
  node_storage["Storage service<br/>[storage.c]"]
  node_kve["Key-value store<br/>[kve_storage.c]"]
  node_eeprom[("EEPROM<br/>[eeprom.c]")]
  node_config["Firmware configuration<br/>[config.h]"]
end

node_app(("Android app"))

node_app -.->|"sends commands"| node_wifi
node_wifi -.->|"delivers commands"| node_commander
node_main -.->|"starts link"| node_wifi
node_main -.->|"starts flight loop"| node_stabilizer
node_commander -.->|"sets commands"| node_stabilizer
node_crtp -.->|"routes setpoints"| node_commander
node_sensors -.->|"supplies readings"| node_estimator
node_estimator -.->|"provides state"| node_stabilizer
node_stabilizer -.->|"dispatches control"| node_position
node_stabilizer -.->|"dispatches control"| node_indi
node_position -.->|"provides references"| node_indi
node_stabilizer -.->|"sends motor output"| node_motors
node_pcb -.->|"hosts sensors"| node_sensors
node_pcb -.->|"connects ESCs"| node_motors
node_tdoa -.->|"uses anchor data"| node_tdoa_storage
node_tdoa -->|"updates correction"| node_clock
node_storage -->|"stores values"| node_kve
node_storage -->|"reads and writes"| node_eeprom

click node_main "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/main/main.c"
click node_wifi "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/hal/src/wifilink.c"
click node_commander "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/commander.c"
click node_crtp "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/crtp.c"
click node_stabilizer "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/stabilizer.c"
click node_estimator "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/estimator.c"
click node_indi "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/controller_indi.c"
click node_position "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/position_controller_indi.c"
click node_motors "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/drivers/general/motors/motors.c"
click node_sensors "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/hal/src/sensors.c"
click node_tdoa "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/tdoa/tdoaEngine.c"
click node_tdoa_storage "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/tdoa/tdoaStorage.c"
click node_clock "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/clockCorrectionEngine.c"
click node_storage "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/hal/src/storage.c"
click node_kve "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/kve/kve_storage.c"
click node_eeprom "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/drivers/i2c_devices/eeprom/eeprom.c"
click node_config "https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/config/include/config.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_wifi,node_commander,node_crtp toneBlue
class node_stabilizer,node_estimator,node_indi,node_position toneAmber
class node_motors,node_sensors,node_pcb toneMint
class node_tdoa,node_tdoa_storage,node_clock toneRose
class node_storage,node_kve,node_eeprom,node_config,node_app toneIndigo
```

## Components

### Command and communications

- [Firmware entry](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/main/main.c): `Firmware/esp-drone/main/main.c`
- [Wi-Fi link](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/hal/src/wifilink.c): `Firmware/esp-drone/components/core/crazyflie/hal/src/wifilink.c`
- [Command handling](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/commander.c): `Firmware/esp-drone/components/core/crazyflie/modules/src/commander.c`
- [CRTP transport](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/crtp.c): `Firmware/esp-drone/components/core/crazyflie/modules/src/crtp.c`

### Flight control

- [Stabilizer](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/stabilizer.c): `Firmware/esp-drone/components/core/crazyflie/modules/src/stabilizer.c`
- [State estimation](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/estimator.c): `Firmware/esp-drone/components/core/crazyflie/modules/src/estimator.c`
- [INDI control](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/controller_indi.c): `Firmware/esp-drone/components/core/crazyflie/modules/src/controller_indi.c`
- [Position control](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/modules/src/position_controller_indi.c): `Firmware/esp-drone/components/core/crazyflie/modules/src/position_controller_indi.c`

### Board and hardware

- [Motor output](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/drivers/general/motors/motors.c): `Firmware/esp-drone/components/drivers/general/motors/motors.c`
- [Sensor drivers](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/hal/src/sensors.c): `Firmware/esp-drone/components/core/crazyflie/hal/src/sensors.c`
- **ESP32 drone PCB**

### Positioning

- [TDoA engine](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/tdoa/tdoaEngine.c): `Firmware/esp-drone/components/core/crazyflie/utils/src/tdoa/tdoaEngine.c`
- [Anchor data](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/tdoa/tdoaStorage.c): `Firmware/esp-drone/components/core/crazyflie/utils/src/tdoa/tdoaStorage.c`
- [Clock correction](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/clockCorrectionEngine.c): `Firmware/esp-drone/components/core/crazyflie/utils/src/clockCorrectionEngine.c`

### Firmware services

- [Storage service](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/hal/src/storage.c): `Firmware/esp-drone/components/core/crazyflie/hal/src/storage.c`
- [Key-value store](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/core/crazyflie/utils/src/kve/kve_storage.c): `Firmware/esp-drone/components/core/crazyflie/utils/src/kve/kve_storage.c`
- [EEPROM](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/drivers/i2c_devices/eeprom/eeprom.c): `Firmware/esp-drone/components/drivers/i2c_devices/eeprom/eeprom.c`
- [Firmware configuration](https://github.com/hasona57/pcb-drone/blob/main/Firmware/esp-drone/components/config/include/config.h): `Firmware/esp-drone/components/config/include/config.h`

### Other components

- **Android app**

## Connections

- Android app → Wi-Fi link: sends commands
- Wi-Fi link → Command handling: delivers commands
- Firmware entry → Wi-Fi link: starts link
- Firmware entry → Stabilizer: starts flight loop
- Command handling → Stabilizer: sets commands
- CRTP transport → Command handling: routes setpoints
- Sensor drivers → State estimation: supplies readings
- State estimation → Stabilizer: provides state
- Stabilizer → Position control: dispatches control
- Stabilizer → INDI control: dispatches control
- Position control → INDI control: provides references
- Stabilizer → Motor output: sends motor output
- ESP32 drone PCB → Sensor drivers: hosts sensors
- ESP32 drone PCB → Motor output: connects ESCs
- TDoA engine → Anchor data: uses anchor data
- TDoA engine → Clock correction: updates correction (evidence: `Firmware/esp-drone/components/core/crazyflie/utils/src/tdoa/tdoaEngine.c`)
- Storage service → Key-value store: stores values (evidence: `Firmware/esp-drone/components/core/crazyflie/hal/src/storage.c`)
- Storage service → EEPROM: reads and writes (evidence: `Firmware/esp-drone/components/core/crazyflie/hal/src/storage.c`)
