# hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth architecture

> Architecture diagram of the GitHub repository hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth, 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/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth
- Repository: https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth
- Video tour (about a minute): https://gitdiagram.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/video

## Overview

This ESP32 firmware adapts configured vehicle or device sensors to Torque Pro through the Torque Arduino Protocol. Torque commands arrive over USB serial, Wi-Fi, or Bluetooth; firmware dispatches requests and returns protocol responses to the originating interface. Sensor acquisition supports analog, digital, and pulse inputs, with filtering, thermistor conversion, expressions, range/inactivity diagnostics, and Torque-compatible reporting. The source excerpts show communication setup and sampling details, but omit parts of command handling and sensor processing; those relationships are included only where documented or directly evidenced.

Main entry points: [`src/main.cpp`](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp) (Sensor sampling), [`src/TorqComm.cpp`](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/TorqComm.cpp) (Serial Wi-Fi Bluetooth), [`src/evalexp.cpp`](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/evalexp.cpp) (Expression evaluation), [`src/MedianFilterLib2.h`](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/MedianFilterLib2.h) (Median filtering)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["Connections and protocol"]
  node_firmware["Firmware setup and loop<br/>[main.cpp]"]
  node_communications["Serial Wi-Fi Bluetooth<br/>[TorqComm.cpp]"]
end

subgraph group_sensors["Sensor acquisition"]
  node_sensor_config["Sensor definitions<br/>[main.cpp]"]
  node_sensor_sampling["Sensor sampling<br/>[main.cpp]"]
  node_pulse_capture["Pulse capture<br/>[main.cpp]"]
end

subgraph group_processing["Signal processing"]
  node_median_filter["Median filtering<br/>[MedianFilterLib2.h]"]
  node_thermistor["Thermistor conversion<br/>[main.cpp]"]
  node_expression_eval["Expression evaluation<br/>[evalexp.cpp]"]
  node_expression_stack["Expression stacks<br/>[Stack.h]"]
  node_sensor_diagnostics["Fault diagnostics<br/>[main.cpp]"]
end

subgraph group_torque["Torque responses"]
  node_command_dispatch["Command dispatch<br/>[main.cpp]"]
  node_sensor_definitions["PID definitions<br/>[main.cpp]"]
  node_sensor_values["Sensor values<br/>[main.cpp]"]
  node_configuration["Torque configuration<br/>[main.h]"]
  node_output_control["Sensor outputs<br/>[main.cpp]"]
end

node_torque_app(("Torque Pro"))
node_sensor_inputs(("Vehicle sensors"))

node_torque_app -->|"sends commands"| node_communications
node_firmware -->|"initializes"| node_communications
node_communications -->|"provides input"| node_command_dispatch
node_command_dispatch -->|"routes responses"| node_communications
node_sensor_inputs -->|"provides readings"| node_sensor_sampling
node_sensor_config -->|"configures reads"| node_sensor_sampling
node_sensor_sampling -->|"measures pulses"| node_pulse_capture
node_sensor_sampling -->|"filters samples"| node_median_filter
node_sensor_sampling -->|"converts readings"| node_thermistor
node_sensor_sampling -->|"applies expressions"| node_expression_eval
node_expression_eval -->|"uses stacks"| node_expression_stack
node_sensor_sampling -->|"checks readings"| node_sensor_diagnostics
node_command_dispatch -->|"serves definitions"| node_sensor_definitions
node_command_dispatch -->|"serves readings"| node_sensor_values
node_command_dispatch -->|"serves configuration"| node_configuration
node_command_dispatch -->|"sets outputs"| node_output_control
node_sensor_sampling -->|"updates values"| node_sensor_values
node_sensor_diagnostics -->|"adds fault data"| node_sensor_values

click node_firmware "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_communications "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/TorqComm.cpp"
click node_sensor_config "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_sensor_sampling "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_pulse_capture "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_median_filter "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/MedianFilterLib2.h"
click node_thermistor "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_expression_eval "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/evalexp.cpp"
click node_expression_stack "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/Stack.h"
click node_sensor_diagnostics "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_command_dispatch "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_sensor_definitions "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_sensor_values "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"
click node_configuration "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.h"
click node_output_control "https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp"

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_firmware,node_communications toneBlue
class node_sensor_config,node_sensor_sampling,node_pulse_capture toneAmber
class node_median_filter,node_thermistor,node_expression_eval,node_expression_stack,node_sensor_diagnostics toneMint
class node_command_dispatch,node_sensor_definitions,node_sensor_values,node_configuration,node_output_control toneRose
class node_torque_app,node_sensor_inputs toneIndigo
```

## Components

### Connections and protocol

- [Firmware setup and loop](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`
- [Serial Wi-Fi Bluetooth](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/TorqComm.cpp): `src/TorqComm.cpp`

### Sensor acquisition

- [Sensor definitions](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`
- [Sensor sampling](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`
- [Pulse capture](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`

### Signal processing

- [Median filtering](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/MedianFilterLib2.h): `src/MedianFilterLib2.h`
- [Thermistor conversion](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`
- [Expression evaluation](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/evalexp.cpp): `src/evalexp.cpp`
- [Expression stacks](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/Stack.h): `src/Stack.h`
- [Fault diagnostics](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`

### Torque responses

- [Command dispatch](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`
- [PID definitions](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`
- [Sensor values](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`
- [Torque configuration](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.h): `src/main.h`
- [Sensor outputs](https://github.com/hoverclub/obd-torqueapp-sensor-interface-usb-wifi-bluetooth/blob/main/src/main.cpp): `src/main.cpp`

### Other components

- **Torque Pro**
- **Vehicle sensors**

## Connections

- Torque Pro → Serial Wi-Fi Bluetooth: sends commands (evidence: `README.md`)
- Firmware setup and loop → Serial Wi-Fi Bluetooth: initializes (evidence: `src/main.cpp`)
- Serial Wi-Fi Bluetooth → Command dispatch: provides input (evidence: `README.md`)
- Command dispatch → Serial Wi-Fi Bluetooth: routes responses (evidence: `README.md`)
- Vehicle sensors → Sensor sampling: provides readings (evidence: `README.md`)
- Sensor definitions → Sensor sampling: configures reads (evidence: `README.md`)
- Sensor sampling → Pulse capture: measures pulses (evidence: `src/main.cpp`)
- Sensor sampling → Median filtering: filters samples (evidence: `src/main.cpp`)
- Sensor sampling → Thermistor conversion: converts readings (evidence: `src/main.cpp`)
- Sensor sampling → Expression evaluation: applies expressions (evidence: `README.md`)
- Expression evaluation → Expression stacks: uses stacks (evidence: `src/evalexp.cpp`)
- Sensor sampling → Fault diagnostics: checks readings (evidence: `src/main.cpp`)
- Command dispatch → PID definitions: serves definitions (evidence: `README.md`)
- Command dispatch → Sensor values: serves readings (evidence: `README.md`)
- Command dispatch → Torque configuration: serves configuration (evidence: `README.md`)
- Command dispatch → Sensor outputs: sets outputs (evidence: `src/main.cpp`)
- Sensor sampling → Sensor values: updates values (evidence: `src/main.cpp`)
- Fault diagnostics → Sensor values: adds fault data (evidence: `src/main.cpp`)
