3.9 KiB
3.9 KiB
esp32-debug-dongle → LilyGo T3-S3 debug bridge
Why
USB serial to the trough/solartrack sensors drops on every deep sleep, so we can't watch boots/crashes/wakes. This dongle becomes an always-connected box on the LAN that bridges a sensor's UART to telnet + a web terminal, controls GPIO to reset/wake the target, logs to SD, and (Phase 2) sniffs the MeshCore LoRa mesh — so we can debug remotely and stop flying blind.
Decisions (confirmed with user)
- Board: LilyGo T3-S3 (ESP32-S3 + SX127x LoRa + SSD1306 128×64 OLED + SD). Chosen over TTGO for onboard SD and LoRa (mesh monitoring).
- Extend
esp32-debug-donglein place (not a new Sh3dNb app). Keep the existingesp32devenv working; add at3s3env. - Both telnet (:23) and the WebSocket terminal. Telnet is the primary
remote control path (nc/minicom + an agent driving it); GPIO reset/wake and
port/baud are exposed as both telnet
~commandsand REST endpoints. - SD logging in Phase 1, ON by default once NTP (built-in
configTzTime) gives today's date — log file named/stamped from real time. - Power monitoring: out of scope.
- Phase 2: MeshCore monitor over the onboard LoRa (passive RX of mesh packets, surfaced on telnet/web/SD).
Board facts that shape the build
- ESP32-S3 has no Bluetooth Classic →
BluetoothSerial/SerialBT is guarded behindHAS_BT_CLASSIC(esp32dev only). On T3-S3, telnet + WebSocket replace it. - USB CDC on boot (
-DARDUINO_USB_CDC_ON_BOOT=1) → UART0 (GPIO43/44) is free for the target bridge. - Pins (from
Sh3dNb/apps_oglas/lilygot3s3_basic): OLED SDA18/SCL17/RST21@0x3C; LoRa SCK5/MISO3/MOSI6/CS7/RST8/DIO0:9; BTN0.
Phase 1 (this build) — extend src/main.cpp + platformio.ini
- platformio.ini: keep
[env:esp32dev](+-DHAS_BT_CLASSIC=1); add[env:t3s3](esp32-s3-devkitc-1, USB CDC on boot, huge_app, littlefs, Adafruit SSD1306+GFX). All pins via build flags (target UART, GPIO reset/wake, SD, OLED) so they're config, not hardcoded. - Target UART bridge: Serial1 on
TARGET_RX/TXpins ↔ fan-out to WebSocket (existing), telnet clients, and SD log. RX/TX byte+line counters. - Telnet server :23 with line protocol: non-
~lines forward to the target UART;~lines are commands:~help ~status ~reset [ms] ~wake [ms] ~baud <n> ~port <int|usb|ext> ~log on|off ~gpio <pin> <0|1>. Lets an operator (or agent vianc) drive a remote board. - REST (mirror of the commands):
/api/status /api/reset /api/wake /api/baud?baud= /api/log?on= /api/gpio?pin=&val= /api/send?data=. - GPIO control: configurable
reset/wakepins (active-low option), pulse. - NTP + SD logging:
configTzTime(<TZ>); once time syncs, open/logs/YYYYMMDD-HHMMSS.logand append timestamped serial. Logging ON by default;~log off/ REST toggles. Graceful no-op if SD absent/pins wrong. - OLED: IP/SSID/RSSI, target pins+baud, RX/TX counts, telnet client count, logging on/off, NTP synced y/n.
Phase 2 — MeshCore monitor (later)
- Bring up the T3-S3 LoRa radio (confirm chip: SX1276 vs SX1262 variant) with the mesh's PHY (freq/SF/BW/CR matching the sensors), RX-only.
- Decode/forward MeshCore channel frames to telnet/web/SD so we see beacons (e.g. count trough beacons to confirm the sleep-crash fix) without a sensor.
Pins to CONFIRM against the actual board (set as build flags)
- SD: SCK/MISO/MOSI/CS for the T3-S3 SD slot (may share the LoRa SPI bus + own CS — verify). Logging silently disables if wrong.
- Target UART bridge RX/TX (default UART0 43/44, free under USB CDC).
- GPIO reset/wake pins to whatever lines you wire to the sensor's RST/control.
- LoRa chip variant (Phase 2).
Verify
pio run -e t3s3compiles;pio run -e esp32devstill compiles (BT intact).- Flash T3-S3: OLED shows IP;
nc <ip> 23streams a wired sensor's UART;~resetreboots it (seen on the same stream); a dated file appears under/logson the SD and grows.