Bluetooth companion má jednu nepříjemnou vlastnost. Musíte u něj stát.
Deska leží doma na parapetu, kde má rozumný výhled na město a slušnou slyšitelnost do meshe, ale vy jste v práci a mobil se k ní přes BLE nedostane. Řešení existuje: nechat nódu viset na domácí WiFi, na routeru jí dát pevnou IP a z venku se do domácí sítě dostat přes VPN. MeshCore klient pak místo Bluetooth otevře TCP spojení na tu adresu a chová se, jako byste seděli vedle desky.
Háček je v tom, že tenhle firmware si musíte upéct sami. Počítejte s hodinou práce, když půjde všechno hladce.
Proč to webflasher neumí
Otevřete si flasher.meshcore.io, vyberete Heltec v3 a dostanete pět rolí: Companion Bluetooth, Companion USB, Repeater, Room Server a KISS Radio Modem. WiFi varianta tam prostě není.
Důvod je banální a zároveň otravný. SSID a heslo se u MeshCore vkládají jako build flagy při kompilaci, takže výsledná binárka obsahuje přihlašovací údaje k vaší síti napevno. Webflasher rozdává jeden a tentýž soubor všem, takže nemá jak vaše údaje dovnitř dostat. Buď si to zkompilujete, nebo máte smůlu. Kompilaci vám nikdo neušetří. Samotné nahrání do desky ale z prohlížeče udělat jde a k tomu se dostanu níž.
Druhá věc, kterou je dobré vědět předem: companion firmware má typicky zakompilované jen jedno rozhraní naráz, jak píše README k meshcore-cli. Když si postavíte WiFi build, o Bluetooth přijdete. Čip za to nemůže, ESP32-S3 zvládá obojí naráz. Jde o způsob, jakým je firmware poskládaný. Komunitní forky to obcházejí a strkají BLE i TCP do jedné binárky s přepínáním přímo na displeji, jenže tím se dostáváte mimo hlavní větev projektu.
Co budeš potřebovat
Heltec WiFi LoRa 32 V3, USB-C kabel a stroj s Linuxem. Dál buď Docker, nebo PlatformIO – podle toho, kterou cestu zvolíte. A pak samozřejmě funkční VPN do domácí sítě, ale ta je zvláštní kapitola a předpokládám, že WireGuard nebo Tailscale už doma běží.
Ještě jedna věc předem: rozmyslete si frekvenci. Pro Česko je to 869,525 MHz, pokud vaše lokální komunita nepoužívá alternativu 868,731 MHz. Ověřte si to, než začnete kompilovat, protože špatné pásmo znamená nódu, která sice svítí a hlásí připojení, ale nikoho neslyší.
Cesta první: Docker skript
Nejrychlejší varianta je repozitář ilikehamradio/meshcore_heltecv3_wifi. Shellový skript, který si v Dockeru natáhne MeshCore, zapatchuje platformio.ini vašimi údaji, zkompiluje a volitelně rovnou naflashuje.
git clone https://github.com/ilikehamradio/meshcore_heltecv3_wifi
cd meshcore_heltecv3_wifi
chmod +x buildFirmware.sh
./buildFirmware.sh
Skript je interaktivní. Zeptá se na region (u nás volba 4, Europe/UK), na SSID a heslo, heslo maskuje hvězdičkami. Pak nabídne flashnutí připojené desky a případně kompletní erase flash paměti před zápisem.
Výstupem je firmware-merged.bin v adresáři, odkud jste skript spustili. Ten soubor obsahuje heslo k vaší WiFi v čitelné podobě, takže ho nikam nenahrávejte a po ověření funkčnosti radši smažte. Autor na to v README výslovně upozorňuje a má pravdu.
Kdyby flash sám neproběhl, jde to ručně:
esptool --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 write_flash 0x0 firmware-merged.bin
Když deska nereaguje, podržte BOOT, ťukněte RESET a zkuste znovu.
Cesta druhá: ručně přes PlatformIO
Pokud Docker nechcete nebo potřebujete pinovat konkrétní verzi firmwaru, sáhnete přímo do zdrojáků. Naklonujte MeshCore a otevřete variants/heltec_v3/platformio.ini. Uvnitř najdete blok:
[env:Heltec_v3_companion_radio_wifi]
extends = Heltec_lora32_v3
build_flags =
${Heltec_lora32_v3.build_flags}
-D MAX_CONTACTS=100
-D MAX_GROUP_CHANNELS=8
-D DISPLAY_CLASS=SSD1306Display
-D WIFI_DEBUG_LOGGING=1
-D WIFI_SSID="<<SSID>>"
-D WIFI_PWD="<<WIFI-PASS>>"
Placeholdery nahradíte svými hodnotami, nastavíte FIRMWARE_VERSION a pustíte build:
export FIRMWARE_VERSION=1.7.3
./build.sh build-firmware Heltec_v3_companion_radio_wifi
Ve VS Code s rozšířením PlatformIO je to ještě pohodlnější. Dole na liště přepnete prostředí na Heltec_v3_companion_radio_wifi a kliknete na upload. Český návod na meshcore.cz to popisuje krok za krokem včetně screenshotů, pokud vám vyhovuje klikací postup.
Nechte si WIFI_DEBUG_LOGGING=1 zapnuté. Ušetří vám to nervy v okamžiku, kdy se deska k síti nepřipojí a vy budete chtít vědět proč.
Flashnout z prohlížeče, i když je binárka vlastní
Tuhle cestu jsem nakonec volil sám a je ze všech nejpohodlnější. Zkompilujete si firmware kdekoliv, třeba na serveru přes SSH, přenesete si .bin na notebook a zbytek odbavíte v Chromu.
Na flasher.meshcore.io sjeďte v seznamu rolí úplně dolů. Pod nabídkou hotových buildů je položka Custom Firmware, která bere .bin soubory z disku pro ESP32 zařízení a .zip pro nRF52. Vyberete svůj soubor, kliknete na připojení, prohlížeč se zeptá na sériový port a je hotovo.
Funguje to přes Web Serial API, takže potřebujete Chrome nebo Edge. Firefox a Safari vás nepustí dál.
Jedna past tady je. Pokud desku flashujete napoprvé nebo po kompletním erase, nahrajte merged binárku, tedy soubor s příponou -merged.bin, protože obsahuje i bootloader a tabulku oddílů. Na desce, kde už MeshCore běžel, stačí obyčejný firmware.bin. Docker skript z předchozí kapitoly vyrábí právě merged variantu, takže s ním jste na správné straně vždycky.
Oproti esptoolu ušetříte hledání správného /dev/ttyUSB a psaní adresy 0x0. Pro mě rozhodl fakt, že build běží na Linuxu ve sklepě a flashuju z Macu u stolu.
Najít IP a připojit se
Po flashnutí a restartu se deska sama přihlásí k nastavené síti. Otevřete administraci routeru, najděte seznam připojených klientů a vyhledejte její IP adresu. Rovnou tam desce nastavte DHCP rezervaci podle MAC adresy, jinak vám adresa při příštím výpadku proudu uteče a z práce se budete připojovat naslepo.
Companion přes WiFi naslouchá na TCP portu 5000. Potvrzuje to jak dokumentace k SerialWifiInterface, tak výchozí hodnota přepínače -p v meshcore-cli a příklad v knihovně meshcore.js.
Ověřit to jde nejrychleji z příkazové řádky:
meshcore-cli -t 192.168.1.42 -p 5000
Pokud naskočí interaktivní prompt a vypíše kontakty, máte hotovo. V mobilní aplikaci pak místo párování přes Bluetooth zvolíte TCP připojení a zadáte IP s portem. Přes VPN to funguje stejně, jen adresa musí být dosažitelná z tunelu.
Když něco nefunguje
Deska se nepřipojí k WiFi a na displeji nic. Nejčastěji jde o překlep v SSID nebo o síť běžící čistě na 5 GHz. ESP32-S3 umí jenom 2,4 GHz, takže pokud máte na routeru oba pásma pod jedním jménem a klientovi se nepodaří chytit dvojkovku, neuvidíte nic. Připojte se sériovou konzolí na 115200 baud a přečtěte si, co firmware hlásí.
Spojení naváže, ale komunikace přes room server zlobí. Tady narazíte na známý problém: v issue #1078 uživatel popisuje, že companion připojený přes TCP se k jeho room serveru přihlásí, zprávy přijímá, ale odeslat je nedokáže. Stejné chování hlásí z Windows aplikace, z Python CLI i z Androidu, zatímco přes Bluetooth funguje všechno normálně. Vypadá to na chybu v TCP implementaci firmwaru.
Přiznám se, že tohle mě zabrzdilo. Původně jsem měl WiFi companion za hotovou věc, kterou stačí zkompilovat a jede. Pak jsem tohle issue přečetl a došlo mi, proč MeshCore sám označuje WiFi podporu za experimentální. Ta poznámka v dokumentaci není zdvořilostní. Pro běžný chat a sledování meshe to sedí, na room servery bych zatím spoléhal opatrněji.
Poslední drobnost: firmware si po sobě neuklidí zapečené heslo. Když desku prodáte, půjčíte nebo pošlete kamarádovi, přeflashněte ji čistou binárkou. Vytáhnout SSID a heslo z flash paměti ESP32 je práce na pět minut pro každého, kdo má esptool a chuť.
Jinak je to slušný upgrade. Nóda visí na parapetu a mesh mám na dosah i z kanceláře. Přesně kvůli tomu jsem do toho šel.
Zdroje
- flasher.meshcore.io – oficiální webflasher přes Web Serial API, včetně volby Custom Firmware
- flasher.meshcore.io/heltec-v3 – seznam rolí pro Heltec v3
- ilikehamradio/meshcore_heltecv3_wifi – Docker build skript
- meshcore.ca – Heltec V3 Wi-Fi Firmware – manuální build postup
- meshcore.cz/wifi_firmware – český návod přes VS Code
- MeshCore issue #1078 – problém s room serverem přes TCP
- meshcore-cli – CLI klient přes BLE, TCP a sériovou linku
![]()






