Quick post describing the steps necessary to connect to a Meshtastic node from a Linux system, such as a Raspberry Pi, using Bluetooth. Connecting to a Meshtastic device using Bluetooth is something I struggled with initially and I am writing this both for my own reference but also in the hopes it proves helpful for someone else.

This post is from the point of view that you are using a Raspberry Pi. On my Pi, I am running Ubuntu 24.04 (64 bit). To get this working I have created a Python virtual environment (python3 -m venv meshastic && . ./mestastic/bin/activate) as well as the package bluez. Next, follow the steps below:

  • enter the Bluetooth CLI with bluetoothctl.
  • Issue
    • agent on
    • discoverable on
    • scan on
  • Allow the scan to run long enough for your node to appear by name
  • Issue scan off to stop scanning. The device should now show up if you issue devices
  • Copy the hardware or MAC address of the device you want to connect to. In this example, the MAC address I am connecting to is D0:9D:0C:3A:3D:E4.
  • Issue pair D0:9D:0C:3A:3D:E4 to pair with the device. You will be prompted for the passkey for the device. Enter either what is on the screen, pre-configured or what you already set it to if you have already performed initial setup using another app. If bluetoothctl says the device is not available, run the scan again and attempt to pair again. If you wait too long the device will be removed. Once paired, it will stay.
  • Issue trust D0:9D:0C:3A:3D:E4 to trust the device.
  • Issue disconnect D0:9D:0C:3A:3D:E4 to disconnect so that other apps can connect instead.
  • You are done using bluetoothctl and you can type exit or press ctrl+d to exit it.
  • reboot your device. I had issues with bluetoothctl staying connected to the node when it shouldn’t have.

You will now be able to use the Meshtastic CLI tool to interact with the node. To do so, ensure you have activated your virtual environment with . ./meshtastic/bin/activate and have installed the Meshtastic cli tool using pip install meshtastic. If you have issues with the CLI tool connecting, make sure any other client applications have disconnected from the device AND you have closed the app. Nodes will only allow a single connection at a time.

At this point you will be free to run client applications such as the Meshtastic CLI tool or contact, a text UI based tool.

Do a Google search for “2018 mac mini bluetooth issues” and you’ll get a lot of hits. The Bluetooth issues with the 2018 Mac mini are well documented. What isn’t as well documented is how to work around the issue. I say work around because I have yet to find a proper solution to the issue.

To be fair, the issue isn’t unique to the Mac mini itself. The system just seems to suffer from it more easily than others. As it turns out, USB 3 will cause interference in the 2.4-2.5Ghz frequencies. This is the same frequency that Bluetooth operates.

Let’s take a look at how the issue manifests itself. If you are using Bluetooth devices like a wireless mouse, keyboard, AirPods or any combination thereof and you are using the type A USB 3 ports on the back of the system, you will most likely experience periods of missed keystrokes, poor mouse tracking or stuttering audio.

To work around the issue I found a few references in my Google searches referencing the USB 3 ports. As it turns out, not using the USB 3 ports really is the key to avoiding the issue. Instead, get yourself a USB-C based hub that features USB 3 ports or simply an adapter to convert USB-C to type A USB 3 connector. With this in place, I have eliminated all of the connectivity issues I had been having.

This is an unfortunate hack that removes an otherwise useful feature of the Mac mini. While you can still get full speed using a USB-C adapter it would be better if you didn’t have to lose functionality or ports in order to work around what is an unfortunate coincidence between USB 3 and Bluetooth. There are potentially other ways to solve this using properly shielded cables or ferrite cores. I’d like to test these options in the future and if I do I’ll try to report my findings.