GPIO
- GPIO на прерываниях
проверить, работает ли на OPi
Схемы подключения
Светодиод
Кнопка
Резистор R1 можно установить на сопротивление 10 КОм - 20 КОм, а для резистора R2 на 600 Ом - 2 КОм, все должно уверенно работать.
Датчик с выходом 5 вольт
Простое тестирование на bash
Выполнять под
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
Программирование на NodeJS
Устанавливаем пакет 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), подключенных через резисторы.