Skip to content

Desafio 01 ‐ Piscar um LED na BananaPi utilizando Python via SSH

Henrique Matheus Alves Pereira edited this page Feb 8, 2025 · 5 revisions

Descrição

Este desafio irá demonstrar como fazer um LED piscar, utilizando o microcomputador BananaPi e um script em Python, via SSH.

Artigo no Medium

Como piscar um LED utilizando BananaPi e Python via SSH


Arquivos utilizados nesse repositório:


Sumário

  1. Etapas do Desenvolvimento
  2. Requisitos
  3. Sobre a BananaPi — BPI-M2 Zero
  4. Identificação de Pinos Disponíveis — GPIO
  5. Ligação de Circuito Elétrico
  6. Código em Python — Blink.py
  7. Conexão via SSH

Etapas do Desenvolvimento

  1. Identificar o pino de GPIO disponível para uso na BananaPi
  2. Realizar a ligação do circuito elétrico
  3. Desenvolver o código
  4. Enviar o arquivo de código para a BananaPi
  5. Executar o arquivo de código

Requisitos

  • Configuração de conexão via SSH realizada na BananaPi
  • Versão do Python 3.10 instalado na BananaPi

Sobre a BananaPi — BPI-M2 Zero

A BananaPi M2 Zero é um computador de placa única ultracompacto que mede apenas 60 mm x 30 mm. Ela usa um processador quad-core Cortex A7 allwinner H2+, com 512 MB de memória RAM. É ideal para sistemas leves com alguns aplicativos com espaço limitado. Como outros dispositivos da BananaPi, ele suporta os sistemas operacionais Linux e Android. [1]

Principais características:

  • CPU Quad Core ARM Cortex A7 H2+
  • 512 MB de SDRAM.
  • WiFi (AP6212) e Bluetooth integrados.
  • Mini-HDMI.

A BananaPi que estou utilizando possui a distribuição Debian GNU/Linux.


Identificação de Pinos Disponíveis — GPIO

Os pinos disponíveis para entrada ou saída são identificados como “IO-xx”.

Conforme recorte da documentação técnica mostrada acima, serão utilizados o pino físico 29 (GPIO 7) e o pino físico 6 (GND 3).

Utilizei o GPIO 7 porque os pinos GPIO 0 a GPIO 6 estão reservados para a UART.

GPIO = General Purpose Input/Output


Ligação de Circuito Elétrico

O circuito elétrico mostrado acima, é composto dos seguintes itens:

  • Fio Jumper Vermelho Macho-Fêmea
  • Fio Jumper Marrom Macho-Fêmea
  • Resistor 330 Ohms
  • LED difuso 5mm Verde

Observação: A BananaPi foi inspirada no RaspberryPi Zero, por isso ambos tem formatos semelhantes. No software Fritzing, só existia o modelo do Raspberry.


Algoritmo

  1. Exportar o pino do GPIO 7
  2. Escrever a direção do pino
  3. Ler o valor do pino
  4. Ler a direção do pino
  5. Entra no loop de intervalo 1 a 10
  6. Escreve o valor 1 (nível lógico alto) no pino
  7. Aguarda 3 segundos
  8. Escreve o valor 0 (nível lógico baixo) no pino
  9. Aguarda 3 segundos
  10. Encerra o loop quanto chegar no décimo ciclo

Código em Python — Blink.py

import os
import time

os.system('echo "bananapi - start blink"')
os.system('sudo echo 7 > /sys/class/gpio/export')
os.system('sudo echo out > /sys/class/gpio/gpio7/direction')
os.system('sudo cat /sys/class/gpio/gpio7/value')
os.system('sudo cat /sys/class/gpio/gpio7/direction')

for index in range(10):
    os.system('sudo echo "bananapi - pisca 1"')
    os.system('sudo echo 1 > /sys/class/gpio/gpio7/value')
    time.sleep(3)
    os.system('sudo echo "bananapi - pisca 2"')
    os.system('sudo echo 0 > /sys/class/gpio/gpio7/value')
    time.sleep(3)

O código mostrado acima foi desenvolvido em Python para executar os comandos de Shell Script na BananaPi. Esses comandos vão gerenciar o pino de GPIO que alimenta o LED, conforme essas etapas:


Comandos Shell

Explicação dos comandos shell utilizados no código em python mostrado acima.

Escrita: $ sudo echo
  • Exportação do pino físico: 29 (GPIO 7)
$ sudo echo 7 > /sys/class/gpio/export
  • Definição de direção do pino: saída (out)
$ sudo echo out > /sys/class/gpio/gpio7/direction
  • Definição do valor de nível lógico: alto (1)
$ sudo echo 1 > /sys/class/gpio/gpio7/value
  • Definição do valor de nível lógico: baixo (0)
$ sudo echo 0 > /sys/class/gpio/gpio7/value

Consulta: $ sudo cat
  • Consultar a direção do pino:
$ sudo cat /sys/class/gpio/gpio7/direction
  • Consultar o valor do pino:
$ sudo cat /sys/class/gpio/gpio7/value

Observação: Considerei utilizar o comando sudo em todas as etapas para garantir que teria permissões de nível de administrador para gerenciar o pino do GPIO.


Conexão via SSH

Envio do arquivo Blink.py para a BananaPi Para enviar o arquivo com o código em Python, basta utilizar o comando abaixo:

$ scp /Users/henriqueotogami/bananapi/blink.py pi@bananapi-zero.local:

A senha será requerida e, após ser inserida, o arquivo será enviado.

Observação: o envio do arquivo deve ser feito antes do acesso a BananaPi via SSH.

Se o login já tiver sido feito, será necessário realizar o logout para enviar o arquivo e o login logo em seguida.


Acesso a BananaPi

Para realizar o acesso remotamente da BananaPi, envie o seguinte comando:

$ ssh pi@bananapi-zero.local

A senha de login da BananaPi será requerida e, após ser inserida, o login será iniciado.


Execução do código via terminal

Para que o arquivo com o script em Python seja executado, utilize o seguinte comando:

$ python3 blink.py

Referências

— 01 - BananaPi — Introdução

— 02 - BananaPi — Documentação

— 03 - BananaPi — Esquema Elétrico

— 04 - Gist — Blink.py — Script em Python

— 05 - Fritzing — Circuito Elétrico