Pi: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Управление первым gpio на вход)
(TP-Link MR-3020 GPIOs)
 
(не показано 6 промежуточных версий этого же участника)
Строка 1: Строка 1:
=Raspberry Pi (C)2011=
+
=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

Pi gpio.jpg

Занять первый 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 входовыходов!

Pi-17-inouts.jpg

TP-Link MR-3020 GPIOs

gpio на этой железке

Освободить занятые модулями ядра 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