Raspberry Pi Pico Pump Lab¶
Bench-only research workflow
This page is for algorithm development, simulation, and disconnected hardware-in-the-loop tests. It is not a medical-device workflow, not an insulin delivery system, and must not be connected to a person, animal, insulin reservoir, or infusion set.
The Pico Pump Lab gives the SDK one clear path from an algorithm idea to a safe bench target:
- write or import an IINTS algorithm
- test it in simulation and validation profiles
- package a reproducible bench bundle
- copy locked firmware to a Raspberry Pi Pico-style board
- verify the board over USB serial
The generated firmware is deliberately non-actuating. It accepts only PING, STATUS, and LOCKOUT; it rejects DOSE, BOLUS, BASAL, and PRIME.
Why This Exists¶
If you are designing a PCB or pump-like demonstrator, the SDK should be the place where the risky logic is tested first. The hardware should only receive a bundle after the algorithm has a manifest, source snapshot, safety contract, and reproducibility metadata.
The FDA notes that infusion pump software controls important safety functions and that model-based and early verification methods help evaluate software before finished hardware exists. IINTS follows that idea for research: simulate first, package evidence second, touch hardware last.
Create A Lab¶
iints pump init --output-dir iints_pico_pump_lab
cd iints_pico_pump_lab
This creates:
| Path | Purpose |
|---|---|
algorithms/pico_bench_algorithm.py |
Conservative starter SDK algorithm |
safety_contract.json |
Zero-delivery bench contract |
firmware/pico_pump_bench/code.py |
Non-actuating Pico/CircuitPython firmware |
bundles/ |
Packaged algorithm/firmware bundles |
scripts/package_bench_bundle.sh |
One-command packaging helper |
README.md |
Local workflow notes |
Simulate First¶
Use the normal SDK run path before packaging for hardware:
iints run \
--algo algorithms/pico_bench_algorithm.py \
--patient-config-path patients/stable_patient.yaml \
--scenario-path scenarios/clinic_safe_baseline.json \
--duration 1440 \
--output-dir evidence/one_day_sim
Then validate the result:
iints validate-run \
--run-dir evidence/one_day_sim \
--profile clinic_safe_demo
Package A Bench Bundle¶
iints pump compile \
--algorithm algorithms/pico_bench_algorithm.py \
--output-dir bundles/pico_bench_bundle \
--safety-contract safety_contract.json
The bundle contains:
| File | Meaning |
|---|---|
algorithm.py |
Algorithm source snapshot |
firmware/code.py |
Locked USB serial firmware |
safety_contract.json |
Contract with hardware_actuation_enabled=false |
manifest.json |
Hashes, creation time, target, and upload confirmation |
Bench-Test Before Upload¶
iints pump bench-test \
--bundle-dir bundles/pico_bench_bundle \
--output-json bundles/pico_bench_bundle/bench_test_report.json
This checks:
| Check | Meaning |
|---|---|
| manifest | Bundle metadata exists and targets raspberry_pi_pico_bench |
| algorithm | Algorithm source snapshot is present |
| firmware | Locked non-actuating firmware is present |
| safety_contract | Zero-delivery contract is present |
| algorithm_sha256 | Algorithm hash matches the manifest |
| contract_lockout | hardware_actuation_enabled=false and dose limits remain zero |
Optionally add --port /dev/ttyACM0 after upload to run the serial PING, STATUS, and LOCKOUT smoke test.
Upload To A Pico-Style Board¶
First do a dry run:
iints pump upload \
--bundle-dir bundles/pico_bench_bundle \
--mount-dir /Volumes/CIRCUITPY \
--bench-only-confirm "I understand this is bench-only and not for human use"
If the copy plan is correct, run the write:
iints pump upload \
--bundle-dir bundles/pico_bench_bundle \
--mount-dir /Volumes/CIRCUITPY \
--bench-only-confirm "I understand this is bench-only and not for human use" \
--write
If your Pico appears as RPI-RP2, it is in BOOTSEL/UF2 mode. The SDK will refuse that mount because it is not a writable Python filesystem. Install a Python-capable Pico runtime first, then use a writable board drive such as CIRCUITPY, or test against a local folder.
Serial Test¶
iints edge pump serial-test --port /dev/ttyACM0
Expected responses are JSON lines showing:
{"device":"iints-pico-pump-bench","hardware_actuation_enabled":false,"locked":true,"ok":true}
Safety Contract Defaults¶
| Field | Default | Why |
|---|---|---|
hardware_actuation_enabled |
false |
Prevents this workflow from being used as real delivery firmware |
max_command_units |
0.0 |
No single command may represent real insulin delivery |
max_units_per_hour |
0.0 |
No hourly delivery is allowed in bench firmware |
requires_external_supervisor |
true |
The Pico is not the safety authority |
requires_manual_bench_arm |
true |
Any later hardware actuation must be a separate explicit bench step |
What Comes Later¶
A future real actuator path must be a separate project with formal requirements, independent review, hazard analysis, traceability, alarm handling, occlusion/flow detection, dose accuracy testing, cybersecurity review, and regulatory guidance. Keep this SDK path as the simulation and evidence generator.
References¶
- FDA, Infusion Pump Software Safety Research
- FDA, Infusion Pumps
- Raspberry Pi, Pico-series microcontrollers documentation