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

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.

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:

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.