banner

Deus e o mundo pelo WIFI!


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...");
}


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">"
                      "

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);
}





FAÇA O DOWNLOAD DOS ARQUIVOS:




Nenhum comentário:

Tecnologia do Blogger.