Como conectar o ESP-01 ao Arduino sem AT

Muitas pessoas ainda precisam conectar o ESP-01 ao Arduino, seja por questões de nível lógico, quantidade de GPIO ou evolução de um legado. O maior problema (em minha humilde opinião) é ter que utilizar comandos AT para se comunicar com o ESP-01, o que aumenta a utilização de memória de programa e volátil por conta das implementações. Além disso, não é tão flexível quanto um ESP8266 standalone. Nesse artigo vou demonstrar como comunicar o ESP-01 ao Arduino sem utilizar AT para trocar informações, dando assim continuidade ao projeto do mini-curso de bitcômetro do Arduino Day UNIVAG.

Tutorial json com Arduino e tutorial HTTPS com ESP8266

O primeiro artigo tratou de introduzir os conceitos necessários para manipulação de json, para interpretar o retorno da consulta à API do Mercado Bitcoin. Como esse primeiro artigo foi feito com ESP32, tive que escrever outro artigo mostrando como fazer uma consulta HTTPS utilizando ESP8266. Agora que já temos esses conceitos, vamos passar os dados de consulta do ESP8266 para o Arduino.

Como utilizar software serial

Será fundamental uma segunda serial para o Arduino, por uma razão muito simples; deixando o hardware serial livre, podemos fazer depuração sem muito sofrimento. Também, como o mini-curso é feito com a placa Waldunano da WalProj Projetos Eletrônicos (criada pelo meu amigo Waldyr, fera demais – visite o site), estamos condicionados a conectar o ESP-01 ao Arduino através dos pinos digital 2 e 3, inserindo os jumpers nos pinos entre os slots do Arduino Nano.

No código deixei os comentários sobre as implementações para ficar claro, invés de ficar picotando o código e explicando em longas linhas.

//Esse include é necessário se for programar utilizando o PlatformIO.
#include <Arduino.h>
//Essa biblioteca é necessária para cria a comunicação serial por software.
//Prefira utilizar velocidades baixas nessa comunicação.
#include <SoftwareSerial.h>

//Defina os pinos. TX é Transmissão. Ele deve ir conectado ao RX, que é Recepção
#define SOFT_TX 3
//...e vice-versa.
#define SOFT_RX 2

//Instância de um objeto de comunicação serial, passando os pinos RX/TX como parâmetro.
//Se estiver utilizando outra placa, atente-se ao wiring.
SoftwareSerial SerialESP(SOFT_RX,SOFT_TX);

//Uma variável para guardar a leitura serial.
String values;

//Quando a leitura estiver concluída, um boolean libera a impressão na serial.
bool ok = false;

void setup() {
  //inicie ambas as seriais. A serial nativa pode estar na velocidade preferida.
  Serial.begin(9600);
  //A velocidade da softwareserial deve ser a mesma utilizada no ESP-01.
  SerialESP.begin(9600);
  //inicia a string com valor nulo.
  values = "";
}

void loop() {
  /*Se houver dados advindos do ESP-01, lê até que encontre o final de linha.*/
  while (SerialESP.available()){
      
      values = SerialESP.readStringUntil('\n');
      //quando sair desse loop, o boolean garantirá que o valor seja impresso na serial do Arduino.
      ok = true;
  }

 //Se true, o resultado é impresso na serial do Arduino e a variável é zerada.
 if (ok){
     Serial.println(values);
     values = "";
     //garanta que não seja executada essa condicional novamente.
     ok = false;
 }
     //Pode até não ter delay, ou ter um delay mínimo. Por convenção, 1s.
     delay(1000);
}

Se leu o artigo anterior, sabe que estamos pegando o valor de abertura do Bitcoin e o valor do momento. Esses valores serão utilizados para informar se o Bitcoin está em alta ou em baixa.

Agora já temos os valores devidamente armazenados. No próximo artigo relacionado veremos como fazer o parsing desses valores para exibir no display Nokia 5110. Acompanhe até chegarmos no bitcômetro!

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.