Shell script para usar o GPIO do Raspberry

Essa é uma dica simples, mas não quis deixar de escrever porque apesar de simples, é útil. Com esse programinha você pode fazer acesso  por ssh e manipular um pino do GPIO do Raspberry. Está bem básico:

  • Seleciona o pino
  • Seleciona a direção
  • Seleciona o estado do pino

Tudo através de um menu em curses, feito com o programa dialog. Tudo o que você precisa fazer é instalar o programa dialog:

Instalar o dialog



sudo apt-get install dialog

Script de manipulação do GPIO do Raspberry

Depois, salve o código em um arquivo. Por exemplo, gpioControl.sh.

#!/bin/sh

INPUT=1
OUTPUT=2

LOW=0
HIGH=1

setState(){
    [ -L /sys/class/gpio/gpio$PIN ] || {
        dialog --infobox "O pino nao esta disponivel no sistema. Saindo..." 5 55
        return 
    }
    echo $1 >/sys/class/gpio/gpio$PIN/value
}


PINS=`for i in 4 6 12 13 16 17 18 19 21 22 23 24 26 27; do echo $i "Pino_$i"; done`
PIN=`dialog --title "Do bit Ao Byte - GPIO" --menu "Selecione um pino do header" 15 55 5 $PINS  --stdout`

[ $? -eq 1 ] && clear && return

DIRECTION=`dialog --title "Do bit Ao Byte - Direction" --menu "Selecione direcao" 15 55 5 1 "INPUT" 2 "OUTPUT" --stdout`

[ $? -eq 1 ] && clear && return


if [ $DIRECTION -eq $OUTPUT ]; then
    echo "out" >/sys/class/gpio/gpio$PIN/direction
    STATE=`dialog --title "Do bit Ao Byte - State" --menu "Selecione estado do pino" 15 55 5 0 "LOW" 1 "HIGH" --stdout`
    [ $? -eq 1 ] && clear && return
    if [ $STATE -lt $HIGH ]; then
        setState $LOW
    else
        setState $HIGH
    fi
else
    echo "in" >/sys/class/gpio/gpio$PIN/direction
fi

Então, dê um bit de execução para o script e execute-o como root:

chmod 700 gpioControl.sh
sudo su
./gpioControl.sh

Módulo relé

Muita atenção ao conectar o módulo relé. Ele deve ser conectado ao 3V3 devido ao nível lógico dos pinos do Raspberry, que não são tolerantes a 5V. Meu módulo funcionou em 3V3 sem problemas.

Conectei um dos pinos de sinal no GPIO4. Meu módulo relé tem lógica invertida, então ele liga em LOW.

Quando executar o script, você deve ver as seguintes janelas:

GPIO do Raspberry
Seleção do pino de GPIO do Raspberry

Depois, deve selecionar INPUT ou OUTPUT. Se selecionar INPUT, o script termina em seguinda.

GPIO do Raspberry
Direção do pino do GPIO do Raspberry

E por fim, selecionar o estado. Como meu módulo é lógica invertida, ele aterra no pino de GPIO. Não sei se é mais arriscado drenar corrente ou receber uma tensão de 5V no pino, mas de qualquer modo, lembre-se: Conecte o módulo no pino 3V3.

GPIO do Raspberry
Estado do pino do GPIO do Raspberry

Dá pra implementar borda para INPUT, dá pra implementar interrupção e mais algumas coisinhas. Só fiz o básico pra, que sabe, servir de motivação para você fazer uma implementação melhor.

Shield expansor de GPIO para Raspberry

E claro, esse shield dá uma bela força pra não errar o wiring. Não precisa de imagem do pinout, nem contar pinos no Raspberry, é só olhar o silk em cima do shield.

Dê uma olhada, acho que você também vai gostar desse shield da UsinaInfo, nesse link.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.