dev-master
9999999-devGPIO library and test framework
LGPL-3
The Development Requires
by Dennis Birkholz
GPIO library and test framework
GPIO abstraction using the linux sysfs interface, mainly for Raspberry PI., (*1)
Just put the following in your composer.json
file inside your project root.
No stable version exists so far., (*2)
"require": { "iqb/gpio": "*@dev" }
Pin
class: abstraction of a single GPIO pinLCD
class: abstraction of a HD44780 compatible 16x2 displayPinEmulator
class: mock replacement for Pin
classEmulator
class: uses PinEmulator
s to make GPIO using software testable!The Pin
class provides a simple interface to GPIO pins/ports.
It uses the userspace GPIO interface provided by the linux kernel below /sys/class/gpio
and so will obviously not work on other operating systems.
It is developed on Raspbian Wheezy., (*3)
The linux kernel identifies the GPIO pins by numbers.
They can be found using the BCM value of the gpio readall
(you need WiringPi for the command to exist)., (*4)
namespace iqb\gpio; // Will open the GPIO pin with BCM number 17 = physical pin 11 $pin = new Pin(17); // A pin must be enabled so it can be used. // Pin-consumers like the LCD class enable pins themselves when they use them $pin->enable(); // Pin is in output mode $pin->setDirection(Pin::DIRECTION_OUT); // and the pin is now enabled (sending a 1) $pin->setValue(true); // Pin is in input mode now $pin->setDirection(Pin::DIRECTION_IN); // Enable edge detection. // This feature is required to detect changes of the value. $pin->setEdge(Pin::EDGE_BOTH); // Read the current value $value = $pin->getValue(); // We can wait for a change of the pin value using stream_select() // We need to initialize the file handle sets we want to monitor. // Changes to GPIO pins are "exceptional" (out of band) events // so we need the third set of handles. $read = []; $write = []; $except = [$pin->getValueHandle()]; while (true) { if (-1 === stream_select($read, $write, $except, 60)) { continue; } echo "Value changed: " . ($pin->getValue() ? '1' : '0') . "\n"; }
This display is connected via 6 GPIO pins., (*5)
namespace iqb\gpio; // Create the display, the pins are the actual used pins from my personal project // You don't need to enable the pins or set the direction, // that is done by the LCD class. $lcd = new LCD( new Pin(7), new Pin(8), new Pin(25), new Pin(24), new Pin(23), new Pin(18) ); // Enable the pins, set the direction, send some magic commands to the display ... $lcd->initialize(); // Write something in the first line $lcd->writeString('abcdefghijklmnop', 1); // Write something in the second line $lcd->writeString('0123456789012345', 2);
GPIO library and test framework
LGPL-3