Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions boards.json
Original file line number Diff line number Diff line change
Expand Up @@ -306,8 +306,8 @@
"mcu": "ESP32-S3: 16 MB flash, 2 MB PSRAM in package",
"radio": "SX1262 (TCXO, DIO2 drives the RF switch) behind a GC1109 or KCT8103L front end",
"display": "2.4\" 240x320 ST7789 with a CHSC6X touch layer",
"extras": "two buttons, piezo sounder, battery ADC, GNSS on the expansion header (no SD)",
"status": "verified on hardware: radio through the KCT8103L front end (TX and RX on air), GNSS fix + clock, panel, touch, both buttons; sounder silent — possibly not fitted",
"extras": "two buttons, battery ADC, GNSS on the expansion header; expansion slots for sounder/sensors (no SD)",
"status": "verified on hardware: radio through the KCT8103L front end (TX and RX on air), GNSS fix + clock, panel, touch, both buttons; sounder is on an expansion module, none fitted on the bench unit",
"notes": "The first colour panel and the first amplified front end in this firmware, and the first 16 MB board. The pin map has one published source — the board definition in the open-source firmware it ships with (variants/esp32s3/heltec_v4, the TFT build) — rather than the two this project prefers, so the panel, touch, button and sounder pins are unverified; the LoRa pins are the V3's and carry more weight. The front end is the part with no equivalent elsewhere here: the radio is deaf and mute until the amplifier rail is powered and its mode pins are driven, and which of two parts is fitted is read off GPIO 2 at boot. Native USB, so it enumerates as an Espressif JTAG/serial device with its MAC in the by-id name and none of the CP2102 ambiguity the rest of this bench has. OTG runs the composite device: CDC-ACM console plus CDC-NCM networking, the same stack the T3-S3s carry — note the by-id name changes to the RetiMesh identity once this firmware boots.",
"local_link": {
"usb": {
Expand Down
7 changes: 4 additions & 3 deletions docs/hardware.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
| `heltec-wb` | Heltec Wireless Bridge | ESP32-D0WDQ6: 8 MB flash, 8 MB PSRAM | SX1276 | — (headless) | front LEDs for Wi-Fi and LoRa (the BLE one stays dark), aluminium shell, two SMA sockets, internal 2-pin battery connector, PPP over the CP2102 bridge; no SD, no GNSS | verified on hardware; PPP built, not yet run on this board |
| `heltec-v3` | Heltec WiFi LoRa 32 V3 | ESP32-S3: 8 MB flash, no PSRAM | SX1262 (TCXO, DIO2 drives the RF switch) | 0.96" SSD1306 on the switched Vext rail | PPP over the CP2102 bridge (no SD, no GNSS) | verified on hardware; PPP built, not yet run on this board |
| `heltec-wp` | Heltec Wireless Paper | ESP32-S3: 8 MB flash, no PSRAM | SX1262 (TCXO, DIO2 drives the RF switch) | 2.13" e-ink (250x122, E0213A367), driven | PPP over the CP2102 bridge (no SD, no GNSS) | verified on hardware (console, Wi-Fi, transport, SX1262 self-test, e-paper panel); PPP built, not yet run on this board |
| `heltec-v4` | Heltec V4 (TFT) | ESP32-S3: 16 MB flash, 2 MB PSRAM in package | SX1262 (TCXO, DIO2 drives the RF switch) behind a GC1109 or KCT8103L front end | 2.4" 240x320 ST7789 with a CHSC6X touch layer | two buttons, piezo sounder, battery ADC, GNSS on the expansion header (no SD) | verified on hardware: radio through the KCT8103L front end (TX and RX on air), GNSS fix + clock, panel, touch, both buttons; sounder silent — possibly not fitted |
| `heltec-v4` | Heltec V4 (TFT) | ESP32-S3: 16 MB flash, 2 MB PSRAM in package | SX1262 (TCXO, DIO2 drives the RF switch) behind a GC1109 or KCT8103L front end | 2.4" 240x320 ST7789 with a CHSC6X touch layer | two buttons, battery ADC, GNSS on the expansion header; expansion slots for sounder/sensors (no SD) | verified on hardware: radio through the KCT8103L front end (TX and RX on air), GNSS fix + clock, panel, touch, both buttons; sounder is on an expansion module, none fitted on the bench unit |
<!-- boards.json:end -->

### The Wireless Stick's memory
Expand Down Expand Up @@ -155,8 +155,9 @@ display shows `bat 42%+` while charging and the status page says so in words.
The `heltec-v4` environment was written from the board's published pin map and then
proven on the bench (2026-09-02): radio both directions on air through the front end,
GNSS fix and clock, panel, touch and both buttons — the table row above carries the
status. The sounder alone stayed silent and may not be fitted on every build of the
board. What follows is what that first session had to know; a new unit re-checks the
status. The sounder alone stayed silent, and for a reason that took opening the case
to learn: it is an expansion module — the pin runs to a slot, and the bench
unit's slots are empty. A fitted module should sound without a firmware change. What follows is what that first session had to know; a new unit re-checks the
same list.

What is different about this board, in the order it can bite:
Expand Down
9 changes: 5 additions & 4 deletions src/boards/heltec_v4.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,11 @@
#define PIN_BUTTON2 35
#define HAS_BUTTON2 1

// A piezo sounder on a PWM channel — not an audio path. The pin is the
// published map's; the bench unit produced no sound from it at any drive
// while everything else worked, so the part may not be fitted on all builds
// of the board. Driving it costs nothing either way.
// A piezo sounder on a PWM channel — not an audio path, and not on the board
// itself: the pin runs to an expansion slot, and the sounder is one of the
// modules that plug into it. The bench unit's silence at every drive was a
// slot with nothing in it. Driving the pin costs nothing without a module
// and is what makes one work the moment it is plugged in.
#define HAS_BUZZER 1
#define PIN_BUZZER 6

Expand Down