ArduinoLinuxProgramaçãoRaspberry

Comunicação serial Arduino com Python

arduino com python

Esse é um post bem simples, mas acredito que necessário. Isso porque sempre fazemos comunicação com Arduino através de alguma IDE, normalmente para testar e depurar erros, mas e quando queremos fazer uma comunicação entre computador e Arduino através de programas? Bem, comunicando o Arduino com Python a coisa fica fácil, não importa o sistema operacional, basta passar a porta serial correta.

Arduino com Python

Primeiramente, não tenha preconceito com a linguagem por não ser C/C++. Utilizar Python para a comunicação serial é mais simples que fazer um blink no Arduino, de verdade. No Linux o Python é um interpretador nativo e você terá que instalar apenas o PySerial como adicional. Já no Windows, você terá que instalar Python, mas é simples. Depois, com 3 linhas você estará escrevendo dados na serial do Arduino. Vamos ver?

Instalar Python no Windows



Vamos começar pela instalação, já que a maioria das pessoas usa Windows. Vá ao Python.org e baixe a última versão. Tem instalador, não precisa de tutorial para dar um clique, certo?

Tendo instalado o Python, agora você precisará instalar o PySerial. Pegue-o aqui, também com instalador. Ou seja, até agora você precisa de 2 cliques para 2 programas, ok?

IDE para programar em Python no Windows

Eu recomendo a mesma que utilizo no Linux. Pegue o Pycharm nesse link. A versão free não lhe deixará nada a desejar. Instale-a pelos meios tradicionais (click,click,click), se necessário for, aponte o caminho do interpretador (o diretório no qual você instalou o Python) e já estará hábil a utilizá-lo. A partir de agora já podemos falar da comunicação do Arduino com Python.

PySerial no Linux

Nas distribuições que tenho utilizado o PySerial não vem instalado por padrão. No Debian normalmente utilizo apt ou pip para instalá-lo.

Utilizando o pip

Para instalar com o pip, basta executar o comando:

Se não tiver o pip instalado, execute o comando:

Utilizando apt

Com apt, basta executar o seguinte comando:

Vale lembrar que estou utilizando Debian e esse comando vale para suas variáveis também (Linux Mint, Ubuntu, Xubuntu etc).

Utilizando rpm, zypper ou yum

Se for uma distribuição baseada em Red-Hat, use o comando rpm para instalá-lo. Você pode baixar pacotes binários da internet ou utilizar o zypper (gerenciador de pacotes do Red-Hat ou Fedora, não sei ao certo a propriedade) ou o yum (esse foi criado pelo Linux SuSE).

Exemplificando com zypper:

Veja o que retorna e instale o pacote correto. E daí por diante, esse tutorial não é de Linux, então vamos lá; a partir desse ponto você já deve conseguir utilizar seu Arduino com Python na comunicação serial.

Programa de exemplo para Arduino

Peguei um Arduino UNO e coloquei o LED com catodo no pino 7 e anodo no 5V, com um resistor de 330ohms. O código para o Arduino ficou assim:

Nesse exemplo, utilizei um recurso importante; o serialEvent, que recebe eventos advindos da porta serial. Assim não é necessário ficar fazendo polling para ver se tem algo na porta serial e com isso o Arduino fica livre para executar outras tarefas enquanto não chega nada no barramento serial. É importante que você tenha esse recurso em mente porque estou finalizando um artigo bem bacana e será fundamental utilizar esse recurso.

Tudo o que o programa espera é um array de char com terminador de linha; “on\n” para ligar, “off\n” para desligar. Perceba que como GND vai ao pino digital, LOW liga e HIGH desliga o LED. De resto, nada especial, apenas uma flag a ser verificada no loop, de modo que quando o Arduino passar por lá, verificará esse status e atuará conforme a respectiva condicional.

Programa de exemplo para o Python

Se você não conhece Python ainda, olhe só que maravilha. Bastam essas linhas para a coisa acontecer:

Estupidamente simples, hum? Suba o sketch no Arduino e execute esse programa Python em seguida. O LED se acenderá. Para ler a resposta, simplesmente use:

Você pode guardar a resposta em uma variável para tratamento posterior em seu programa, seja para saber a resposta a um determinado comando ou simplesmente para consultar status de sensores do seu Arduino com Python.

Muitos artigos que escrevi sobre ESP8266 (e até sobre o ESP32) utilizei o firmware MicroPython, que dá ao programador a mesma facilidade que se tem em um desktop. Se lhe interessar, dê uma olhada nesse artigo,, ou vá até a caixa de pesquisa (a lupa no canto superior direito) e procure por “micropython” para ver outros artigos.

Se precisar de Arduino UNO, não tem pretesto para não pegá-lo na UsinaInfo.

Pra finalizar o artigo, você tem o mesmo recurso para Raspberry, Orange Pi, Banana Pi, VoCore, Onion Omega, Carambola e qualquer outra board que rode distribuições Linux completas e com gerenciador de pacotes, portanto, divirta-se!

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!