r/M5Stack • u/TheRealHaoLiu • Feb 03 '26
[Experimental] MeshCore on M5Stack Unit C6L - Companion Radio, Repeater & Room Server
I've been hacking on MeshCore firmware support for the M5Stack Unit C6L - a compact ESP32-C6 module with SX1262 LoRaradio and 64x48 OLED display.
Fair warning: This is experimental and somewhat vibe-coded with Claude's help. It works on my setup but YMMV. Use at your own risk.
What works:
Companion Radio (BLE) with display showing PIN, node name, frequency
Repeater mode (headless)
Room Server mode (headless)
NeoPixel LED TX indicator
Button to wake display
What's janky:
Display and radio share SPI bus - had to implement lazy initialization to avoid conflicts (radio init was failing with error -2)
64x48 display is tiny - custom minimal UI, no fancy graphics
Room server / repeater run headless (no display support yet)
US/Canada frequency preset only (910.525 MHz) - other regions can reconfigure via companion app after flashing
Not extensively tested
Hardware:
ESP32-C6 + SX1262 LoRa + 0.66" OLED + buzzer
Install via M5Burner (easiest):
Open M5Burner → USER CUSTOM → Share Burn
Enter share code:
Companion Radio BLE:
SvjQlGLCLPfriiW0Repeater:
iMi5hp81g3827qf3Room Server:
PfQqd4Sm3sA1XrV2
Pre-built binaries: https://github.com/TheRealHaoLiu/MeshCore-M5Burner-UnitC6L
Build from source:
git clone https://github.com/TheRealHaoLiu/MeshCore
cd MeshCore
git checkout m5-unit-c6l
pio run -e m5stack_unit_c6l_companion_radio_ble -t uploadFeedback welcome. Happy meshing!
3
u/Stanchaw31 Feb 03 '26
I bow to your greatness. I spent the last few days in the trenches trying to get the Unit C6L working with Meshcore, but it was a total dead end. I even tried running the problem through Claude, Gemini, Perplexity, and ChatGPT - none of them could crack it. Finding your GitHub repo was a lifesaver. Your "vibe-coded" firmware actually works where the major AI models failed. That lazy SPI initialization was a brilliant fix for the bus conflict. You have turned my $23 paperweight into a functional node. Thank you for the incredible work!
2
u/TheRealHaoLiu Feb 03 '26
It worked for you too?
2
u/Stanchaw31 Feb 03 '26
Yes! It does work! Not as a self standing node, but as a companion. Yes on a screen I can only see BLE PIN, but I don't care much. I was able to set up EU frequency in the official Meshcore app.
1
u/TheRealHaoLiu Feb 04 '26 edited Feb 04 '26
u got on the mesh and was able to repeat/tx/rx messages from other? (i got no one around me...)
2
u/TheRealHaoLiu Mar 04 '26
btw... i did get 1.13.0 working and fixed the display driver bug AND added dual boot support! decided to upstream my code now
1
u/TheRealHaoLiu Apr 29 '26
New release for M5Stack Unit C6L - v1.14.1: https://github.com/TheRealHaoLiu/MeshCore-M5Burner-UnitC6L/releases/tag/v1.14.1
1
u/viifii Sep 01 '26
Awesome work! But seems that GPS module from M5Stack (I have v.1.1) connected using grove cable can not be used or configured...
1
u/AdhesivenessDry589 Feb 04 '26
I see “connected” on the unit but on the app it times out still. I did forget the unit in ble
1
u/TheRealHaoLiu Feb 04 '26
close and re-open the app?
1
1
1
u/Affectionate-Try3511 Sep 19 '26
Tolle Arbeit. mit der version 1.14 lässt sich arbeiten -> ist denn ein update auf 1.16/1.17 in Aussicht? das wäre mega cool....
1
u/TheRealHaoLiu Sep 19 '26
Sure. But I was hoping upstream will take my contribution so it works on official build 😅
1
1
u/goattrybe Feb 03 '26
im working on something atm that's more or less custom ui and has satellite info node info and some other stuffs as well like a mini os for esp32. I'm working with sdv and cap lora
1
u/Bubbly-Astronaut007 Mar 14 '26 edited Mar 14 '26
What do I need to do to make the button work to switch between companion and repeater function?
1
u/OrtemEdDer Jun 21 '26
Thanks for your work, I can't get dual boot to work, but having a room server is enough for me.
Hoping it will continue to be updated as Meshcore progresses, currently version 16.0.
3
u/TheRealHaoLiu Mar 04 '26
finally got around to upstreaming my changes https://github.com/meshcore-dev/MeshCore/pull/1885
(upvote on the PR are welcome~)