Phase 0 edge nodes — context. SenseCAP P1-Pro and RAK WisBlock are the correct hardware for solar/battery outdoor edge nodes at every phase. The mini-rack lab schema (Lab / compute) processes the data they produce — it does not replace them.
01

Ground node specifications

NODE A — FRONT YARD · FULL SUN
Body (recommended)SenseCAP Solar Node P1-Pro ~$100
Body (DIY alt.)RAK WisBlock Starter Kit ~$60
Protocol / firmwareMeshtastic · 915 MHz (US) · SF7–SF12
T / RH / pressureBME280 · ±0.5°C · ±3% RH · I²C 0x76
PAR / luxTSL2591 · ~320–1100 nm corrected
UV indexVEML6075 · UV-A 315–400 nm · UV-B 280–315 nm
Soil moistureCapacitive SEN0308 · MCP3008 ADC · SPI
Soil temperatureDS18B20 waterproof probe · 10 cm depth · 1-Wire
WindAnemometer + vane · Davis-compatible reed switch
PrecipitationTipping rain gauge · 0.2 mm/tip typical
AntennaExternal 3 dBi LoRa whip — mandatory
Power5–7 W solar + 18650 pack (2–4 cells)
Publish intervalEvery 5–15 min · LoRa → Meshtastic → hub MQTT
EnclosureIP65 junction box · Stevenson screen for BME280
NODE B — BACKYARD · UNDER CANOPY
Body (recommended)SenseCAP Solar Node P1-Pro ~$100
Body (DIY alt.)RAK WisBlock Starter Kit ~$60
Protocol / firmwareMeshtastic · same channel + PSK as Node A
T / RH / pressureBME280 — identical to Node A
PAR / luxTSL2591 — canopy attenuation is the key datum
UV indexVEML6075 — UV reduction under canopy is measurable
Soil moistureCapacitive SEN0308
Soil temperatureDS18B20 waterproof probe
CO₂ — canopy keyMH-Z19C NDIR · ±50 ppm · UART 9600 · 5 V required
Wind / rainOmit at ⅛ acre — Node A covers site
AntennaExternal 3 dBi · elevate above canopy on mast
Solar panelOrient to canopy gap — assess insolation before mounting
PurposeIdentical hardware to A — the contrast IS the experiment
EnclosureIP65 · shade-mount for thermal accuracy
SenseCAP vs RAK WisBlock: SenseCAP ships with solar, 18650 cells, IP65 enclosure, Grove I²C ports — sensors plug in without soldering. RAK WisBlock is more flexible at lower component cost but needs more assembly, custom enclosures, and soldering. Use SenseCAP for reliability on first deployment; RAK if you need sensors outside the Grove ecosystem.
Meshtastic 256-byte payload limit: At SF10/BW125, ~70–80 bytes usable per packet. 8–10 averaged sensor values fit comfortably. Do not bundle raw ADC streams or high-res profiles.
MH-Z19C CO₂ accuracy: ±50 ppm. Canopy differentials of 20–80 ppm above ~420 ppm ambient are close to noise floor. Consider SCD30 (±30 ppm) or SCD41 as alternatives. verify with expected delta before committing
TSL2591 saturation: Max ~88,000 lux. Full southern-latitude sun can exceed this. Check Node A initial readings — add ND filter if saturating. check first deployment
02

Field-scale node types — future reference

