Controlando o Arduino com a ASUS Tinker Board
![](/upload/tutoriais/250_header_pt_H.png)
Introdução
Em diversas situações cotidianas de nossas vidas nós realizamos a conexão de dispositivos via cabo. Seja desde a leitura de arquivos contidos dentro de um HD externo por um computador, ou até mesmo a conexão de fibra ótica entre o centro de distribuição da provedora até a sua residência. Na maioria dos casos, essa conexão via cabo entre dispositivos é feita para a transmissão de dados através de diversos meios e por diversos métodos e protocolos.
Agora, você já pensou se é possível realizar a troca de dados entre uma BlackBoard UNO R3 e uma ASUS Tinker Board? A resposta é sim, e não é tão difícil quanto possa parecer. Nesse tutorial você vai aprender como realizar o exemplo Blink da Arduino IDE através de comandos enviados pela conexão UART da Tinker Board para a BlackBoard.
Lista de Materiais
![](/upload/tutoriais/250_header_pt_L.png)
Lista completa de produtos
comprar![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1398/images/1398_1_M.png?20220413163147)
Cabo USB AB 1.50m
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1126/images/1126_1_M.png?20210809105731)
ASUS Tinker Board S
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1338/images/1338_1_M.png?20241107090313)
BlackBoard UNO R3
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/522/images/522_1_M.png?20241202161128)
Conversor de Nível Lógico RC
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/701/images/701_1_M.png?20250110071200)
Cabo HDMI x HDMI 2m
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/739/images/739_1_M.png?20240816171340)
Fonte Chaveada 5V 3A com Conector micro USB
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1054/images/1054_1_M.png?20241209180004)
Protoboard 830 Pontos
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1075/images/1075_1_M.png?20241126191826)
WorkPlate 830 - Preta
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1259/images/1259_1_M.png?20241018115655)
Jumpers Macho-Macho x40 Unidades
![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1314/images/1314_1_M.png?20210726115532)
Jumper Premium 10cm Macho-Fêmea - 40 Unidades
Conceitos Teóricos
Transmissão de Dados
Existem diversos protocolos de transmissão de dados entre dispositivos, e cada um deles possui suas vantagens. Em placas da plataforma Arduino utilizamos a comunicação serial para transferir dados entre a placa e o computador. A comunicação serial transmite uma sequência de bits em uma determinada ordem e por um só cabo. Essa sequência de bits é enviada em uma ordem específica, pois, caso o contrário, a mensagem pode não ser reconhecida corretamente pelo receptor. Já a velocidade de transmissão, o baud rate, determina a velocidade em que os bits são enviados. A comunicação serial, embora mais lenta, é mais indicada para realizar trocas de dados de leituras entre dois microcontroladores, pois necessita de uma quantidade menor de fios, quando comparada com a comunicação paralela. A imagem abaixo é um exemplo de como são enviados bits em função da velocidade determinada pela comunicação.
![comunicacao serial](https://www.robocore.net/upload/tutoriais/250_img_1_M.png)
Fonte: Learn Sparkfun
Números Binários
A escala binária é uma escala numérica baseada em apenas dois números, "1" e "0". Embora ela utilize apenas dois números, ela é capaz de enviar, em um dado de 8 bits, uma informação entre 0 e 255. Isso se deve à sequência dos bits enviados, como pode ser observado no GIF abaixo.
![conversao binaria](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/250/512e37d8ce395ff214000000.gif)
Fonte: Learn Sparkfun
Como é possível observar no GIF acima, a sequência se inicia da direita para a esquerda, diferentemente de como costumamos ler, e contém apenas números pares, mais especificamente potências do valor "2". Portanto, o valor "2" é "2^1", já o valor "128" é "2^7", e o valor "1" é "2^0". A imagem abaixo demonstra essa conversão de escala binária para a escala decimal.
![escala binaria](https://www.robocore.net/upload/tutoriais/250_img_2_H.png)
Fonte: Learn Sparkfun
Com a combinação de valores em bits enviados, é função do conversor do dispositivo recebedor interpretar o que essa mensagem significa para executar algum comando.
Blink Pela Tinker Board
A intenção deste projeto é piscar o LED L da BlackBoard UNO, com intervalos de um segundo, por meio de comandos enviados através de comunicação UART pela porta UART1 (pinos 8 e 10) da Tinker Board.
Código Arduino IDE
Para este tutorial utilizaremos o exemplo "PhysicalPixel" da Arduino IDE. Ele está disponível em Arquivo > Exemplos > Comunicação > PhysicalPixel. Com o código aberto, carregue-o para a placa.
![physicalpixel](https://www.robocore.net/upload/tutoriais/250_img_3_M.png)
Com o código carregado, é possível observar que a placa não realiza nenhum comando, ou seja, o LED L não pisca como o exemplo "Blink". Isso se deve a fato que utilizaremos a comunicação serial para enviar comandos "H" e "L" para acender e apagar, respectivamente, o LED L da BlackBoard por meio de um código Python sendo executado pela Tinker Board.
Circuito
Para realizar o experimento, monte o circuito abaixo.
![circuito](https://www.robocore.net/upload/tutoriais/250_img_4_H.png)
Vale lembrar que não se deve alimentar a BlackBoard pela porta USB, pois isso poderá interferir na comunicação com a Tinker Board. Além disso, alimentar a placa por uma fonte externa pode causar um conflito com o circuito de 5 V da placa. Portanto alimente a BlackBoard UNO apenas como indicado pela imagem acima.
Código Python
Para esse tutorial, utilizaremos no código python da Tinker Board a biblioteca "python-serial". Antes de escrever o código, é necessário realizar a instalação da biblioteca através do comando sudo apt-get install python-serial
no terminal do Linux. Vale lembrar que, durante o processo de instalação, é necessário confirmar a instalação enviando o comando "y". Após concluir esse processo, abra o monitor de edição de texto nano com o comando sudo nano nome-do-arquivo.py
. Neste exemplo utilizamos o nome de arquivo "uartblink.py", porém você pode utilizar o nome de arquivo que preferir. Com o editor de textos aberto, escreva o código abaixo.
Para salvar o arquivo e sair do editor de texto, quando tiver finalizado de escrever o código acima, basta pressionar o comando "Ctrl + X", em seguida "y" e então "Enter". Isso irá salvar o código e sair da aba de edição do texto.
Entendendo o Código
A linha de código serial=serial.Serial('/dev/ttyS1',9600)
define a variável serial
dentro da classe serial.Serial
da biblioteca instalada anteriormente. /dev/ttyS1
é a porta utilizada para iniciar comunicação serial, neste caso, a porta "S1". Ela é o endereço para enviar dados através da comunicação "UART1" da Tinker Board, que usa os pinos 8 (UART1TX) e 10 (UART1RX). A taxa de comunicação é definida em sequência com o baud rate de 9600 bps (bits per second). O comando serial.open()
, juntamente com o comando serial.isOpen()
, iniciam e realizam uma verificação se a porta definida está preparada para estabelecer uma comunicação serial. Já o comando serial.close()
garante que, após finalizada a execução da rotina principal, a comunicação através desta porta seja finalizada.
Os comandos serial.write('H')
e serial.write('L')
utilizam a função write()
da biblioteca "pyserial" para enviar os caracteres "H" e "L", responsáveis por ligar e desligar, respectivamente, o LED L da BlackBoard.
Com o código devidamente salvo e entendido, utilize o comando sudo python nome-do-arquivo.py
para executar os comandos python escritos no código.
O Que Deve Acontecer
Ao executar o arquivo através do comando "python", as mensagens "LED LIGADO" e "LED DESLIGADO" são retornadas pelo comando print()
, como pode ser visto na imagem a seguir.
![mensagens](https://www.robocore.net/upload/tutoriais/250_img_5_H.png?929)
Além destas mensagens retornadas, é possível observar o LED L da BlackBoard UNO piscar com o intervalo de um segundo, como no GIF abaixo.
![resultado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/250/gif_uno_asus_2.gif)