/
/
Como Conectar o Arduino com o Python

Como Conectar o Arduino com o Python

Sumário

Baixe agora a apostila Arduino Iniciante e comece seus projetos

Compartilhe seu conhecimento e receba em dinheiro ou produtos.

Introdução

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.

Comunicação Serial

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.

Como Instalar o Python

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. blog-eletrogate-instalando-python

PySerial

blog-eletrogate-py-serialEste 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

Principais Funcionalidades

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()

Exemplos Práticos

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

  • Código em Python
'''
 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
  • Código para o Arduino
/*
 * 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
  • Código em Python
'''
 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
  • Código para o Arduino
/*
 * 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
  }
}

Conclusão

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.

Sobre o Autor


Miguel Sena
@arduuno

Estudante e hobbista na parte de eletrônica e programação. Gosto de desenvolver projetos no Arduino e ESP-32 voltados á robótica e automação residencial, e de desenvolver projetos em Python, assim como a integração dele com o Arduino.

Aprenda neste post como conectar seu Arduino com o Python através do módulo PySerial e conheça os principais comandos desta biblioteca.

Precisa dos componentes para este projeto?

Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *