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 * * Autora: Ana Paula Messina - 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!
Passos para baixar o terminal Putty, e configurar a comunicação 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
Pesquisa por todas as portas seriais disponíveis, e executa o comando screen.
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. Para maiores detalhes veja a imagem abaixo.
sudo screen -ls sudo screen -X -S [PID] quit
Terminal Linux: Comandos para listar as sessões screen abertas e fechando-as a partir do PID.
Comente o que achou deste tutorial ou tire suas dúvidas!
Se inscreva no canal do YouTube para mais conteúdo de eletrônica digital e embarcados!