Offline, encrypted, GPS-tagged peer-to-peer messaging over LoRa β no internet required.
Built for the Heltec WiFi LoRa 32 V3 (ESP32-S3) using RadioLib and the onboard SSD1306 OLED.
- π XOR-encrypted text messages
- π GPS coordinates attached to every message
- π Live OLED display with inbox + compose UI
- πΆ LoRa @ 865 MHz, SF9 (India ISM band)
- π Two-button operation β no touchscreen needed
| Component | Details |
|---|---|
| Heltec WiFi LoRa 32 V3 | Γ 2 (one per node) |
| GPS Module | NEO-6M or NEO-8M |
| Tactile Button | External SPACE button |
| GPS Module | Heltec V3 Pin |
|---|---|
| TX | GPIO 4 |
| VCC | 3.3V |
| GND | GND |
| SPACE Button | Heltec V3 Pin |
|---|---|
| Leg 1 | GPIO 45 |
| Leg 2 | GND |
Everything else (OLED, LoRa, PRG button) is already onboard.
| Button | Action |
|---|---|
| PRG short press | Backspace |
| PRG long press | Send message |
| SPACE press | Add a space |
1. Add ESP32 board support
File β Preferences β paste this URL:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.jsonThen: Tools β Boards Manager β install esp32 by Espressif Systems
2. Install libraries via Tools β Manage Libraries:
RadioLibβ Jan GromeΕ‘Adafruit SSD1306β AdafruitAdafruit GFX Libraryβ AdafruitTinyGPS++β Mikal Hart
3. Select board
Tools β Board β Heltec WiFi LoRa 32(V3)
4. Set Node ID in the sketch before uploading:
#define NODE_ID 0x01 // Node A
#define NODE_ID 0x02 // Node B5. Upload β hold BOOT button if it fails to connect.
[Node A] β type message β PRG long press
β XOR encrypt β pack with GPS coords
β transmit over LoRa @ 865 MHz
[Node B] β receives packet β decrypt β show on OLED
β displays sender, RSSI, GPS, message text
Inbox holds the last 3 messages. Older messages are overwritten in a circular buffer.
| Setting | Location | Default |
|---|---|---|
| Node ID | #define NODE_ID |
0x01 |
| Encryption key | #define XOR_KEY |
"SECRETKEY123" |
| LoRa frequency | radio.begin(...) |
865.0 MHz |
| Spreading factor | radio.begin(...) |
SF9 |
Both nodes must use the same
XOR_KEYto communicate.