Blink - Piscando LEDs com ASUS Tinker Board
Introdução
Após realizar o tutorial de instalação do sistema operacional Debian do tutorial Instalando o Sistema Operacional na Asus Tinker Board S, você está utilizando a placa como um computador pessoal e portátil para exercer funções do dia a dia. Porém, além de ser um computador, a Tinker Board possui GPIOs acessíveis, o que torna ela uma placa para prototipagem (assim como a BlackBoard).
Um dos testes mais simples para realizar com placas de prototipagem é o exemplo "Blink", que pode ser encontrado nos exemplos básicos da Arduino IDE. Porém realizar esse teste na Tinker Board pode não parecer tão simples, por se tratar de linguagem de programação Python, e utilizar comandos de Linux para navegar, iniciar e criar o arquivo de programa. Assim como a plataforma Arduino, códigos e projetos são abertos pela comunidade de usuários, portanto, o aprendizado é facilitado, deste modo, usuários iniciantes são ajudados pelos usuários mais experientes para a resolução de problemas. Por mais complicado que pareça, neste tutorial você vai aprender o básico para utilizar as portas GPIO de maneira simples e em poucos passos.
Lista de Materiais
Lista completa de produtos
comprarASUS Tinker Board S
Fonte Chaveada 5V 3A com Conector micro USB
Cabo HDMI x HDMI 2m
Protoboard 400 Pontos
WorkPlate 400 - Preta
LED 5mm Vermelho (10 unidades)
Resistor 300Ω - Pacote com 10 unidades
Jumper Premium 10cm Macho-Fêmea - 40 Unidades
Piscando um LED
Para abrir o terminal de comandos do sistema Debian recomendado no tutorial, basta expandir o menu iniciar, igual ao menu do Windows, selecionar a pasta de acessórios do sistema e abrir o programa "LXTerminal", como pode ser observado na imagem abaixo.
Com o terminal aberto é possível enviar uma série de comandos de Linux para que ele execute funções. Ao digitar "help" e pressionar a tecla "Enter", por exemplo, o painel irá exibir todos os comandos e um breve significado de cada comando. Porém para esse tutorial apenas precisaremos usar os comandos "nano", "sudo" e "python". Caso você queira mais detalhes sobre os comandos mais utilizados do Linux, é possível ler a descrição de cada um no site dummies.
Com o terminal aberto, digite o comando "nano" e em seguida o nome do programa com o final ".py", como pode ser observado na imagem exemplo abaixo.
O comando "nano" é utilizado para abrir um arquivo com o nome desejado na sequência. No exemplo acima, o arquivo teve o nome de "led.py". Ao pressionar "Enter", o terminal abrirá um editor de texto bem simples e semelhante ao bloco de notas do Windows, porém o editor nano é aberto no próprio terminal, diferentemente do bloco de notas, que é um aplicativo separado. Com o editor de texto aberto, escreva o código abaixo.
Assim como na Arduino IDE, o Python utiliza bibliotecas para iniciar comandos específicos no código. No programa acima, utilizamos o comando import ASUS.GPIO as GPIO
para importar a biblioteca de GPIOs da ASUS como pinos utilizáveis pelo programa. Assim como importamos a biblioteca time
para configurar o intervalo de tempo que o LED irá piscar, executando uma função parecida com a função delay()
disponível pela Arduino IDE. Entretanto a função delay utiliza milissegundos, já a função time.sleep()
do Python utiliza o intervalo de tempo em segundos.
O comando GPIO.setmode(led, GPIO.BOARD)
e o comando GPIO.setup(led, GPIO.OUT)
configuram o pino da variável led
, que neste exemplo é a porta GPIO 37, como uma saída física da placa ASUS. Eles realizam uma função parecida com o comando pinMode()
da Arduino IDE. Para o comando GPIO.setwarnings(False)
não existem comandos semelhantes na Arduino IDE, porém o comando desabilita o envio de mensagens de aviso através do terminal.
A linha que possui o comando while True:
executa a mesma função que o comando void loop()
, executando as funções das linhas abaixo em looping até que no terminal sejam pressionadas as teclas "Ctrl+C", para encerrar a execução do programa. Para o acionamento de ligar e desligar o LED são utilizadas linhas de comandos semelhantes a digitalWrite()
da Arduino IDE, os comandos GPIO.output()
, que enviam um sinal alto ou baixo para a porta desejada, assim como em placas da plataforma Arduino. Entretanto, ao invés de utilizar as palavras "HIGH" ou "LOW", para sinais altos e baixos respectivamente, utiliza-se os números "1" e "0", sendo "1" um sinal alto e "0" um sinal baixo.
Para sair do editor de texto, pressione o atalho "Ctrl+X", e então o sistema irá solicitar para salvar o arquivo. Pressione "Enter" e então pressione "Y" para confirmar o salvamento. Com o código do exemplo explicado e compreendido, é hora de montar o circuito utilizando a protoboard seguindo a imagem abaixo.
Após realizar a montagem do circuito, é necessário enviar o comando "sudo python nome" pelo terminal para executar o programa. Isso pode ser visto na imagem abaixo, lembrando que o nome do arquivo utilizado neste tutorial é "led.py".
"Sudo" é uma função utilizada pelo sistema operacional Linux para executar funções como administrador. Da mesma maneira que o Windows requer permissão do usuário para executar alguma função, o Linux também precisa, e a maneira de ceder essa permissão no terminal é utilizando "sudo". A palavra "python" do comando é utilizada para definir a maneira que o sistema lerá o arquivo. Neste caso, o sistema está lendo através da linguagem Python o arquivo criado com esse nome fornecido, "led.py".
Com o circuito montado e o comando enviado pela tecla "Enter" ao terminal, o resultado esperado é visto abaixo.
Para encerrar a execução do código é necessário, no terminal, pressionar as teclas "Ctrl + C". Isso interrompe a execução do programa a qualquer momento, porém isso não é uma interrupção natural caso não possua um comando no código para encerrar esse processo dessa maneira. Os comandos try
e finally
tratam interrupções previstas por meio do terminal para encerrar o programa de maneira natural e limpar as definições das portas GPIO com o comando GPIO.cleanup()
. Após encerrar a execução do programa é possível limpar os comandos enviados no terminal, enviando o comando "clear".
Piscando 5 LEDs em Sequência
A Tinker Board dispõe de 28 portas GPIO, mas por hora utilizamos apenas uma das portas disponíveis. Para o próximo passo utilizaremos mais 4 portas GPIO, continuaremos fazendo os LEDs piscar, só que desta vez eles piscarão em sequência e voltarão no sentido inverso.
Para realizar esse experimento, iniciamos da mesma maneira que o exercício anterior, utilizando o comando "nano" e dando um nome ao arquivo. É recomendado utilizar um nome de arquivo diferente ao anterior para não sobrescrever o antigo, como pode ser visto abaixo.
Com o editor aberto, escreva o código abaixo.
O que está diferente do código anterior é que a variável led
é um vetor led = [29, 31, 33, 35, 37]
, então por conta disso é necessário utilizar o comando for i in led
para configurar e acionar todas as portas contidas no vetor. Deste modo, além do GPIO 37, o programa irá executar a função GPIO.setup()
para configurar os LEDs nos pinos 29, 31, 33 e 35. O mesmo se aplica para o acionamento de ligar ou desligar as portas.
Entretanto, além do laço for
, existe outro comando diferente do código anterior, a função led.reverse()
, que faz com que o vetor seja invertido. Ou seja, como o looping é iniciado acionando o LED do pino 29 até o pino 37, ao inverter o vetor, o looping irá acionar o LED do pino 37 até o 29, e assim em diante.
Após escrever o código e salvá-lo, monte o circuito abaixo em uma protoboard.
Com o circuito montado, basta enviar o mesmo comando usado anteriormente para iniciar o programa, como pode ser visto abaixo.
O resultado esperado pode ser observado abaixo.
Como foi possível observar, os LEDs acionaram em uma sequência e retornaram acionando na sequência inversa. Com esses exercícios é possível observar o potencial que as portas GPIO possuem para tornar a ASUS Tinker Board uma placa de prototipagem com uma resposta muito grande em relação a atuações e leituras.