A gtk-based native desktop application for interacting with MeshCore on the ClockworkPi UConsole using the HackerGadgets AIO board, which includes a LORA chip.
Inpsired by YAMPA, and built on top of the great pyMC-core library to interact with the board.
You can run a Mock version of the application on anything that supports Nix, and then you can run the real application on the uConsole either by cloning the repo and following the below instructions, or installing from the APT repository.
# Add signing key
curl -fsSL https://cwill747.github.io/meshcore-uconsole/KEY.gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/meshcore.gpg
# Add repository
echo "deb [signed-by=/usr/share/keyrings/meshcore.gpg arch=arm64] \
https://cwill747.github.io/meshcore-uconsole stable main" \
| sudo tee /etc/apt/sources.list.d/meshcore.list
# Install
sudo apt update && sudo apt install meshcore-uconsoleFuture updates are available via sudo apt update && sudo apt upgrade.
Download the latest .deb from Releases and install with:
sudo apt install ./meshcore-uconsole_*.deb| Analyzer | Peers |
|---|---|
![]() |
![]() |
| Channels | Map |
|---|---|
![]() |
![]() |
| Platform | Requirements |
|---|---|
| macOS | Nix package manager |
| Raspberry Pi | Python 3.11+, uv |
Why --system-site-packages? PyGObject cannot be installed via pip on most platforms. It must come from system packages (Raspberry Pi) or Nix (macOS). The --system-site-packages flag allows the virtual environment to access these system-installed packages.
- Create and sync the local Python environment:
nix develop --command sh -lc 'uv venv --python "$(which python)" --system-site-packages'
nix develop --command uv sync- Run the app in mock mode:
./scripts/run-dev.sh- Run smoke checks:
uv run pytestNote: run-dev.sh always enables mock mode (MESHCORE_MOCK=1) since macOS has no radio hardware.
- On the Pi, run base bootstrap and reboot:
./scripts/bootstrap-pi.sh
sudo reboot- Create/sync the local Python environment:
uv venv --python python3 --system-site-packages
uv sync- Validate host + hardware:
uv run meshcore-console doctor- Start listening for mesh events:
uv run meshcore-console listen- Send a message:
uv run meshcore-console send --peer "<contact-name>" --message "hello"- Launch GTK UI on Pi:
./scripts/run-gtk-pi.shUse mock mode on Pi if desired:
MESHCORE_MOCK=1 ./scripts/run-gtk-pi.sh| Command | Description |
|---|---|
meshcore-console doctor |
Validate SPI/GPIO configuration and radio hardware connectivity |
meshcore-console listen |
Listen for mesh packets and print decoded events to stdout |
meshcore-console send |
Send a direct message to a named peer |
If doctor fails on SPI/GPIO, confirm these before retrying:
- SPI is enabled (
sudo raspi-config nonint do_spi 0) /boot/firmware/config.txtcontainsdtoverlay=spi1-1cs- You rebooted after bootstrap
Hardware overrides can be supplied via env vars when running meshcore-console.
Notable radio bring-up flags:
MESHCORE_USE_DIO2_RF=1(default in this repo)MESHCORE_USE_DIO3_TCXO=1(default in this repo)



