Работа с GPIO

Роутер WR703N (да и многие другие) вполне может управлять внешними устройствами (например реле). Для этого можно использовать подключение через порты ввода-вывода процессора (GPIO).

Список доступных для человека с паяльником портов приведён в вики OpenWRT.

GPIO

Программно доступ к GPIO происходит следующим образом:

Экспортируем порт

echo -n 17 > /sys/class/gpio/export

Здесь число 17, это номер подключаемого вывода порта.

После этого в каталоге /sys/class/gpio/export появится линк на каталог с файлами управления. В нашем случае это /sys/class/gpio/gpio17.

Обратите внимание на /sys/class/gpio/unexport. Он, как можно догадаться, выполняет обратную функцию и отключает вывод.

Следующим этапом нам нужно настроить порт на ввод (in) или вывод (out).

echo -n in > /sys/class/gpio/gpio17/direction

И теперь можно узнать его состояние

cat /sys/class/gpio/gpio17/value

Быстро узнать состояние портов ввода-вывода можно командой:

cat /sys/kernel/debug/gpio

Если есть желание подёргать за ноги из lua, то можно воспользоваться готовой библиотекой: https://github.com/rsisto/luaGpio

I2C

Существенно расширить возможности связи с внешнем миром поможет эмуляция протокола I2C на выводах GPIO.

root@Carambola:~# insmod i2c-dev
root@Carambola:~# echo 24c256 0x50 > /sys/bus/i2c/devices/i2c-0/new_device
root@Carambola:~# io 0x10000060 ; dmesg | grep -i i2c ; lsmod | grep -i i2c
10000060:  de

[    0.120000] rt2880-pinmux pinctrl.1: found group selector 0 for i2c
[   10.570000] i2c-ralink 10000900.i2c: loaded
[   65.330000] i2c /dev entries driver
[   68.470000] i2c i2c-0: new_device: Instantiated device 24c256 at 0x50

i2c_core               15054  4 at24
i2c_dev                 4064  0 
i2c_ralink              2432  0 
of_i2c                  1344  1 i2c_ralink

root@Carambola:~# time dd bs=32 count=1024 if=/sys/bus/i2c/devices/0-0050/eeprom | wc -c
1024+0 records in
1024+0 records out
real    0m 1.15s
user    0m 0.01s
sys    0m 1.03s
32768

1-Wire

http://cyber-place.ru/showpost.php?p=3849&postcount=20

 
comments powered by Disqus