Você está na página 1de 25

Sistemas Embarcados

Comunicação Serial
Prof. Richard Junior Manuel Godinez Tello
Comunicação Serial
DB9 Comunicação UART

Tx Rx

GPS Rx Tx uC
GND GND

2
Diferença entre a Comunicação Paralela vs Serial
Transmissão serial
Lado do Lado do
transmissor 1 0 1 1 1 0 1 0 receptor

Transmissão em paralelo
1
0
1
Lado do 1 Lado do
transmissor 1 receptor
0
1
0
3
UART e Comunicação Serial UART
Na maioria dos circuitos de comunicação serial utiliza-se um transmissor/receptor RX TX
(transceptor) Assíncrono Universal conhecido como UART (Universal Asynchronous
Receiver/Transmitter). A UART é uma interface genérica de comunicação serial e que RS-232
pode suportar protocolos específicos diferentes. É responsável pelo envio e recepção
de uma sequencia de bits através de duas linhas, uma de TX (transmissão) e uma de RX
(recepção).

Padrões ou protocolos de comunicação serial baseados em UART:


RS-232
RS-422 Conector DB-9
RS-485 RS-232

RS-232: Fisicamente é um circuito. É um padrão que especifica os sinais entre dois TX RX


dispositivos, definindo os nomes dos sinais, sua finalidade, níveis de tensão, conectores
e pinagens. A RS-232 é uma interface serial assíncrona de baixa velocidade e atualmente UART
vem sendo substituída pela interface USB nos computadores, está última, mais rápida e
com conector mais simples. Taxas de transmissão comuns da RS-232: 300, 1200, 2400, Comunicação
9600, 19200 bps. A interface RS-232 normalmente utiliza o conector DB-9 para Serial via
interconexão de dispositivos. UART-RS232 4
Comunicação Serial no Arduino

Pinos para comunicação serial 5


Comunicação Serial no Arduino

Comunicação entre dispositivos (tipo UART)


6
Terminal Serial (Monitor Serial)
A IDE do Arduino possui um terminal serial que auxilia no recebimento e
envio de dados para a placa sem a necessidade de recorrer a uma
ferramenta externa. Para acessar a esta ferramenta basta clicar no ícone
Serial Monitor ou acessar o menu Ferramentas > Serial Monitor. Desta forma,
a seguinte janela é mostrada. Nela podemos configurar parâmetros de
comunicação serial.

Terminal para comunicação serial do Arduino 7


Plotter Serial (Monitor Serial Gráfico)
A IDE do Arduino também possui uma funcionalidade gráfica para
plotar/desenhar gráficos a partir dos dados recebidos pela serial. Para
acessar a esta funcionalidade basta ir no menu Ferramentas > Plotter Serial.

Plotter serial do Arduino


8
Funções seriais usadas no Arduino

 Serial.begin(): configura a taxa de transferência da porta serial.


 Serial.available(): verifica se a porta serial recebeu os dados.
 Serial.read(): permite receber os dados da porta serial.
 Serial.print(): permite enviar cadeias de caracteres (string) ASCII.
 Serial.println(): idêntico ao anterior, porém com quebra de linha.
 Serial.write(): envia dados binários (byte ou série de bytes).
 Serial.flush(): aguarda a conclusão da transmissão dos dados.
9
Funções seriais usadas no Arduino
Serial.begin()

É a primeira função a ser utilizada quando vai trabalhar com a comunicação serial. Ela configura
a taxa de comunicação em bits por segundo (baud rate). Possui um segundo parâmetro opcional
para a definição da quantidade de bits, paridade e stop bits. Se for omitido esse parâmetro o
padrão será 8 bits, sem paridade e 1 stop bit.

Sintaxe:

Serial.begin(speed)
Serial.begin(speed, config)

Parâmetros:

speed: velocidade em bit por segundo (baud rate) - long


config: configura a quantidade de bits, paridade e stop bits.
10
Funções seriais usadas no Arduino
Serial.available()

Retorna a quantidades de bytes disponíveis para leitura no buffer de leitura. Essa função auxilia
em loops onde a leitura dos dados só e realizada quando há dados disponível. A quantidade
máxima de bytes no buffer é 64.

Sintaxe:

Serial.available();

Parâmetros:

Não passa nenhum parâmetro.

Retorno:

(int) - quantidade de bytes disponíveis para leitura 11


Funções seriais usadas no Arduino
Serial.read()

Lê o byte mais recente apontado no buffer de entrada da serial.

Sintaxe:

Serial.read();

Parâmetros:

Não passa nenhum parâmetro.

Retorno:

(int) - O primeiro byte disponível no buffer da serial. Retorna -1 caso n tenha dado
disponível. 12
Funções seriais usadas no Arduino
Serial.print()

Escreve na serial texto em formato ASCII. Essa função tem muitas possibilidades.
Números inteiros são escritos usando um caractere ASCII para cada dígito. O mesmo
ocorre para números flutuante e, por padrão, são escrito duas casas decimais. Bytes são
enviados como caracteres únicos e strings e caracteres são enviados como escritos.

Vejamos alguns exemplos:

Serial.print ( 123 ); // Envia "123"


