Raspberry Pi: Portas GPIO: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
(Criou página com '=Raspberry Pi GPIO= ==Pinagem GPIO== *https://www.raspberrypi.org/documentation/usage/gpio/ 500px :Comando via terminal: pi@raspberrypi:~ $ pinout...')
 
Sem resumo de edição
 
(9 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
=Raspberry Pi GPIO=
=Raspberry Pi: GPIO=


[[Raspberry Pi: Programacao GPIO com Python|Raspberry Pi: Programação GPIO com Python]]
==Pinagem GPIO==
==Pinagem GPIO==
*https://www.raspberrypi.org/documentation/usage/gpio/
*https://www.raspberrypi.org/documentation/usage/gpio/
Linha 9: Linha 10:
===Acesso aos drives GPIO pelo terminal===
===Acesso aos drives GPIO pelo terminal===


;Exemplo de acionamento de led <ref name=GPIO>https://www.electrofun.pt/blog/curso-raspberry-pi-12-nocoes-basicas-sobre-gpio-scripts/</ref>:  Pino físico 21
;Exemplo de acionamento de led <ref name=GPIO>https://www.electrofun.pt/blog/curso-raspberry-pi-12-nocoes-basicas-sobre-gpio-scripts/</ref>:  Pino GPIO 21


Acesso aos drives de controle dos pinos GPIO e verificar se o pino está ativo
Acesso aos drives de controle dos pinos GPIO e verificar se o pino está ativo
Linha 96: Linha 97:
  gpio -g read 26
  gpio -g read 26


===Entradas analógicas===
===Módulos externos para entradas e saídas analógicas===


O Raspberry Pi não  possui pinos para '''entradas analógicas''', para tal é necessário especificar um módulo externo e o parâmetro -x.  
O Raspberry Pi não  possui pinos para '''entradas analógicas''', para tal é necessário especificar um módulo externo e o parâmetro -x.  
Linha 105: Linha 106:
Exemplos conexão de módulos externos ADC <ref>https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=123962</ref> e DAC <ref>https://www.raspberrypi.org/forums/viewtopic.php?t=124184</ref> ao Raspberry Pi.
Exemplos conexão de módulos externos ADC <ref>https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=123962</ref> e DAC <ref>https://www.raspberrypi.org/forums/viewtopic.php?t=124184</ref> ao Raspberry Pi.


==Programação Python para controle GPIO==
==Laboratórios com Hardware do Raspberry Pi==
 
*[[Raspberry Pi: Programacao GPIO com Python|'''Raspberry Pi: Programação GPIO com Python''']]
===Biblioteca RPi.GPIO===
*[[Raspberry Pi: Laboratorios Node-RED|'''Raspberry Pi: Laboratórios Node-RED''']]
 
A biblioteca '''RPi.GPIO''' <ref>https://pypi.org/project/RPi.GPIO/</ref> é um módulo de controle para as portas GPIO do Raspberry Pi. Entretanto, está biblioteca não é apropriada para aplicações tempo real ou com restrições temporais, pois roda sobre o ''kernel'' Linux, o qual não apropriado para aplicações tempo real. A versão atual desta biblioteca não suporta SPI, I2C, hardware PWM ou interface serial.
 
;Procedimentos para uso:
:Verificar se a biblioteca '''rpi.gpio''' está instalada:
apt list --installed | grep rpi.gpio
:Importar biblioteca no '''interpretador''' ou '''código Python''':
<syntaxhighlight lang="python">
import RPi.GPIO as GPIO # Importa o módulo RPi.GPIO e usa localmente o nome GPIO para referenciá-lo.
</syntaxhighlight>
 
;Programa para piscar led:
 
Código Python <ref>https://www.electrofun.pt/blog/curso-raspberry-pi-14-python-basico-gpio/</ref>:
 
<syntaxhighlight lang="python">
import RPi.GPIO as GPIO
from time import *
GPIO.setmode(GPIO.BCM)    # Numeração nomes GPIO
#GPIO.setmode(GPIO.BOARD) # Numeração pinagem da placa
GPIO.setup(17, GPIO.OUT)
while True:
    GPIO.output(17, GPIO.HIGH)
    print("Led ON")
    sleep(1)
    GPIO.output(17, GPIO.LOW)
    print("Led OFF")
    sleep(1)
</syntaxhighlight>
 
;Programa para ler chave ''pull-up'' e acionar led: Chave conectada ao pino 18 (entrada ''pull-up'') e led ao pino 17 (saída).
 
<syntaxhighlight lang="python">
import RPi.GPIO as GPIO 
from time import sleep
   
GPIO.setmode(GPIO.BCM)   
GPIO.setup(18,  GPIO.IN, pull_up_down=GPIO.PUD_UP)   
GPIO.setup(17, GPIO.OUT)
   
while True:             
    if GPIO.input(18): 
        print("Led ON") 
        GPIO.output(17, 1)         
    else: 
        print("Led OFF")
        GPIO.output(17, 0)   
    sleep(0.1)
</syntaxhighlight>
 
==Biblioteca Gpio Zero==
 
A biblioteca '''Gpio Zero''' <ref>https://gpiozero.readthedocs.io/en/stable/</ref> é uma interface GPIO para uso com o Raspberry Pi. Esta biblioteca é instalada por ''default'' no Raspberry Pi.
 
Exemplos<ref>https://www.raspberrypi.org/documentation/usage/gpio/python/README.md</ref>:
 
;Programa para piscar led:
<syntaxhighlight lang="python">
from gpiozero import LED
from time import sleep
 
led = LED(17)
while True:
    led.on()
    sleep(0.5)
    led.off()
    sleep(0.5)
</syntaxhighlight>
 
;Programa para ler chave:
<syntaxhighlight lang="python">
from gpiozero import Button
from time import sleep
 
button = Button(2)
while True:
    if button.is_pressed:
        print("Pressed")
    else:
        print("Released")
    sleep(1)
</syntaxhighlight>
 
===Biblioteca CircuitPython===
 
A biblioteca '''CircuitPython''',  da '''Adafruit''', é uma versão amigável e ''open source'' do Python, especialmente desenvolvida para microcontroladores e pequenos dispositivos <ref>https://circuitpython.readthedocs.io/en/5.3.x/README.html</ref>.
 
O  '''CircuitPython''' adiciona a parte de circuitos ao Python, permitindo que o Python converse com sensores, motores, Leds e outros dispositivos.
 
Esta biblioteca suporta '''I2C''' e '''SPI''', os quais precisam ser habilitados.
 
Confira os procedimentos para instalação do  '''CircuitPython''' e exemplos em <ref>https://www.digikey.com/en/maker/projects/circuitpython-on-linux-and-raspberry-pi/2aac644c44f1418e987417b229a67c23?utm_adgroup=Adafruit&utm_source=google&utm_medium=cpc&utm_campaign=Dynamic%20Search_EN_Suppliers&utm_term=&utm_content=Adafruit&gclid=Cj0KCQjwg8n5BRCdARIsALxKb972kt1RhdKJR7h8JvQnJQtVGCfBbIZ0vAjN_GvyKyLOkDGq11ctO4kaAtNaEALw_wcB</ref>.
 
;Piscar led: Led conectado a saída GPIO 17.
<syntaxhighlight lang="python">
import time
import board
import digitalio
 
print("hello blinky!")
 
led = digitalio.DigitalInOut(board.D17)
led.direction = digitalio.Direction.OUTPUT
 
while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(0.5)
</syntaxhighlight>
 
;Chave digital: Chave na entrada GPIO 18 e led na saída GPIO 17.
<syntaxhighlight lang="python">
import time
import board
import digitalio
 
print("press the button!")
 
led = digitalio.DigitalInOut(board.D17)
led.direction = digitalio.Direction.OUTPUT
 
button = digitalio.DigitalInOut(board.D18)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP
 
while True:
    led.value = not button.value # light when button is pressed!
</syntaxhighlight>
 
==Interação entre Raspberry Pi e Node-RED==
 
Ver link: [[Node-RED]]


==Referências==
==Referências==

Edição atual tal como às 11h42min de 18 de fevereiro de 2022

Raspberry Pi: GPIO

Raspberry Pi: Programação GPIO com Python

Pinagem GPIO

Comando via terminal:
pi@raspberrypi:~ $ pinout

Acesso aos drives GPIO pelo terminal

Exemplo de acionamento de led [1]
Pino GPIO 21

Acesso aos drives de controle dos pinos GPIO e verificar se o pino está ativo

cd  /sys/class/gpio/
ls

Se não estiver ativo, ativar com o comando

echo 21 > /sys/class/gpio/export

Configurar o pino como saída (default entrada)

echo out > /sys/class/gpio/gpio21/direction

Acionar led com 0 (LOW) ou 1 (HIGH):

echo 1 > /sys/class/gpio/gpio21/value
echo 0 > /sys/class/gpio/gpio21/value

Desativar acesso ao pino:

echo 21 > /sys/class/gpio/unexport

Programa GPIO

O biblioteca WiringPi fornece comandos para acesso direto aos pinos GPIO do Raspberry Pi [2].

Para verificar a versão instalada:

gpio -v

Para atualizar a versão:

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

Ajuda para comandos:

man gpio

Verificação do estado atual dos pinos gpio:

gpio readall

Saídas digitais

Acionamento de led
Pino GPIO 17 (físico 11)
gpio -g mode 17 out
gpio -g write 17 1
gpio -g write 17 0
O parâmetro -g indica numeração dos pinos BCM_GPIO (na caso de -i indica numeração física dos pinos).
Piscar led
gpio -g blink 17
Script para piscar led [1]
Usar editor de textos e salvar como blink.sh
#!/bin/sh
gpio -g mode 17 out
while true
do
   gpio -g write 17 1
   sleep 1
   gpio -g write 17 0
   sleep 1
done

Dar permissão de execução:

chmod +x blink.sh

Saídas PWM

Uma saída PWM gera uma onda quadrada, com frequência constante, em que a fração de tempo em que o sinal é HIGH (3,3 V) pode variar entre 0 e 100% (duty cycle), fornecendo uma média de tensão variável na saída. O controle do duty cycle no Raspberry Pi usa 10 bits e pode ser variado de 0 a 1024.

No Raspberry Pi os pinos GPIO12, GPIO13, GPIO18 e GPIO19 aceitam saída PWM.

Controle da luminosidade de um led
Pino GPIO 18
gpio -g mode 18 pwm

Luminosidade máxima:

gpio -g pwm 18 1024

Luminosidade média:

gpio -g pwm 18 512

Luminosidade mínima:

gpio -g pwm 18 0

Entradas digitais

Um pino GPIO configurado como entrada digital pode ler valores HIGH (3V3) ou LOW (0V).

Também podem ser utilizados os resistores internos pull-up ou pull-down. Os pinos GPIO2 e GPIO3 tem resistores pull-up fixos, os demais podem ser configurados por software.

Exemplo chave eletrônica e uso de resistor pull-up interno
pino 26: Com a chave aberta o pino recebe HIGH através do resistor pull-up. Com a chave fechada o pino recebe LOW.

Configuração:

gpio -g mode 26 up

Leitura:

gpio -g read 26

Módulos externos para entradas e saídas analógicas

O Raspberry Pi não possui pinos para entradas analógicas, para tal é necessário especificar um módulo externo e o parâmetro -x.

Exemplos:

gpio -x mcp3002:200:0 aread 200       # Módulo ADC mcp3002
gpio -x mcp4802:200:0 awrite 200 128  # Módulo DAC mcp4802

Exemplos conexão de módulos externos ADC [3] e DAC [4] ao Raspberry Pi.

Laboratórios com Hardware do Raspberry Pi

Referências


Evandro.cantu (discussão) 14h44min de 11 de fevereiro de 2022 (-03)