Python e Arduino: Ganhando produtividade em seus projetos de internet das coisas

O arduino é uma plataforma de prototipagem eletrônica que nos últimos anos vem ganhando muito espaço entre os entusiastas dos mais diversos segmentos. Simples e barato, desenvolver com arduino é um processo bastante prático e divertido, facilitando a inserção de qualquer leigo no mundo da programação e eletrônica. Seguindo essa idéia, por que não se utilizar do python, uma linguagem simples e tão divertida quanto o arduino, para controlar o mesmo? Sim, isso é possível.

Pyserial

O arduino não executa código python, assim como em outras linguagens, temos bibliotecas para facilitar a comunicação entre o código nátivo baseado em C/C++ e o código em python. Entre as inúmeras bibliotecas disponíveis atualmente para tal, eu escolhi a pyserial, uma biblioteca bastante simples e madura, que proporciona comunicação via porta serial.

Instalação

Em sistemas como o ubuntu apartir da versão 14.04, a pyserial já está vindo por padrão no sistema. A instalação resume-se à:

$ pip install pyserial

Conectando

Utilizaremos nessa demonstração um Arduino Uno. Para criar uma conexão com o arduino, precisaremos de uma porta, e uma velocidade, a velocidade padrão do uno é 9600, e a porta, é montada ao conectar o arduino no computador, a porta utilizada aqui será a /dev/ttyUSB0 no windows geralmente é a COM4, com isso pronto, criamos uma instância da classe Serial, no qual chamaremos de conexao, dessa forma:

>>> conexao = serial.Serial('/dev/ttyUSB0', 9600)

Se tudo deu certo, o comando abaixo retornará, True.

>>> conexao.isOpen()
True

O método isOpen, como o próprio nome diz, verifica se a conexão está aberta, caso retorne False, verifique se todas as variáveis envolvidas estão OK, já tive problemas com a permissão da porta, isso pode acontecer com você também.

Com a conexão funcionando, podemos escrever e ler informações no arduino, para isso, contamos com dois métodos a nossa disposição, o read, que ler informações das portas do arduino, e o write, que escreve informações nas portas do arduino.

Explore a documentação, à vários e vários métodos interessantes para serem usados.

Exemplo prático

Para colocar em prática, iremos construir um pequeno programa pisca-pisca para exemplificar melhor, começaremos montando o esquema no arduino que é bem simples, resumindo-se à:

A perna maior (anodo positivo) do LED entra na porta 13 e a perna menor (katodo negativo) do LED entra no GND ao lado. Com tudo pronto, gravaremos um pequeno programa no arduino, é com ele que o python irá interagir:

int led1 = 13; // Porta onde o led será inserido
void setup(){
Serial.begin(9600); // Velocidade padrão do Uno
pinMode(led1, OUTPUT); // Porta onde o led será inserido, configurado como saida
}
void loop(){
char leitura = Serial.read(); // Variavel que receberá os valores enviados pelo programa em python
  if(leitura == '1'){
digitalWrite(led1, HIGH); // Liga a porta 13 se o valor recebido for 1
}
else if(leitura == '2'){
digitalWrite(led1, LOW); // Desliga a porta 13 se o valor recebido for 2
}
}

Com o programa na memória, execute:

>>> conexao.write('1')

O LED deverá acender, e para apagá-lo execute:

>>> conexao.write('2')

O LED deverá apagar. Para automatizar o processo, utilizaremos do módulo time do python, transcreva o código abaixo em um arquivo e execute.

import serial
import time
conexao = serial.Serial('/dev/ttyUSB0', 9600) # Configuração da conexão
def pisca(tempo=1):
while True:
conexao.write('1') # Escreve 1 no arduino (LED acende)
time.sleep(tempo) # Aguarda n segundos
conexao.write('2') # Escreve 2 no arduino (LED apaga)
time.sleep(tempo) # Aguarda n segundos
if __name__ == '__main__': # Executa a função
pisca()

Conclusão

Como visto aqui, a pyserial se mostra uma maravilhosa biblioteca para se trabalhar com arduino, simples e eficaz, pode ser adotada nos mais variados projetos, provando com isso que python e arduino é um excelente casamento.

Like what you read? Give Hudson Brendon a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.