V2.3.9 - sensor.community SPS30 X-PIN fix (12 -> 1)
What's new
Fixes a bug introduced in V2.3.2 where SPS30 sensor.community POSTs
went to the wrong X-PIN.
The bug
V2.3.2 sent SPS30 PM data on X-PIN 12. That value never appeared
in any authoritative source -- it was a research mistake from the
original SPS30 work that propagated into the project memory as
"canonical airrohr".
The fix
Send SPS30 on X-PIN 1 -- verified against TWO authoritative sources:
devices.sensor.community/webapp/default_settings.py
SENSOR_TYPES = { ..., 37: "1", # SPS30, ... }airrohr-firmware/ext_def.h
#define SPS30_API_PIN 1
Why PIN 1 is shared
PIN 1 is the catch-all "particulate matter" pin in the sensor.community
registry. Every PM sensor uses it: SDS011 (ID 14), PMS3003/1003/7003/
5003/6003 (16, 21-24), HPM (25), SPS30 (37), HM3301 (38),
IPS-7100 (41), NextPM (42). The receiving server disambiguates between
them by the field-name prefix in the JSON body -- SPS30_* is what
tells SC the PIN 1 POST is from a Sensirion SPS30 specifically.
No data was misrouted
The only live device (Heltec at 192.0.2.52) is still on V2.3.5, which
predates the SPS30 TX path. No SPS30 hardware has been wired anyway.
The bug was caught before any cycle posted to the wrong PIN.
Other SC X-PINs verified correct
| Sensor | X-PIN | Source |
|---|---|---|
| Si22G (radiation) | 19 | registry ID 36 + airrohr |
| BME280-relabeled SHT45+BMP581 | 11 | registry ID 17 + airrohr |
| DNMS noise | 15 | registry ID 29 ("Lärm") + airrohr DNMS_API_PIN |
| SPS30 (PM) | 1 | registry ID 37 + airrohr SPS30_API_PIN (this fix) |
Build sizes
- heltec_v2: ~1,184,000 bytes (no change vs V2.3.8 -- 1-character fix)
- feathers3_d: ~1,186,000 bytes
Lesson saved to memory
When my own memory note disagrees with an authoritative source: trust
the source, don't construct a narrative explaining why the source
would be wrong. The V2.3.2 memory said "dusty's PIN 1 was a SDS011
carryover" -- in fact dusty was reading the same airrohr defines we
should have been reading. That false rationalisation prevented me
from spotting the bug for seven releases.
Artefacts (5 per board, 10 total)
| File | Purpose |
|---|---|
geiger_v2_<board>.bin |
OTA image |
geiger_v2_merged_<board>.bin |
Full-flash image (initial cable flash) |
bootloader_<board>.bin |
Bootloader |
partition-table_<board>.bin |
Partition table |
ota_data_initial_<board>.bin |
OTA selector seed |