Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
034b9c8
Added DutchMeshCore presets
Elektr0Vodka May 4, 2026
a0cc3ba
Refactor WiFi auto-reconnect to use non-blocking polling
Rococo88 May 7, 2026
b612ba4
reduce dram0_0 usage by lowering OFFLINE_QUEUE_SIZE
oltaco May 7, 2026
5a6fd4c
feat(techo-lite): add USB companion radio target for non-shell variant
jirogit May 8, 2026
77bd994
T-Echo Lite LoRa radio fixes
entr0p1 May 9, 2026
75fb07f
Add support for Station G3 and its software configurable LNA and PA1
May 9, 2026
a3e1930
Merge pull request #2511 from entr0p1/techo-lite-rf-fix
oltaco May 10, 2026
e7e97ec
add option to disable DS3231 probe
oltaco May 10, 2026
e7ea2fc
Merge pull request #2516 from oltaco/disable-ds3231-probe
liamcottle May 10, 2026
3eacc49
Merge pull request #2503 from jirogit/fix/techo-lite-non-shell-usb
oltaco May 10, 2026
716ba8e
pin CustomLFS to version 0.2.2
oltaco May 11, 2026
6d3b71e
add heltec-mesh-node-t1
Quency-D May 11, 2026
3cdcb3e
Merge pull request #2519 from oltaco/customlfs-0.2.2
liamcottle May 11, 2026
242c45f
initial support for lilygo t impulse plus
liamcottle May 11, 2026
a49ee6e
fix battery voltage reading
liamcottle May 11, 2026
96bbed2
Merge pull request #2520 from Quency-D/heltec-mesh-node-t1
liamcottle May 11, 2026
2fdbfbd
turn off 3.3v rail when powering off
liamcottle May 11, 2026
c4523f7
Merge pull request #2522 from liamcottle/board/lilygo-t-impulse-plus
liamcottle May 11, 2026
f7e45b0
Merge branch 'mqtt-bridge-implementation-flex' into mqtt-bridge-imple…
Elektr0Vodka May 11, 2026
b0b87fd
fix gps pins for lilygo t impulse plus
liamcottle May 11, 2026
68363d9
revert: "feat: Enable GPS on RAK 1W kit" (#2401)
recrof May 12, 2026
12a37a2
Merge pull request #2536 from recrof/patch-3
oltaco May 12, 2026
c588540
* new CMD_SEND_RAW_PACKET
ripplebiz May 13, 2026
5557457
Merge pull request #2543 from meshcore-dev/cmd-send-raw
liamcottle May 13, 2026
f4be34a
Merge pull request #2515 from Cisien/station-g3-esp32
ripplebiz May 15, 2026
0db7715
Merge pull request #2497 from oltaco/reduce-esp32-dram
ripplebiz May 15, 2026
6325a85
Merge pull request #2493 from Rococo88/complex-wifi-reconnect
liamcottle May 15, 2026
973321d
Disable BLE_PIN_CODE for E290 companion USB environment
willumpie82 May 15, 2026
e1616ff
Remove static BLE_PIN_CODE definition from Heltec E290_usb configuration
willumpie82 May 15, 2026
cf9bf1d
Merge pull request #2565 from willumpie82/ble-pin-code
liamcottle May 15, 2026
9af8c7c
Merge branch 'agessaman:dev' into mqtt-bridge-implementation-flex-dmc
Elektr0Vodka May 21, 2026
583b98c
Added support for tracker v1.2
Elektr0Vodka May 21, 2026
ebb7801
feat(dutchmeshcore): PSRAM 6-slot MQTT, DutchMeshCore defaults, Amste…
Elektr0Vodka May 21, 2026
93ab750
feat(dutchmeshcore): add MQTT build workflows, prebuilt binaries, fix…
Elektr0Vodka May 21, 2026
5dec5cc
updated docs with mqtt cli commands.
Elektr0Vodka May 21, 2026
7e730d9
update gh-pages docs.
Elektr0Vodka May 21, 2026
52149ea
Original layout. Updated docs to reflect changes in fw for dmc
Elektr0Vodka May 21, 2026
da54b97
matched toolbox style.
Elektr0Vodka May 21, 2026
9389e58
Update extra.css
Elektr0Vodka May 21, 2026
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
43 changes: 43 additions & 0 deletions .github/workflows/build-repeater-mqtt-firmwares.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Build Repeater MQTT Firmwares

permissions:
contents: write

on:
workflow_dispatch:
push:
tags:
- 'repeater-mqtt-*'

jobs:

build:
runs-on: ubuntu-latest
steps:

- name: Clone Repo
uses: actions/checkout@v4

- name: Setup Build Environment
uses: ./.github/actions/setup-build-environment

- name: Build Firmwares
env:
FIRMWARE_VERSION: ${{ env.GIT_TAG_VERSION }}
OUT_DIR: .prebuilt
run: /usr/bin/env bash build.sh build-repeater-mqtt-firmwares

- name: Upload Workflow Artifacts
uses: actions/upload-artifact@v4
with:
name: repeater-mqtt-firmwares
path: .prebuilt

- name: Create Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
name: Repeater MQTT Firmware ${{ env.GIT_TAG_VERSION }}
body: ""
draft: true
files: .prebuilt/*
43 changes: 43 additions & 0 deletions .github/workflows/build-roomserver-mqtt-firmwares.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Build Room Server MQTT Firmwares

permissions:
contents: write

on:
workflow_dispatch:
push:
tags:
- 'room-server-mqtt-*'

jobs:

build:
runs-on: ubuntu-latest
steps:

- name: Clone Repo
uses: actions/checkout@v4

- name: Setup Build Environment
uses: ./.github/actions/setup-build-environment

- name: Build Firmwares
env:
FIRMWARE_VERSION: ${{ env.GIT_TAG_VERSION }}
OUT_DIR: .prebuilt
run: /usr/bin/env bash build.sh build-room-server-mqtt-firmwares

- name: Upload Workflow Artifacts
uses: actions/upload-artifact@v4
with:
name: room-server-mqtt-firmwares
path: .prebuilt

- name: Create Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
name: Room Server MQTT Firmware ${{ env.GIT_TAG_VERSION }}
body: ""
draft: true
files: .prebuilt/*
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
18 changes: 11 additions & 7 deletions MQTT_IMPLEMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ get mqtt.status
**That's it!** The device will now:
- Connect to WiFi automatically
- Start uplinking mesh packets to configured MQTT brokers
- By default, publish to Let's Mesh Analyzer US (slot 1) and EU (slot 2)
- By default, publish to the DutchMeshCore presets: `dutchmeshcore-1` in slot 1 and `dutchmeshcore-2` in slot 2
- Use device name as MQTT origin (set automatically)

---
Expand Down Expand Up @@ -108,13 +108,15 @@ The MQTT bridge uses a slot-based architecture with up to 6 concurrent connectio
| `chimesh` | wss://mqtt.chimesh.org:443 | JWT (Ed25519) | WSS |
| `meshat.se` | mqtts://mqtt.meshat.se:8883 | Username/password (fixed in firmware) | MQTT over TLS |
| `eastidahomesh` | wss://broker.eastidahomesh.net:443 | None | WSS |
| `dutchmeshcore-1` | wss://collector1.dutchmeshcore.nl:443 | JWT (Ed25519) | WSS |
| `dutchmeshcore-2` | wss://collector2.dutchmeshcore.nl:443 | JWT (Ed25519) | WSS |
| `coloradomesh` | wss://mqtt.meshcore.coloradomesh.org:1883 | JWT (Ed25519) | WSS |
| `custom` | User-configured | Username/Password | MQTT or WSS |
| `none` | (disabled) | — | — |

**Default Configuration:**
- Slot 1: `analyzer-us`
- Slot 2: `analyzer-eu`
- Slot 1: `dutchmeshcore-1` (DutchMeshCore preset)
- Slot 2: `dutchmeshcore-2` (DutchMeshCore preset)
- Slots 3-6: `none`

**Memory Limits:**
Expand Down Expand Up @@ -214,8 +216,8 @@ The MQTT bridge comes with the following defaults for fresh installs:
- **RX Packets**: Enabled (uplink received packets)
- **TX Packets**: `advert` by default (uplink this node's own adverts; set to `on` for all TX or `off` to disable)
- **Status Interval**: 5 minutes (300000 ms)
- **Slot 1**: `analyzer-us`
- **Slot 2**: `analyzer-eu`
- **Slot 1**: `dutchmeshcore-1` (DutchMeshCore preset)
- **Slot 2**: `dutchmeshcore-2` (DutchMeshCore preset)
- **Slots 3-6**: `none` (disabled)
- **WiFi SSID**: (blank — must be configured)
- **WiFi Password**: (blank — must be configured)
Expand Down Expand Up @@ -255,6 +257,8 @@ Each slot (1-6) supports the following commands:
- `set mqttN.preset chimesh` - Set slot N to ChicagolandMesh
- `set mqttN.preset meshat.se` - Set slot N to Meshat.se
- `set mqttN.preset eastidahomesh` - Set slot N to EastIdahoMesh (WSS/TLS, no auth; packets on `meshcore/{IATA}/{PUBLIC_KEY}/packets`)
- `set mqttN.preset dutchmeshcore-1` - Set slot N to DutchMeshcore-1
- `set mqttN.preset dutchmeshcore-2` - Set slot N to DutchMeshcore-2
- `set mqttN.preset coloradomesh` - Set slot N to ColoradoMesh
- `set mqttN.preset custom` - Set slot N to custom broker (configure server/port/username/password)
- `set mqttN.preset none` - Disable slot N
Expand Down Expand Up @@ -627,8 +631,8 @@ set repeat off

### Step 6: Verify Slot Configuration
```
get mqtt1.preset # Should show: analyzer-us
get mqtt2.preset # Should show: analyzer-eu
get mqtt1.preset # Should show: dutchmeshcore-1
get mqtt2.preset # Should show: dutchmeshcore-2
get mqtt3.preset # Should show: none
```

Expand Down
61 changes: 61 additions & 0 deletions boards/heltec_t1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"build": {
"arduino": {
"ldscript": "nrf52840_s140_v6.ld"
},
"core": "nRF5",
"cpu": "cortex-m4",
"extra_flags": "-DNRF52840_XXAA",
"f_cpu": "64000000L",
"hwids": [
["0x239A","0x8029"],
["0x239A","0x0029"],
["0x239A","0x002A"],
["0x239A","0x802A"]
],
"usb_product": "HT-n5262T1",
"mcu": "nrf52840",
"variant": "heltec_t1",
"bsp": {
"name": "adafruit"
},
"softdevice": {
"sd_flags": "-DS140",
"sd_name": "s140",
"sd_version": "6.1.1",
"sd_fwid": "0x00B6"
},
"bootloader": {
"settings_addr": "0xFF000"
}
},
"connectivity": [
"bluetooth"
],
"debug": {
"jlink_device": "nRF52840_xxAA",
"svd_path": "nrf52840.svd",
"openocd_target": "nrf52.cfg"
},
"frameworks": [
"arduino"
],
"name": "Heltec Mesh Node T1 Board",
"upload": {
"maximum_ram_size": 235520,
"maximum_size": 815104,
"speed": 115200,
"protocol": "nrfutil",
"protocols": [
"jlink",
"nrfjprog",
"nrfutil",
"stlink"
],
"use_1200bps_touch": true,
"require_upload_port": true,
"wait_for_upload_port": true
},
"url": "https://heltec.org/",
"vendor": "Heltec"
}
64 changes: 64 additions & 0 deletions boards/lilygo_t_impulse_plus_nrf52840.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"build": {
"arduino":{
"ldscript": "nrf52840_s140_v6.ld"
},
"core": "nRF5",
"cpu": "cortex-m4",
"extra_flags": "-DARDUINO_NRF52840_T_IMPULSE_PLUS -DNRF52840_XXAA",
"f_cpu": "64000000L",
"hwids": [
[
"0x239A",
"0x8029"
]
],
"usb_product": "T-Impulse-Plus-nRF52840",
"mcu": "nrf52840",
"variant": "t_impulse_plus_nrf52840",
"bsp": {
"name": "adafruit"
},
"softdevice": {
"sd_flags": "-DS140",
"sd_name": "s140",
"sd_version": "6.1.1",
"sd_fwid": "0x00B6"
},
"bootloader": {
"settings_addr": "0xFF000"
}
},
"connectivity": [
"bluetooth"
],
"debug": {
"jlink_device": "nRF52840_xxAA",
"onboard_tools": [
"jlink"
],
"svd_path": "nrf52840.svd"
},
"frameworks": [
"arduino"
],
"name": "Lilygo T-Impulse-Plus-nRF52840",
"upload": {
"maximum_ram_size": 248832,
"maximum_size": 815104,
"require_upload_port": true,
"speed": 115200,
"protocol": "nrfutil",
"protocols": [
"jlink",
"nrfjprog",
"stlink",
"cmsis-dap",
"blackmagic"
],
"use_1200bps_touch": true,
"wait_for_upload_port": true
},
"url": "https://www.lilygo.cc/",
"vendor": "Lilygo"
}
43 changes: 43 additions & 0 deletions boards/station-g3-esp32.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"build": {
"arduino": {
"ldscript": "esp32s3_out.ld",
"memory_type": "qio_opi"
},
"core": "esp32",
"extra_flags": [
"-DBOARD_HAS_PSRAM",
"-DARDUINO_USB_CDC_ON_BOOT=1",
"-DARDUINO_USB_MODE=0",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=0"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [["0x303A", "0x1001"]],
"mcu": "esp32s3",
"variant": "esp32s3"
},
"connectivity": [
"wifi"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": ["esp-builtin"],
"openocd_target": "esp32s3.cfg"
},
"frameworks": ["arduino", "espidf"],
"name": "Station G3 ESP32",
"upload": {
"flash_size": "16MB",
"maximum_ram_size": 327680,
"maximum_size": 16777216,
"use_1200bps_touch": true,
"wait_for_upload_port": true,
"require_upload_port": true,
"speed": 921600
},
"url": "https://wiki.bqvoy.com/en/devkits/station-g3",
"vendor": "BQ Consulting"
}
35 changes: 27 additions & 8 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ Commands:
build-companion-firmwares: Build all companion firmwares for all build targets.
build-repeater-firmwares: Build all repeater firmwares for all build targets.
build-room-server-firmwares: Build all chat room server firmwares for all build targets.
build-repeater-mqtt-firmwares: Build all MQTT repeater observer firmwares for all build targets.
build-room-server-mqtt-firmwares: Build all MQTT room server observer firmwares for all build targets.

Examples:
Build firmware for the "RAK_4631_repeater" device target
Expand Down Expand Up @@ -158,12 +160,12 @@ build_firmware() {
python3 bin/uf2conv/uf2conv.py .pio/build/$1/firmware.hex -c -o .pio/build/$1/firmware.uf2 -f 0xADA52840 >/dev/null 2>&1 || true
fi

# Copy any produced artifacts to out folder.
cp .pio/build/$1/firmware.bin out/${FIRMWARE_FILENAME}.bin 2>/dev/null || true
cp .pio/build/$1/firmware-merged.bin out/${FIRMWARE_FILENAME}-merged.bin 2>/dev/null || true
cp .pio/build/$1/firmware.hex out/${FIRMWARE_FILENAME}.hex 2>/dev/null || true
cp .pio/build/$1/firmware.uf2 out/${FIRMWARE_FILENAME}.uf2 2>/dev/null || true
cp .pio/build/$1/firmware.zip out/${FIRMWARE_FILENAME}.zip 2>/dev/null || true
# Copy any produced artifacts to output folder.
cp .pio/build/$1/firmware.bin "$OUT_DIR/${FIRMWARE_FILENAME}.bin" 2>/dev/null || true
cp .pio/build/$1/firmware-merged.bin "$OUT_DIR/${FIRMWARE_FILENAME}-merged.bin" 2>/dev/null || true
cp .pio/build/$1/firmware.hex "$OUT_DIR/${FIRMWARE_FILENAME}.hex" 2>/dev/null || true
cp .pio/build/$1/firmware.uf2 "$OUT_DIR/${FIRMWARE_FILENAME}.uf2" 2>/dev/null || true
cp .pio/build/$1/firmware.zip "$OUT_DIR/${FIRMWARE_FILENAME}.zip" 2>/dev/null || true

}

Expand Down Expand Up @@ -229,15 +231,28 @@ build_room_server_firmwares() {

}

build_repeater_mqtt_firmwares() {
# build all MQTT repeater observer firmwares
build_all_firmwares_by_suffix "_repeater_observer_mqtt"
}

build_room_server_mqtt_firmwares() {
# build all MQTT room server observer firmwares
build_all_firmwares_by_suffix "_room_server_observer_mqtt"
}

build_firmwares() {
build_companion_firmwares
build_repeater_firmwares
build_room_server_firmwares
}

# output directory — override with OUT_DIR env var (e.g. OUT_DIR=.prebuilt)
OUT_DIR="${OUT_DIR:-out}"

# clean build dir
rm -rf out
mkdir -p out
rm -rf "$OUT_DIR"
mkdir -p "$OUT_DIR"

# handle script args
if [[ $1 == "build-firmware" ]]; then
Expand Down Expand Up @@ -265,4 +280,8 @@ elif [[ $1 == "build-repeater-firmwares" ]]; then
build_repeater_firmwares
elif [[ $1 == "build-room-server-firmwares" ]]; then
build_room_server_firmwares
elif [[ $1 == "build-repeater-mqtt-firmwares" ]]; then
build_repeater_mqtt_firmwares
elif [[ $1 == "build-room-server-mqtt-firmwares" ]]; then
build_room_server_mqtt_firmwares
fi
Loading