Hoje eu vou falar sobre o ARDUINO
DUE ATmel-SAM3XAE que, ligado a um ESP8266/ESP12, te possibilita controlar Deus
e o mundo pelo WiFi. Vou, então, te apresentar uma aplicação integrando Arduino
DUE e ESP8266 utilizando comunicação UART, bem como um exemplo de WebServer com
ESP8266.
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..."); }
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">" "ESP8266's Page!
" "<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); }
0 Comentários