Arduino Nano ESP32 - Controla Relé via Web

Neste tutorial, vamos aprender a controlar um relé por meio de uma interface web usando um navegador em um PC ou celular, utilizando o Arduino Nano ESP32. Em detalhes, o Arduino Nano ESP32 será programado para funcionar como um servidor web. Vamos supor que o endereço IP do Arduino Nano ESP32 seja 192.168.0.3. Veja os detalhes de como funciona:

Arduino Nano ESP32 relay web browser

Vamos aprender por meio de dois códigos de exemplo:

O tutorial oferece os fundamentos que você pode personalizar facilmente e com inovação para conseguir o seguinte:

Sobre o relé e o Arduino Nano ESP32

Se você não conhece o relé e o Arduino Nano ESP32 (pinagem, como funciona, como programar ...), aprenda sobre eles nos tutoriais a seguir:

Diagrama de Ligação

The wiring diagram between Arduino Nano ESP32 and relay

This image is created using Fritzing. Click to enlarge image

Código Arduino Nano ESP32 - O conteúdo HTML está embutido no código do Arduino Nano ESP32

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-controls-relay-via-web */ #include <DIYables_ESP32_WebServer.h> #define RELAY_PIN D2 // The Arduino Nano ESP32 pin connected to the relay int relay_state = LOW; // WiFi credentials const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create web server instance DIYables_ESP32_WebServer server; String getHTML() { String html = "<!DOCTYPE HTML>"; html += "<html>"; html += "<head>"; html += "<link rel='icon' href='data:,'>"; html += "</head>"; html += "<p>Relay state: <span style='color: red;'>"; if (relay_state == LOW) html += "OFF"; else html += "ON"; html += "</span></p>"; html += "<a href='/relay1/on'>Turn ON</a>"; html += "<br><br>"; html += "<a href='/relay1/off'>Turn OFF</a>"; html += "</html>"; return html; } // home page void handleHome(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("Arduino Nano ESP32 Web Server: New request received"); server.sendResponse(client, getHTML().c_str()); } // Route to control the Relay void handleRelayOn(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("Arduino Nano ESP32 Web Server: New request received"); relay_state = HIGH; digitalWrite(RELAY_PIN, relay_state); server.sendResponse(client, getHTML().c_str()); } void handleRelayOff(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("Arduino Nano ESP32 Web Server: New request received"); relay_state = LOW; digitalWrite(RELAY_PIN, relay_state); server.sendResponse(client, getHTML().c_str()); } void setup() { Serial.begin(9600); delay(1000); Serial.println("Arduino Nano ESP32 Web Server"); // Configure routes server.addRoute("/", handleHome); server.addRoute("/relay1/on", handleRelayOn); server.addRoute("/relay1/off", handleRelayOff); // Start web server with WiFi connection server.begin(WIFI_SSID, WIFI_PASSWORD); } void loop() { server.handleClient(); }

Passos Rápidos

Para começar com o Arduino Nano ESP32, siga estes passos:

  • Se você é novo no Arduino Nano ESP32, consulte o tutorial sobre como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
  • Faça a ligação dos componentes de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
  • Abra o Library Manager clicando no ícone Library Manager na barra de navegação à esquerda da Arduino IDE.
  • Pesquise por “DIYables ESP32 WebServer” e encontre a DIYables ESP32 WebServer.
  • Clique no botão Install para instalar a biblioteca Web Server da DIYables.
Arduino Nano ESP32 Web Server library
  • Copie o código acima e abra-o na Arduino IDE
  • Altere as informações de WiFi (SSID e senha) no código para as suas
  • Clique no botão Upload na Arduino IDE para fazer o upload do código para o Arduino Nano ESP32
  • Abra o Serial Monitor
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Connecting to WiFi... Connected to WiFi Arduino Nano ESP32 Web Server's IP address: 192.168.0.3
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • Você verá um endereço IP, por exemplo: 192.168.0.3. Este é o endereço IP do Servidor Web do Arduino Nano ESP32
  • Abra um navegador web e digite um dos três formatos abaixo na barra de endereços:
192.168.0.3
192.168.0.3/relay1/on
192.168.0.3/relay1/off
  • Esteja ciente de que o endereço IP pode variar. Verifique o valor atual no Serial Monitor.
  • Você também verá a saída abaixo no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Connecting to WiFi... Connected to WiFi Arduino Nano ESP32 Web Server's IP address: 192.168.0.3 Arduino Nano ESP32 Web Server: New request recieved: GET / Arduino Nano ESP32 Web Server: New request recieved: GET /relay1/on Arduino Nano ESP32 Web Server: New request recieved: GET /relay1/off
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • Verifique o estado do relé
  • Você verá a página web da placa Arduino Nano ESP32 no navegador web como abaixo
