{"id":50405017,"url":"https://github.com/arvage/envcube","last_synced_at":"2026-05-31T01:03:41.477Z","repository":{"id":361247406,"uuid":"1253719402","full_name":"arvage/envcube","owner":"arvage","description":"mart modular environmental monitor — replaces smoke/CO detectors with always-on, voice-alert, WiFi-connected cubes","archived":false,"fork":false,"pushed_at":"2026-05-29T20:15:43.000Z","size":69,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-29T20:19:03.923Z","etag":null,"topics":["air-quality","esp32-c6","espnow","home-assistant","iot","mqtt","platformio","smart-home"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arvage.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-29T18:42:55.000Z","updated_at":"2026-05-29T18:51:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/arvage/envcube","commit_stats":null,"previous_names":["arvage/envcube"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/arvage/envcube","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arvage%2Fenvcube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arvage%2Fenvcube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arvage%2Fenvcube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arvage%2Fenvcube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arvage","download_url":"https://codeload.github.com/arvage/envcube/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arvage%2Fenvcube/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33715214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["air-quality","esp32-c6","espnow","home-assistant","iot","mqtt","platformio","smart-home"],"created_at":"2026-05-31T01:03:41.360Z","updated_at":"2026-05-31T01:03:41.472Z","avatar_url":"https://github.com/arvage.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EnvCube 🟢🟡🔴\n\n\u003e Smart modular environmental monitor — replaces every smoke and CO detector in your home with an always-on, mains-powered, voice-alert cube.\n\n[![Phase](https://img.shields.io/badge/phase-1%20prototype-teal)](docs/firmware/PHASE1.md)\n[![Hardware](https://img.shields.io/badge/MCU-ESP32--C6-blue)](docs/hardware/BOM.md)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n\n---\n\n## What is EnvCube?\n\nEnvCube is a modular, offline-first environmental monitor designed to replace the smoke detectors and CO alarms that every US home is legally required to have — but that everyone hates because they beep at 3am when the battery dies.\n\n**Key differentiators:**\n- **Mains powered** via USB-C with silent LiPo backup — no batteries, no 3am beeping, ever\n- **Voice alerts** — speaker says *\"Smoke detected in Kitchen\"*, not just a generic beep\n- **Location-aware mesh** — ESP-NOW broadcasts room name to all cubes simultaneously\n- **Offline-first** — all alerts, LED, buzzer, and speaker work with zero internet\n- **Modular pods** — snap on extra sensors with pogo pin + magnetic connectors\n- **Cloud watchdog** — alerts your phone if a cube goes silent or offline\n\n---\n\n## Hardware\n\n| Component | Details |\n|---|---|\n| MCU | ESP32-C6 (WiFi 6, Thread, Zigbee, ESP-NOW, BLE) |\n| Power | USB-C 5V mains + LiPo backup cell |\n| Status | WS2812B RGB LED (Green / Amber / Red) |\n| Alert | Passive piezo buzzer + DFPlayer Mini + 28mm speaker |\n| Display | SSD1306 0.96\" OLED 128×64 |\n| Pod interface | 4× pogo pin + magnetic connector (I²C + power + 1-Wire ID) |\n\n### Sensor Pods\n\n| Pod | Sensors | Interface |\n|---|---|---|\n| Thermal | SHT40 (temp/hum) + BMP280 (pressure) | I²C |\n| Smoke + CO₂ | MQ-2 (smoke) + SCD41 (NDIR CO₂) | ADC + I²C |\n| Air Quality | SGP41 (VOC/NOx) + VEML7700 (lux) | I²C |\n| Presence | HLK-LD2410C (24GHz mmWave) | UART |\n| Particulate | PMSA003I (PM1/2.5/10) | I²C |\n| Noise | ICS-43434 MEMS mic (dB SPL) | I²S |\n\nSee [BOM](docs/hardware/BOM.md) for full component list with part numbers and suppliers.\n\n---\n\n## Firmware\n\nBuilt with **Arduino framework on ESP32-C6** via PlatformIO (espressif32 @ 6.10.0).\n\n### Phase 1 — Prototype ✅ COMPLETE\n- [x] Project scaffold + PlatformIO config (pioarduino, ESP32-C6)\n- [x] NVS config (room name, thresholds, credentials)\n- [x] WiFi manager + captive portal provisioning\n- [x] 9 sensor drivers (SHT40, BMP280, SCD41, SGP41, VEML7700, MQ-2, LD2410C, PMSA003I, ICS-43434)\n- [x] Alert state machine (Green → Amber → Red → Critical)\n- [x] LED animations + buzzer patterns + DFPlayer voice alerts\n- [x] OLED display (3 screens, auto-dim, OTA progress)\n- [x] ESP-NOW encrypted mesh (AES-128, auto peer discovery)\n- [x] MQTT + Home Assistant auto-discovery (13 entities, LWT watchdog)\n- [x] OTA firmware update (ArduinoOTA, LED/OLED feedback)\n- [x] Weather fetch (Open-Meteo HTTPS, outdoor conditions)\n- [x] Integration test checklist + HA dashboard guide\n\nSee [PHASE1.md](docs/firmware/PHASE1.md) for detailed step-by-step plan.\n\n---\n\n## Getting Started\n\n### Prerequisites\n- [VS Code](https://code.visualstudio.com/) + [PlatformIO extension](https://platformio.org/install/ide?install=vscode)\n- ESP32-C6-DevKitC-1 board\n- USB-C cable\n\n### Clone and build\n\n```bash\ngit clone https://github.com/YOUR_USERNAME/envcube.git\ncd envcube\n```\n\nOpen in VS Code → PlatformIO will auto-install dependencies.\n\nFlash:\n```bash\npio run --target upload --environment esp32c6\n```\n\nMonitor serial:\n```bash\npio device monitor --environment esp32c6\n```\n\n### First-time provisioning\n\n1. Power the cube — RGB LED pulses **blue** (provisioning mode)\n2. Connect your phone to WiFi network **`EnvCube-Setup`**\n3. Browser opens automatically → enter your WiFi credentials + room name\n4. Cube reboots, LED turns **green** when connected\n\n---\n\n## Repository structure\n\n```\nenvcube/\n├── firmware/\n│   ├── main/\n│   │   ├── main.cpp              # Boot, task launch\n│   │   ├── sensors/              # One driver per sensor\n│   │   ├── alerts/               # Threshold engine + ESP-NOW mesh\n│   │   ├── outputs/              # LED, buzzer, DFPlayer\n│   │   ├── display/              # OLED layouts\n│   │   ├── connectivity/         # WiFi, MQTT, OTA, weather\n│   │   ├── storage/              # NVS config wrapper\n│   │   └── power/                # Sleep modes, LiPo monitor\n│   ├── test/                     # Unit tests\n│   ├── platformio.ini\n│   └── partitions.csv\n├── docs/\n│   ├── hardware/\n│   │   ├── BOM.md                # Full bill of materials\n│   │   ├── PINOUT.md             # ESP32-C6 pin assignments\n│   │   └── POD_DESIGN.md        # Pod enclosure + sensor placement\n│   └── firmware/\n│       ├── PHASE1.md             # Phase 1 step-by-step plan\n│       ├── ARCHITECTURE.md      # Firmware module overview\n│       ├── MQTT_TOPICS.md       # Full MQTT topic reference\n│       └── THRESHOLDS.md        # Alert threshold values\n└── tools/\n    └── audio/                    # Voice clip source files\n```\n\n---\n\n## Contributing\n\nThis is a private product development repository. See [CONTRIBUTING.md](CONTRIBUTING.md) for internal workflow guidelines.\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farvage%2Fenvcube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farvage%2Fenvcube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farvage%2Fenvcube/lists"}