- Replace gauge.py (MicroPython) references with gaugecontroller.yaml (ESPHome) - Update CLAUDE.md and README.md to document ESPHome-native API integration - Update LED wiring docs for separate main/indicator strips (D22/D36) - Refactor Arduino firmware to drive two WS2812 strips independently - Add per-gauge physical offset caching for main and indicator LEDs - Frame-limit breathe effect (16ms) to reduce unnecessary strip refreshes
279 lines
7.4 KiB
Markdown
279 lines
7.4 KiB
Markdown
# Wiring
|
|
|
|
This document describes the wiring required for the current integrated system:
|
|
|
|
- `Arduino Mega 2560`
|
|
- `HV5812P` VFD driver
|
|
- 4-digit VFD tube with decimal point and alarm bell
|
|
- 3 stepper-driven gauges
|
|
- WS2812B LEDs
|
|
- ESP32 running `gauge.py` as the MQTT / Home Assistant bridge
|
|
|
|
It is intentionally based on the code that is in the repository now:
|
|
|
|
- [Gaugecontroller.ino](/home/adebaumann/development/arduino_gauge_controller/Gaugecontroller/Gaugecontroller.ino:1)
|
|
- [gauge.py](/home/adebaumann/development/arduino_gauge_controller/gauge.py:1)
|
|
|
|
## System Power
|
|
|
|
You effectively have three power domains:
|
|
|
|
1. `5V logic`
|
|
for the Arduino Mega logic, the HV5812 logic side, and usually the step/dir logic inputs
|
|
2. `high voltage for the VFD`
|
|
for `HV5812P VPP` and the VFD segment/grid drive
|
|
3. `motor / actuator power`
|
|
for the stepper gauges and their driver hardware
|
|
|
|
Minimum common rule:
|
|
|
|
- all logic grounds must be common
|
|
|
|
That means these must share `GND`:
|
|
|
|
- Arduino Mega `GND`
|
|
- ESP32 `GND`
|
|
- HV5812P logic `GND`
|
|
- stepper driver logic `GND`
|
|
- WS2812B `GND`
|
|
|
|
The VFD high-voltage supply still references the same ground, but its high-voltage nodes must never be connected directly to Arduino or ESP32 GPIO pins.
|
|
|
|
## Arduino Mega 2560
|
|
|
|
Use the Mega as the central logic controller.
|
|
|
|
Power:
|
|
|
|
- `Mega 5V` <- regulated `5V` logic supply
|
|
- `Mega GND` <- common logic ground
|
|
|
|
Serial bridge to ESP32:
|
|
|
|
- `Mega RX1` pin `19` <- `ESP32 TX` GPIO `17`
|
|
- `Mega TX1` pin `18` -> voltage divider -> `ESP32 RX` GPIO `16`
|
|
- `Mega GND` <-> `ESP32 GND`
|
|
|
|
This matches the current code:
|
|
|
|
- Arduino uses `Serial1` in [Gaugecontroller.ino](/home/adebaumann/development/arduino_gauge_controller/Gaugecontroller/Gaugecontroller.ino:12)
|
|
- ESP32 uses `UART(1, tx=17, rx=16)` in [gauge.py](/home/adebaumann/development/arduino_gauge_controller/gauge.py:149)
|
|
|
|
Because the Mega transmits `5V` logic and the ESP32 expects `3.3V` logic on RX, add a resistor divider on the `Mega TX1 -> ESP32 RX` line.
|
|
|
|
Suggested simple divider:
|
|
|
|
- `Mega TX1` -> `1 kOhm` resistor -> divider node
|
|
- divider node -> `2 kOhm` resistor -> `GND`
|
|
- divider node -> `ESP32 GPIO16 (RX)`
|
|
|
|
That scales the Mega's `5V` TX signal to roughly `3.3V` for the ESP32 RX input.
|
|
|
|
## VFD Control: Mega -> HV5812P
|
|
|
|
These are the integrated pin assignments used by the merged controller:
|
|
|
|
| Mega Pin | HV5812P Signal | Purpose |
|
|
|---|---|---|
|
|
| `D46` | `DATA IN / DIN` | serial data into HV5812P |
|
|
| `D47` | `CLOCK / CLK` | shift clock |
|
|
| `D48` | `STROBE / LATCH` | latch transfer |
|
|
| `D49` | `BLANKING / OE` | output blanking |
|
|
| `5V` | `VDD` | HV5812 logic supply |
|
|
| `GND` | `GND` | common reference |
|
|
| `VFD HV+` | `VPP` | HV5812 high-voltage rail |
|
|
|
|
Important:
|
|
|
|
- `VDD` is the low-voltage logic rail
|
|
- `VPP` is the high-voltage output rail
|
|
- do not connect Arduino `5V` to `VPP`
|
|
|
|
## HV5812P -> VFD Tube
|
|
|
|
The current output map is:
|
|
|
|
| HV5812 Output | Tube Function |
|
|
|---|---|
|
|
| `HVOut1` | segment `A` |
|
|
| `HVOut2` | segment `B` |
|
|
| `HVOut3` | segment `C` |
|
|
| `HVOut4` | segment `D` |
|
|
| `HVOut5` | segment `E` |
|
|
| `HVOut6` | segment `F` |
|
|
| `HVOut7` | segment `G` |
|
|
| `HVOut8` | decimal point segment |
|
|
| `HVOut9` | alarm bell segment |
|
|
| `HVOut10` | digit grid 1 |
|
|
| `HVOut11` | digit grid 2 |
|
|
| `HVOut12` | digit grid 3 |
|
|
| `HVOut13` | digit grid 4 |
|
|
| `HVOut14` | indicator grid between digits 2 and 3 |
|
|
|
|
Logical segment layout:
|
|
|
|
```text
|
|
---A---
|
|
| |
|
|
F B
|
|
|---G---|
|
|
E C
|
|
| |
|
|
---D---
|
|
```
|
|
|
|
Additional VFD wiring notes:
|
|
|
|
- the VFD filament/heater wiring is separate from the HV5812 outputs
|
|
- the exact filament supply depends on your tube
|
|
- the HV5812 only drives the segments and grids
|
|
|
|
## Gauge Control Pins
|
|
|
|
The current sketch drives three gauges.
|
|
|
|
Each gauge needs a driver or actuator input that accepts:
|
|
|
|
- `DIR`
|
|
- `STEP`
|
|
- optionally `ENABLE` if you later add one in code
|
|
|
|
Current assignments:
|
|
|
|
| Gauge | Mega DIR | Mega STEP |
|
|
|---|---|---|
|
|
| `Gauge 0` | `D50` | `D51` |
|
|
| `Gauge 1` | `D8` | `D9` |
|
|
| `Gauge 2` | `D52` | `D53` |
|
|
|
|
Connect each pair to the matching stepper driver inputs.
|
|
|
|
Example:
|
|
|
|
- `Mega D50` -> Gauge 0 driver `DIR`
|
|
- `Mega D51` -> Gauge 0 driver `STEP`
|
|
- `Mega D8` -> Gauge 1 driver `DIR`
|
|
- `Mega D9` -> Gauge 1 driver `STEP`
|
|
- `Mega D52` -> Gauge 2 driver `DIR`
|
|
- `Mega D53` -> Gauge 2 driver `STEP`
|
|
|
|
Also connect:
|
|
|
|
- `Mega GND` -> each driver logic ground
|
|
|
|
If your driver boards need separate motor power, supply that from the proper motor supply. Do not power motors from the Mega `5V` pin.
|
|
|
|
## WS2812 LED Strips
|
|
|
|
The current sketch expects two LED data chains. Backlight and status LEDs stay
|
|
on the main strip; the red/green dial indicator LEDs are on their own strip.
|
|
|
|
| Mega Pin | LED Strip |
|
|
|---|---|
|
|
| `D22` | main backlight/status `DIN` |
|
|
| `D36` | indicator `DIN` |
|
|
| `5V` | both strips `5V` |
|
|
| `GND` | both strips `GND` |
|
|
|
|
Notes:
|
|
|
|
- the command protocol still exposes `7 LEDs per gauge`
|
|
- logical indices `0-2` are backlight, `3-4` are indicators, and `5-6` are status
|
|
- use a proper 5V supply sized for the LED current
|
|
- keep LED ground common with the Mega
|
|
|
|
If the strip is powered from a separate 5V supply:
|
|
|
|
- connect external `5V` -> LED `5V`
|
|
- connect external `GND` -> LED `GND`
|
|
- connect that same `GND` to `Mega GND`
|
|
|
|
## ESP32 Bridge
|
|
|
|
The ESP32 runs `gauge.py` and talks to the Mega over UART and to Home Assistant over MQTT/Wi-Fi.
|
|
|
|
ESP32 to Mega:
|
|
|
|
| ESP32 Pin | Mega Pin | Purpose |
|
|
|---|---|---|
|
|
| `GPIO17` | `RX1` pin `19` | ESP32 TX -> Mega RX |
|
|
| `GPIO16` | `TX1` pin `18` | ESP32 RX <- Mega TX |
|
|
| `GND` | `GND` | common ground |
|
|
|
|
ESP32 power:
|
|
|
|
- power the ESP32 from a proper `3.3V` or board-supported USB/5V input, depending on your board
|
|
- do not feed raw `5V` into a bare `3.3V` ESP32 module unless the board has its own regulator
|
|
|
|
## One-Page Wiring Summary
|
|
|
|
### Power
|
|
|
|
- `5V logic supply` -> Mega `5V`
|
|
- `5V logic supply` -> HV5812 `VDD`
|
|
- `5V logic supply` -> WS2812B `5V`
|
|
- `motor supply` -> gauge driver motor power inputs
|
|
- `VFD high-voltage supply` -> HV5812 `VPP`
|
|
- all grounds common
|
|
|
|
### Mega to ESP32
|
|
|
|
- `Mega 19 (RX1)` <- `ESP32 GPIO17 (TX)`
|
|
- `Mega 18 (TX1)` -> resistor divider -> `ESP32 GPIO16 (RX)`
|
|
- `Mega GND` <-> `ESP32 GND`
|
|
|
|
Resistor divider on `Mega TX1`:
|
|
|
|
- `Mega TX1` -> `1 kOhm` -> divider node
|
|
- divider node -> `ESP32 GPIO16`
|
|
- divider node -> `2 kOhm` -> `GND`
|
|
|
|
### Mega to HV5812
|
|
|
|
- `D46` -> `DIN`
|
|
- `D47` -> `CLK`
|
|
- `D48` -> `STROBE`
|
|
- `D49` -> `BLANKING`
|
|
- `5V` -> `VDD`
|
|
- `GND` -> `GND`
|
|
- `VFD HV+` -> `VPP`
|
|
|
|
### HV5812 to Tube
|
|
|
|
- `HVOut1..7` -> segments `A..G`
|
|
- `HVOut8` -> decimal point
|
|
- `HVOut9` -> alarm bell
|
|
- `HVOut10..13` -> digit grids `1..4`
|
|
- `HVOut14` -> indicator grid
|
|
|
|
### Mega to Gauges
|
|
|
|
- `D50/D51` -> gauge 0 `DIR/STEP`
|
|
- `D8/D9` -> gauge 1 `DIR/STEP`
|
|
- `D52/D53` -> gauge 2 `DIR/STEP`
|
|
|
|
### Mega to LEDs
|
|
|
|
- `D22` -> WS2812B `DIN`
|
|
- `5V` -> WS2812B `5V`
|
|
- `GND` -> WS2812B `GND`
|
|
|
|
## Sanity Checklist Before Power-On
|
|
|
|
- Mega, ESP32, HV5812 logic, LED strip, and driver logic grounds are all common
|
|
- Mega `D46-D49` go to the HV5812, not to the gauge drivers
|
|
- Mega `D50-D53` and `D8-D9` go only to the gauge drivers
|
|
- HV5812 `VDD` is `5V`
|
|
- HV5812 `VPP` is the VFD high-voltage rail, not `5V`
|
|
- ESP32 UART is crossed correctly: TX -> RX, RX -> TX
|
|
- WS2812B has its own adequate 5V supply if current draw is significant
|
|
- motor power is not coming from the Mega
|
|
|
|
## What This Does Not Define
|
|
|
|
This document does not define:
|
|
|
|
- the exact VFD filament supply voltage/current
|
|
- the exact motor driver board power pins, because that depends on the driver hardware you are using
|
|
- the physical PDIP package pin numbers of the HV5812P
|