Loading files…
Local air sensing, connected as a mesh.
AtmosMesh is a family of local air-sensing firmware products, now spanning several product variants (v1, Grove v1.5, Aqua, Room, Spot); none supersedes another.
| Product | Product ID | Product variant | Controller | Sensor/display scope | Canonical build |
|---|---|---|---|---|---|
| AtmosMesh v1 — ARCHIVED (D-034; physical station disassembled 2026-08-31) | atmosmesh-v1 | esp32-full-station | ESP32-WROOM-32 | Full station: SSD1306, BMP280, AM2302, SDS011, MQ135, PIR/beeper, optional VEML7700, MQTT | task build-v1 (not part of task build-all) |
| AtmosMesh Grove v1.5 |
atmosmesh-grove-v1.5 |
atmosmesh-v1.5 |
| ESP8266EX / 4 MB NodeMCU-style board |
| Compact node: 128×32 SSD1306, BMP180, DHT11, uncalibrated D7 RC light, D0/D6 status LED, duty-cycled raw YL-38 ADC, MQTT |
task build-v1-5 |
The products share one PlatformIO project and host-tested core, with explicit composition roots instead of copied firmware trees. See ADR-0001.
AtmosMesh v1 is archived, not deleted (D-034): the physical station was disassembled and its code/mentions are retired from the live fleet, but the source, its tests, and the shared MQTT contract/composition pattern it established remain in the repo. It was never a finished product — its wiring was never fully approved for unattended or mains-powered use — and it is not a certified health, fire, gas, or life-safety instrument.
| Sensor | Quantity | Notes |
|---|---|---|
| SDS011 | PM2.5, PM10 | UART2 only (GPIO16/17). 5 V heater, 3.3 V UART |
| AM2302 / DHT22 | Temperature, humidity | GPIO18, 3V3 |
| BMP280 | Pressure, temperature | I²C 0x76 on GPIO21/19, 3V3 |
| Mini OLED (D-001) | Local live page | I²C 0x3C, SDA GPIO5, SCL GPIO4, 3V3 only |
| MQ135 | Relative gas trend | Analog GPIO34 through a divider. Never labelled CO₂ or ppm |
| VEML7700 | Illuminance | Optional, I²C 0x10 on the BMP280 bus. Not fitted yet |
| PIR + beeper | Occupancy cue | GPIO33 / GPIO25 |
SDS011 ─┐
AM2302 ─┤
BMP280 ─┼─> ESP32 ── OLED (local)
MQ135 ─┤ └─ MQTT (planned) ──> Mosquitto ──> Home Assistant
VEML ─┘ └─ metrics ─> Prometheus ─> Grafana
3V3 pin are not 5 V tolerant.task flash / task monitor.Full rules: AGENTS.md and docs/hardware/power.md.
Host tests need PlatformIO and Python 3.11 or 3.12 (not Homebrew 3.14):
task bootstrap-agent-python # creates .venv with pyserial + esptool
task test # native Unity tests (no hardware)
task build-all # both first-class product images
task build-v1 # AtmosMesh v1 / ESP32
task build-v1-5 # AtmosMesh Grove v1.5 / ESP8266
Canonical device actions are task flash-v1, task monitor-v1, task flash-v1-5, and
task monitor-v1-5. Existing build/flash/monitor and *-grove tasks remain compatibility
aliases. Override the serial port with ESP_PORT=/dev/….
Do not run python -m esptool with system Python. Direct wrapper: ./scripts/esp-tool version.
Firmware details, OLED constructor, and the live pin map:
firmware/README.md.
| Path | What |
|---|---|
docs/hardware/inventory.md | Confirmed parts and open questions |
docs/elektronik-inventar.md | Full electronics stock inventory, including parts not currently assigned to a product |
docs/hardware/datasheets/ | Manufacturer datasheets and retained kit manuals |
docs/hardware/power.md | 5 V / 3.3 V domains |
docs/hardware/oscilloscope-hantek-dso2d15.md | Bench scope: panel, probe setup, and the ripple / I²C / UART / rail recipes |
hardware/kicad/ | Bench carrier (KiCad 10): OLED, sensors, extras strip, fully routed. Do not fabricate until DevKit pin order is photographed |
The carrier board uses a 10 k / 15 k MQ135 divider (3.0 V max on GPIO34). Firmware still matches the breadboard 10 k / 20 k until that board replaces the breadboard.
| Path | Purpose |
|---|---|
firmware/ | One PlatformIO project, explicit product roots, shared core and native tests |
docs/adr/ | Architecture decision records |
docs/history/ | Superseded project notes and concept artifacts retained for provenance |
hardware/kicad/ | Bench-station carrier schematic and PCB |
docs/ | Architecture, hardware facts, datasheets |
deploy/ | Kubernetes / home-automation config (not packaged yet) |
tests/ | Host-side checks |
agent-context/ | Stories, decisions, and live session notes |
AGENTS.md | Safety boundaries and workflow for humans and agents |
AtmosMesh v1 bench firmware drives the OLED (U8g2 SSD1306 ALT0), BMP280, AM2302, SDS011 UART2, MQ135 ADC, PIR, and beeper. MQTT, Home Assistant, and the cluster path are still ahead. Grove v1.5 hardware has runtime communication evidence for BMP180 and DHT11; OLED controller initialization passed but pixels need visual confirmation. Cooperative D7 RC light timing and Grove MQTT/HA discovery are implemented and host/build-tested. Reviewed Grove soil firmware has produced two raw ADC 214 cycles about 30 seconds apart. The installed D6 red / D0 green LED is operator-confirmed common-anode; soil direction/threshold calibration, switched-rail electrical behavior, MQTT receipt and OLED pixels remain unconfirmed (roadmap).
MIT. People: CONTRIBUTORS.md. Security: SECURITY.md.
No comments yet. Be the first to ask about this board.