โ† All packages
๐ŸŽ›๏ธ

pico-gpio-api

The Pico W port of raspberry-pi-gpio-api: same endpoints, same wire format, same API-key auth, on a $6 microcontroller. Clients, testers, and bridges target a Pi or a Pico interchangeably; the two projects release in lockstep.

๐Ÿ MicroPython or CircuitPython 8+ ๐Ÿ”Œ Port 8314 ๐ŸŽ›๏ธ Raspberry Pi Pico W ๐Ÿ“„ One self-contained file โš–๏ธ MIT
View on GitHub ๐ŸŽ›๏ธ Pico pinout

Pick a runtime, copy a file

Two independent implementations, flash one firmware and copy the matching file to the board. It auto-runs at power-on; once set up, the server starts itself on every boot.

RuntimeFile to copyNotes
MicroPythonmain.pyFully self-contained, no libraries to install
CircuitPython 8+code.pyA few bundle libraries in /lib (asyncio, adafruit_ntp, adafruit_requests for webhooks)

WiFi credentials live in a settings.toml on the device, the same file format both runtimes read:

CIRCUITPY_WIFI_SSID = "YourNetwork"
CIRCUITPY_WIFI_PASSWORD = "YourPassword"

Same API as the Pi

๐ŸงชInterchangeable by design: the ctrlPi integration test suite runs the same 45 REST tests against a Pi and a Pico, only the physical pin numbers are remapped.

The read-only trick (CircuitPython)

CircuitPython exposes the Pico's filesystem over USB, but a computer and the running server can't both write it. boot.py solves this with a jumper: hold GP1 to GND at boot and the filesystem stays read-only for the server (your computer can edit files); leave GP1 floating and the server can persist config, status, and logs. Read-only mode is visible in the API, the agent tags its os field with ReadOnly.

In the family

Everything that drives a Pi agent drives a Pico agent unchanged: the HomeKit and Matter bridges, ctrlpi-mcp, and the webhook flow to ctrlpi.com.