puddle.town

Thoughts on Meshtastic

Introduction

I've been experimenting with LoRa as implemented by the Meshtastic project. Their open-source efforts can be followed on GitHub.

Meshtastic was conceived to support telemetry and connectivity among IoT devices, like monitoring conditions in a greenhouse without the need for wired setups. Increasingly, the community is exploring Meshtastic's potential for emergency communication during power or cellular outages, a trend driven by preppers and survivalists.

My kit thus far includes a couple of Heltec v3 radios and one LilyGo T-Beam.

For approximately $25 (USD), the Heltec comes with a flimsy plastic case and a small antenna; it does not come with a battery. There's a nice kit on Etsy called the "H1" that comes with the radio, a 3D-printed case, an upgraded antenna and a small battery.

H1 Heltec v3 with H1 case

I'd highly recommend it as an easy way to get started. You can find it here. It costs twice as much as a bare radio, but will save you a lot of trouble sourcing components and putting it all together in a portable kit.

At around $30, the LilyGo T-Beam costs just a bit more than the Heltec. However, it adds a GPS chip and an integrated battery socket. It also includes a small but functional antenna.

T-Beam LilyGo T-Beam

LoRa

LoRa enables low-power, long-range communication, perfect for creating mesh networks in diverse environments. Meshtastic leverages this to facilitate communication in remote or non-traditional network areas. In the US, LoRa uses unregulated 915 MHz spectrum, enabling a maximum output power of +30 dBm ERP. In Europe, you can operate over 433 MHz at +10 dBm ERP or over 868 MHz at +27 dBm ERP.

Channels

Channels can be public -- like the default "Long Fast" channel -- or private. Private channels can set a 1-bit, 128-bit, 192-bit or 256-bit shared key for encryption. By default the "Long Fast" channel uses a well-known and very short (1-bit) key. Therefore it is technically encrypted, but in practice, anyone can decrypt and read these messages. There is a lot of noise in this channel, and there is no ability to filter, mute or block anything. This is the main street of Meshtastic, and it's a hot mess. I had to endure crude jokes about the Holocaust on a Saturday night. 😬

HAM Radio

There's also a "ham radio" mode for amateur radio operators in the US and Europe. This mode allows for higher transmission power, but there are a couple of serious downsides to enabling it: you can't use encryption (per regulations on amateur radio), and it disables the radio's default retransmission. In this mode, it will no longer relay packets to the rest of the mesh (in Meshtastic parlance, Rebroadcast Mode is set to LOCAL_ONLY).

Ham mode also broadcasts your call-sign every 10 minutes. The upside to ham mode is that you can technically increase the output power; however, in reality neither the Heltec or LilyGo devices have the ability to go beyond 30 dBm, so it's completely pointless. I do NOT recommend ham radio mode unless you just want to broadcast your call-sign as some sort of nerd flex.

Configuring Devices

Initial setup requires firmware updates, setting the region (to comply with local regulations), and optionally setting a frequency slot. You may also want to setup your own encrypted channels. The Meshtastic Flasher and Web Client can be used for these tasks.

Meshtastic Flasher The Meshtastic Flasher, a tool for easy firmware updates.

Web Client The Meshtastic Web Client, providing a user interface for device management and communication.

Mobile Apps

There are also clients for Android and iOS. I've been using the Meshtastic iPhone app as my primary method to configure the radios, although I have briefly tested Android as well.

One thing to note: although the various clients support most of the same features and have them grouped and presented uniformly, you will find missing features on each platform. It's a bit frustrating. There were times where I had to switch from the web to the iPhone to achieve a task, or vice versa. I assume these gaps will diminish over time.

With the radios configured, your primary interaction with them will probably mostly be via the Bluetooth connected Android or iOS apps. Here you can view connected nodes, and send messages either directly to a node or to a channel. Here's what the map view looks like on iPhone, showing all the nodes the radio has detected in my area:

Messtastic iOS

Python CLI

There's also a nice Python-based CLI tool, aptly named meshtastic. You can install it with pip or pipx. It can connect to a radio over USB/serial, or via Bluetooth (as an aside, this may be the first time I've seen a command-line tool that does Bluetooth scans and connections... neat!). With this tool you can view and set almost all the configuration parameters of an attached radio, send reboot commands, view connected nodes, see debug-level logs, run stress tests, and more.

I use the Python CLI to manage device configurations. You can use the meshtastic --export-config command to send the current config to a YAML file, which looks something like this:

owner: Neo Nash
owner_short: "NEON"

config:
  display:
    autoScreenCarouselSecs: 15
    screenOnSecs: 120
  lora:
    channelNum: 20
    hopLimit: 3
    region: US

channel_url: REDACTED

You can edit those files, and send configurations back with meshtastic --configure file.yml. Since I had several radios, I chose to store these YAML files in Git so I could track changes and have a simple backup.

Challenges

The platform's architecture, while robust for low-priority data transmission, struggles with real-time communication. This is especially true across distances or through urban landscapes. This limitation underscores the need for greater community participation and strategic placement of relay nodes. LoRa has not yet achieved the network effect at city-scale.

While these devices are relatively low power, the kits I've tried so far have small batteries. None of them have lasted a full day, limiting their practicality.

The radios, usually running on embedded device kits, do not have much storage and thus only keep the last few messages in memory. That means if you don't keep the radio connected via Bluetooth to your phone at all times, you will miss incoming messages. This happens all the time. It is a mission-critical gap in the product if it is to be useful for human communications. There's a new "Store & Forward" module that can be enabled on devices with enough RAM (including the LilyGo T-Beam), but it doesn't seem to work. It would run for a few minutes before disabling itself. I assume it was crashing but haven't had time to fully debug. Which brings me to my next point...

You will encounter many bugs. Here are some of the bigger ones I ran into:

There were more. I could go on.

There is also a limited amount of support, and while to some extent this is to be expected from an opensource project, this community felt pretty walled off in particular. Questions on Discord were met with silence, and bug reports on GitHub closed without explanation.

Conclusion

Unable to communicate with my friend across town, have I found another purpose for these radios? To be honest, not really. Their greatest value thus far has been purely educational. I enjoy playing around with stuff like this, and have learned a lot. But there's just not a compelling use case for me at the moment.

Meshtastic's innovative use of LoRa technology offers promise for both recreational and critical applications. The project is an excellent example of community-driven technology. Nonetheless, for Meshtastic to become a reliable tool, continued development and expanded user adoption are essential.

Pros:

Cons:

#lora #mesh #meshtastic #radio #rf