Bookworm/Pi5 Compatibility: Upgrade to latest boilerplate, port to gpiod
TODO
- [ ] - Can we make Python-based soft PWM work for pumps and piezos, or do we need to do something else?
- [ ] - Update tests
PWM
Since Grow assumes we can PWM any pin- because RPi.GPIO had a software kludge to let us do so - we're in a bit of a predicament porting this to Bookworm / gpiod. I've experimented with pure Python PWM and it works, but it's thoroughly irredeemably terrible. When dealing with pumps that involve water- I don't want to invite the risk of a software failure causing a flood.
There's a patch floating about for software PWM at the kernel level, so we should be switching to standard PWM interfaces (see: https://lore.kernel.org/linux-pwm/[email protected]/) with the hope that the Pi 5 will eventually get PIO PWM support on arbitrary pins.
Until the PWM issue is resolved, then Pi 5 support for Grow is blocked.
UPDATE: GPIO PWM is now merged into mainline Linux, Kernel 6.11, we're now waiting for it to make it into a Raspberry Pi OS release: https://github.com/torvalds/linux/commit/7f61257cd6e1ad4769b4b819668cab00f68f2556
Testing
If you're a Bookworm / Pi 5 user running into virtual environment issues, you can try this library like so:
git clone https://github.com/pimoroni/grow-python -b gpiod
cd grow-python
./install.sh --unstable
The ./install.sh script will create a pimoroni virtual environment that's shared between our products. (or use your existing venv if you've already activated one.)
For the reasons behind these changes and other information, see:
- https://github.com/pimoroni/boilerplate-python/pull/13
- https://github.com/pimoroni/boilerplate-python/issues/16
- https://pimoroni.github.io/venv-python/
How is this going.
Wondering if I should try this, or just use the RPI.GPIO 'shim'.
As far as I'm aware the RPi.GPIO shim has the same limitations that are currently preventing any progress here- lack of pulse counting and PWM. Feel free to test but, uh, run your pumps dry!
The biggest blocker right now is arbitrary PWM support on pins- I need to wait for the people writing/testing/approving the kernel module. I have a janky software solution that I could roll out, but I'm apprehensive to half bake anything involving water.