An open-core platform for instrumented, profile-driven crop cultivation that scales — on one architecture — from an apartment-sized cabinet to a several-hundred-square-metre commercial facility.
Start here → Motivation. The gap this project is built to close, stated plainly.
|
|
IndustryGrow turns a growing space into a measured, controllable system. It provides the field hardware, firmware, and edge software that sense a cultivation environment and run its control loops. Its companion platform, IndustryFlow, stores history, runs analytics, and distributes cultivation profiles. The project is open-core: the same architecture serves community self-builders and commercial managed deployments. Hardware designs and reference firmware are open; the defensible value is not the sensors (commodity) but the expertise to identify a deployment's dynamics and operate it efficiently afterward. |
- One architecture, all scales. Apartment cabinet and a 200 m² greenhouse use identical PCB designs, firmware, and data types. Scaling means multiplying node instances across zones — never introducing new node classes.
- Profile as the single mutation channel. A cultivation profile (signed, versioned JSON) is the only way to change how a deployment behaves. Human edits, ML-generated optimizations, and community contributions all flow through profile versioning — one audit trail, one rollback path.
- Autonomous edge. The gateway runs control loops locally against a cached profile. The cloud is an observer and profile source, never a real-time commander — plants keep growing through network outages.
- Safety is hardware, separate from control. The over-temperature interlock at the heating actuator cuts power independently of any software. The profile defines operating parameters; hardware defines survival parameters. The two never overlap.
- Sensor density is temporal. Dense coverage during an empirical survey, a reduced-order state-space model is identified, then most sensors return to inventory for the lean operating phase. Profiles carry the model alongside the setpoints.
| Layer | Choice |
|---|---|
| Field bus | Cyphal application protocol over classic CAN @ 500 kbit/s, linear topology |
| Smart-node MCU | WeAct STM32F4 64-pin Core Board (STM32F405RGT6; F412/F446 drop-in) |
| Node carrier PCB | Custom integration board: CAN transceiver, ATECC608 secure element, sensor-module header |
| Gateway | Raspberry Pi (3B+ minimum, Pi 4/5 for higher traffic) + isolated 2-channel CAN HAT |
| Gateway software | Python / asyncio, SocketCAN + Pycyphal + Nunavut-generated DSDL bindings |
| Cloud link | mTLS to IndustryFlow; gateway is a stateless edge in steady state (audit trail on platform). Pre-cloud, and for buffering/survey, it keeps a bounded local store per ADR-0020 |
| Node firmware | Embedded C with libcanard |
| Identity & security | Per-node ATECC608 hardware identity; signed firmware; trusted in-cabinet CAN domain |
Hardware design files live in
store/under the ADR-0017 identification scheme (carrier =E0001, v0.0.1 →E0001-000001.*); seeREGISTRY.mdfor the E-number map. PCBs are authored in KiCad 10 (will not open in earlier versions); cabinet distribution schematics (.qet, e.g.E0007) are drawn in QElectroTech.
Seven reusable PCB designs, one functional subsystem each. Instances are specialized by populated-BOM, not by new designs.
| Module | Subsystem | Key sensing |
|---|---|---|
| M01-CLIMATE | Air environment | Temp/RH, gas/VOC, CO₂ |
| M02-LIGHT | Photic environment | 11-channel spectral, UV-A |
| M03-ANALYTICS | Hydroponic solution | pH, EC, solution temperature |
| M04-PLANT | Plant-level | Canopy thermal imaging |
| M05-SAFETY | Power & monitoring | +12 V bus current, reported cabinet temp, door, leak (report/alert) |
| M06-VENTILATION | Air transport | Duct velocity, filter Δp, envelope↔ambient Δp, in-stream T/RH |
| M07-AMBIENT | Boundary conditions | Ambient T/RH, barometric pressure, ambient CO₂, irradiance, wind (outdoor, deployment scale) |
M01 measures air state at the plant; M06 measures air transport through the cabinet. The split is why airflow is no longer an M01 quantity (ADR-0014 rev 2). M07's "ambient" is whatever the growing enclosure exchanges with one step out — the weather for a greenhouse, the surrounding room for a cabinet — so it ships as indoor and outdoor variants of one design, differing in populated BOM and housing, never in PCB, strap, or firmware. M06 and M07 are defined, not scheduled — neither is laid out or fabricated, and Phase 1 remains the M01–M05 set. Their working specifications live in
spec/.
| Phase | Scope | State |
|---|---|---|
| Phase 1 | Hardware + firmware bring-up; the 5 sensor nodes M01–M05 + gateway; standalone, no cloud | In progress |
| Phase 2 | Cloud integration: mTLS ingestion, profile sync, audit trail | Blocked on IndustryFlow prerequisites |
| Phase 3 | Community profile registry, predictive ML, multi-cabinet coordination | Planned |
The dependency-ordered build sequence (14 stages, with the real cross-stage dependencies) lives in project/ROADMAP.md.
| Read | For |
|---|---|
MOTIVATION.md |
Why — the gap IndustryGrow is built to close |
project/RESEARCH.md |
What's open — the research directions (L1–L7) the gap opens |
project/ROADMAP.md |
When — the dependency-ordered build sequence |
| Architecture decision records | How — the design decisions, the source of truth |
spec/ |
Module specifications — sensor complement, power, bus, thermal and mechanical, per module class. As-built for built modules (M05), pre-schematic for the rest |
REGISTRY.md |
The hardware E-number / instance map |
ADRs are the source of truth for the design. Present in this repository:
- ADR-0000 (rev 1) — Decision records and the single-source-of-truth discipline (adds the cross-project ADR namespace) · Accepted
- ADR-0001 (rev 1) — Project framing: open-core cultivation platform on IndustryFlow · Accepted
- ADR-0002 (rev 3) — Field bus architecture · Accepted
- ADR-0003 — Strawberry day-neutral cultivation profile (reference profile) · Proposed
- ADR-0004 (rev 1) — Gateway host hardening & stateless-edge operation · Accepted
- ADR-0005 (rev 1) — DSDL foundation:
industryflow.greenhousevocabulary, standard-type reuse, port-ID allocation · Accepted - ADR-0007 (rev 1) — PKI, hardware identity, and provisioning (ATECC608 secure element; adds identity across operators) · Accepted
- ADR-0014 (rev 2) — Sensor node taxonomy and module decomposition (adds M06-VENTILATION and M07-AMBIENT; module-ID field exhausted) · Accepted
- ADR-0015 — Gateway profile caching and local control loops · Accepted
- ADR-0016 (rev 1) — Empirical survey and state-space modeling · Proposed
- ADR-0017 (rev 2) — Component, document, and instance identification scheme (firmware
Flayer rooted on the carrier; extends the taxonomy to M01–M07) · Accepted - ADR-0018 (rev 1) — Cabinet-level power distribution and consumption metering · Proposed
- ADR-0019 — Purchased-part (SP) identification · Accepted
- ADR-0020 — Gateway persistence model (local store as lifecycle-dependent data sink) · Accepted
- ADR-0021 (rev 3) — Instance-and-integration ERP: the pre-cloud system of record (where it runs; machine identity binding) · Accepted
- ADR-0022 (rev 1) — Instance-and-integration ERP: the machine- and operator-facing API (machine binding route; the pull is a pure read) · Accepted
- ADR-0023 — The type registry as a machine-readable interface · Accepted
- ADR-0024 — Operator CA bootstrap and the root-key ceremony · Accepted
- ADR-0025 — Deployment-profile signing and gateway verification · Accepted
- ADR-0026 — ERP backup and restore across two stores · Accepted
Status follows the lifecycle in ADR-0000 (decision 7); the project maintainers are the accepting authority.
Planned / not yet written: ADR-0006 (mechanical/hydroponic), ADR-0008 (deployment
topology), ADR-0009 (profile schema), ADR-0010 (commercial operations),
ADR-IF-0001 (IndustryFlow production_unit).
Open-core; license per part of the repo — see LICENSE.md for the
authoritative mapping, with full texts in LICENSES/.
- Hardware designs in
store/(carrier + sensor modules): CERN-OHL-S-2.0 - ADRs & documentation (
ADR/,README,REGISTRY.md,spec/): CC-BY-SA-4.0 - Reference firmware (
firmware/, node sources): AGPL-3.0-or-later - DSDL protocol layer (
firmware/dsdl/): Apache-2.0 - ERP application (
erp/) and operator CA tooling (pki/): AGPL-3.0-or-later - DSDL / protocol layer (
firmware/dsdl/, theindustryflow.greenhouse.*types): Apache-2.0 - WeAct core board snapshot retained under its upstream open-hardware license