Pi: различия между версиями
Перейти к навигации
Перейти к поиску
Vovan (обсуждение | вклад) (→Управление первым gpio на вход) |
Vovan (обсуждение | вклад) (→TP-Link MR-3020 GPIOs) |
||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | =Raspberry Pi | + | =Raspberry Pi ver. 1= |
==Схема расположения GPIO== | ==Схема расположения GPIO== | ||
[[Файл:Pi_gpio.jpg]] | [[Файл:Pi_gpio.jpg]] | ||
Строка 26: | Строка 26: | ||
==Освободить первый gpio== | ==Освободить первый gpio== | ||
echo "1" > /sys/class/gpio/unexport | echo "1" > /sys/class/gpio/unexport | ||
+ | |||
+ | Примечание: если gpio не освободить, то его нельзя переключить на противоположный режим и использовать | ||
==17 gpio входовыходов!== | ==17 gpio входовыходов!== | ||
[[Файл:pi-17-inouts.jpg]] | [[Файл:pi-17-inouts.jpg]] | ||
+ | |||
+ | =TP-Link MR-3020 GPIOs= | ||
+ | |||
+ | [http://wiki.openwrt.org/ru/toh/tp-link/tl-mr3020#gpios gpio на этой железке] | ||
+ | |||
+ | ==Освободить занятые модулями ядра gpio== | ||
+ | Для освобождения gpio контактов, занятых соответствующими модулями ядра, нужно выбросить эти подули из автозагрузки. Я это сделал так: | ||
+ | |||
+ | добавил строчки в файл /etc/rc.local перед строкой exit 0 | ||
+ | |||
+ | rmmod leds_gpio | ||
+ | rmmod gpio_button_hotplug | ||
+ | |||
+ | ==Скрипт== | ||
+ | <pre> | ||
+ | root@OpenWrt:~# cat gpio.sh | ||
+ | ############ | ||
+ | # settings # | ||
+ | ############ | ||
+ | |||
+ | GPIOS="29 7 0 26" | ||
+ | INOROUT=out | ||
+ | SLEEP=3s | ||
+ | |||
+ | ######################### | ||
+ | # blink - test finction # | ||
+ | ######################### | ||
+ | |||
+ | blink() { | ||
+ | echo "1" > /sys/class/gpio/gpio$1/value | ||
+ | sleep $SLEEP | ||
+ | echo "0" > /sys/class/gpio/gpio$1/value | ||
+ | sleep $SLEEP | ||
+ | blink $1 | ||
+ | } | ||
+ | |||
+ | |||
+ | ################# | ||
+ | # stop function # | ||
+ | ################# | ||
+ | |||
+ | stop() { | ||
+ | for GPIO in $(echo $GPIOS) | ||
+ | do | ||
+ | echo "0" > /sys/class/gpio/gpio$GPIO/value | ||
+ | done | ||
+ | |||
+ | for k in $(ps | grep gpio.sh | grep -v grep | awk {'print $1 '}) | ||
+ | do | ||
+ | kill $k | ||
+ | done | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | ################## | ||
+ | # start finction # | ||
+ | ################## | ||
+ | |||
+ | start() { | ||
+ | for GPIO in $(echo $GPIOS) | ||
+ | do | ||
+ | echo $GPIO > /sys/class/gpio/export | ||
+ | echo $INOROUT > /sys/class/gpio/gpio$GPIO/direction | ||
+ | blink $GPIO& | ||
+ | sleep $SLEEP | ||
+ | done | ||
+ | } | ||
+ | |||
+ | ############################## | ||
+ | # run function after test $1 # | ||
+ | ############################## | ||
+ | |||
+ | [ -z $1 ]||$1 | ||
+ | |||
+ | </pre> |
Текущая версия на 18:15, 27 марта 2015
Содержание
Raspberry Pi ver. 1
Схема расположения GPIO
Занять первый gpio
echo "1" > /sys/class/gpio/export
Управление первым gpio на выход
echo "1" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio1/direction echo "1" > /sys/class/gpio/gpio1/value echo "0" > /sys/class/gpio/gpio1/value
Управление первым gpio на вход
echo "1" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio1/direction cat /sys/class/gpio/gpio1/value
Комментарий: читаем катом (или можно watch "cat /sys/class/gpio/gpio1/value") порт, подавая на него 3.3 вольта с нижней левой ноги (замыкая проводом на нужный порт).
При замыкании - в файле /sys/class/gpio/gpio1/value будет единичка, при размыкании — ноль.
Освободить первый gpio
echo "1" > /sys/class/gpio/unexport
Примечание: если gpio не освободить, то его нельзя переключить на противоположный режим и использовать
17 gpio входовыходов!
TP-Link MR-3020 GPIOs
Освободить занятые модулями ядра gpio
Для освобождения gpio контактов, занятых соответствующими модулями ядра, нужно выбросить эти подули из автозагрузки. Я это сделал так:
добавил строчки в файл /etc/rc.local перед строкой exit 0
rmmod leds_gpio rmmod gpio_button_hotplug
Скрипт
root@OpenWrt:~# cat gpio.sh ############ # settings # ############ GPIOS="29 7 0 26" INOROUT=out SLEEP=3s ######################### # blink - test finction # ######################### blink() { echo "1" > /sys/class/gpio/gpio$1/value sleep $SLEEP echo "0" > /sys/class/gpio/gpio$1/value sleep $SLEEP blink $1 } ################# # stop function # ################# stop() { for GPIO in $(echo $GPIOS) do echo "0" > /sys/class/gpio/gpio$GPIO/value done for k in $(ps | grep gpio.sh | grep -v grep | awk {'print $1 '}) do kill $k done } ################## # start finction # ################## start() { for GPIO in $(echo $GPIOS) do echo $GPIO > /sys/class/gpio/export echo $INOROUT > /sys/class/gpio/gpio$GPIO/direction blink $GPIO& sleep $SLEEP done } ############################## # run function after test $1 # ############################## [ -z $1 ]||$1