Met station / repeater — Phase 2+ field role
SDRRTL-SDR v3 (RX) or HackRF (TX/RX)
Met sensorsT/RH · wind · baro · rain · UV · PAR · lightning opt.
Tx power+20–30 dBm · LOS range 5–15 km at SF12
Mount3–6 m mast · IP67 pole-mount
Phase 0 equiv.Node A + Node B (SenseCAP P1-Pro)
Soil / edge sensor — Phase 2+ field role
MCUESP32-S3 + SX1262 or RAK WisBlock nRF52840
SensorsNPK · pH · VWC · EC · CO₂ flux · soil temp
Sampling5–60 min · duty-cycled deep sleep
Battery life6–18 months unattended on LiPo + solar patch
Phase 0 equiv.Soil sensors on Nodes A + B
Gateway / backhaul — Phase 2+ field role
SDRUSRP B205mini-i or LimeSDR Mini 2
BackhaulLTE-M · NB-IoT · Starlink (site-dependent)
PowerSolar + LiFePO₄ 100 Ah · 48 h autonomy target
Phase 0 equiv.Hub Pi 4 #1 + RTL-SDR → Rack 1 Node 4 (target)
Drone relay / sync — Phase 2+ field role
SDR drone-mountedPlutoSDR or USRP B200
ProtocolMAVLink / OpenHD / ExpressLRS
Time syncGPS-disciplined GPSDO · PPS
Video5.8 GHz OFDM adaptive bitrate
Phase 0 equiv.Heltec V3 on DJI Mini — LoRa relay only, no MAVLink
Hub — current vs target. Pi 4 testbed is active. Mini-rack target: Lab / compute. Pi #1 and Pi #2 migrate to specific Rack 1 nodes — not discarded.
01

Current hub — Phase 0 Pi testbed

HUB #1 — DATA BACKBONE · Pi 4 4 GB
OSRaspberry Pi OS Lite 64-bit · bookworm
MQTT brokerMosquitto 2.x · port 1883 · local LAN only
Time-series DBInfluxDB 2.7 — primary data store
DashboardsGrafana 10+ · climate panels · A vs B delta
Mesh routingReticulum Network Stack (rnsd) as systemd service
Meshtastic GWHeltec V3 or RAK Mini via USB → Python MQTT bridge
SDR hardwareRTL-SDR v3 Blog dongle via USB
433 MHz decodertl_433 → MQTT · one dongle = one freq at a time
NOAA WXrtl_fm · 162.400–162.550 MHz · separate dongle if concurrent
APRSDirewolf 1.7 · 144.390 MHz (US)
ADS-Bdump1090-fa · 1090 MHz · optional
ETLNode-RED + Python scripts
HA layerOptional UI only — not primary store
Rack 1 targetMigrates to Node 4 (SDR) + Node A (orchestration)
HUB #2 — SPATIAL + INGEST · Pi 4
OSRaspberry Pi OS Lite 64-bit · bookworm
PhotogrammetryOpenDroneMap (WebODM · Docker)
ODM process time200 photos ≈ 4–12 hrs on Pi 4 — use x86 if available
Image transferUSB-C from DJI · or microSD reader
3D viewerPotree Converter + viewer · Node.js served on LAN
GISQGIS · georeference nodes · USDA soils overlay
API ingestPython venv: open-meteo · noaa-ncei · usda-wss
Satellite NDVINASA Earthdata / Sentinel Hub free tier verify access
ElevationOpenTopoData API · 1 m DEM (coverage varies)
Phase 2 vizBlenderGIS (any x86) · UE5+Cesium (GPU required)
Rack 1 targetODM → Node 2 compute. API ingest → Node A.
RTL-SDR simultaneous receive limitation: One dongle = one frequency at a time. For concurrent rtl_433 + NOAA + APRS, use separate dongles on separate USB buses.
02

Rack 1 node mapping (target)

Current Pi roleRack 1 target nodeNotes
Pi #1 — Mosquitto + InfluxDB + GrafanaNode A (orchestration)Same roles, faster hardware
Pi #1 — Reticulum rnsdNode 4 (SDR head) or Node Asystemd service, runs alongside SDR
Pi #1 — RTL-SDR + rtl_433Node 4 (SDR head)Physically isolated from switching PSUs
Pi #2 — OpenDroneMapNode 2 (compute)x86 + more RAM = dramatically faster ODM
Pi #2 — Potree viewer + API ingestNode A or Node 2Light workloads — flexible placement
Pi #1 + #2 post-migrationEdge-only (repurposed)Firmware flashing, remote field nodes, solar relays
Mini 2 SE payload note: No accessory port. External camera mounts add ~80–120 g pushing above 249 g. Mini 3 is preferred for any external payload. Verify AUW before every flight. FAA Part 107 may apply to data collection use even at sub-249 g. verify locally
01

