Meshcore GUI Client for uConsole and AIO

Inspired by the work that @guax did for the uConsole increating a TUI ( TUI Meshcore Client for the uConsole ), I created (vibe-coded) a GTK-based desktop GUI application for the uConsole and the HackerLabs AIO board. Like the TUI, it’s backed by the great GitHub - rightup/pyMC_core: A Python MeshCore library with SPI LoRa radio support.

It’s half network-analyzer, half client. It lets you chat in channels, DM, see nodes on maps, and see packets going through the network. You can advert as well.

It supports emojis, @[]-based username mentions, and has what I think is fairly decent keyboard-based control.

Repo is here - GitHub - cwill747/meshcore-uconsole: A gtk-based meshcore companion node and network analyzer for the ClockworkPi uconsole and the HackerGadgets uConsole AIO board, and there’s a APT repository you can use for automatic updates with instructions at meshcore-uconsole APT Repository.

Incredibly vibe-coded, but it’s something I’m using daily and updating often. Let me know if you find it useful! Thanks again @guax for the inspiration.

1 Like

Awesome! I though about going this route but knew I did not have the time to do it so went for the TUI as a simpler approach.

Great stuff. The more options the more people will engage and get new ideas to expand the meshes and its uses.

Installed like a charm !

I notice the map.. and as you app created to work with uConsole and HackerGadget kit.. i’m wondering… is it able to use the GPS as well ?

And.. not sure if it work.. i notice the “Connect”.. and “Offline”

When i click connect, i see then after 5 sec, a pop-up message “connected”.. but the Offline still red.

here the log.. can’t tell yet if it work or not..

2026-03-08 17:19:07,129 DEBUG [meshcore_console.ui_gtk.windows.main_window] UI: connect toggle clicked, action=connect
2026-03-08 17:19:07,131 DEBUG [GPIOPinManager] GPIO Manager initialized with chip: /dev/gpiochip0
2026-03-08 17:19:07,131 INFO [SX1262_wrapper] SX1262Radio configured: freq=910.5MHz, power=22dBm, sf=7, bw=62.5kHz, pre=17
2026-03-08 17:19:07,131 DEBUG [SX1262_wrapper] Initializing SX1262 radio…
2026-03-08 17:19:07,132 DEBUG [GPIOPinManager] Input pin 23 configured (pull_up=False, callback=False)
2026-03-08 17:19:07,132 DEBUG [GPIOPinManager] Output pin 21 configured (initial=True)
2026-03-08 17:19:07,132 DEBUG [GPIOPinManager] All GPIO pins cleaned up
2026-03-08 17:19:09,134 DEBUG [GPIOPinManager] GPIO Manager initialized with chip: /dev/gpiochip0
2026-03-08 17:19:09,135 INFO [SX1262_wrapper] SX1262Radio configured: freq=910.5MHz, power=22dBm, sf=7, bw=62.5kHz, pre=17
2026-03-08 17:19:09,135 DEBUG [SX1262_wrapper] Initializing SX1262 radio…
2026-03-08 17:19:09,135 DEBUG [GPIOPinManager] Input pin 23 configured (pull_up=False, callback=False)
2026-03-08 17:19:09,135 DEBUG [GPIOPinManager] Output pin 21 configured (initial=True)
2026-03-08 17:19:09,135 DEBUG [GPIOPinManager] All GPIO pins cleaned up
2026-03-08 17:19:13,140 DEBUG [GPIOPinManager] GPIO Manager initialized with chip: /dev/gpiochip0
2026-03-08 17:19:13,140 INFO [SX1262_wrapper] SX1262Radio configured: freq=910.5MHz, power=22dBm, sf=7, bw=62.5kHz, pre=17
2026-03-08 17:19:13,140 DEBUG [SX1262_wrapper] Initializing SX1262 radio…
2026-03-08 17:19:13,140 DEBUG [GPIOPinManager] Input pin 23 configured (pull_up=False, callback=False)
2026-03-08 17:19:13,140 DEBUG [GPIOPinManager] Output pin 21 configured (initial=True)
2026-03-08 17:19:13,140 DEBUG [GPIOPinManager] All GPIO pins cleaned up
2026-03-08 17:19:15,135 DEBUG [meshcore_console.ui_gtk.windows.main_window] UI: toast ‘Connected’
2026-03-08 17:19:20,749 DEBUG [meshcore_console.ui_gtk.windows.main_window] UI: settings button clicked
2026-03-08 17:19:20,749 DEBUG [meshcore_console.ui_gtk.windows.main_window] UI: nav button toggled page=messages active=False
2026-03-08 17:19:20,749 DEBUG [meshcore_console.ui_gtk.windows.main_window] UI: nav button toggled page=messages active=True
2026-03-08 17:19:30,910 DEBUG [meshcore_console.ui_gtk.windows.main_window] UI: connect toggle clicked, action=connect
2026-03-08 17:19:30,912 DEBUG [GPIOPinManager] GPIO Manager initialized with chip: /dev/gpiochip0
2026-03-08 17:19:30,912 INFO [SX1262_wrapper] SX1262Radio configured: freq=910.5MHz, power=22dBm, sf=7, bw=62.5kHz, pre=17
2026-03-08 17:19:30,913 DEBUG [SX1262_wrapper] Initializing SX1262 radio…
2026-03-08 17:19:30,913 DEBUG [GPIOPinManager] Input pin 23 configured (pull_up=False, callback=False)
2026-03-08 17:19:30,913 DEBUG [GPIOPinManager] Output pin 21 configured (initial=True)
2026-03-08 17:19:30,913 DEBUG [GPIOPinManager] All GPIO pins cleaned up
2026-03-08 17:19:32,915 DEBUG [GPIOPinManager] GPIO Manager initialized with chip: /dev/gpiochip0
2026-03-08 17:19:32,916 INFO [SX1262_wrapper] SX1262Radio configured: freq=910.5MHz, power=22dBm, sf=7, bw=62.5kHz, pre=17
2026-03-08 17:19:32,916 DEBUG [SX1262_wrapper] Initializing SX1262 radio…
2026-03-08 17:19:32,916 DEBUG [GPIOPinManager] Input pin 23 configured (pull_up=False, callback=False)
2026-03-08 17:19:32,916 DEBUG [GPIOPinManager] Output pin 21 configured (initial=True)
2026-03-08 17:19:32,916 DEBUG [GPIOPinManager] All GPIO pins cleaned up
2026-03-08 17:19:36,921 DEBUG [GPIOPinManager] GPIO Manager initialized with chip: /dev/gpiochip0
2026-03-08 17:19:36,921 INFO [SX1262_wrapper] SX1262Radio configured: freq=910.5MHz, power=22dBm, sf=7, bw=62.5kHz, pre=17
2026-03-08 17:19:36,921 DEBUG [SX1262_wrapper] Initializing SX1262 radio…
2026-03-08 17:19:36,921 DEBUG [GPIOPinManager] Input pin 23 configured (pull_up=False, callback=False)
2026-03-08 17:19:36,921 DEBUG [GPIOPinManager] Output pin 21 configured (initial=True)
2026-03-08 17:19:36,922 DEBUG [GPIOPinManager] All GPIO pins cleaned up
2026-03-08 17:19:38,916 DEBUG [meshcore_console.ui_gtk.windows.main_window] UI: toast ‘Connected’
2026-03-08 17:19:44,913 DEBUG [meshcore_console.ui_gtk.views.settings] UI: export logs button clicked

