Biblioteca softwareSerial: conexão alternativa para debug via Monitor Serial

A biblioteca softwareSerial vem com a IDE do Arduino e ajuda a debugar no Monitor Serial quando a porta serial nativa não está disponível.

Usar a biblioteca softwareSerial para enviar dados para um monitor pode ser uma saída prática para debugar programas que estejam usando a porta serial nativa do Arduino1 para alguma outra coisa, ou mesmo para quando estamos trabalhando com um dispositivo (como os ATtinys) que não conta com uma serial (UART) nativa.

O procedimento é simples, mas quando a intenção é enviar os dados via USB para serem exibidos no Monitor Serial da IDE do Arduino (ou outro monitor serial da sua preferência rodando no computador), em geral exige um intermediário que faça a tradução entre os dados seriais (TX/RX) gerados no Arduino e o padrão USB.

No meu caso, isso geralmente significa alguma variação da plaquinha FTDI Basic, que essencialmente é um chip FTDI especializado nessa tradução, cercado por uma porta USB de um lado, e pinos de conexão serial tradicional (UART) do outro. O meu é exatamente igual ao da imagem acima, mas você pode usar qualquer outro que tenha a mesma função: até mesmo um segundo Arduino, se você programá-lo para receber e encaminhar os sinais.

A conexão física com o intermediário USB usa apenas 2 fios: um ligando o TX do Arduino ao RX do intermediário, e o outro entre o RX do Arduino e o TX do intermediário.

A grande sacada aqui é a conexão física baseada em apenas 2 fios: o intermediário USB-Serial precisa ter o seu pino TX ligado ao pino do Arduino que estiver sendo usado como RX pela biblioteca softwareSerial, e o seu pino RX conectado ao pino do Arduino que estiver sendo usado como TX pela softwareSerial. Ou seja: TX com RX, e RX com TX.

Os pinos do Arduino a serem usados como RX e TX podem ser escolhidos livremente entre os que estiverem disponíveis no seu projeto. Na foto acima, eu escolhi o 8 e o 9, sendo o primeiro como TX (ligado ao RX do FTDI Basic) e o segundo como RX (ligado ao TX do FTDI Basic).

Não é necessário instalar nada, pois a softwareSerial vem com a IDE do Arduino. A programação correspondente é bem simples, e um programa de exemplo mínimo tem meia dúzia de linhas:

#include <SoftwareSerial.h>
SoftwareSerial monitorSerial(9, 8); // aqui 9 eh RX, 8 eh TX

void setup() {
  monitorSerial.begin(9600);
  monitorSerial.println("Teste de mensagem");
}

void loop() {
}

Acima você vê um programa completo, e pode notar que o que o diferencia de um programa que usa a Serial tradicional são as 2 primeiras linhas: a que está em laranja faz a referência à biblioteca, e a que está em verde (com o comentário em rosa) instancia o objeto correspondente à porta serial virtual que nós criamos no par de pinos (RX, TX) indicado como parâmetro.

Fora isso, e no geral, o uso da serial por software é bastante similar ao da Serial nativa: você a inicia com o begin, e a partir daí usa combinações de reads, writes e prints e outros comandos da biblioteca, como você também vê no exemplo acima. Há exceções e limitações, mas em geral não atrapalham os casos mais comuns, e a documentação ajudará a lidar com elas.

A pegadinha de trabalhar com duas portas

Um erro comum ao trabalhar programando um Arduino que está enviando dados ao Monitor Serial por meio de um intermediário com a softwareSerial é confundir qual porta faz o que.

No seu computador elas devem aparecer com nomes diferentes, mas a situação no menu será similar à que eu mostrei acima: como eu estou com o Arduino e o FTDI Basic plugados ao mesmo tempo (um sendo programado, o outro servindo como intermediário das mensagens), preciso saber identificar no meu quais as portas seriais de um e de outro, e alternar corretamente, selecionando um na hora de enviar os programas compilados, e o outro na hora de abrir o monitor serial.

Para evitar a confusão, uma alternativa é deixar permanentemente aberto um outro monitor serial, sempre conectado à porta do FTDI Basic (ou o intermediário que você estiver usando). Usuários de Linux e Mac podem abrir um terminal e usar o screen, que já vem com o sistema (para sair dele, pressione control+a e k), e usuários de Windows podem instalar algum utilitário no estilo do Tera-term. E todos os 3 podem também gastar 5 minutos pesquisando por monitores seriais alternativos que sejam mais adequados às suas preferências.

 
  1.  Em especial daqueles que só têm uma porta nativa.

Comentar

Dos leds ao Arduino, ESP8266 e mais

Aprenda eletrônica com as experiências de um geek veterano dos bits e bytes que nunca tinha soldado um led na vida, e resolveu narrar para você o que descobre enquanto explora esse universo – a partir da eletrônica básica, até chegar aos circuitos modernos.

Por Augusto Campos, autor do BR-Linux e Efetividade.net.

Recomendados

Livro recomendado


Artigos já disponíveis

Comunidade Arduino

O BR-Arduino é integrante da comunidade internacional de entusiastas do Arduino, mas não tem relação com os criadores e distribuidores do produto, nem com os detentores das marcas registradas.

Livros recomendados