Drone airframe + relay payload

DRONE + RELAY — TIER 3 AERIAL LAYER
Airframe (budget)DJI Mini 2 SE · ~$299 · sub-249 g base
Airframe (preferred)DJI Mini 3 (non-Pro) · ~$469 · better payload
Camera Phase 0Stock 4K RGB · SfM photogrammetry via ODM
MultispectralMAPIR Survey3W OCN ~$300 Mini 3 preferred
ThermalInfiray P2 Pro on Android · walked survey · not mounted
LiDAR Phase 0Reject — SfM adequate for ⅛ acre
PX4 / PixhawkPhase 2+ only
ADS-B checkB4UFly before each flight. dump1090 on Pi #1 for traffic awareness.
Relay hardwareHeltec WiFi LoRa 32 V3 · 3D-printed mount · ~$22
Relay protocolMeshtastic · same channel + PSK as ground nodes
Relay mass~45–55 g · monitor AUW vs local limit
Relay functionExtends LoRa mesh LOS at altitude · relays Node A/B packets past obstructions
DJI telemetryOcuSync/O3 · 2.4/5.8 GHz to Android GCS in real-time
GCS → hubAndroid Wi-Fi → Pi #1 MQTT topic: drone/telem
Flight planningDronelink or Litchi (Android)
Grid overlap80% fwd · 75% side for SfM
AGL altitude25–40 m · ~200 photos for ⅛ acre
Imagery transferUSB-C or microSD to hub after landing — physical only
02

Two data paths — do not conflate

Telemetry — radio, real-time
TransportDJI OcuSync/O3 · 2.4 GHz proprietary
CarriesPosition · altitude · battery · speed · mode
DestinationAndroid GCS in real-time
Hub bridgeAndroid Wi-Fi → MQTT → InfluxDB
LoRa involvementNone — Heltec V3 carries mesh packets, not DJI telemetry
BandwidthKilobits — negligible
Imagery — physical, post-flight
StorageDrone internal or microSD during flight
TransferUSB-C cable or card reader after landing
DestinationPi #2 now · Rack 1 Node 3 NAS target
ProcessingWebODM → point cloud → Potree · QGIS
Volume~1–3 GB for ⅛ acre at 80% overlap
LoRa involvementNone — never streams over LoRa mesh
These two paths are structurally independent. Telemetry is radio. Data is physical. This distinction holds at swarm scale — LoRa carries control forever, payload grows to fibre and mmWave.
Platform note: SenseCAP connects via Grove I²C — no soldering for BME280, TSL2591, VEML6075. MH-Z19C requires direct UART wiring. GPIO pinouts are Raspberry Pi BCM numbering.
01

Sensor wiring

