Turn any microcontroller into a push notification device.
Official PlatformIO examples for integrating ESP32, Arduino, Raspberry Pi, LoPy4 and other embedded devices with NotifyBridge.
NotifyBridge lets your firmware send instant push notifications to Android and iPhone using a simple REST API.
No Firebase SDK. No mobile development. No notification backend.
Just an HTTPS request.
NotifyBridge is a cloud notification service built specifically for embedded systems and IoT projects.
Instead of building your own notification infrastructure, your device sends a simple HTTPS request and NotifyBridge delivers the notification directly to your users' phones.
Perfect for:
- 🌡 Temperature monitoring
- 🚨 Motion detection
- 🔋 Battery monitoring
- 💧 Water tank monitoring
- 🌱 Greenhouse automation
- 📍 GPS tracking
- 🛰 Remote sensors
- 🏭 Industrial equipment
- ⚡ Any device capable of making an HTTPS request
Your Device
(ESP32 / Arduino / Raspberry Pi)
│
│ HTTPS POST
▼
NotifyBridge Cloud
│
│ Push Notification
▼
Android & iPhone
🌐 Website https://www.mindeon.net
📱 Mobile Apps https://www.mindeon.net/app
📖 REST API https://www.mindeon.net/api
📚 Documentation https://www.mindeon.net/guide
| Device | Platform | Board | Notable Features |
|---|---|---|---|
| ESP32 | Espressif ESP32 | esp32dev | Button input, hourly heartbeat |
| Arduino MKR WiFi 1010 | Atmel SAM (ARM Cortex-M0+) | mkrwifi1010 | HTTPS via WiFiNINA, button input |
| Arduino Nano RP2040 Connect | RP2040 | arduino_nano_connect | IMU, microphone, earthquake detection |
| Raspberry Pi Pico W | RP2040 (WiFi) | rpipicow | Lightweight, button input |
| Raspberry Pi Pico 2W | RP2350 (WiFi) | rpipico2w | On-chip temperature sensor |
| LoPy4 + PySense | Espressif ESP32 | lopy4 | Temperature, humidity, pressure, light, accelerometer, earthquake detection |
| LoPy4 + PyTrack | Espressif ESP32 | lopy4 | GPS tracking, speed alerts, accelerometer, earthquake detection |
- PlatformIO (CLI or VSCode extension)
- A Mindeon NotifyBridge account with an API token and user key
Clone the repository
git clone https://github.com/mindeon/NotifyBridge-Devices.git
cd NotifyBridge-DevicesOpen the project for your board:
- NotifyBridge - ESP32
- NotifyBridge - MKR1010
- NotifyBridge - NANO-RP2040
- NotifyBridge - RPi_PicoW
- NotifyBridge - RPi_Pico2W
- NotifyBridge - LOPY-PYSENSE
- NotifyBridge - LOPY-PYTRACK
Configure your credentials:
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
#define NB_API_TOKEN "YOUR_API_TOKEN"
#define NB_USER_KEY "YOUR_USER_KEY"
#define NB_DEVICE_CODE "YOUR_DEVICE_CODE"Build and upload
pio run --target uploadNotifyBridge-Devices/
├── NotifyBridge - ESP32/ # ESP32 firmware
│ ├── platformio.ini
│ └── src/main.cpp
├── NotifyBridge - MKR1010/ # Arduino MKR WiFi 1010 firmware
│ ├── platformio.ini
│ └── src/main.cpp
├── NotifyBridge - NANO-RP2040/ # Arduino Nano RP2040 Connect firmware
│ ├── platformio.ini
│ └── src/main.cpp
├── NotifyBridge - RPi_PicoW/ # Raspberry Pi Pico W firmware
│ ├── platformio.ini
│ └── src/main.cpp
├── NotifyBridge - RPi_Pico2W/ # Raspberry Pi Pico 2W firmware
│ ├── platformio.ini
│ └── src/main.cpp
├── NotifyBridge - LOPY-PYSENSSE/ # LoPy4 + PySense firmware
│ ├── platformio.ini
│ └── src/main.cpp
└── NotifyBridge - LOPY-PYTRACK/ # LoPy4 + PyTrack firmware
├── platformio.ini
└── src/main.cpp
- Button on GPIO 13 — sends a priority-1 notification on press
- Heartbeat every hour — includes uptime, RSSI, and IP address
- WiFi reconnection alert (priority 2) when connectivity is restored
- Uses the native ESP32
HTTPClientlibrary for HTTPS POST
- Button on pin D7 — sends a priority-1 notification on press
- Heartbeat every hour — includes uptime, RSSI, and IP address
- WiFi reconnection alert (priority 2) when connectivity is restored
- Uses
WiFiNINA+ArduinoHttpClientwith SSL/TLS for HTTPS
The most feature-rich device in this collection. It uses the on-board LSM6DSOX IMU and PDM microphone to detect environmental events.
| Sensor | Library | Usage |
|---|---|---|
| LSM6DSOX (IMU) | Arduino_LSM6DSOX | Acceleration magnitude, micro-jolt counting, chip temperature |
| PDM Microphone | PDM.h | 16 kHz audio, RMS noise measurement |
| Event | Trigger | Priority | Cooldown |
|---|---|---|---|
| Vibration jolt | Accel delta > 0.4 G above baseline | 2 | 10 s |
| Sudden noise | RMS > 150 AND spike > 20× ambient | 2 | 10 s |
| Earthquake | 5+ micro-jolts in 5 s AND audio spike within 15 s | 2 | 2 min |
| Heartbeat | Every hour | −1 | — |
The earthquake detector fuses two independent sensor streams:
- Vibration stream — counts micro-jolts (acceleration delta > 0.15 G) inside a 5-second rolling window using a circular timestamp buffer.
- Audio stream — detects sudden noise spikes (RMS > 150 AND > 20× the running ambient level).
- Coincidence gate — both events must occur within 15 seconds of each other to trigger a confirmed earthquake alert.
Baselines are updated continuously with exponential moving averages (EMA): 80 % weight for acceleration, 95 % for audio noise, allowing the detector to adapt to the ambient environment while remaining sensitive to sudden changes.
- Button on GPIO 15 — sends a priority-1 notification on press
- Heartbeat every hour — includes uptime, RSSI, and IP address
- WiFi reconnection alert (priority 2) when connectivity is restored
- LED controlled through the CYW43 WiFi chip (not a GPIO pin)
- Uses
WiFiClientSecure(insecure mode) +HTTPClientfor HTTPS
Identical to the Pico W with one addition:
- On-chip temperature sensor (RP2350 ADC channel 4) — chip temperature included in every heartbeat message
- LED mapped to GPIO 64 (CYW43 chip on Pico 2W variant)
Runs on a Pycom LoPy4 module mounted on the PySense v1.1 expansion board. Uses the ESP32 Arduino framework via PlatformIO.
| Sensor | Library | Usage |
|---|---|---|
| Si7021 (temp/humidity) | Adafruit Si7021 | Temperature (°C) and relative humidity (%) |
| MPL3115A2 (pressure) | Adafruit MPL3115A2 | Barometric pressure (hPa) and altitude (m) |
| LTR329 (light) | Adafruit LTR329 and LTR303 | Ambient light (lux) |
| LIS2HH12 (accel) | rhio-LIS2HH12 | Acceleration (g), earthquake detection |
| Event | Trigger | Priority | Cooldown |
|---|---|---|---|
| High temperature | T > 35 °C | 2 | 5 min |
| Low temperature | T < 5 °C | 2 | 5 min |
| High humidity | H > 80 % | 2 | 5 min |
| Low humidity | H < 20 % | 2 | 5 min |
| Low pressure | P < 970 hPa | 2 | 5 min |
| High light | L > 10 000 lux | 2 | 5 min |
| Earthquake | 3+ consecutive accel deviation > 0.2 g from 1 g | 2 | 5 min |
| Heartbeat | Every 30 minutes | −1 | — |
- Button on GPIO 37 (PySense P14) — sends a priority-1 notification with a full sensor snapshot on press
- WS2812B RGB LED on GPIO 0 (LoPy4 onboard)
- Uses the native ESP32
HTTPClientlibrary for HTTPS POST
Runs on a Pycom LoPy4 module mounted on the PyTrack v2.0 expansion board. Uses the ESP32 Arduino framework via PlatformIO.
| Sensor | Library | Usage |
|---|---|---|
| L76GNSS (GPS) | TinyGPSPlus | Position (lat/lon), speed, altitude, satellite count |
| LIS2HH12 (accel) | rhio-LIS2HH12 | Acceleration (g), earthquake detection |
The L76GNSS communicates over I2C (address 0x10) rather than UART. GPS time is used to sync the ESP32 RTC via settimeofday() on first valid fix; heartbeat timestamps switch from uptime to wall-clock UTC once synced.
| Event | Trigger | Priority | Cooldown |
|---|---|---|---|
| High speed | GPS speed > 120 km/h | 2 | 5 min |
| Earthquake | 3+ consecutive accel deviation > 0.2 g from 1 g | 2 | 5 min |
| Heartbeat | Every 30 minutes — includes RSSI, sensor snapshot, and position drift | −1 | — |
- Button on GPIO 37 (PyTrack P14) — sends a priority-1 notification with timestamp and sensor snapshot on press
- WS2812B RGB LED on GPIO 0 — IDLE state flashes green when GPS has a fix, blue while waiting for fix
- Position drift tracking — the heartbeat reports maximum drift (metres) and sample count since the last heartbeat
- Uses the native ESP32
HTTPClientlibrary for HTTPS POST
All devices share the same core architecture:
| State | Pattern | Meaning |
|---|---|---|
| CONNECTING | Fast 100 ms toggle | Joining WiFi |
| IDLE | 50 ms flash every 3 s | Connected, waiting |
| SENDING | 3 rapid 50 ms blinks | Sending notification |
| DISCONNECTED | Slow 500 ms toggle | WiFi lost |
- Blocking connect at boot (30-second timeout)
- Non-blocking automatic reconnect in the main loop with a 30-second retry cooldown
HTTP POST to https://notifybridge.mindeon.net/v1/messages/send with JSON payload:
{
"api_token": "YOUR_API_TOKEN",
"user_key": "YOUR_USER_KEY",
"device_code": "YOUR_DEVICE_CODE",
"message": "Notification text",
"priority": 1
}Failed requests are retried with exponential backoff: 2 s initial delay, doubling up to 60 s, for a maximum of 5 attempts.
| Priority | Meaning |
|---|---|
| −1 | Background / heartbeat |
| 1 | User-triggered (button press) |
| 2 | System alert (WiFi restored, sensor event) |
Full NotifyBridge API documentation is available at https://www.mindeon.net/api.
See LICENSE for details.