Enviando dados ao Arduino Uno utilizando Putty e terminal Linux

Eletrônica Arduino Linux 16 de Novembro de 2019 às 22:11

No artigo "Desenvolvendo um software em C# para piscar um LED (Arduino Uno)", foi apresentado uma forma de comunicação de dados utilizando um software desenvolvido com a linguagem de programação C# e um Arduino Uno, porém é possível realizar esta função de várias formas, e algumas delas é com o terminal Putty para Windows e o terminal do GNU/Linux. Neste tutorial vamos apresentar os passos necessários para executar uma comunicação serial, onde enviamos dados ao Arduino Uno de uma forma simples utilizando dois sistemas operacionais diferentes.

Antes é necessário montar um pequeno circuito com LEDs no protoboard para visualizar o controle via comunicação serial, para isso anote a seguinte lista com os materiais necessários, depois siga o esquema desenvolvido no Fritzing.

  • Arduino Uno com cabo USB.
  • 1 Protoboard.
  • Fios jumpers.
  • 4 Resistores de 220R/ohms ou 10Kohms
  • 4 LEDs
Esquema Arduino Uno LED's para comunicação serial.

Abra a IDE oficial do Arduino, configure o modelo da placa e a porta COM, depois copie e cole o código fonte abaixo. O Sketch tem o objetivo de receber e interpretar dados vindos da serial, como por exemplo, se receber o valor 1 executa a função Led1(), e assim por diante. Compile e envie o código para o Arduino, e vamos partir para a etapa da comunicação serial via terminal. Para realizar um teste rápido você pode abrir o Monitor Serial da IDE e enviar os valores das opções conforme o código, se acender e pagar o LED correspondente a função, está funcionando perfeitamente.

/*
 * Controle de 4 LED's via Terminal PuTTY e Terminal GNU/Linux
 * 
 * Autor:  tecdicas
 * https://tecdicas.com/
 * 
 * 19/10/2018
 * 
 ****************************************************
 */

//********* Pinos digitais do Arduino *********
#define led1 8
#define led2 9
#define led3 10
#define led4 11

//********* Protótipos das funções *********
void Led1();
void Led2();
void Led3();
void Led4();
void ComSerial();

//********* Funções *********
void Led1()
{
  if(digitalRead(led1) == HIGH)
  {
    digitalWrite(led1, LOW);
  }
  else
  {
    digitalWrite(led1, HIGH);
  }
  Serial.print(" LED 1 ");
  Serial.println(digitalRead(led1));
}

void Led2()
{
  
  if(digitalRead(led2) == HIGH)
  {
    digitalWrite(led2, LOW);
  }
  else
  {
    digitalWrite(led2, HIGH);
  }
  Serial.print(" LED 2 ");
  Serial.println(digitalRead(led2));
}

void Led3()
{
  if(digitalRead(led3) == HIGH)
  {
    digitalWrite(led3, LOW);
  }
  else
  {
    digitalWrite(led3, HIGH);
  }
  Serial.print(" LED 3 ");
  Serial.println(digitalRead(led3));
}

void Led4()
{
  if(digitalRead(led4) == HIGH)
  {
    digitalWrite(led4, LOW);
  }
  else
  {
    digitalWrite(led4, HIGH);
  }
  Serial.print(" LED 4 ");
  Serial.println(digitalRead(led4));
}

void ComSerial()
{
  if(Serial.available())        // Se a comunicação Serial estiver disponível..
  {
    char op = Serial.read();    // Lê a op (Opção) da Serial
    Serial.print("Opção: ");    // Escreve "Opção" na serial
    Serial.println(op);         // Envia o valor da opção para a serial
    
    if (op == '1')              // Se a opção for igual a 1, chama a função do Led 1
    {
      Led1();
    }
    else if (op == '2')         // Senão, se opção for igual a 2, chama a função do Led 2
    {
      Led2();
    }
    else if (op == '3')        // Senão, se opção for igual a 3, chama a função do Led 3
    {
      Led3();
    }
    else if (op == '4')        // Senão, se opção for igual a 4, chama a função do Led 4
    {
      Led4();
    }
  }
}

//********* SETUP E LOOP *********
void setup()
{
  Serial.begin(9600);           // Velocidade de comunicação (Baudrate) padrão do monitor serial da IDE.
  
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
}

void loop()
{
  ComSerial();
}

Comunicação serial via terminal Putty com Windows

O Putty é um software cliente open-source destinado para comunicações SSH, telnet e Serial largamente utilizado para acessar servidores em nuvem. Para realizar a comunicação serial com Arduino que desejamos, siga as imagens abaixo demonstrando os passos necessários com legenda. Atenção, não esqueça de conectar o cabo USB no Arduino e PC antes de abrir a porta serial!

Configuração básica para comunicação serial utilizando Putty e Arduino:

  • Porta COM: Porta referente ao Arduino.
  • Baudrate: 9600
  • Data bits: 8
  • Stop bits: 1
  • Parity: None
  • Flow control: DSR/DTR

Se o valor do Baudrate em Serial.begin(9600) for modificado, altere também no Putty!

Comunicação serial via terminal GNU/Linux

Para realizar a nossa comunicação serial utilizando Arduino no sistema Linux, é necessário instalar o comando screen via terminal, para isso execute os seguintes comandos.

Para este tutorial foi utilizado o sistema operacional GNU/Linux Ubuntu 18.04 LTS amd64, ou seja, os comandos serão relacionados ao Debian. Para mais informações do comando screen e outras distribuições, acesse este tutorial.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install screen

Depois de instalar os pacotes do screen, escreva o comando para visualizar todas as portas seriais disponíveis.

Para Arduino Uno com o chip Atmega16U2

ls /dev/ttyACM*

Para módulo USB/Serial FTDI

ls /dev/ttyUSB*

Obtendo a referencia da porta aonde está o Arduino, utilizamos o comando screen para realizar a comunicação serial com a seguinte sintaxe abaixo. Depois clique Enter para executar o comando, e digite o número das opções para ligar e desligar os LEDs, exatamente como no Putty.

sudo screen /dev/ttyACM0 9600,cs8,-cstopb,-parenb,-ixon,ixoff,-istrip

Configuração básica para comunicação serial utilizando screen e Arduino:

  • Porta COM: /dev/ttyACM0 ou /dev/ttyUSB0.
  • Baudrate: 9600.
  • Data bits: cs8 (8 bits).
  • Stop bits: -cstopb. (1 bit)
  • Parity: -parenb (None)
  • Flow control: -ixon (Desativa sending data) e ixoff (Ativa receiving data).
  • Clear: -istrip (Preserva os 8 bits de cada byte recebido).
Arduino Uno com comunicação serial via terminal Putty e terminal GNU/Linux.

Para fechar definitivamente todas as sessões screen do sistema, digite os seguintes comandos abaixo. Depois de executar o comando para excluir a sessão, digite novamente o primeiro comando para listar, se aparecer a mensagem "No Sockets found in /run/screen/S-root." você pode iniciar outra sessão de screen sem bugs de comunicação.

sudo screen -ls
sudo screen -X -S [PID] quit