grow-python icon indicating copy to clipboard operation
grow-python copied to clipboard

Bookworm/Pi5 Compatibility: Upgrade to latest boilerplate, port to gpiod

Open Gadgetoid opened this issue 2 years ago • 3 comments

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/

Gadgetoid avatar Nov 17 '23 11:11 Gadgetoid

How is this going.

Wondering if I should try this, or just use the RPI.GPIO 'shim'.

bsimmo avatar Apr 07 '24 15:04 bsimmo

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.

Gadgetoid avatar Apr 08 '24 10:04 Gadgetoid