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.