Neste post você irá aprender como conectar seu Arduino a um Script em Python via serial, através do módulo para Python, PySerial, além de conhecer seus principais comandos e funcionalidades. Ao final, criaremos dois pequenos projetos, um para ligar um led pelo terminal do Python, e outro saber se um botão foi pressionado ou não.
Esta biblioteca será utilizada para o envio e recebimento dos dados via cabo USB, como se estivéssemos utilizando o próprio Monitor Serial do Arduino, mas devemos tomar alguns cuidados.
O tipo de comunicação que iremos utilizar é a comunicação serial. Este tipo de comunicação é baseado no envio de bits, um após o outro, e um exemplo dessa comunicação é o Código Morse, onde cada “caractere” é enviado, e só após isso o outro sinal é enviado. Este tipo de comunicação difere da comunicação paralela, a qual os bits são enviados juntos, ou seja, todos ao mesmo tempo.
A comunicação serial é também o principal tipo de comunicação utilizado nas redes de computadores. No Arduino, ela é utilizada principalmente para o upload dos sketches para a placa e na utilização do Monitor Serial.
Para instalar o Python, é necessário entrar no site oficial, python.org, e ir para a aba de downloads. Ao escolher a sua plataforma e instalar o instalador, pode executá-lo e começar o processo de instalação do próprio Python. Esta instalação é simples e do tipo “next, next”, entretanto, na última etapa, antes de clicar em “Install Now”, é importantíssimo que a opção “Add Python to PATH”, isso permitirá a execução de certas bibliotecas sem problemas.
Este módulo do Python permitirá que você se comunique com dispositivos através de uma comunicação serial, não só o Arduino. Ele irá enviar e receber dados através de uma entrada USB do computador, que deverá ser especificada no script. Também será necessário definir o baud-rate da comunicação, no nosso caso, 9600.
Esta biblioteca está disponível para Windows, MacOs e Linux, e pode ser instalada via Prompt de Comando, ao executar o seguinte comando. (Lembre-se que o Python já deve ter sido instalado para que seja possível a execução do “pip”)
pip install pyserial
Todas as funções a serem explicadas a seguir serão utilizadas após a criação do objeto responsável pela comunicação, algo que será feito no nosso exemplo para demonstrar as funcionalidades mais à frente.
Envio de dados
Para o envio dos dados utilizaremos o comando ”write”, porém, não podemos apenas enviar os dados puros, e sim, um “encode()” dessa informação. Utilize como base o exemplo abaixo.
serial.write(dado.encode())
Leitura dos dados
Para ler os dados, iremos utilizar o comando “readline()” que irá nos retornar todo o texto que for recebido, entretanto, ele também irá retornar coisas como o “\n” que vem junto a string. Por isso, para “limpar” essa string, temos que utilizar o fatiamento de strings do Python, logo, a função também será transformada para este formato. Para imprimir estes dados lidos, siga o comando abaixo.
texto = str(serial.readline()) print(texto[2:-5])
Limpeza da comunicação
Sempre que alguma funcionalidade for utilizada, é de extrema importância que limpemos a nossa comunicação, evitando interferências e um mau funcionamento do projeto. Por isso, utilizaremos o comando “flush()”, como mostra o exemplo abaixo.
serial.flush()
Estes serão os materiais a serem utilizados.
Para exemplificar as funções vistas anteriormente, criaremos dois simples sistemas, ambos utilizando o mesmo esquemático abaixo. O primeiro irá demonstrar o processo de escrita, em que através do terminal do Python poderemos ligar ou desligar o led. No segundo, para demonstrar o processo de leitura, utilizaremos o botão, e sempre que este for pressionado, uma mensagem será impressa no terminal do Python.
Note, também, que os códigos são bem simples, como se estivéssemos utilizando apenas o Monitor Serial do Arduino.
Esquemático dos projetos
Processo de envio dos dados
''' Blog Eletrogate - Como conectar o Arduino com Python Miguel Sena blog.eletrogate.com ''' import serial #Importa a biblioteca while True: #Loop para a conexão com o Arduino try: #Tenta se conectar, se conseguir, o loop se encerra arduino = serial.Serial('COM4', 9600) print('Arduino conectado') break except: pass while True: #Loop principal cmd = input('Digite "l" para ligar e "d" para desligar. ') #Pergunta ao usuário se ele deseja ligar ou desligar o led if cmd == 'l': #Se a resposta for "l", ele envia este comando ao Arduino arduino.write('l'.encode()) elif cmd == 'd': #Senão, envia o "d" arduino.write('d'.encode()) arduino.flush() #Limpa a comunicação
/* * Blog Eletrogate - Como conectar o Arduino com Python * Miguel Sena * blog.eletrogate.com */ char cmd; //Define a variável dos comandos seriais void setup() { Serial.begin(9600); //Inicia o Monitor Serial pinMode(3, OUTPUT); //Define o pino como saída digitalWrite(3, LOW); } void loop() { cmd = Serial.read(); //Realiza a leitura do serial if (cmd == 'l') { //Se o comando for "l", liga o led digitalWrite(3, HIGH); } else if (cmd == 'd') { //Se o comando for "d", desliga o led digitalWrite(3, LOW); } }
Processo de leitura dos dados
''' Blog Eletrogate - Como conectar o Arduino com Python Miguel Sena blog.eletrogate.com ''' import serial #Importa a biblioteca while True: #Loop para a conexão com o Arduino try: #Tenta se conectar, se conseguir, o loop se encerra arduino = serial.Serial('COM4', 9600) print('Arduino conectado') break except: pass while True: #Loop principal msg = str(arduino.readline()) #Lê os dados em formato de string msg = msg[2:-5] #Fatia a string print(msg) #Imprime a mensagem arduino.flush() #Limpa a comunicação
/* * Blog Eletrogate - Como conectar o Arduino com Python * Miguel Sena * blog.eletrogate.com */ void setup() { Serial.begin(9600); //Inicia o Monitor Serial pinMode(3, INPUT_PULLUP); //Define o pino como entrada } void loop() { int estado = digitalRead(3); //Defina uma variável que realizará a leitura do botão if (estado == LOW) { //Verifica se o botão for pressionado Serial.println("Botao pressionado"); //Imprime a mensagem no monitor serial delay(1000); //Delay de 1 segundo } }
Processo de envio dos dados
Processo de leitura dos dados
Após isso tudo, você agora poderá integrar outras funções em seus projetos com a ajuda do Python e do PySerial. Se quiser ver outra aplicação prática do que foi feito hoje, sugiro que leia este post.
Se tiver alguma dúvida, deixe nos comentários!
Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!