Hoje vou apresentar para vocês
uma aplicação integrando Arduino DUE e ESP8266 utilizando comunicação UART. Ainda,
vou mostrar um exemplo de WebServer com ESP8266, utilizando este DUE como uma
espécie de expansor de porta, ou seja, um slave do ESP8266. Essa dupla pode
trazer inúmeras vantagens para seu projeto.
Vale lembrar que este projeto
que vou mostrar aqui funciona para o ESP-01, o qual é bem mais barato que o
Módulo ESP8266 NodeMCU. O código de exemplo usado aqui é simples e acompanha
fluxograma para maior entendimento.
RECURSOS USADOS
- ESP8266 Nodemcu Esp-12e
- Arduino Due ATmel-SAM3XAE
- Led
- Resistor 220 ohm ou 330 ohm
- Protoboard
- Jumpers
MONTAGEM
PINOUT
Arduino DUE
ESP8266-12e
ESP-01
MONTAGEM
Tabela
O
LED está ligado na porta A11 do DUE.
CÓDIGO
Fluxograma
DUE
ESP8266
Código DUE
Declarações e variáveis
// Serial utilizada para comunicação com o ESP8266 (Tx3 e RX3) #define ESP8266 Serial3 // Led const int led = A11;
Setup
void setup()
{
// Iniciamos a serial para debug
Serial.begin(115200);
// Iniciamos a serial 3 de comunicação com o ESP
ESP8266.begin(115200);
// Setamos o pino do led como saída
pinMode(led, OUTPUT);
Serial.println("Aguardando mensagens do ESP8266...");
}
Loop
void loop()
{
// Se uma nova mensagem foi recebida
if(ESP8266.available()) // check if the esp is sending a message
{
Serial.println("Recebido:");
// Efetua a leitura da mensagem vinda do ESP8266
String msg = ESP8266.readString();
Serial.println("'"+msg+"'");
// Se a mensagem corresponde a "ON" ligamos o led, e vice-versa
if(msg.substring(0,msg.indexOf("\n")-1).equalsIgnoreCase("ON"))
digitalWrite(led, HIGH);
else
if(msg.substring(0,msg.indexOf("\n")-1).equalsIgnoreCase("OFF"))
digitalWrite(led, LOW);
}
delay(1);
}
Código ESP
Declarações e variáveis
// Bibliotecas wifi #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> // SSID e senha da rede WiFi que o ESP utilizará (Access Point) const char* ssid = "SSID"; const char* password = "SENHA"; // Objeto referente ao WebServer ESP8266WebServer server(80); // IP fixo const IPAddress IP = IPAddress(192, 168, 3, 120); // IP fixo que o ESP utilizará const IPAddress GATEWAY = IPAddress(192, 168, 3, 1); // Gateway const IPAddress SUBNET = IPAddress(255, 255, 255, 0); // Máscara // Nomeamos a serial como DUE #define DUE Serial
Setup
void setup()
{
// Iniciamos a Serial
DUE.begin(115200);
// Aguardamos 1 segundo
delay(1000);
// Setamos o pino do led interno como saida
// Esse led piscará indicando que o wifi está sendo configurado/iniciado
pinMode(LED_BUILTIN, OUTPUT);
// Iniciamos o WiFi
WiFi.begin(ssid, password);
// Conectamos o wifi e piscamos o led enquanto isso
digitalWrite(LED_BUILTIN, LOW);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
// Configuramos o WiFi com o IP definido anteriormente
if (!WiFi.config(IP, GATEWAY, SUBNET))
{
DUE.println("Erro ao configurar IP");
delay(5000);
ESP.restart();
}
digitalWrite(LED_BUILTIN, HIGH);
// Enviamos para o arduino due os dados de rede (debug)
DUE.print("Connected to ");
DUE.println(ssid);
DUE.print("IP address: ");
DUE.println(WiFi.localIP());
// Enviamos para o arduino due a String "Ready" que indica sucesso na inicialização do ESP
DUE.println("Ready");
// Definimos a página raiz (root)
server.on("/", handleRoot);
// Definimos a página responsável por ligar o led
server.on("/on", []()
{
server.send(200, "text/html", "<form action='/off'>"
"Status: ON<br/>"
"<button type='submit'>SET LED OFF</button>"
"</form>");
DUE.println("ON");
});
// Definimos a página responsável por desligar o led
server.on("/off", []()
{
server.send(200, "text/html", "<form action='/on'>"
"Status: OFF<br/>"
"<button type='submit'>SET LED ON</button>"
"</form>");
DUE.println("OFF");
});
// Definimos a página de erro
server.onNotFound(handleNotFound);
// Iniciamos o servidor
server.begin();
delay(1000);
}
Loop
void loop()
{
// Executamos os eventos dos client conectados no servidor do ESP
server.handleClient();
// Se o WiFi se desconectou, tentamos reconectar
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
WiFi.reconnect();
}
digitalWrite(LED_BUILTIN, LOW);
}
handleRoot
// Página raiz
void handleRoot()
{
//server.send(200, "text/plain", );
server.send(200, "text/html", "<form action='/on'>"
"<b>ESP8266's Page!</b><br/>"
"<button type='submit'>SET LED ON</button>"
"</form>");
}
handleNotFound
// Página de erros (not found)
void handleNotFound()
{
// Exibimos na página "File Not Found"
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++)
{
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}



















2 Comentários
Parabéns por mais este conteúdo Fernando!! Enviei um e-mail para 'contato@fernandok.com', se possível entrar em contato comigo.
ResponderExcluirAgradeço (31) 99901-3284
Professor, boa tarde!
ResponderExcluirEstou tentando fazer a expansão das portas do ESP32 Heltec Lora com um arduino mega, porém até o momento só tive insucesso. Tentei por SPI e UART, como no exemplo acima, porém simplemente não abre a porta serial do Heltec Lora.