Controlando o Arduino com a ASUS Tinker Board

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

Lista completa de produtos
comprar
Cabo USB AB 1.50m

ASUS Tinker Board S

BlackBoard UNO R3

Conversor de Nível Lógico RC

Cabo HDMI x HDMI 2m

Fonte Chaveada 5V 3A com Conector micro USB

Protoboard 830 Pontos

WorkPlate 830 - Preta

Jumpers Macho-Macho x40 Unidades

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.

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.

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.

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.

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.

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.

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.
