I have a fairly substantial hardware control application that I'm currently running on a RPI 3b. I'm using nearly every pin on the GPIO, including using PWM output, I2C and multiple 1-wire buses. The application uses pigpio (python bindings) to control the GPIO/PWM/I2C and w1thermsensor to do the 1-wire temperature readings
I'd like to update to RPI 5, but as I understand it, the major hardware changes involved mean that pigpio will no longer work and there doesn't seem to be much sign of that getting fixed any time soon. I've checked out various other libraries briefly like WiringPi, gpiod and gpiozero but they all seem to have limitations/problems that make the choice non-obvious:
- WiringPi -> although there's a new fork that supports rpi5, I can't find any new python bindings for it. I'm really not interested in having to write my own at this point; I'm not a C programmer. But maybe I've just missed where I can get the python bindings (or can I just use the old ones?)
- gpiod -> doesn't seem to have any DMA support, maybe not important. Doesn't seem to be any documentation for python bindings. Not enormously excited about the idea of having to guess at the python API without any docs
- gpiozero -> seems too opinionated. I already have all my IO code written based on direct access to the GPIO using pigpio, converting it all to use a "device-based" library is going to be a bit of PITA. Can't see any I2C support.
Although I'm using the hardware PWM outputs, both these and the I2C bus are operating at relatively slow speeds so I can probably get away without hardware support in a pinch, providing that I can still use the same pins on the GPIO header (I have a whole load of downstream breakout boards etc that I really don't want to have to rebuilt and test for a new pin config.
I'm hoping that w1thermsensor will just continue to work as before.
I'm guessing I'm going to have to accept that this upgrade isn't going to be painless. Can anyone suggest what the least painful way of converting my existing python code for pi 5 would be?