BME280 — T · RH · barometric pressure
PinSignalMCU
VCC3.3 V3.3 V rail
GNDGNDGND
SCLI²C clockGPIO 3 (BCM)
SDAI²C dataGPIO 2 (BCM)
CSBMode3.3 V → forces I²C
SDOAddr selGND → 0x76 · 3V3 → 0x77
TSL2591 — lux · PAR · ~320–1100 nm range corrected
PinSignalMCU
VCC3.3 V3.3 V rail
GNDGNDGND
SCLI²C clockGPIO 3 — shared
SDAI²C dataGPIO 2 — shared
INTInterruptNC for basic use
AddressFixed 0x29
VEML6075 — UV-A · UV-B
PinSignalMCU
VDD3.3 V3.3 V rail
GNDGNDGND
SCLI²C clockGPIO 3 — shared
SDAI²C dataGPIO 2 — shared
AddressFixed 0x10
MountOpen sky · no glass (absorbs UV-B)
MH-Z19C — CO₂ NDIR · Node B 5 V required
PinSignalMCU
Vin5 V5 V rail — not 3.3 V
GNDGNDGND
TxUART TX→MCU RXGPIO 15 (RXD)
RxUART RX←MCU TXGPIO 14 (TXD)
Baud9600 · 8N1
Warm-up180 s before valid readings
DS18B20 — soil temperature · 1-Wire
WireSignalMCU
Red3.3–5 V3.3 V rail
BlackGNDGND
Yellow/white1-Wire dataGPIO 4 · 4.7 kΩ pull-up to 3.3 V
Depth10 cm into soil
Multi-probeShared bus · unique 64-bit ROM each
SEN0308 — capacitive soil moisture · via MCP3008 SPI
PinSignalMCU
VCC3.3–5 V3.3 V rail
GNDGNDGND
AOUTAnalog 0–3 VMCP3008 CH0 via SPI
MCP3008 SPIMOSI=10 · MISO=9 · CLK=11 · CS=8
CalibrateDry air = max count · saturated = min
02

I²C bus address map

SensorBusAddressConfigurableNotes
BME280I²C0x76 / 0x77Yes — SDO pinDefault 0x76 (SDO to GND)
TSL2591I²C0x29NoFixed — no conflict with others
VEML6075I²C0x10NoFixed — no conflict
MH-Z19CUARTDedicated UART · 5 V · not on I²C bus
DS18B201-Wire64-bit ROMGPIO 4 · pull-up required
SEN0308Analog→SPIMCP3008 via SPI · no I²C
01

Bill of materials — Phase 0 field hardware

