Продолжение небольшой серии заметок по взаимодействию с различными примитивными устройствами на языке Perl из ОС Linux.
В данной заметке приведу небольшой участок кода для переключения реле, управляющий контакт пусть будет GPIO4 (7).
Распиновка Raspberry Pi 3B
#!/usr/bin/perl
use strict;
use v5.24;
say 'Вкл'
if (switch(4, 1));
sleep(2);
say 'Выкл'
if (switch(4, 0));
sub switch {
my $pin = shift;
# Логическое значение 1 выключает реле, 0 - включает, поэтому делаем инверсию
my $value = 1 - (shift || 0);
return undef
unless (defined $pin && $pin);
my $direction_socket = "/sys/class/gpio/gpio$pin/direction";
my $value_socket = "/sys/class/gpio/gpio$pin/value";
unless (-f $direction_socket) {
my $rv = `/bin/echo $pin > /sys/class/gpio/export`;
# После установки сокета нужно немного подождать
select(undef, undef, undef, 0.05);
}
# установка направления
my $rv = `/bin/echo out > $direction_socket`;
# После установки направления нужно немного подождать
select(undef, undef, undef, 0.05);
# Переключение
$rv = `/bin/echo $value > $value_socket`;
return 1;
} # sub switch