After a month of trial and error, I’ve figured out a way to get a stable Bluetooth connection between a LoRa32 board and the Meshtastic iOS app, which is currently in beta. It’s a hacky workaround, but definitely worth the trouble.
Note: This is a quick guide aimed at relatively advanced users. Stay tuned for a beginner-friendly version in the next few weeks!
Background
When you open the Meshtastic iOS app (as of 7/7/2022), you probably see a message that says “Upgrade your Firmware: 1.3 ALPHA PREVIEW this version of the app supports only version 1.3.22.” The version number refers to a recent alpha release of the Meshtatic firmware.
The most recent firmware version is 1.3.23, but neither it nor 1.3.22 appear to work with the iOS app yet. They’re alpha releases, after all.
The most recent stable firmware version is 1.2.65. If you flash it to your LoRa device, everything seems to work OK. The iOS app will let you connect to the LoRa device via Bluetooth, and you can send messages without a problem. But after a few seconds (or minutes), the Bluetooth connection always drops out. The app revives the connection when you send another message, but without a constant Bluetooth connection you can’t receive messages in a timely way. Very frustrating.
The trick is to flash your device twice. First you’ll flash the alpha firmware (1.3.23) using the command line, then you’ll use the Meshtastic Flasher GUI app in “Update only” mode to re-flash the latest stable firmware version (1.2.65).
I don’t have a good explanation for why this technique works, but it does seem to work reliably for the time being. If we’re lucky, the folks at Meshtastic will work out these bugs soon and this guide won’t be necessary.
Hardware
You’ll need a LoRa device that can connect to your phone via Bluetooth, such as a LoRa32 board or a LilyGO T-Beam. I’m using the following LoRa32 devices:
- LilyGO TTGO LoRa32 v2.1_1.6
- Heltec LoRa32 v2.0
Software Setup
The links below include instructions for macOS, Windows, and Linux systems. (I’m using macOS.)
First, install the USB-to-serial drivers you’ll need to flash your device:
https://meshtastic.org/docs/getting-started/flashing-firmware/#install-usb-to-serial-drivers
If you’re using a Heltec board, you’ll need to install some files using the Arduino Board Manager:
https://heltec-automation-docs.readthedocs.io/en/latest/esp32/quick_start.html
Install the Meshtastic CLI tool:
https://meshtastic.org/docs/software/python/python-cli
Install the Meshtastic GUI flasher app:
https://meshtastic.org/docs/getting-started/flashing-firmware/meshtastic-flasher
Flashing Steps
First, flash the alpha Meshtastic firmware (version 1.3.22 or higher) to your device. Here’s a link to the latest version (as of 7/7/22):
https://github.com/meshtastic/Meshtastic-device/releases/tag/v1.3.23.5462d84
And here are instructions on flashing the firmware from the command line:
https://meshtastic.org/docs/getting-started/flashing-firmware/
The command you’ll use to flash the firmware will look like this:
./device-update.sh firmware-tlora-v2-1-1.6-1.3.23.5462d84.bin
When the flashing process is finished, open the Meshtastic Flasher GUI app. Go to the Advanced options menu, then check the box next to Update only. Click OK to save.
Select Meshtastic version 1.2.65 and proceed to flash your device.
Configuration Step
You’ll probably want to update your LoRa device’s configuration, which can help avoid Bluetooth timeout problems. Here’s an example config file to get you started:
owner: Iffy_Books
owner_short: Iff
channel_url: https://www.meshtastic.org/d/#CiQYAyIgvc0rL4ZyTGFD0qE7s2ptf9Mm6QQxXeedO2fpmBZ1xb0
user_prefs:
region: US
screen_on_secs: 60
wait_bluetooth_secs: 120
phone_timeout_secs: 1800
position_broadcast_secs: 120
mesh_sds_timeout_secs: 4294967295
ls_secs: 300
is_always_powered: 'true'
Save your config options to a plaintext file called config.yml. Then use the Meshtastic CLI app to update the preferences on your LoRa device:
meshtastic --configure config.yml
Privacy Step
You can start a new encrypted chat channel or join an existing one. To start a new private channel, run the command below to choose a random AES-256 key and display a shareable URL containing the key:
meshtastic --ch-set psk random --ch-index 0 --info
Note: Android users can scan a QR code to share a private key, but this feature isn’t available in the iOS app yet. Since the URL itself contains the private key in plaintext, you’ll want to keep it secret. Even entering the URL in your browser is probably unwise if you’re concerned about privacy.
To join an existing chat group, you can include the private key URL in your configuration file before updating the preferences. Or run a command like this one, using your shared URL:
meshtastic --seturl https://www.meshtastic.org/d/#CiQYAyIgvc0rL4ZyTGFD0qE7s2ptf9Mm6QQxXeedO2fpmBZ1xb0
That’s it! Open the Meshtastic app on your phone and connect to your LoRa device. If it worked, you should have a steady Bluetooth connection.
Thanks for reading. Feel free to get in touch if you have corrections or comments: