Device::WebIO::RaspberryPi 0.900 has been released. The big changes are to change the backend from HiPi to RPi::WiringPi, as well as put in a new input event system based on AnyEvent. There’s also some slight updates to interrupt handling in Device::WebIO in version 0.022 to support this.
It works by having a condvar with a subref. You can get the pin number and its value out of $cv->recv
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
use v5.14; use Device::WebIO; use Device::WebIO::RaspberryPi; use AnyEvent; use constant INPUT_PIN => 2; my $rpi = Device::WebIO::RaspberryPi->new; my $webio = Device::WebIO->new; $webio->register( 'rpi', $rpi ); my $input_cv = AnyEvent->condvar; $input_cv->cb( sub { my ($cv) = @_; my ($pin, $setting) = $cv->recv; say "Pin $pin set to $setting"; }); $webio->set_anyevent_condvar( 'rpi', INPUT_PIN, $input_cv ); say "Waiting for input"; my $cv = AE::cv; $cv->recv; |
This is one part of a series of updates to support an upcoming Device::WebIO::MQTT. The original versions of the Device::WebIO family were meant to an HTTP interface (like the one in Device::WebIO::Dancer). Where HTTP pulls data, MQTT is push. The new AnyEvent system should integrate easily with AnyEvent::MQTT.
MQTT is also part of our stretch goals for the Raspberry Pi Perl eBook. Don’t worry though–I’ll be working on Device::WebIO::MQTT regardless of the funding level on the book.