Arduino Nano ESP32 relay web browser
  • Agora você consegue ligar/desligar o relé por meio da interface web

Código Arduino Nano ESP32 - O conteúdo HTML está separado do código do Arduino Nano ESP32

Como uma página web gráfica contém uma grande quantidade de conteúdo HTML, embuti-la no código do Arduino Nano ESP32 como antes se torna inconveniente. Para resolver isso, precisamos separar o código do Arduino Nano ESP32 e o código HTML em arquivos diferentes:

  • O código do Arduino Nano ESP32 ficará em um arquivo .ino.
  • O código HTML (incluindo HTML, CSS e Javascript) ficará em um arquivo .h.

Passos Rápidos

  • Abra a Arduino IDE e crie um novo sketch, dê um nome a ele, por exemplo, newbiely.com.ino
  • Copie o código abaixo e abra-o na Arduino IDE
/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-controls-relay-via-web */ #include <DIYables_ESP32_WebServer.h> #include "index.h" // Include the index.h file #define RELAY_PIN D2 // The Arduino Nano ESP32 pin connected to the relay int relay_state = LOW; // WiFi credentials const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create web server instance DIYables_ESP32_WebServer server; String getHTML() { String html = webpage; // Use the HTML content from the index.h file html.replace("%RELAY_STATE%", relay_state ? "ON" : "OFF"); // update the relay state return html; } // home page void handleHome(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("Arduino Nano ESP32 Web Server: New request received"); server.sendResponse(client, getHTML().c_str()); } // Route to control the Relay void handleRelayOn(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("Arduino Nano ESP32 Web Server: New request received"); relay_state = HIGH; digitalWrite(RELAY_PIN, relay_state); server.sendResponse(client, getHTML().c_str()); } void handleRelayOff(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("Arduino Nano ESP32 Web Server: New request received"); relay_state = LOW; digitalWrite(RELAY_PIN, relay_state); server.sendResponse(client, getHTML().c_str()); } void setup() { Serial.begin(9600); delay(1000); Serial.println("Arduino Nano ESP32 Web Server"); // Configure routes server.addRoute("/", handleHome); server.addRoute("/relay1/on", handleRelayOn); server.addRoute("/relay1/off", handleRelayOff); // Start web server with WiFi connection server.begin(WIFI_SSID, WIFI_PASSWORD); } void loop() { server.handleClient(); }
  • Altere as informações de WiFi (SSID e senha) no código para as suas
  • Crie o arquivo index.h na Arduino IDE da seguinte forma:
    • Clique no botão logo abaixo do ícone do Serial Monitor e escolha New Tab, ou use as teclas Ctrl+Shift+N.
    Arduino IDE 2 adds file
    • Dê ao arquivo o nome index.h e clique no botão OK
    Arduino IDE 2 adds file index.h
    • Copie o código abaixo e cole-o no index.h.
    /* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-controls-relay-via-web */ #ifndef WEBPAGE_H #define WEBPAGE_H const char* webpage = R"=====( <!DOCTYPE HTML> <html> <head> <link rel='icon' href='data:,'> </head> <p>Relay state: <span style='color: red;'>%RELAY_STATE%</span></p> <a href='/relay1/on'>Turn ON</a> <br><br> <a href='/relay1/off'>Turn OFF</a> </html> )====="; #endif
    • Agora você tem o código em dois arquivos: newbiely.com.ino e index.h
    • Clique no botão Upload na Arduino IDE para fazer o upload do código para o Arduino Nano ESP32
    • Acesse a página web da placa Arduino Nano ESP32 por meio de um navegador web no seu PC ou celular como antes. Você a verá semelhante ao código anterior, como abaixo:
    Arduino Nano ESP32 relay web browser

    ※ Nota:

    • Se você modificar o conteúdo HTML no index.h e não mexer em nada no arquivo newbiely.com.ino, quando você compilar e fizer o upload do código para o ESP32, a Arduino IDE não atualizará o conteúdo HTML.
    • Para fazer a Arduino IDE atualizar o conteúdo HTML nesse caso, faça uma alteração no arquivo newbiely.com.ino (por exemplo, adicionar uma linha vazia, adicionar um comentário....)

    Você pode personalizar facilmente e com inovação o código acima para conseguir o seguinte:

    • Controlar vários relés pela web
    • Redesenhar a interface do usuário (UI) web

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!