MeshCore repeater firmware for the Seeed Studio XIAO ESP32S3 and the Ebyte E22P-868M30S LoRa module.
This is a standalone, single-target firmware project based on MeshCore repeater v1.16.0. It supports only the XIAO ESP32S3 + E22P-868M30S combination and adds radio diagnostics, optional home Wi-Fi and field-tested E22P noise-floor recovery.
- Dedicated
Xiao_S3_E22P_repeaterPlatformIO environment. - Full E22P output using SX1262 power
22 dBmand the module's RF front end. - DIO2 RF switch control, 1.8 V DIO3 TCXO and E22P EN control.
- Default
agc.reset.interval=4recovery for the E22P receive path. - Fresh 64-sample noise-floor measurement after each successful AGC reset.
health,diag,queue,dense,cli statsandtx diagcommands.- Original temporary
MeshCore-OTAaccess point throughstart ota. - Optional persistent home Wi-Fi through WiFiManager and
wifi on. - Password-protected LAN OTA, diagnostics and HTTP CLI.
The E22P receiver can occasionally retain an unrealistically high noise floor. This build performs a short warm-sleep AGC reset every 4 seconds when no packet is being received, then calculates a new average from 64 RSSI samples. Generic periodic calibration updates the threshold without replacing this post-reset measurement.
Repeated field readings after the fix remained around -111 to -112 dBm
instead of returning to the stale state near -96 dBm. Actual values depend on
the antenna and local RF environment. Check the current value with health.
The E22P requires a stable external supply. For full output, use approximately 5 V with enough capacity for 600-670 mA TX peaks. Do not power it from the XIAO 3V3 pin. All grounds must be connected together.
| E22P | XIAO ESP32S3 | GPIO |
|---|---|---|
| SCK | D8 | 7 |
| MISO | D9 | 8 |
| MOSI | D10 | 9 |
| NSS | D4 | 5 |
| DIO1 | D1 | 2 |
| BUSY | D3 | 4 |
| NRST | D2 | 3 |
| EN | D5 / SCL | 6 |
| T/R CTRL | SX1262 DIO2 | - |
See docs/wiring.md before connecting or powering the module.
Most users do not need PlatformIO. Download both files from the latest GitHub release:
MeshCore-E22P-868M30S-merged.bin— first installation over USB with the MeshCore Web Flasher;MeshCore-E22P-868M30S.bin— later OTA updates only.
- Connect the XIAO ESP32S3 to your computer over USB.
- Open the official MeshCore Web Flasher in a Web Serial compatible browser such as Chrome or Edge.
- Choose Custom Firmware.
- Select
MeshCore-E22P-868M30S-merged.binfrom the GitHub release. - Select the XIAO serial port and start flashing.
- After reboot, open the flasher's serial console at 115200 baud to configure the repeater name, admin password and radio settings.
The merged image includes the ESP32-S3 bootloader, partition table and
application and is flashed at offset 0x0. Do not use the non-merged OTA image
for a first installation.
Install PlatformIO, clone this repository and run:
pio run -e Xiao_S3_E22P_repeaterApplication image for OTA:
.pio/build/Xiao_S3_E22P_repeater/firmware.bin
Create the merged image for the first USB/web-flasher installation:
pio run -e Xiao_S3_E22P_repeater -t mergebinFlash firmware-merged.bin at offset 0x0. Use the normal firmware.bin for
later OTA updates.
Wi-Fi is off by default on a fresh installation.
start otastarts the original temporaryMeshCore-OTAaccess point for 10 minutes.stop otastops the temporary OTA access point.wifi onenables persistent home Wi-Fi. WiFiManager opensMeshCore-WiFi-<node-name>only when saved credentials are missing or fail.wifi offdisables persistent Wi-Fi and the Wi-Fi radio.
For protected LAN OTA and HTTP tools, configure one password from an authenticated MeshCore repeater console:
set web.password <at-least-8-characters>
web on
wifi on
The fixed web username is admin. The password protects /update, /cmd,
/diag, /radio and /log. Use the web interface only on a trusted local
network; it uses HTTP Basic Authentication and must not be exposed to the
internet.
When upgrading an older build that already has persistent STA enabled, the existing MeshCore admin password is used as a migration fallback until a separate web password is saved. Fresh installations do not enable this fallback.
See docs/e22p_commands.md for the command reference.
- Frequency: 869.525 MHz
- Bandwidth: 250 kHz
- Spreading factor: 10
- Coding rate: 5
- SX1262 TX power: 22 dBm
- SX1262 current limit: 140 mA
- E22P AGC reset interval: 4 seconds
The 140 mA value is the SX1262 current limit, not the total E22P module supply current. Verify that your frequency, antenna, output power and duty cycle comply with local regulations.
Based on MeshCore repeater v1.16.0. The source remains available under the MIT license in license.txt. This project is not an official Ebyte or MeshCore product.