pimoroni / grow-python

Python libs for controlling the Grow HATs
MIT License
55 stars 44 forks source link

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

Open Gadgetoid opened 8 months ago

Gadgetoid commented 8 months ago

TODO

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/20240204220851.4783-1-wahrenst@gmx.net/) 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:

bsimmo commented 3 months ago

How is this going.

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

Gadgetoid commented 3 months ago

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.