Meshtastic iOS app + LoRa32 (July 2022)

Two development boards with antennas and LCD screens sitting on a table, each connected to a microUSB power source. The LilyGO board on the left displays the message "Sup" from a user named "IFK." The Heltec board on the right displays the message "Not much, u?" from user "Js2."

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: