Close
0%
0%

SIGNAL:Pocket Morse Pacer & Emergency Beacon

Pocket ESP32 device that paces Morse code and broadcasts a peerless 2.4GHz distress beacon

Public Chat
Similar projects worth following
0 followers
SIGNAL is a single-button, off-grid emergency signaling device built on an ESP32. It converts preset emergency messages (SOS, MED, FIRE, LOST, HERE, OK) into correctly timed Morse code, displayed as a synchronized visual guide so anyone can flash a flashlight or key a radio without knowing Morse. It also broadcasts a structured distress packet over ESP-NOW — no router, access point, or pairing required.

Cell towers and wifi infrastructure are exactly what disasters tend to take out first — wildfires, storms, and remote terrain all create situations where a person may be reachable by nothing except line of sight or a radio channel with no network behind it. SIGNAL was built around that gap: a way to actively signal for help using only a battery-powered microcontroller, with no dependency on any grid infrastructure.

The device runs on a single ESP32, an SSD1306 OLED, one push button, and an optional buzzer — six wires total. All interaction happens through one button, using single-click, double-click, and long-press gestures, decoded by a fully non-blocking debounce state machine (no delay() calls, so input is never locked out).

Morse Pacer Mode — Each preset message is expanded once into a flat sequence of dot/dash/gap symbols using a standard ITU Morse lookup table, then played back on a millis()-driven timing loop. The OLED alternates between a filled "LIGHT ON" block and an outlined "LIGHT OFF" box in exact sync with the Morse timing, so a user can key a flashlight or radio correctly without any prior knowledge of Morse code.

2.4GHz Beacon Mode — Puts the ESP32's WiFi radio into station mode with no access point, and broadcasts a packed struct (device name, status string, incrementing packet counter) to the ESP-NOW broadcast address (FF:FF:FF:FF:FF:FF) every 2.5 seconds. Any nearby ESP32 listening on the same channel receives it directly — no pairing, no network, no internet in the loop.

The prototype enclosure is corrugated cardboard, chosen deliberately: the electronics and firmware are the actual contribution here, and the build needed to be replicable with common parts and basic tools rather than gated behind a fabrication lab. The wiring and firmware are enclosure-agnostic, so the same build drops into a more durable shell (PVC, 3D-printed, or otherwise) without any changes.

Full firmware, wiring diagram, and BOM are linked below. A full build walkthrough (with photos) is also published on Instructables: https://www.instructables.com/SIGNAL-Pocket-Off-Grid-Morse-Pacer-Emergency-Beaco

  • 1 × Esp32
  • 1 × 0.96 inch Oled display
  • 1 × Tactile button
  • 1 × 9v battery & and battery connector

  • 1
    Supplies

    Electronics:

    1. 1× ESP32 Dev Module — any standard 30/38-pin dev board works; this runs the Morse engine, display, and ESP-NOW beacon
    2. 1× SSD1306 OLED, I2C, 0.96", 128×64 — the standard 4-pin I2C version (SDA/SCL), not SPI
    3. 1× momentary tactile push button — the only input on the device
    4. 1× buzzer, passive or active (optional) — passive is preferable since it can tone at a specific frequency rather than just clicking
    5. 9V battery, or USB power for bench testing
    6. Jumper wires, breadboard for initial wiring

    Enclosure (cardboard prototype):

    • Corrugated cardboard (an old shipping box works)
    • Black and white paper for the panel finish
    • Hot glue gun + glue sticks
    • Craft knife and a pencil for marking cutouts

    The same electronics stack drops into a PVC or 3D-printed shell later with no changes to wiring or firmware.

  • 2
    Wiring
    _________________________________________
    |    Component      |	 Pin	| ESP32 |
    |-------------------|-----------|-------|
    |OLED VCC           || 3V3   |
    |OLED GND           | |GND    |
    |OLED SDA           ||GPIO 21|
    |OLED SCL           ||GPIO 22|
    |Button leg 1       ||GPIO 4 |
    |Button leg 2       ||GND    |
    |Buzzer + (optional)||GPIO 19|
    |Buzzer − (optional)||GND    |
    The button relies on the ESP32's internal pull-up resistor, so no external resistor is needed — it just needs to pull the pin to ground when pressed. If using a passive buzzer, polarity generally doesn't matter; active buzzers are sometimes polarized, so check the datasheet if unclear. A quick continuity check with a multimeter before powering on is worth doing to rule out shorts.
  • 3
    Flashing the firmware
    1. Install the Arduino IDE (2.x) from arduino.cc.
    2. Add ESP32 board support: File → Preferences → Additional Boards Manager URLshttps://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json Then install esp32 (Espressif Systems) via Boards Manager.
    3. Install the U8g2 library (by oliver/olikraus) via Sketch → Include Library → Manage Libraries. This handles all OLED rendering — menu highlighting, the Morse light-guide box, and beacon status.
    4. Near the top of the sketch, set:
    #define BUZZER_IS_PASSIVE true // false = active buzzer
    1. Select your board and port under Tools, then upload.

    On reset, the OLED should show the SIGNAL splash screen. If the display stays blank, double-check SDA/SCL wiring and confirm the I2C address in code (0x3C) matches your module — some 0.96" boards ship on 0x3D instead.

View all 8 instructions

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates