While toying with some Raspberry Pi's I wrote a PHP library for the Pi. This library adds support to PHP for the Raspberry Pi GPIO devices. I've started programming this library for my own (experimental) use. With this library I did some testing in performance between different ways of driving pins, and connected some basic hardware parts.
Below you'll find the documentation of the library. Source code can be found at https://bitbucket.org/garrcomm/raspberryphpi.
Driving GPIOs can be done in different ways on the Raspberry Pi. The easiest way is with the gpio
console tool.
But I found that executing the console tool is not very fast. For that reason I also wrote a sysfs
variant that uses file streams instead.
With some testing (see examples/speedtest.php), I found that sysfs
is the fastest approach.
The downside is that it requires write permissions to hardware devices; thus only available when running the script as root.
When not having correct permissions, the gpio
console tool is a better (but slower) way to go.
In the future, I want to make a RaspberryPhpi object that automatically selects the most effecient way of driving GPIOs.
Driving SPI can be done by bitbanging, but this gives an unstable clock signal and therefor is not very reliable. It can also be done "natively" through spidev, but setting the clock requires ioctl commands.
To use spidev, a few steps need to be followed;
$ sudo raspi-config
Go to menu 5 Interfacing Options
-> P4 SPI
and make sure it's enabled.# cd ~
# mkdir ext-ioctl
# cd ext-ioctl/
# git clone https://github.com/CismonX/ext-ioctl .
# apt install php7.3-dev
# phpize
# ./configure --enable-ioctl
# make && make install
# echo extension=ioctl.so > /etc/php/7.3/mods-available/ioctl.ini
# ln -s /etc/php/7.3/mods-available/ioctl.ini /etc/php/7.3/cli/conf.d/20-ioctl.ini
# ln -s /etc/php/7.3/mods-available/ioctl.ini /etc/php/7.3/apache2/conf.d/20-ioctl.ini
In the examples folder, a few scripts can be found: