Real-World IoT Applications
Water Quality and Flood Monitoring Networks
Environmental monitoring is one of the most compelling applications for LoRa mesh networks: sensors can be deployed in remote, power-limited locations that are difficult or expensive to reach with traditional wired or cellular connectivity.
Water Quality Monitoring
Mesh-connected water quality sensors provide real-time data for rivers, lakes, reservoirs, and municipal water systems. Note that water-quality sensors (pH, turbidity, dissolved oxygen, conductivity) require regular calibration to stay accurate:
Parameters to Monitor
- pH - Atlas Scientific EZO pH circuit (~$46) plus probe (~$85), roughly $130 total (probe sold separately; prices as of 2026-06-08). pH outside roughly 6.5-8.5 (the EPA secondary drinking-water range) may warrant investigation rather than proving contamination on its own.
- Turbidity - Measures water clarity; spikes indicate sediment runoff or contamination events
- Dissolved Oxygen - Critical for aquatic life; low DO indicates algal bloom or organic pollution
- Conductivity/TDS - Total dissolved solids; elevated levels indicate industrial runoff or saltwater intrusion
- Water temperature - DS18B20 waterproof probe (~$5); temperature affects biological and chemical processes
- Water level - Ultrasonic or pressure transducer sensor; critical for flood warning systems
Hardware Architecture
A complete water quality node:
- RAK4631 base (ultra-low power nRF52840)
- Atlas Scientific EZO carrier board (I2C) for multi-parameter sensing - e.g. the Whitebox Tentacle carrier
- DS18B20 waterproof temperature probe
- IP68 fiberglass enclosure with cable glands for sensor probes
- 10W solar panel + 10Ah LiFePO4 battery. This supports autonomous operation across most of the year in favorable sun, but do not assume unconditional year-round operation: LiFePO4 cells must never be charged below 0°C (32°F) - charging a frozen LiFePO4 cell causes lithium plating and permanent damage - so a charge controller / BMS with a low-temperature charge cutoff is required for winter water-side deployments.
- Transmit interval: 15-30 minutes (low duty cycle saves power and channel bandwidth)
Flood Early Warning Systems
The National Weather Service (NWS), working with USGS streamgages, is the authoritative source for flood warnings. A community LoRa mesh is a supplementary, non-authoritative monitoring aid - it does not replace NWS/USGS warnings or official alerts. Mesh delivery is best-effort and unacknowledged; packets can drop. Use a local mesh to monitor your own property as an early local indicator, but make life-safety and evacuation decisions based on official NWS/USGS warnings and local emergency alerts.
As a supplement, a creek or river monitoring network may give downstream residents some local advance notice. Any lead time (sometimes cited as 30-120 minutes) is watershed-dependent and not a guaranteed property - flash-flood watersheds can give far less. Treat it as a best-effort early indicator, not a guaranteed warning window:
- Deploy water level sensors at upstream monitoring points (2-3 sensors per watershed)
- Set alert thresholds. The percentages below are illustrative only, not a safe universal recipe: trigger on rate-of-rise (e.g., cm per minute) as well as absolute level, set conservative early thresholds, and align cut points with the official NWS flood-stage definitions for that specific gauge (per-site calibration with the local NWS/USGS gage). A 90%-of-flood-stage "Emergency" trigger can fire too late to evacuate, especially in flash-flood-prone watersheds. Example illustrative levels: "Advisory" ~50% of flood stage, "Warning" ~75%, "Emergency" ~90% - but do not hard-code these as universal.
- Gateway node at the monitoring station forwards alerts to community mesh
- Room server stores alerts and delivers to all connected community members
- Integration with community alerting: Telegram bot, email, or siren activation
Case study framework: A network of 5 sensors along a 20-mile creek watershed, each transmitting hourly with a gateway node at the nearest road bridge, can give the downstream community a supplementary local indicator of rising water. This is an early local signal only - it does not replace NWS/USGS flood warnings, and residents should always treat official warnings and alerts as primary.
Data Management and Visualization
# Simple data pipeline for water monitoring:
# 1. Sensor node transmits JSON over LoRa mesh
# 2. Gateway node receives and publishes to MQTT
# 3. InfluxDB stores time-series data
# 4. Grafana displays dashboard with:
# - Current readings per sensor
# - Historical trend charts
# - Alert status indicators
# - Map overlay with sensor locations
# Sample query for a flood alert (threshold is illustrative only).
# Note: InfluxQL syntax shown below applies to InfluxDB 1.x;
# InfluxDB 2.x/3.x use Flux or SQL instead.
# SELECT last("level_cm") FROM water_sensors
# WHERE "location" = 'upstream_north'
# AND "level_cm" > 180 # illustrative alert threshold - calibrate per site
Air Quality and Environmental Monitoring Networks
Urban air quality monitoring is an underserved application for community mesh networks. Low-cost sensor nodes can build hyperlocal air quality maps that government monitoring stations - typically spaced miles apart - cannot provide. Keep in mind throughout that low-cost air-quality sensors are not regulatory- or reference-grade: their readings are indicative and supplementary, not authoritative.
Why Low-Cost Sensors Matter
Regulatory air quality monitors are sparse - often only a handful per metropolitan area - so a single station may represent tens of square miles (see EPA AQS network design criteria, 40 CFR Part 58 App. D). Regulatory reference monitors cost roughly $15K-$40K each, and a fully-equipped multi-pollutant station including siting and maintenance can run into the six figures; each represents a wide catchment area. Community mesh nodes with low-cost sensors (roughly $50-200 per node as a BOM estimate) can provide neighborhood-level data that reveals hotspots, traffic corridors, and industrial emission events invisible to the regional monitoring network. Community low-cost-sensor networks such as PurpleAir have demonstrated this hyperlocal value, but their readings are indicative rather than reference-grade.
Sensor Options for Air Quality
| Parameter | Sensor | Cost | Accuracy | Notes |
|---|---|---|---|---|
| PM2.5 / PM10 | Plantower PMS5003 or SDS011 | $15-25 | SDS011 ≈ max(±15%, ±10 µg/m³) | Most important for health; needs temperature correction. PMS5003 has no published absolute-accuracy spec, only consistency. Both are UART sensors - see the build note below on Meshtastic support. |
| CO₂ | Sensirion SCD40 or SCD41 | $35-50 | ±(50 ppm + 5% of reading) | True NDIR sensor; factory-calibrated, but relies on periodic fresh-air exposure (automatic self-calibration) to hold long-term accuracy. |
| VOCs | SGP30 or SGP41 | $15-20 | Semi-quantitative | Good for trend and event detection; not precise absolute levels |
| NO₂ / O₃ | SPEC Sensors electrochemical | $50-100 each | ±20 ppb (see SPEC Sensors datasheet) | Higher cost; good for near-road monitoring. Electrochemical sensors drift over time and need temperature/humidity compensation. |
| Temp + Humidity | BME280 | $3-8 | ±0.5°C, ±3% RH | Essential for correcting PM sensor readings |
| Temp + Humidity | SHT31 | $3-8 | ±0.3°C, ±2% RH | More accurate alternative for PM correction |
Building a PM2.5 Monitoring Node
The following is a design sketch, not a turnkey recipe. The PMS5003 and SDS011 are UART laser particulate sensors, and stock Meshtastic's Telemetry module does not support them. For particulate matter in stock Meshtastic, use the I2C PMSA003I (I2C address 0x12), which the Telemetry module's air-quality metrics path supports. A UART PMS5003 requires custom firmware or a separate MCU/co-processor that injects readings into the mesh.
# Hardware: RAK4631 + RAK1906 (BME680) for temp/humidity correction
# For stock Meshtastic PM support, use the I2C PMSA003I (addr 0x12),
# NOT the UART PMS5003/SDS011 (those are not natively supported).
# Path A (recommended, no custom firmware):
# PMSA003I (I2C) on a Meshtastic node -> AirQualityMetrics telemetry
# Path B (UART PMS5003): requires a co-processor or custom firmware.
# Meshtastic environment telemetry uses fixed protobuf fields, so a
# raw PMS5003 needs either:
# - an ESP32 (e.g. T-Beam) running custom Arduino firmware that reads
# PMS5003 + BME280 over UART/I2C and formats the data, or a custom
# portnum, or
# - a Raspberry Pi co-processor reading PMS5003 via UART and injecting
# messages into the mesh via the Meshtastic Python API (see the
# Meshtastic Python API send-message docs; clarify whether you send
# plain text or structured telemetry).
# MeshCore note: there is no deployable "SENSOR firmware" that broadcasts
# PM telemetry; treat the working paths above as the only buildable ones.
Community Air Quality Network Design
For a neighborhood-scale (10-50 node) air quality network:
- Spatial coverage: 1 node per 0.5-1 km² in residential areas; denser near industrial sources and major roads
- Transmission interval: a recommended 5-15 minutes (PM sensors need averaging to reduce noise; see EPA sensor-performance guidance on averaging)
- Data aggregation: Central room server or MQTT gateway with InfluxDB backend
- Public dashboard: Grafana public dashboard showing real-time map (use Leaflet.js for geographic visualization)
- Calibration: Collocate 2-3 nodes with the nearest EPA monitoring station to develop calibration coefficients. Per EPA Air Sensor Toolbox collocation guidance, recommended collocation can run weeks to months and ideally spans multiple seasons.
Community Value and Partnerships
Important: low-cost PM and gas sensors are not regulatory-grade. Readings require collocation/calibration and should always be presented as indicative, supplementary data - not as authoritative air-quality measurements. Do not use uncalibrated node readings as the basis for individual health decisions; defer to official AirNow/EPA data for that.