# upsidedownlabs/bioamp-exg-pill architecture

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

- Interactive diagram: https://gitdiagram.com/upsidedownlabs/bioamp-exg-pill
- Repository: https://github.com/upsidedownlabs/bioamp-exg-pill

## Overview

BioAmp EXG Pill is an analog front end for acquiring ECG, EMG, EOG, and EEG signals. The documented workflow is to connect electrodes and a compatible ADC microcontroller, then use Arduino examples for sampling, filtering, analysis, display, or control. A separate ESP32 visualizer example provides networked oscilloscope and server capabilities. The visualizer’s core modules are represented; connections among them use source-index references, while the acquisition and example workflows rely on the README. Unsampled example implementations are not inferred.

Main entry points: [`software/EXG-Visualizer/webServer.hpp`](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/webServer.hpp) (Web Server), [`software/EXG-Visualizer/file_system.h`](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/file_system.h) (File System), [`software/EXG-Visualizer/common_functions.h`](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/common_functions.h) (Common Helpers), [`software/EXG-Visualizer/user_management.h`](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/user_management.h) (User Management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_hardware["Signal Hardware"]
  node_afe["BioAmp AFE"]
end

subgraph group_examples["Arduino Examples"]
  node_fixed["Fixed Sampling<br/>[FixedSampling.ino]"]
  node_filters["Signal Filters"]
  node_emg["EMG Envelope<br/>[EMGEnvelop.ino]"]
  node_heartbeat["Heartbeat Detection"]
  node_fasterhr["Fast Heart Rate"]
  node_blink["Eye Blink Detection"]
  node_drowsiness["Drowsiness Detection"]
  node_led["EMG Bar Graph<br/>[LEDBarGraph.ino]"]
  node_servo["Servo Control<br/>[ServoControl.ino]"]
  node_claw["Claw Controller<br/>[ClawController.ino]"]
  node_photo["BLE Photo Capture"]
  node_oled["OLED BPM<br/>[OLED_BPM.ino]"]
end

subgraph group_visualizer["ESP32 Visualizer"]
  node_visualizer["EXG Visualizer<br/>[EXG-Visualizer.ino]"]
  node_osc["Oscilloscope<br/>[oscilloscope.h]"]
  node_web["Web Server<br/>[webServer.hpp]"]
end

subgraph group_services["Visualizer Services"]
  node_tcp["TCP Server<br/>[TcpServer.hpp]"]
  node_ftp["FTP Server<br/>[ftpServer.hpp]"]
  node_network["Network Setup<br/>[network.h]"]
  node_filesystem[("File System<br/>[file_system.h]")]
  node_users["User Management<br/>[user_management.h]"]
  node_time["Time Services<br/>[time_functions.h]"]
  node_common["Common Helpers<br/>[common_functions.h]"]
end

node_electrodes(("Electrodes"))
node_mcu["ADC Microcontroller"]

node_electrodes -->|"provide bio-signals"| node_afe
node_afe -->|"outputs analog signal"| node_mcu
node_mcu -->|"samples ADC"| node_fixed
node_mcu -->|"runs examples"| node_filters
node_mcu -->|"runs examples"| node_emg
node_mcu -->|"runs examples"| node_heartbeat
node_mcu -->|"runs examples"| node_fasterhr
node_mcu -->|"runs examples"| node_blink
node_blink -->|"supports detection"| node_drowsiness
node_mcu -->|"runs examples"| node_led
node_mcu -->|"runs examples"| node_servo
node_mcu -->|"runs examples"| node_claw
node_mcu -->|"runs examples"| node_photo
node_mcu -->|"runs examples"| node_oled
node_mcu -->|"runs ESP32 example"| node_visualizer
node_visualizer -.->|"uses oscilloscope"| node_osc
node_osc -->|"uses WebSocket"| node_web
node_web -->|"extends TCP server"| node_tcp
node_ftp -->|"extends TCP server"| node_tcp
node_ftp -->|"accesses files"| node_filesystem
node_ftp -->|"checks access"| node_users
node_network -->|"reads configuration"| node_filesystem
node_filesystem -->|"includes time services"| node_time
node_users -->|"reads and writes"| node_filesystem
node_web -->|"uses TCP connections"| node_tcp
node_web -->|"uses authentication"| node_users
node_web -->|"serves files"| node_filesystem
node_web -->|"uses network setup"| node_network
node_web -->|"uses helpers"| node_common
node_tcp -->|"uses helpers"| node_common
node_filesystem -->|"uses helpers"| node_common
node_time -->|"uses helpers"| node_common
node_network -->|"uses helpers"| node_common
node_users -->|"uses helpers"| node_common

click node_afe "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/hardware/BioAmp-EXG-Pill.kicad_sch"
click node_fixed "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/FixedSampling/FixedSampling.ino"
click node_filters "https://github.com/upsidedownlabs/bioamp-exg-pill/tree/main/software"
click node_emg "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EMGEnvelop/EMGEnvelop.ino"
click node_heartbeat "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/HeartBeatDetection/HeartBeatDetection.ino"
click node_fasterhr "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/Faster_HeartRateDetection/Faster_HeartRateDetection.ino"
click node_blink "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EyeBlinkDetection/EyeBlinkDetection.ino"
click node_drowsiness "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/DrowsinessDetection/DrowsinessDetection.ino"
click node_led "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/LEDBarGraph/LEDBarGraph.ino"
click node_servo "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/ServoControl/ServoControl.ino"
click node_claw "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/ClawController/ClawController.ino"
click node_photo "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EOGPhotoCaptureBLE/EOGPhotoCaptureBLE.ino"
click node_oled "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/OLED_BPM/OLED_BPM.ino"
click node_visualizer "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/EXG-Visualizer.ino"
click node_osc "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/oscilloscope.h"
click node_web "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/webServer.hpp"
click node_tcp "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/TcpServer.hpp"
click node_ftp "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/ftpServer.hpp"
click node_network "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/network.h"
click node_filesystem "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/file_system.h"
click node_users "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/user_management.h"
click node_time "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/time_functions.h"
click node_common "https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/common_functions.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_afe toneBlue
class node_fixed,node_filters,node_emg,node_heartbeat,node_fasterhr,node_blink,node_drowsiness,node_led,node_servo,node_claw,node_photo,node_oled toneAmber
class node_visualizer,node_osc,node_web toneMint
class node_tcp,node_ftp,node_network,node_filesystem,node_users,node_time,node_common toneRose
class node_electrodes,node_mcu toneIndigo
```

## Components

### Signal Hardware

- [BioAmp AFE](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/hardware/BioAmp-EXG-Pill.kicad_sch): `hardware/BioAmp-EXG-Pill.kicad_sch`

### Arduino Examples

- [Fixed Sampling](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/FixedSampling/FixedSampling.ino): `software/FixedSampling/FixedSampling.ino`
- [Signal Filters](https://github.com/upsidedownlabs/bioamp-exg-pill/tree/main/software): `software`
- [EMG Envelope](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EMGEnvelop/EMGEnvelop.ino): `software/EMGEnvelop/EMGEnvelop.ino`
- [Heartbeat Detection](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/HeartBeatDetection/HeartBeatDetection.ino): `software/HeartBeatDetection/HeartBeatDetection.ino`
- [Fast Heart Rate](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/Faster_HeartRateDetection/Faster_HeartRateDetection.ino): `software/Faster_HeartRateDetection/Faster_HeartRateDetection.ino`
- [Eye Blink Detection](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EyeBlinkDetection/EyeBlinkDetection.ino): `software/EyeBlinkDetection/EyeBlinkDetection.ino`
- [Drowsiness Detection](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/DrowsinessDetection/DrowsinessDetection.ino): `software/DrowsinessDetection/DrowsinessDetection.ino`
- [EMG Bar Graph](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/LEDBarGraph/LEDBarGraph.ino): `software/LEDBarGraph/LEDBarGraph.ino`
- [Servo Control](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/ServoControl/ServoControl.ino): `software/ServoControl/ServoControl.ino`
- [Claw Controller](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/ClawController/ClawController.ino): `software/ClawController/ClawController.ino`
- [BLE Photo Capture](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EOGPhotoCaptureBLE/EOGPhotoCaptureBLE.ino): `software/EOGPhotoCaptureBLE/EOGPhotoCaptureBLE.ino`
- [OLED BPM](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/OLED_BPM/OLED_BPM.ino): `software/OLED_BPM/OLED_BPM.ino`

### ESP32 Visualizer

- [EXG Visualizer](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/EXG-Visualizer.ino): `software/EXG-Visualizer/EXG-Visualizer.ino`
- [Oscilloscope](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/oscilloscope.h): `software/EXG-Visualizer/oscilloscope.h`
- [Web Server](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/webServer.hpp): `software/EXG-Visualizer/webServer.hpp`

### Visualizer Services

- [TCP Server](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/TcpServer.hpp): `software/EXG-Visualizer/TcpServer.hpp`
- [FTP Server](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/ftpServer.hpp): `software/EXG-Visualizer/ftpServer.hpp`
- [Network Setup](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/network.h): `software/EXG-Visualizer/network.h`
- [File System](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/file_system.h): `software/EXG-Visualizer/file_system.h`
- [User Management](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/user_management.h): `software/EXG-Visualizer/user_management.h`
- [Time Services](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/time_functions.h): `software/EXG-Visualizer/time_functions.h`
- [Common Helpers](https://github.com/upsidedownlabs/bioamp-exg-pill/blob/main/software/EXG-Visualizer/common_functions.h): `software/EXG-Visualizer/common_functions.h`

### Other components

- **Electrodes**
- **ADC Microcontroller**

## Connections

- Electrodes → BioAmp AFE: provide bio-signals (evidence: `README.md`)
- BioAmp AFE → ADC Microcontroller: outputs analog signal (evidence: `README.md`)
- ADC Microcontroller → Fixed Sampling: samples ADC (evidence: `README.md`)
- ADC Microcontroller → Signal Filters: runs examples (evidence: `README.md`)
- ADC Microcontroller → EMG Envelope: runs examples (evidence: `README.md`)
- ADC Microcontroller → Heartbeat Detection: runs examples (evidence: `README.md`)
- ADC Microcontroller → Fast Heart Rate: runs examples (evidence: `README.md`)
- ADC Microcontroller → Eye Blink Detection: runs examples (evidence: `README.md`)
- Eye Blink Detection → Drowsiness Detection: supports detection (evidence: `README.md`)
- ADC Microcontroller → EMG Bar Graph: runs examples (evidence: `README.md`)
- ADC Microcontroller → Servo Control: runs examples (evidence: `README.md`)
- ADC Microcontroller → Claw Controller: runs examples (evidence: `README.md`)
- ADC Microcontroller → BLE Photo Capture: runs examples (evidence: `README.md`)
- ADC Microcontroller → OLED BPM: runs examples (evidence: `README.md`)
- ADC Microcontroller → EXG Visualizer: runs ESP32 example (evidence: `README.md`)
- EXG Visualizer → Oscilloscope: uses oscilloscope
- Oscilloscope → Web Server: uses WebSocket (evidence: `software/EXG-Visualizer/oscilloscope.h`)
- Web Server → TCP Server: extends TCP server (evidence: `software/EXG-Visualizer/webServer.hpp`)
- FTP Server → TCP Server: extends TCP server (evidence: `software/EXG-Visualizer/ftpServer.hpp`)
- FTP Server → File System: accesses files (evidence: `software/EXG-Visualizer/ftpServer.hpp`)
- FTP Server → User Management: checks access (evidence: `software/EXG-Visualizer/ftpServer.hpp`)
- Network Setup → File System: reads configuration (evidence: `software/EXG-Visualizer/network.h`)
- File System → Time Services: includes time services (evidence: `software/EXG-Visualizer/file_system.h`)
- User Management → File System: reads and writes (evidence: `software/EXG-Visualizer/user_management.h`)
- Web Server → TCP Server: uses TCP connections (evidence: `software/EXG-Visualizer/webServer.hpp`)
- Web Server → User Management: uses authentication (evidence: `software/EXG-Visualizer/webServer.hpp`)
- Web Server → File System: serves files (evidence: `software/EXG-Visualizer/webServer.hpp`)
- Web Server → Network Setup: uses network setup (evidence: `software/EXG-Visualizer/webServer.hpp`)
- Web Server → Common Helpers: uses helpers (evidence: `software/EXG-Visualizer/webServer.hpp`)
- TCP Server → Common Helpers: uses helpers (evidence: `software/EXG-Visualizer/TcpServer.hpp`)
- File System → Common Helpers: uses helpers (evidence: `software/EXG-Visualizer/file_system.h`)
- Time Services → Common Helpers: uses helpers (evidence: `software/EXG-Visualizer/time_functions.h`)
- Network Setup → Common Helpers: uses helpers (evidence: `software/EXG-Visualizer/network.h`)
- User Management → Common Helpers: uses helpers (evidence: `software/EXG-Visualizer/user_management.h`)
