ESP-NOW + LoRa Emergency Communication System
March 2026 · Alin Li for Computer Services · لاقيني
Alin Li Lageeni (لاقيني — Arabic for "Find Me / Meet Me") is an open-source, off-grid emergency communication system built on ESP32. It uses two communication layers: ESP-NOW for fast, low-power short-range and LoRa for long-range — no internet, no WiFi networks, no cellular service required.
Several solutions exist for off-grid communication. Some are open-source community projects, others are commercial products. Here's how they compare — and why we built Alin Li Lageeni to fill a gap none of them address.
The most popular open-source LoRa mesh project. Community-driven, supports many hardware boards, uses flood-based routing. Available on ESP32 and nRF52 platforms with companion mobile apps for iOS and Android.
Open SourceLoRa MeshMobile AppLarge Community
A newer open-source LoRa mesh firmware (MIT license) with selective packet forwarding instead of flooding. Supports repeaters, room servers, and companion radio modes. Growing community with mobile apps and a web client.
Open SourceSelective RoutingWeb ClientNewer Project
A commercial mesh networking device. The consumer version supports text messaging and GPS via a paired smartphone. The Pro version offers military-grade encryption and integration with tactical apps like ATAK. Closed-source and proprietary.
CommercialClosed SourcePhone RequiredMilitary Grade
A satellite communicator that connects to the Iridium satellite network for global two-way messaging and SOS with a professional 24/7 rescue monitoring center. Requires a paid subscription. Not a mesh — it's device-to-satellite.
Commercial ($300–500)Subscription RequiredSatellite / Global24/7 Rescue Center
| Feature | Alin Li Lageeni | Meshtastic | MeshCore | goTenna | Garmin inReach |
|---|---|---|---|---|---|
| Cost | ~$15–30 DIY | ~$20–60 DIY | ~$20–60 DIY | $180–300+ | $300–500+ |
| Subscription | None — Free | None | None | None | $15–65/mo |
| Communication | ESP-NOW + LoRa (dual) | LoRa only | LoRa only | Proprietary radio | Iridium satellite |
| Range | 200m–15 km | 1–15 km | 1–15 km | 1–6 km | Global |
| Phone Required? | No — built-in web UI | Yes (BLE app) | Yes (BLE app) | Yes (BLE app) | Optional |
| Setup Complexity | 1-click group | Moderate (app config) | Moderate (flash + CLI) | Easy (app pairing) | Easy (account setup) |
| Target Audience | Youth / Education | Hobbyists / DIY | Hobbyists / Technical | Outdoor / Tactical | Outdoor / Pro |
| SOS System | Dual-channel + ACK + countdown | Basic (via app) | No built-in SOS | Indirect only | 24/7 rescue center |
| Sleep / Battery Save | 4 modes (down to 0.01mA) | Power save mode | Sleep optimized | ~24h battery life | Days to weeks |
| Arabic / RTL UI | Yes — built-in | Community translation | No | No | No |
| Classroom Mode | Yes — quizzes, attendance | No | No | No | No |
| Audit Logs | Full on-device + export | App-side only | Limited | App-side | Cloud only |
| Open Source | Yes (MIT) | Yes (GPL-3) | Yes (MIT) | No | No |
| Mesh Networking | Relay via peers | Flood-based mesh | Selective routing | Mesh capable | No (point-to-satellite) |
Maintaining a WiFi Access Point drains the battery fast, requires one device to always be the "router", and creates a single point of failure. For emergency and field use, we need something far leaner and more resilient.
Each ESP32 boots and creates a temporary WiFi AP named "Lageeni-XXXX" (last 4 of MAC). The user connects their phone to this WiFi and opens the web setup page at 192.168.4.1. This is the only time WiFi runs.
On the setup page, the user gives the device a friendly name (e.g., "Ahmed", "Base Camp", "Tent 3"). Saved to NVS flash — persists across reboots.
From any device's setup page, the user taps "Scan for Devices". The device broadcasts a LoRa discovery beacon. All powered-on Lageeni devices within range respond with their MAC, name, and LoRa address. The setup page shows discovered devices in real-time. Any device can be the one to initiate grouping — there is no fixed master.
User clicks "Group All Devices". A GROUP_INIT packet is broadcast via LoRa containing: group ID, encryption key, sync word, and the full device registry. All devices store this config.
After grouping, WiFi turns OFF to save battery. All communication switches to ESP-NOW (short-range, low-power) and LoRa (long-range). Smart routing auto-selects the best channel per peer.
Users interact via physical button (press = scroll messages, long-press 3s = SOS, double-press = re-enable WiFi temporarily for full web UI access). Messages route automatically via ESP-NOW (nearby) or LoRa (distant). WiFi auto-turns off after 5 minutes of inactivity.
Periodic heartbeats (ESP-NOW every 10s, LoRa every 30s) report battery %, RSSI, and GPS (if available). All devices track each other's online/offline status and signal strength.
Long-press (3s) on button triggers a 5-second visual countdown (can cancel!). After countdown: SOS broadcasts on BOTH channels simultaneously, repeated 3 times. All receiving devices show full-screen alert + LED + buzzer.
Lageeni-XXXX (last 4 MAC characters)For fast emergencies where typing isn't possible (selectable by button presses or UI tap):
| Mode | WiFi | ESP-NOW | LoRa | Current | Use Case |
|---|---|---|---|---|---|
| Setup | ON | OFF | ON | ~160 mA | Initial config via web UI |
| Active | OFF | ON | ON | ~80 mA | Normal operation |
| Light Sleep | OFF | Wake | Listen | ~10 mA | Battery saving, still reachable |
| Deep Sleep | OFF | OFF | Timer | ~0.01 mA | Max battery, wakes on timer |
| SOS Mode | OFF | MAX | MAX | ~200 mA | Emergency — all power to TX |
| Action | Trigger | What It Does | Keeps |
|---|---|---|---|
| Soft Reset | Web UI or button click | Restarts the device | Everything |
| Deregister | Web UI "Leave Group" | Leaves group, notifies peers, returns to setup | Name + Logs |
| Factory Reset | Hold button 10 seconds | Erases ALL: name, group, logs, config | Nothing |
Lageeni-XXXX| State | Pattern | Visual | Description |
|---|---|---|---|
| Booting | Fast blink (5Hz) | Starting up, scanning | |
| Setup Mode | Steady ON | WiFi AP active, waiting for config | |
| Grouped Active | Double pulse / 3s | In group, listening on both channels | |
| Light Sleep | Dim pulse / 5s | Power-saving, still reachable via LoRa | |
| Deep Sleep | OFF | Hibernating, wakes on timer/interrupt | |
| Message RX | 3 rapid flashes | Received a message | |
| Message TX | 1 long flash | Sent a message | |
| SOS Countdown | Accelerating pulses | 5-sec countdown — press again to cancel | |
| SOS Sending | Rapid red bursts | Broadcasting SOS | |
| SOS Received | SOS pattern (continuous) | Emergency alert from another device | |
| Find Me | Blue SOS blink (10s) | Remote locate triggered by peer | |
| Factory Reset | Fast blink → solid | Countdown → erase complete | |
| Low Battery | 3 slow red blinks | Battery below 10% | |
| Error | Continuous fast red | LoRa failure or critical error |
ESP32 built-in LED is single-color (blue). On RGB boards, actual colors are used. On mono boards, patterns differentiate states.
Discovered Devices (LoRa scan):
WiFi will turn OFF after grouping to save battery
Group Members:
Optional NEO-6M module. Coordinates in heartbeats and SOS. Peers see your approximate location. Essential for search & rescue.
Optional piezo buzzer. Activated on SOS receive, Find Me, low battery, and panic countdown beeps. Audible when screen isn't visible.
If A can't reach C, B auto-relays the message. Extends effective range to 2–3x single-hop distance. Transparent to the user.
TP4056 input supports 5V mini solar panel. In deep sleep, a small panel keeps the device running indefinitely — true off-grid operation.
Predefined messages selectable by button presses: "OK", "Coming", "Wait", "Help", "Danger", "Safe". No phone needed for basic replies.
Web UI charts RSSI per peer over time. Find optimal device placement, identify dead zones, and test antenna performance.
Configurable auto-check-in. If a device misses heartbeats for N minutes, all peers get a "no contact" warning. Catches lost devices.
Optional 0.96" SSD1306. Shows: last message, battery, peer count, signal, mode. Basic operation without a phone.
Web UI in English and Arabic (RTL). Auto-detects browser language. Perfect for bilingual classrooms and Middle East field teams.
All payloads encrypted. Unique key per group. ESP-NOW uses CCMP. Prevents eavesdropping from non-group LoRa receivers.
At 5% battery, auto-sends "going offline" alert with last GPS to all peers before hibernating. No one is silently lost.
Teacher broadcasts quizzes, attendance, group messages. Students respond by button. Great for outdoor lessons with no internet.
Pair two devices. If they lose ESP-NOW contact for N minutes, both get an alert. Keeps hiking partners connected and accountable.
Dedicated mode to test communication range between two devices. Sends ping-pong packets and displays real-time RSSI and success rate graph.
LED stays on as dim continuous glow for nighttime visibility. Configurable color and brightness. Helps locate devices in the dark.
Tracks CPU temperature, uptime, free memory, and flash wear. Alerts if device is overheating or running low on storage space.
ESP32-WROOM-32 or TTGO LoRa32
SX1278 (433MHz) / SX1276 (868MHz)
SMA antenna for extended range
3.7V 1000–3000mAh + TP4056
Tactile switch: SOS, wake, navigate
Piezo buzzer for audio alerts
0.96" SSD1306 I2C display
NEO-6M UART GPS module
5V mini panel + TP4056
3D-printed or project box
Review the full architecture, flows, and specifications above. Once confirmed, we build the complete PlatformIO firmware with ESP-NOW + LoRa dual-layer communication.