Skip to content
MCU Atlas
ESP32NRF52ESP32-S3NRF52840

LoRa mesh panic button for Meshtastic: one press sends an encrypted alert

A tiny LoRa board that sleeps until you press its button, then sends one encrypted text on a private Meshtastic channel so the phones on your mesh get the alert. Not a certified safety device.

Difficulty:IntermediateSource available

What it is

A one-button LoRa alert: press it and the phones on your Meshtastic mesh get an encrypted message. Not a certified safety device.

What you need

How hard

Intermediate: no wiring on the Heltec, but you flash with PlatformIO and set the channel with Python scripts over a short USB window.

Key Facts

  • SAFETY: Not a certified safety device. LoRa has no delivery guarantee: the button sends once, without acknowledgement. Test coverage from where the button will actually be used, and do not rely on it alone for life safety.
  • Boards: Heltec WiFi LoRa 32 V3 or V4 (PRG button), Seeed XIAO ESP32-S3 + Wio-SX1262 kit, or Seeed XIAO nRF52840 (Sense) + Wio-SX1262 for XIAO (remove the kit's GNSS board)
  • Always connect the LoRa antenna before powering the board: transmitting without one can damage the radio
  • Needs at least one stock Meshtastic node in range. Default radio settings: EU_868, LongFast (869.525 MHz); in the US the README gives 906.875 MHz for the default channel, untested
  • Send-only: one press, one message, no acknowledgement, retry or position
  • Firmware: PlatformIO; setup scripts: Python 3.10+ with pyserial. MIT licence (nRF52840 board files LGPL-2.1+)

About This Project

This panic button by Guillaume Pilot and Luc Juggery turns a Heltec WiFi LoRa 32 or a Seeed XIAO LoRa kit into a one-button alert for a Meshtastic mesh. The board sleeps; a press wakes it, it sends one message ("button pressed" by default) on a private, encrypted channel, and it goes back to sleep. Ordinary Meshtastic nodes relay it, and every phone that has the same channel sees the alert. You make the channel link with the repo's Python script, add it to the phones, then give it to the button over USB; it is stored on the board, not in the firmware. A Meshtastic MQTT gateway can forward alerts to a server. It is not affiliated with Meshtastic and uses no Meshtastic code: it speaks the same radio format. The authors are clear about the limits: it is send-only, with no acknowledgement and no retry, it is set up for Europe's 868 MHz band (other regions need a frequency change and are untested), and it is not a certified safety device.

Source & Attribution

Creator: Guillaume Pilot (@gpilot), Luc Juggery
Source: GitHub
License: MIT (nRF52840 variant and linker files: LGPL-2.1-or-later)
Last verified: 11/2/2026
LoRa mesh panic button for Meshtastic: one press sends an encrypted alert

Illustration

How to Build It
Make a private Meshtastic channel, flash the panic-button firmware to a Heltec or XIAO LoRa board, give it the channel over USB and test it where it will be used.

Parts Needed

Steps

  1. 1

    Read the warning

    This is not a certified safety device. The button sends once with no acknowledgement, LoRa has no delivery guarantee, and you shouldn't rely on it alone for life safety.

  2. 2

    Make a private channel

    Run the repo's make_channel_url.py to create a channel name and random key as a Meshtastic link. Treat the link like a password: anyone with it can read and send.

  3. 3

    Add it to the phones

    Open the link on each phone that should get alerts and accept the channel. The node each phone connects to must hold the channel too.

  4. 4

    Fit the antenna and flash

    Screw on the LoRa antenna before powering the board. Flash with PlatformIO (heltec-v3, heltec-v4 or xiao-s3), or on the XIAO nRF52840 build the UF2 file and copy it to the board's drive after a quick double-press of reset.

  5. 5

    Give the button its channel

    The board listens on USB for only 5 seconds after a plug-in or reset, so start configure_button.py with the channel link first, then plug in or reset. Without a channel the button sends nothing.

  6. 6

    Test where it will be used

    Press the button from the places it will actually be used and check that every phone gets the message. The firmware is set for Europe's 868 MHz band; other regions need the frequency changed in the code and are untested.

Bill of Materials

Parts list

8 parts · 4 linked

Heads up: some Buy links are affiliate links. If you buy through one, MCU Atlas may earn a small commission at no extra cost to you. It never changes which parts we list. How this works

No verified link — check the original project
No verified link — check the original project
No verified link — check the original project

1× A Meshtastic node in range (any hardware, stock firmware)

No verified link — check the original project

Not included: Battery and enclosure: the README doesn't specify any, A phone with the Meshtastic app for each person who should get alerts, A computer with PlatformIO and Python 3.10+ (pyserial)

Download CSV

Related Projects

MeshCore-BitChat: bridge Bitchat phone chats onto a MeshCore LoRa mesh
Illustration
ESP32ESP32-S3
Firmware for a cheap ESP32 LoRa board that relays the #mesh channel between Bitchat's Bluetooth phone mesh and a MeshCore LoRa network, both ways.
Beginner
4 parts listed
LilyGO T-Lora Pager: Meshtastic handheld without a phone
Illustration
ESP32ESP32-S3
A standalone LoRa pager with full QWERTY keyboard, color display, and Meshtastic firmware—no phone pairing required.
Beginner·Code
1 part listed
LIA: an open-source Meshtastic GPS tracker for your pet's collar
Illustration
ESP32ESP32-S3
A custom ESP32-S3 + SX1262 + GNSS collar board that runs Meshtastic and reports your dog's position over LoRa as direct messages, with no cellular service.
Advanced
8 parts listed