Version 1.0 of an ongoing sensor-logging series -- preceded by an early prototype, Weather Station, succeeded by ESP32 Sensor Node (v2.0).


The same breadboard as the Weather Station prototype, with an XBee radio added on top

The Weather Station prototype needed a laptop in the room: an Arduino read the sensors and wrote the values out over a serial cable to a computer running Processing. That wired connection wasn't feasible for an unattended deployment -- I didn't want to leave a laptop behind. A full Wi-Fi stack was out of reach at the time too: there were Wi-Fi modules for Arduino, but the microcontroller was just hopelessly underpowered for that stack. So starting around 2012, I dropped the laptop entirely and used XBee radios instead: each device got one instead of a serial cable, reporting wirelessly to a ConnectPort X2 acting as the network's ZigBee coordinator/gateway. Since the XBees ran in transparent AT mode, a device's own sketch didn't need any radio-specific code at all -- it just wrote to Serial exactly as if it were still wired to a laptop, and the XBee handled getting that data off-site.

Three terms get used interchangeably but aren't the same thing:

XBee modules come in two series:

Only Series 2 did what I wanted here -- mesh, not just point-to-point.


ConnectPort X2

All XBees had to be configured as "ZIGBEE ROUTER AT" -- firmware number 22xx was the only one relevant here. Settings:

Setting Command Value
PAN ID ID AAAA
Scan Channels SC 1FFE
Channel Verification JV 1
Destination Address High DH 0
Destination Address Low DL 0

The flagship deployment was the weather station at the coop (Dryden, NY) -- the same location the Weather Station prototype had been reporting from. Several other devices ran on the same ZigBee/ConnectPortX2 backbone:


Weather Board V3

SparkFun's USB Weather Board V3 put the Weather Station prototype's same two sensors -- SHT15 (temperature/humidity) and BMP085 (pressure) -- on one integrated board running SparkFun's own stock firmware, instead of loose breakout boards wired to a bare Arduino. This was the coop's first device:

Everything else on this network -- every device besides the Weather Board itself -- was built around a Funnel-flavored Arduino Fio: its form factor has a built-in XBee socket, so a new sensor node was just a Fio, an XBee, and whatever sensor was being wired up that time, no separate radio-adapter wiring needed (see Arduino Fio Programming). The Fio was also a clean break from the Weather Station prototype's mixed-voltage mess: it's a native 3.3V device, matching the XBee radios' own 3.3V logic directly, so there was no more juggling 5V/3.3V sensors or level shifters on the microcontroller side. The coop grew into a proper multi-device station this way, one Fio per role, alongside a separate installation at BUILDlab:

The coop as a whole -- Weather Board included -- stopped reporting in 2012.

Weather Board firmware and datasheet: Weather_Board_3.pde, USB Weather Board V3 datasheet. Temperature6's gateway sketch: Temperature6Gateway.pde.

The whole ZigBee generation eventually went dark -- the coop and BUILDlab stopped reporting years apart (2012 and 2014), and a batcave weather board on this same architecture went dark in 2016 too, its report sitting untouched for a decade until the ESP32 Sensor Node project (v2.0) picked the same idea back up in 2026, native Wi-Fi instead of a ZigBee/gateway hop, reporting to that same station's prefix again.