|
|
Linha 49: |
Linha 49: |
| Permite ao '''Raspberry Pi''' conectado a uma rede '''WiFi''' funcionar como '''''bridge''''' para um dispositivo conectado a sua porta '''Ethernet''' <ref>https://willhaley.com/blog/raspberry-pi-wifi-ethernet-bridge/</ref>. | | Permite ao '''Raspberry Pi''' conectado a uma rede '''WiFi''' funcionar como '''''bridge''''' para um dispositivo conectado a sua porta '''Ethernet''' <ref>https://willhaley.com/blog/raspberry-pi-wifi-ethernet-bridge/</ref>. |
|
| |
|
| ==Pinagem GPIO==
| | [[Raspberry Pi GPIO]] |
| *https://www.raspberrypi.org/documentation/usage/gpio/
| |
| [[Arquivo:rpi-gpio.png|500px]]
| |
| :Comando via terminal:
| |
| pi@raspberrypi:~ $ pinout
| |
| | |
| ===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
| |
| | |
| 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''' <ref>http://wiringpi.com/the-gpio-utility/</ref>.
| |
| | |
| 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 <ref name=GPIO/>: Usar '''editor de textos''' e salvar como '''blink.sh'''
| |
| | |
| <syntaxhighlight lang="bash">
| |
| #!/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
| |
| </syntaxhighlight>
| |
| | |
| 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.
| |
| [[Arquivo:ChaveDigital-pullup.png]] | |
| | |
| Configuração:
| |
| gpio -g mode 26 up
| |
| Leitura:
| |
| gpio -g read 26
| |
| | |
| ===Entradas 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 <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==
| |
| | |
| ===Biblioteca RPi.GPIO===
| |
| | |
| 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]]
| |
|
| |
|
| ==Raspberry Pico== | | ==Raspberry Pico== |