find the issue… MEshtastic service loaded ! ..

So i create a script.. add a kill switch for the meshtastic service.. run meshcore.. and when i leave.. restart the service !

Oh that’s a good catch. I’ll add something in the GUI to detect that as an error condition!

@Banshees i just released a new version that should detect when something else is using the radio and letting you know. Let me know how it works, I don’t use Meshtastic so all my testing was theoretical.

i did that.. First, create the script

nano ~/start_meshcore.sh

And add this inside

#!/bin/bash

# 1. Stop Meshtastic services if running

echo "Recover the Lora..."

sudo systemctl stop meshtasticd




# 2. Security : valid that all process are dead

sudo killall -9 portduino 2>/dev/null




# 3. Preparing GPIO for the CM5

# Power of LoRa (Pin 16)

pinctrl 16 op dh

# Reset Pin 26 (IRQ) to avoid got the mode "Already in use"

sudo pinctrl 26 op dl

sleep 0.2

sudo pinctrl 26 ip pn




# 4. Start Meshcode (in graphical mode)

echo "Start Meshcore..."

meshcore-console




# 5. CLEAN-UP ON CLOSURE

# Once i close Meshcore, the script continue :

echo "Closing Meshcore, restart Meshtastic..."




# Cut power on LoRa a brief instant to reset to module

pinctrl 16 op dl

sleep 1



# Restart Meshtastic automatic

sudo systemctl start meshtasticd

echo "Done !"

Then i simply create a shorcut on the desktop :slight_smile:

So for those that simply installed the HackerGadget script (that install SDR++ Brown, GPS app and MEshtastic).. Meshtastic still running as a services.. so we need to kill the services first !

1 Like

Hoo.. I just see the new version. Working (detect Meshtastic use it and ask to kick him out). Nice!

@cwill747 I just installed your MeshCore GUI client on my uConsole + AIO V2. It works like a charm! Thank you for making it available.

Will you be updating it to support multibyte?

1 Like

hi looks like does not working for me. cm4 - I think all fine with aiov2 because tui-meshcore works
[meshcore_console.ui_gtk.views.messages] Send failed: ‘MeshNode’ object has no attribute ‘send_group_text’

region set correct

When I downgrade one release back I am able to connect and send messages but not to public channels

Would you mind opening an issue on my GitHub repo? That helps me track stuff like this better!

Update to the latest release I released yesterday. Should fix this!

issue created. Thanks!

sure - will do. Let me test latest fix and will comeback.

hi @cwill747

now complain about: channel xxx not in provided channels_config