gabe /presentato-mf
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
acme-camera: radio split, Wi-Fi on the SOC, BLE/Thread on the MCU
8acc3b5 · Gabriel Morell · 2026-10-13 19:27
Files changed
modified
content/presentations/acme-camera.md
+36
−12
@@ -57,18 +57,18 @@ No continuous recording, a battery camera can't afford it
| 57 | 57 | |
| 58 | 58 | ## MCU |
| 59 | 59 | |
| 60 | −ultra-low power attached to motion sensors, lighting, and power control | |
| 60 | +ultra-low power attached to motion sensors, lighting, power control, and the BLE / Thread radio | |
| 61 | 61 | |
| 62 | 62 | ## SOC |
| 63 | 63 | |
| 64 | −attached to camera/storage and spends most of its time in deep sleep | |
| 64 | +attached to camera/storage/Wi-Fi and spends most of its time in deep sleep | |
| 65 | 65 | |
| 66 | 66 | -- |
| 67 | 67 | |
| 68 | 68 | ## MCU Candidates |
| 69 | 69 | |
| 70 | −- nRF54L | |
| 71 | −- nRF52840 | |
| 70 | +- nRF54L: BLE 6, Thread / Matter | |
| 71 | +- nRF52840: BLE 5, Thread / Matter | |
| 72 | 72 | |
| 73 | 73 | ## SOC Candidates |
| 74 | 74 |
@@ -76,6 +76,13 @@ attached to camera/storage and spends most of its time in deep sleep
| 76 | 76 | - Ingenic T41 |
| 77 | 77 | - Ambarella CV7 |
| 78 | 78 | |
| 79 | +Note: | |
| 80 | +Radio split: Wi-Fi lives on the SOC for video, BLE and Thread live on the MCU | |
| 81 | +None of the SOCs have Wi-Fi on-die, so it's an SDIO module next to the SOC | |
| 82 | +BLE on the MCU handles setup from the phone app without waking a soft-AP | |
| 83 | +Thread / Matter lets the camera show up as a motion sensor or light in a smart home while the SOC sleeps | |
| 84 | +Neither MCU has Wi-Fi; the nRF54L can host an nRF7002, but putting video through the MCU is the wrong path | |
| 85 | + | |
| 79 | 86 | --- |
| 80 | 87 | |
| 81 | 88 | # Motion |
@@ -176,7 +183,7 @@ Read-only rootfs means an update is a whole-slot swap, nothing drifts between de
| 176 | 183 | | mcuctl | UART to the MCU | |
| 177 | 184 | | powerctl | PMIC over I²C | |
| 178 | 185 | | cameractl | sensor, ISP, clip buffer | |
| 179 | −| portalctl | soft-AP, HTTP | | |
| 186 | +| portalctl | BLE via mcuctl, HTTP | | |
| 180 | 187 | | configctl | `/data/config` | |
| 181 | 188 | |
| 182 | 189 | Note: |
@@ -215,7 +222,7 @@ Home security buyers ask about this first, and a compromised camera is a camera
| 215 | 222 | | Storage | encrypted `/data` and clips | |
| 216 | 223 | | Processes | per-service users, sandboxed units | |
| 217 | 224 | | Broker | per-topic ACLs by peer uid | |
| 218 | −| Setup | soft-AP only while unprovisioned | | |
| 225 | +| Setup | BLE pairing, soft-AP as fallback | | |
| 219 | 226 | | Cloud | per-device certs, mutual TLS | |
| 220 | 227 | |
| 221 | 228 | Note: |
@@ -230,7 +237,7 @@ Factory reset wipes /data and revokes the device cert server side
| 230 | 237 | | Component | Role | |
| 231 | 238 | |---|---| |
| 232 | 239 | | <a href="#/broker">broker</a> | MQTT on a Unix socket | |
| 233 | −| <a href="#/mcuctl">mcuctl</a> | motion and lights via the MCU | | |
| 240 | +| <a href="#/mcuctl">mcuctl</a> | motion, lights, BLE via the MCU | | |
| 234 | 241 | | <a href="#/powerctl">powerctl</a> | power modes, PMIC telemetry | |
| 235 | 242 | | <a href="#/portalctl">portalctl</a> | setup and status portals | |
| 236 | 243 | | <a href="#/cameractl">cameractl</a> | frames to storage and cloud | |
@@ -426,7 +433,7 @@ Battery life is the product, so it's measured on every build, not at the end
| 426 | 433 | | Radar only | catches still people | standby draw | |
| 427 | 434 | | Lights on motion | color night video | battery | |
| 428 | 435 | | Longer clips | more context | battery, upload | |
| 429 | −| Wi-Fi kept up | faster live view | standby draw | | |
| 436 | +| Keep-alive Wi-Fi radio | instant wake | BOM, 2nd radio | | |
| 430 | 437 | | On-device inference | smarter alerts | NPU power, BOM | |
| 431 | 438 | |
| 432 | 439 | Note: |
@@ -472,7 +479,7 @@ TODO: topic layout and which components publish/subscribe
| 472 | 479 | |
| 473 | 480 | # Component : MCUctl |
| 474 | 481 | |
| 475 | −Owns the MCU link: motion sensing and lighting | |
| 482 | +Owns the MCU link: motion, lighting and the BLE radio | |
| 476 | 483 | |
| 477 | 484 | Note: |
| 478 | 485 | Talks to MCU and sets/gets the motion detection and light settings |
@@ -573,15 +580,32 @@ Interactive wireless authentication and cloud configuration
| 573 | 580 | |
| 574 | 581 | ## Modes |
| 575 | 582 | |
| 576 | −Which portal is up, and setup progress | |
| 583 | +Which portal is up, and how setup arrives | |
| 577 | 584 | |
| 578 | 585 | ```rust |
| 586 | +enum SetupTransport { | |
| 587 | + Ble, | |
| 588 | + SoftAp { ssid: String, psk: String }, | |
| 589 | +} | |
| 590 | + | |
| 579 | 591 | enum PortalMode { |
| 580 | − Setup { ap_ssid: String, ap_psk: String }, | |
| 592 | + Setup { via: SetupTransport }, | |
| 581 | 593 | Status, |
| 582 | 594 | Off, |
| 583 | 595 | } |
| 596 | +``` | |
| 597 | + | |
| 598 | +Note: | |
| 599 | +Setup runs on first boot / factory reset, over BLE through mcuctl from the phone app, soft-AP only as a fallback without the app | |
| 600 | +Status once on the home network, Off once cloud-managed | |
| 601 | + | |
| 602 | +-- | |
| 584 | 603 | |
| 604 | +## Provisioning | |
| 605 | + | |
| 606 | +How far setup has got | |
| 607 | + | |
| 608 | +```rust | |
| 585 | 609 | enum ProvisioningState { |
| 586 | 610 | AwaitingCredentials, |
| 587 | 611 | JoiningNetwork, |
@@ -592,7 +616,7 @@ enum ProvisioningState {
| 592 | 616 | ``` |
| 593 | 617 | |
| 594 | 618 | Note: |
| 595 | −Setup is a soft-AP on first boot / factory reset, Status once on the home network, Off once cloud-managed | |
| 619 | +The phone app polls this over BLE, or the soft-AP page does, to show progress and failures | |
| 596 | 620 | |
| 597 | 621 | -- |
| 598 | 622 |
Parents: 10112a6