gpio:start

GPIO

Резистор R1 можно установить на сопротивление 10 КОм - 20 КОм, а для резистора R2 на 600 Ом - 2 КОм, все должно уверенно работать.

Взято отсюда

Выполнять под root или через sudo!

Отправка 1 в gpio0 - открываем порт на экспорт, конфигурируем на экспорт, устанавливаем значение:

value1.sh
cd /sys/class/gpio/
echo 0 > export
echo out > gpio0/direction
echo 1 > gpio0/value
cat gpio0/value
  • echo in > gpio0/direction - устанавливаем порт на чтение
  • echo 0 > unexport - отдаем назад порт

«Мигание» по всем выводам 0-10 GPIO раз в секунду ./blink.sh 0 10:

blink.sh
#!/bin/bash
 
GPIOBASE=`cat /sys/class/gpio/gpiochip*/base | head -n1`
GPIOmin=`expr $1 + $GPIOBASE`
GPIOmax=`expr $2 + $GPIOBASE`
nums=`seq $GPIOmin $GPIOmax`
 
cd /sys/class/gpio
 
for i in $nums; do
echo $i > unexport
echo $i > export
echo out > gpio$i/direction
done
 
while true; do
  for i in $nums; do
    echo 0 > gpio$1/value
  done
  sleep 1
  for i in $nums; do
    echo 1 > gpio$1/value
  done
  sleep 1
done

Запись или чтение GPIO одной командой (через скрипт):

./gpiocontrol.sh 14 out 1
./gpiocontrol.sh 14 in
gpiocontrol.sh
#!/bin/sh
 
show_usage()
{
    printf "\ngpio.sh <gpio pin number> [in|out [<value>]]\n"
}
 
if [ \( $# -eq 0 \) -o \( $# -gt 3 \) ] ; then
    show_usage
    printf "\n\nERROR: incorrect number of parameters\n"
    exit 255
fi
 
GPIOBASE=`cat /sys/class/gpio/gpiochip*/base | head -n1`
GPIO=`expr $1 + $GPIOBASE`
 
#doesn't hurt to export a gpio more than once
(echo $GPIO > /sys/class/gpio/export) >& /dev/null
 
if [  $# -eq 1 ] ; then
   cat /sys/class/gpio/gpio$GPIO/value
   exit 0
fi
 
if [ \( "$2" != "in" \) -a  \( "$2" != "out" \) ] ; then
    show_usage
    printf "\n\nERROR: second parameter must be 'in' or 'out'\n"
    exit 255
fi
 
echo $2 > /sys/class/gpio/gpio$GPIO/direction
 
if [  $# -eq 2 ] ; then
   cat /sys/class/gpio/gpio$GPIO/value
   exit 0
fi
 
 
VAL=$3
 
if [ $VAL -ne 0 ] ; then
    VAL=1
fi
 
echo $VAL > /sys/class/gpio/gpio$GPIO/value

Устанавливаем пакет gpio:

npm install gpio

Настройка порта:

var gpio = require("gpio");
 
// Резервируем порт 4
var gpio4 = gpio.export(4, {
   // по-умолчанию - "out", значение напряжения на выводе может быть НИЗКИМ или ВЫСОКИМ (3.3 В)
   direction: 'out',
 
   // интервал опроса значения in-порта в мс
   // по-умолчанию "100", меньшие значения начинают грузить процессор
   interval: 200,
 
   // асинхронный колбек, когда "все готово"
   ready: function() {
   }
});

API:

  • gpio4.set() или gpio4.set(1) - установка ВЫСОГО уровня
  • gpio4.reset() или gpio4.set(0) - установка НИЗКОГО уровня
  • gpio4.value - текущее состояние
  • gpio4.set(function(){}); - колбек
  • gpio4.unexport() - отмена резервирования порта
  • gpio4.on(«change», function(val){}) - событие при смене статуса на in-порте (для нажатия кнопки это может быть 0, а при отпускании - 1, поэтому один щелчок создает 2 события)
  • gpio4.removeListener(«change», processPin4) - удаление слушателя события processPin4
  • gpio4.removeAllListeners(«change») - удаление всех слушателей события
  • gpio4.setDirection(«out») - изменение направления ввода-вывода

:!: Пример: отправка SOS кодом Морзе для кнопки (вывод gpio0) и светодиода (вывод gpio1), подключенных через резисторы.

  • gpio/start.txt
  • Последнее изменение: 2017/10/01 09:49
  • — admin