Field sensor BOM only. Lab/compute hardware → Lab / compute. Prices approximate — verify current listings.
ItemPurposeEst. costNotes
Owned — no new spend
Raspberry Pi 4 (4 GB) × 2Hub #1 data · Hub #2 spatial$0Phase 0 hub. Repurpose to edge as Rack 1 deployed.
Android phone (S25 Ultra)Meshtastic · drone GCS · Infiray$0Must run Dronelink or DJI Fly
Sensor nodes
SenseCAP Solar Node P1-Pro × 2Node A + Node B~$200Recommended. Solar, enclosure, LoRa pre-integrated.
— or — RAK WisBlock Starter × 2DIY alternative~$120More flexibility. Add enclosure + solar separately.
BME280 × 2T / RH / pressure~$10I²C. Included in SenseCAP Grove kit.
TSL2591 × 2PAR / lux · ~320–1100 nm~$14Fixed 0x29. Mount exposed.
VEML6075 UV × 2UV-A + UV-B~$14Fixed 0x10. No glass cover.
MH-Z19C CO₂ × 1Canopy CO₂ — Node B~$25UART. 5 V. 180 s warm-up.
Capacitive soil moisture × 2VWC~$20Capacitive only — resistive corrodes in soil.
DS18B20 waterproof × 2Soil temp · 10 cm~$101-Wire. 4.7 kΩ pull-up required.
Anemometer + vane × 1Wind — Node A only~$25Davis-compatible. One node sufficient at ⅛ acre.
Tipping rain gauge × 1Precip — Node A only~$250.2 mm/tip.
External 3 dBi LoRa whip × 2Mesh link quality~$16Mandatory. Check SMA vs RP-SMA on your node.
MCP3008 SPI ADC × 2Analog soil → digital~$8Only needed for RAK WisBlock build.
Hub additions
RTL-SDR v3 Blog donglePrimary: rtl_433 decode~$35USB to Pi #1. One freq at a time.
RTL-SDR v3 Blog dongle (2nd)NOAA WX + APRS concurrent~$35Recommended. Separate USB bus.
Meshtastic gateway nodeMesh → MQTT bridge~$28Heltec V3 or RAK4631 Mini.
microSD 64 GB high-endurance × 2Pi OS + working data~$18Samsung Pro Endurance. Not for long-term drone storage.
Drone
DJI Mini 2 SEBudget aerial photogrammetry~$299Sub-249 g base. Limited payload. 31 min.
— or — DJI Mini 3 (non-Pro)Preferred for external payload~$469Better frame for MAPIR mounting.
Heltec V3 + 3D-printed mountDrone LoRa relay~$22~50 g. Monitor AUW.
MAPIR Survey3W OCNNDVI multispectral — optional~$300Mini 3 preferred. Verify AUW before flying.
Infrastructure
IP65 enclosures × 2Node housing~$20Junction box + Stevenson screen for BME280.
5 W solar + MPPT + cells × 2Node power~$40Included in SenseCAP P1-Pro.
Cables, SMA adapters, resistorsAssembly~$30Check SMA vs RP-SMA before ordering antennas.
Baseline — Mini 2 SE · SenseCAP × 2 · 1 dongle · no MAPIR~$786Minimum viable Phase 0
Full Phase 0 — Mini 3 · SenseCAP × 2 · 2 dongles · MAPIR~$1,327Concurrent radio + NDVI
Hub first — always. Prove the entire pipeline indoors. Every outdoor deployment is a verifiable addition to a working system.
1
Hub #1 — full pipeline proven indoors
Pi OS Lite 64-bit. Install Mosquitto (port 1883), InfluxDB 2 (org + bucket "mesh"), Grafana (InfluxDB datasource via Flux). Write dummy Python MQTT publisher every 30 s. Verify: publish → broker → InfluxDB → Grafana renders. Install Reticulum (rnsd systemd). Plug RTL-SDR, install rtl_433 with -F mqtt://localhost — verify decoded packets in MQTT. Do not proceed until every stage works.
2
Hub #2 — spatial pipeline proven indoors
Install Docker. Deploy WebODM (webodm.sh start). Confirm LAN web UI. Install Potree Converter + Node.js. Install QGIS. Python venv with open-meteo-requests + influxdb-client. Test Open-Meteo ingest — verify regional data in InfluxDB on Pi #1 via MQTT. Grafana shows regional data alongside dummy sensor data.
3
Node A — front yard assembly and deployment
Assemble SenseCAP P1-Pro with BME280, TSL2591, VEML6075, SEN0308, DS18B20, anemometer, rain gauge. Fit 3 dBi LoRa whip. Flash Meshtastic. Set channel + PSK to match hub gateway. Connect gateway node USB to Pi #1, run bridge. Deploy. Verify ALL sensor fields in Grafana within 15 min — not just temperature.
4
Node B — backyard canopy deployment
Identical plus MH-Z19C (UART, 5 V). Elevate antenna on mast above canopy. Confirm hop. Within hours the differential appears in Grafana: lower UV, higher CO₂ (canopy respiration), higher RH, lower temp variance. Verify CO₂ baseline (~420 ppm ambient — check current). Canopy readings elevated during daylight, peak pre-dawn. This is the Phase 0 proof of concept.
5
Drone survey — baseline spatial model
Dronelink or Litchi. Grid: 25–35 m AGL, 80% fwd / 75% side. Heltec V3 relay mounted. Fly (~8–14 min). Transfer imagery to Pi #2 via USB-C or microSD. WebODM — 4–12 hrs on Pi 4 (30–60 min on x86 laptop with 16+ GB RAM). Potree serves point cloud. QGIS: import orthomosaic, pin Node A and B GPS. This is the spatial base layer for all future overlays.
6
External data integration + climate profile
Schedule Open-Meteo, NOAA NCEI, USDA WSS ingest at 15-min intervals. Build Grafana panels: daily T range (A vs B vs regional), humidity, CO₂ diurnal cycle, UV differential, soil moisture divergence, microclimate offset from nearest NOAA station. Add APRS via Direwolf on second dongle. System is now fully operational as Phase 0 testbed generating baseline data for all subsequent hardware decisions.