Manual
do
Maker
.
com
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.
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?
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?
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.
Nas distribuições que tenho utilizado o PySerial não vem instalado por padrão. No Debian normalmente utilizo aptou pip para instalá-lo.
Para instalar com o pip, basta executar o comando:
sudo pip install pyserial
Se não tiver o pip instalado, execute o comando:
sudo apt-get install python-pip
Com apt, basta executar o seguinte comando:
sudo apt-get install python-serial
Vale lembrar que estou utilizando Debian e esse comando vale para suas variáveis também (Linux Mint, Ubuntu, Xubuntu etc).
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:
zypper search -s serial
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.
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:
String line = "";
bool stringComplete = false;
void setup() {
Serial.begin(9600);
pinMode(7,OUTPUT);
digitalWrite(7,HIGH);
}
void loop() {
if (stringComplete){
if (line.equals("on\n")){
digitalWrite(7,LOW);
}
else if (line.equals("off\n")){
digitalWrite(7,HIGH);
}
stringComplete = false;
line = "";
}
}
void serialEvent(){
while(Serial.available()){
char inChar = (char)Serial.read();
line += inChar;
if (inChar == '\n'){
stringComplete = true;
Serial.print(line);
}
}
}
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.
Se você não conhece Python ainda, olhe só que maravilha. Bastam essas linhas para a coisa acontecer:
import serial
#use ttyUSB0 se for o caso, ou se for Windows, COMx.
arduino = serial.Serial('/dev/ttyACM0',9600,timeout=2)
arduino.write("on\n")
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:
arduino.read_until('\n')
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 canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.