When the MQTT WebSocket handshake fails before a connection is fully established (e.g. "Sec-WebSocket-Accept not found"), the IDF v4 transport teardown path writes only 3 of the 4 bytes of the heap block tail canary (expected 0xbaad5678, actual 0xbaad5600). The subsequent esp_mqtt_client_destroy() call frees that block, causing multi_heap_free to detect the broken canary and abort: CORRUPT HEAP: Bad tail at 0x3fcb42a4. Expected 0xbaad5678 got 0xbaad5600 assert failed: multi_heap_free multi_heap_poisoning.c:259 (head != NULL) The fix is to check heap integrity with heap_caps_check_integrity_all(false) between esp_mqtt_client_stop() and esp_mqtt_client_destroy(). If corruption is detected, scan internal SRAM (0x3FC00000–0x3FD00000) for the truncated canary pattern and restore it to the correct value before destroy() runs. The scan is a no-op when the heap is clean and is compiled out entirely on IDF v5+, where the underlying bug does not exist. This fixes crash-on-reconnect observed with ESP32-S3 + IDF v4 + WSS transport.
MeshCoreTel Firmware
This is a fork of MeshCore-EastMesh firmware with MeshCoreTel broker support instead of EastMesh.
MeshCoreTel:
Original firmware (credits to Jared Dohrman, Scott Powell / Ripple Radios and the MeshCore contributors):
MeshCoreTel firmware builds for MeshCore, with MQTT repeaters, WiFi companions, and simple release downloads for supported boards.
This repository keeps the upstream MeshCore firmware intact and adds an MeshCoreTel layer on top for packaging, release automation, WiFi-enabled companion builds, and MQTT-enabled repeater builds.
Key MeshCoreTel Features
MQTT Repeater Additions
- hardcoded broker support for:
meshcoretelletsmesh-euletsmesh-us
- WSS transport at
/mqtt - JWT auth using the device identity
- CLI controls for:
- WiFi credentials
- WiFi powersaving
- board battery reporting on supported targets
- MQTT endpoint enablement
- MQTT packet and raw publishing
- owner public key and email
- local web panel enablement
Local Web Panel
On supported *_repeater_mqtt ESP32 targets, the repeater can expose a local HTTPS config panel over WiFi.
Features include:
- password-gated access using the existing repeater admin password
- allowlisted CLI execution
- grouped quick actions
- light and dark themes
- optional disable via
set web off
Recommended use is initial setup and occasional troubleshooting. On MQTT repeater deployments, disable the panel again when finished if you want maximum MQTT heap headroom.
Companion WiFi Additions
*_companion_radio_wifi targets now support persisted WiFi rescue commands:
- open a serial monitor at
115200baud - reboot the device
- long-press the user button within the first 8 seconds after boot to enter
CLI Rescue - wait for
========= CLI Rescue ========= - send the commands from the serial monitor
These rescue commands are only available after entering CLI Rescue:
get wifi.statusget wifi.ssidget wifi.powersavingset wifi.ssid <ssid>set wifi.pwd <password>set wifi.powersaving none|min|max
Status
Tested with my Heltec V4 OLED.
Documentation
Current docs pages: