ESP32-C3 Red Alert Monitor

March 23, 2026 · View on GitHub

A standalone ESP32-C3 device that monitors the Israeli Home Front Command (Pikud HaOref) alert API in real time and provides visual feedback via a NeoPixel LED strip and a MAX7219 32×8 dot matrix display — no Home Assistant required.

Device


Features

  • Connects to the Pikud HaOref live alert API every 3 seconds
  • Filters alerts by city name (configurable via captive portal)
  • NeoPixel LED strip changes color based on alert state
  • MAX7219 32×8 matrix displays status text
  • Captive Portal (WiFiManager) for easy WiFi setup and city configuration — no code changes needed
  • City name persisted in flash (survives restarts)

Alert States

StateLED ColorMatrix Display
SafeGreen (solid)SAFE
Pre-AlarmOrange (solid)PRE ALARM (scrolling)
UnsafeRed (blinking)UNSAFE (scrolling)

Photos

Assembled Device — SAFE State

Display showing SAFE MAX7219 matrix displaying "SAFE" with NeoPixel LEDs above

Enclosure

3D printed enclosure 3D printed case with NeoPixel strip along the bottom edge

Pre-Alarm State

PRE ALARM scrolling on matrix "PRE ALARM" scrolling on the matrix — rockets expected in the area within minutes

Internals

Inside the enclosure Wiring inside the enclosure — ESP32-C3, NeoPixel strip, and power connections


Hardware

  • ESP32-C3 SuperMini (or compatible)
  • WS2812B NeoPixel LED strip (12 LEDs)
  • MAX7219 32×8 dot matrix display (4× 8×8 modules)
  • 3D printed enclosure

Wiring

MAX7219 32×8 Matrix

MAX7219 PinESP32-C3 GPIO
VCC5V (USB)
GNDGND
DINGPIO7
CLKGPIO6
CSGPIO5

NeoPixel WS2812B

WS2812B PinESP32-C3 GPIO
VCC (+5V)5V (USB)
GNDGND
DINGPIO2

Config Button

Button PinESP32-C3
Side AGPIO3
Side BGND

No pull-up resistor needed — the internal pull-up is enabled in firmware.

Note: The ESP32-C3 outputs 3.3V logic. MAX7219 at 5V expects a minimum 3.5V high signal — in practice this works, but a level shifter on DIN/CLK/CS can improve reliability.


First-Time Setup

  1. Power on the device — LED turns blue
  2. If no WiFi is saved, an access point named RedAlert-Setup is created
  3. Connect from any phone or computer — the captive portal opens automatically
  4. Tap Configure WiFi, select your network, enter the password and your city name in Hebrew (e.g. רמת השרון)
  5. Tap Save — the device connects and begins monitoring
Portal main screenWiFi & city configuration
Portal mainPortal config

Reconfiguring WiFi or City

A physical config button is connected between GPIO3 and GND.

Hold the button for 3 seconds → the device restarts and opens the RedAlert-Setup portal again, where you can change the WiFi network or city name without reflashing.

The matrix displays CONFIG during this mode.


Configuration

All settings are stored in flash and survive power cycles.

ParameterDefaultWhere to change
City nameתל אביבCaptive Portal
LED count12NEOPIXEL_COUNT in main.cpp
LED brightness200 (0–255)pixel.setBrightness() in main.cpp
Matrix brightness5 (0–15)matrix.setIntensity() in main.cpp
Poll interval3000 msCHECK_INTERVAL in main.cpp

Building & Flashing

This project uses PlatformIO.

# Clone the repo
git clone https://github.com/amir684/esp32c3-red-alert.git
cd esp32c3-red-alert

# Build and upload
pio run --target upload

# Monitor serial output
pio device monitor

Dependencies

LibraryAuthor
WiFiManagertzapu
Adafruit NeoPixelAdafruit
MD_ParolaMajicDesigns
MD_MAX72XXMajicDesigns
ArduinoJsonBenoît Blanchon

Alert API Credit

Live alert data is provided by the Israeli Home Front Command (Pikud HaOref):

  • API Endpoint: https://www.oref.org.il/warningMessages/alert/Alerts.json
  • For a full Home Assistant integration using the same API, see amitfin/oref_alert

License

Licensed under the Apache License 2.0.