Переключение реле через интерфейс GPIO на Perl (Raspberry Pi)

Jan 19, 2022 02:32


Продолжение небольшой серии заметок по взаимодействию с различными примитивными устройствами на языке 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

gpio, iot, raspberry, perl, rele

Previous post Next post
Up