Usando outro Arduino como intermediário para debug no Monitor com a softwareSerial

Quando a serial nativa do seu Arduino já está em uso, ou se você está usando um ATtiny sem serial nativa, outro Arduino pode ajudar no debug via monitor serial USB.

No artigo “Biblioteca softwareSerial: conexão alternativa para debug via Monitor Serial” eu expliquei como usar a biblioteca softwareSerial e um hardware intermediário para debugar com o Monitor Serial da IDE do Arduino mesmo quando a serial nativa1 do seu Arduino está ocupada por outra parte do seu circuito (como uma conexão com um módulo de WiFi, por exemplo), ou é inexistente, como ocorre nos ATtinys.

A biblioteca softwareSerial é fácil de encontrar: ela vem com a IDE do Arduino, nem precisa de instalação à parte. Mas o hardware intermediário que eu mencionei no texto não está presente na bancada de muitos leitores: é a plaquinha FTDI Basic, uma das várias opções econômicas de módulo para atuar como intermediário entre portas USB e portas seriais tradicionais (TX/RX).

No artigo eu mencionei uma alternativa: usar outro Arduino (aparentemente mais gente tem um Arduino extra do que tem um conversor USB-serial dedicado) para fazer o papel de intermediário. Vários leitores entraram em contato para pedir detalhes, e eu prometi que postaria, portanto aqui vai ;-)

Ao usar um Arduino como intermediário serial, a regra da inversão fica suspensa: TX conecta com TX, e RX conecta com RX.

A regra geral das conexões seriais via UART ou softwareSerial é que o pino TX (transmissor) de um dos equipamentos se conecta ao pino RX (receptor) do outro, e vice-versa – mas o uso de um Arduino como intermediário serial é uma das exceções a essa regra.

Ao inicializar a softwareSerial, você usa um comando que tem o seguinte formato: SoftwareSerial nome_da_porta(pino_RX, pino_TX);, que define o nome pelo qual a porta virtual será referenciada no seu programa, e quais os pinos digitais que farão o papel de RX e de TX – e, neste caso específico, o pino que você definir como RX deverá ser conectado ao RX físico (pino 0, no Uno e similares) do Arduino, e o pino que você definir como TX deverá ser conectado ao TX físico (pino 1, no Uno e similares) do Arduino.

A programação é idêntica à de quando usamos um USB-serial como o FTDI Basic ou similar.

No Arduino (ou ATmega, ATtiny ou outro microcontrolador compatível) que você esteja programando, tudo que você precisa fazer além da conexão física descrita acima é usar os recursos da softwareSerial, como já vimos no artigo anterior. Um exemplo básico de programa com a biblioteca é o que segue:

#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() {
}

No exemplo acima, você conectaria o pino 9 ao RX do Arduino intermediário, e o 8 ao TX dele.

o Arduino usado como intermediário só precisa estar conectado a uma USB reconhecida pela IDE, e ficar parado, rodando algum programa que não faça uso da serial dele – para garantir, você pode transferir a ele algum exemplo simples da biblioteca da IDE do Arduino, como o tradicional Blink ou até mesmo o programa vazio chamado BareMinimum.

Finalmente, na IDE você precisa selecionar a porta USB correspondente ao Arduino usado como intermediário, abrir o Monitor Serial e configurá-lo para a velocidade especificada no comando begin do seu programa – no código exemplificado acima, a velocidade seria 9600. E pronto ;-)

Exemplo com um ATtiny85

O exemplo acima foi testado em um Uno usando outro Uno como intermediário mas, para funcionar em um diminuto ATtiny85, a única modificação necessária é mudar os números dos pinos, porque esse ATtiny não tem pino 8 nem pino 9 ;-)

Optando por usar os pinos 1 e 0, fica assim:

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

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

void loop() {
}

No exemplo acima, você conectaria o pino 1 do ATtiny ao RX do Arduino intermediário, e o 0 do ATtiny ao TX dele, assim:

E é isso, no restante é como na conexão entre Arduinos. Veja mais detalhes sobre como programar o ATtiny85 com Arduino e sobre o shield caseiro para ATtiny85 que eu uso para facilitar a programação e os testes.

E para mais detalhes sobre a conexão serial via software e com intermediário, veja o artigo anterior: “Biblioteca softwareSerial: conexão alternativa para debug via Monitor Serial”.

 
  1.  No caso dos modelos com apenas uma serial nativa, claro.

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