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