Serial.print ( 1.234567 ); // Envia "1.23"
Serial.print ( 'N' ); // Envia "N".
Serial.print ( "Hello world" ); // Envia "Hello world".

Obs.: caracteres são enviados com aspas simples e strings com aspas duplas.
13
Funções seriais usadas no Arduino
Um segundo parâmetro opcional define a base numérica para formatar o valor enviado. São aceitos os
seguintes parâmetros:

BIN - binário, base 2


OCT - octal, base 8
HEX - hexadecimal, base 16
DEC - decimal, base 10

Para números em ponto flutuante esse parâmetro define a quantidade de casas decimais a serem
enviadas após o ponto. Exemplos:

Serial.print(78, BIN) envia em binário "1001110"


Serial.print(78, OCT) envia em octal "116"
Serial.print(78, DEC) envia em decimal "78"
Serial.print(78, HEX) envia em hexadecimal "4E"
Serial.println(1.23456, 0) envia apenas "1", sem casas decimais
Serial.println(1.23456, 2)envia "1.23", ou seja, duas casas decimais
Serial.println(1.23456, 4) envia "1.2346", ou seja, 4 casas decimais 14
Funções seriais usadas no Arduino
Sintaxe:

Serial.print(val)

Serial.print(val, format)

Parâmetros:

val: valor para ser escrito na serial - qualquer tipo de dado.

format: base numérica para tipos inteiros ou a quantidade de casas decimais para
números flutuantes.

Retorno:

size_t (long): retorna a quantidade de bytes escritos 15


Funções seriais usadas no Arduino
Serial.println()

Funciona praticamente igual a função Serial.print(), a única diferença é que esta função
acrescenta ao fim da mensagem o caractere de retorno de carro (ASCII 13 ou ‘\r’) e o
caractere de nova linha(ASCII 10 ou ‘\n’). A sintaxe, os parâmetros e o retorno são os
mesmos da função Serial.print().

Serial.write()

Escreve um byte na porta serial.

Sintaxe:

Serial.write(val)
Serial.write(str)
Serial.write(buf, len) 16
Funções seriais usadas no Arduino
Parâmetros:

val: um valor para ser enviado como um único byte.

str: uma string para ser enviada como uma sequência de bytes.

buf: um array para ser enviado como uma serie de bytes.

len: o tamanho do buffer a ser enviado.

Retorno:

(byte) - Retorna a quantidade de bytes escritos na serial. A leitura desse numero é


opcional.
17
Funções seriais usadas no Arduino

Qual é a diferença entre Serial.write e Serial.print? E quando eles são


usados?

• Serial.write ()

Grava dados binários na porta serial. Esses dados são enviados como um byte
ou série de bytes; para enviar os caracteres que representam os dígitos de um
número, use a função print ().

• Serial.print ()

Imprime dados na porta serial como texto ASCII legível por humanos.
18
Funções seriais usadas no Arduino
Serial.flush()

Descrição
De forma resumida, aguarda a conclusão da transmissão dos dados seriais. Quando
transmitimos dados pela serial, os dados são colocados em um buffer e o programa passa para
a próxima instrução. Os dados são transmitidos lentamente ao buffer pois serial é tento. Se
você não quiser que o programa avance até que a transmissão seja concluída, você pode usar a
função Serial.flush() para garantir que todos os dados sejam transmitidos e o buffer fique vazio.
Com esta função, o programa não avançará até que a transmissão serial seja concluída.

Sintaxe: Serial.flush () Exemplo: void setup(){


Serial.begin(9600);
Parâmetros: Nenhum }
void loop(){
Serial.print(“Ola mundo");
Serial.flush();
} 19
Projeto 1: Leitura de dados analógicos
Materiais:

• 1 potenciômetro
• 1 Arduino
• Jumpers

Exemplo de conexões 20
Projeto 1: Leitura de dados analógicos
Diagrama esquemático:

Materiais:

• 1 potenciômetro
• 1 Arduino
• Jumpers

5V

Potenciômetro A0
1KΩ

GND 21
Projeto 1: Leitura de dados analógicos
O código:
int sensor = A0;

void setup() {
pinMode(sensor, INPUT);
Serial.begin(9600);
}

void loop() {
float tensao = analogRead(sensor)*5.0/1023.0;
Serial.print("Tensao do pino A0 em Volts: ");
Serial.println(tensao);
delay(1000);
}
22
Projeto 2: Controle Liga/Desliga de um LED

caractere 'A'
23
Projeto 2: Controle Liga/Desliga de um LED
Materiais:

• 1 LED
• 1 resistor de
330Ω
• Jumpers

Exemplo de conexões 24
Projeto 2: Controle Liga/Desliga de um LED
O código: const int LED = 13;

void setup() {
Serial.begin(9600); //configura comunicação serial com 9600 bps
pinMode(LED,OUTPUT); //configura pino do led como saída
}

void loop() {
if (Serial.available()) //se byte pronto para leitura
{
switch(Serial.read()) //verifica o digito ou caractere recebido
{
case 'A': //caso 'A'
digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED
break;
}
}
}

25

Você também pode gostar