Páginas

NodeMCU ESP8266 WiFi IOT Automation





IOT:  Internet Of  Things

A Internet das coisas é uma revolução tecnológica a fim de conectar dispositivos eletrônicos utilizados no dia-a-dia (como aparelhos eletrodomésticos, eletroportáteis, máquinas industriais, meios de transportes, etc) à internet.






Automação e controle de dispositivos via WiFi/3G: Rede interna ou externa!

 Permite a conexão WiFi entre vários celulares simultâneos;            Visualiza todas as operações executadas por outros celulares(conectados à rede WiFi que possuam o APP. com "ssid" e "password") em tempo real, uso familiar:





Automação e controle de dispositivos via WiFi/3G: Rede interna ou externa!


Downloads:

Code: NodeMCU ESP8266 WiFi IOT Automation

Arduino Home

Librari: ESP8266WiFi

Driver: CH340G




Descrição do App. NodeMCU ESP8266 WiFi IOT Automation:

Automação e controle de dispositivos via WiFi/3G: Rede interna ou externa!

Controle ON/OFF 110/220V de até 9(Nove) dispositivos editáveis:

Através do smartphone Android com App. instalado, podemos fazer a conexão via WiFi com o NodeMCU ESP8266 que por sua vez está conectado ao Roteador WiFi.

BUTTON - SWITCHES MODE:
- 9 Chaves control ON/OFF Mode Relay 110/220V;
- 9 Dispositivos Editáveis;
- 9 Status das portas IO do ESP8266;

BUTTON LOCK/UNLOCK:
Bloqueia/desbloqueia modo de Edição para nome dos dispositivos.

BUTTON SAVE:
Salva a Edição com novo nome dos dispositivos.

BUTTON NET:
Edita o numero de IP ou Host.

BUTTON REFRESH:
Atualizar página; Se necessário quando estiver utilizando diversos celulares simultaneamente.

Como funciona:

O celular Android e o ESP8266 conectam-se ao roteador via WiFi, nos pinos de saída do ESP 8266, temos ligado uma placa de relés que por sua vez está ligada à rede elétrica com os contados dos relés ligados aos dispositivos que se deseja controlar.

Quando por exemplo pressionarmos um botão para ligarmos um dispositivo, o APP. Android envia dados à placa ESP8266, esta recebe os dados e toma decisão de enviar comando para ligar o relé correspondente e retorna dados para o APP. Android que irá acionar a chave e indicação de status correspondentes.

Imagens do App. funcionando:





Imagens do App. instalado no celular:



    





Passo A passo:

Pinos do NodeMCU ESP8266:
Neste projeto usaremos apenas os pinos de saída D0 à D8= 9 saídas para acionamento dos relés e dispositivos ligados à rede elétrica;
Portanto faremos a definição dos pinos do ESP8266 D0 à D8 de forma que fique mais fácil seu acesso;

Veja na figura abaixo os pinos de saída que usaremos(D0 à D8): Estes serão ligados nos pinos de controle do módulo de relés(D0=IN1-D1=IN2-D2=IN3...D7=IN8) exemplo de módulo com 8 relés e ainda teremos mais um canal D8 de uso geral!

A Alimentação entra pelo conector USB=5VDC, você poderá usar :
A saída USB do PC ou uma fonte de 110/220V saída 5VDC 2A, ou um módulo de bateria saída 5VDC 2A;

Importante que utilize uma fonte 5VDC estável com capacidade de corrente de 2A para alimentação dos relés;
A  alimentação para o módulo de relés será usada através dos pinos VU e GNG da ESP8266, veja na figura abaixo:


Exemplo de ligação com módulo de 4 relés:
Veja que neste exemplo ligamos apenas 4 relés então basta repetir a operação para ligação com até 9 relés.
Atenção: Utilizar uma fonte de 5V/2A para alimentação do sistema através do mini USB.




Como funciona o Módulo com relés:

Nível lógico HIGH "5V" relés estão em repouso chaves desligadas.

Nível lógico LOW "0V" relés estão energizados chaves ligadas.

O módulo relé possui uma lógica invertida quando desejamos acionar ou energizar a bobina no relé precisamos colocar nível "0V' na entrada do módulo relé(lógica invertida) com isso um contato normalmente aberto é fechado de forma correta.
Com este sistema economizamos energia, pois as bobinas dos relé serão energizadas apenas quando o módulo receber o nível "0" do ESP8666, exemplo D0=IN1 nível lógico "0"=LOW energizado e contato elétrico fechado: O primeiro dispositivo será acionado.
Obs.> Em repouso o estado das portas D0á D8 estão em nível lógico "1"=HIGH.


Exemplo de Módulos com relés e suas ligações:

Exemplo ligação com uma Lâmpada  em rede de 110V:


Atenção para o risco de choque elétrico, utilize cabos dimensionados pela capacidade de corrente;
Utilize sempre Disjuntores ou fusíveis para cada  Dispositivo a ser acionado.


Ligações do ESP8266 com Leds:

Veja que neste exemplo usamos 6 leds com 6 resistores de 220 ohms.
Todos os anodos dos leds estão ligados aos resistores e em comum para o 3V da placa ESP8266; Os catodos dos leds estão ligados respectivamente às saídas D0-D1-D2-D3-D4 e D5, podemos ligar o total de 9 leds, concluindo as ligações para o D6-D7 e D8.
Veja que mantemos a mesma lógica de acionamento dos relés;
 Leds em nível lógico"0" 0 V  LOW: Aceso.
 Leds em nível lógico"1" 3V  HIGH: Apagado.



Como fazer a programação da NodeMCU ESP8266 usando a IDE Arduino passo a passo:

Entre no site oficial Arduino Home e em seguida selecione Download:
Escolha a versão atual e o sistema operacional, no exemplo Arduino 1.6.12 e sistema Windows:








Insira este link  na URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json







Instalação das bibliotecas ESP8266WiFi :
Encontre a pasta Arduino em seu diretório:



Selecione a nova versão do Arduino:
Insira a pasta com os arquivos da biblioteca ESP8266WiFi dentro de Libraries:



Instalação de Drivers:

Selecione a pasta Drivers:


Insira a pasta com os arquivos CH340G dentro de Drivers:


Instalação do Driver CH340G conforme seu sistema operacional; Este driver é responsável pela comunicação serial do conversor RS232/USB, entre a placa ESP8266(RS232) e o PC(USB).


Acesse este link e escolha seu sistema operacional antes de fazer o Download: http://www.arduined.eu/tag/ch340g/





Veja em Gerenciador de Dispositivos que sua USB que está conectada ao ESP8266 não foi encontrada:


Click com botão direito do mousena USB e selecione opção Procurar driver no computador:


Encontre a pasta onde você fez o Download e click em avançar:



Pronto seu driver foi instalado com sucesso, veja neste exemplo que a USB encontrou o CH340 Com4:



Em alguns computadores se torna necessário instalar manualmente este driver, então faremos isto também.
Encontre sua pasta de Download e click em  Setup e em seguida Executar:


Click em Install.


Pronto! Agora acesse  a IDE Arduino e veja que tudo está funcionando.


Carregue o código NodeMCU ESP8266 WiFi IOT Automation na IDE Arduino:



#include <ESP8266WiFi.h> 
const char* ssid = "SergioWIFI";
const char* password = "SERGIO12345678";

//Mapeamento de pinos do NodeMCU
#define ledPinD0    16
#define ledPinD1    5
#define ledPinD2    4
#define ledPinD3    0
#define ledPinD4    2
#define ledPinD5    14
#define ledPinD6    12
#define ledPinD7    13
#define ledPinD8    15

  int valueD0 = HIGH;
  int valueD1 = HIGH;
  int valueD2 = HIGH;
  int valueD3 = HIGH;
  int valueD4 = HIGH;
  int valueD5 = HIGH;
  int valueD6 = HIGH;
  int valueD7 = HIGH;
  int valueD8 = HIGH; 
  int cont = 0;

WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  delay(10);

  pinMode(ledPinD0, OUTPUT);
  pinMode(ledPinD1, OUTPUT);
  pinMode(ledPinD2, OUTPUT);
  pinMode(ledPinD3, OUTPUT);
  pinMode(ledPinD4, OUTPUT);
  pinMode(ledPinD5, OUTPUT);
  pinMode(ledPinD6, OUTPUT);
  pinMode(ledPinD7, OUTPUT);
  pinMode(ledPinD8, OUTPUT);
   
  digitalWrite(ledPinD0, HIGH);
  digitalWrite(ledPinD1, HIGH);
  digitalWrite(ledPinD2, HIGH);
  digitalWrite(ledPinD3, HIGH);
  digitalWrite(ledPinD4, HIGH);
  digitalWrite(ledPinD5, HIGH);
  digitalWrite(ledPinD6, HIGH);
  digitalWrite(ledPinD7, HIGH);
  digitalWrite(ledPinD8, HIGH);
  //-------------------------
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  server.begin();
  Serial.println("Server started");

  //------Monitor Serial IDE Arduino------
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

void loop() {
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  //------------------------
  Serial.println("new client");
  while(!client.available()){
  delay(1);
  }
  //-------------------------
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
  //--------NodeMCU ESP8266 recebe do Android------
  if (request.indexOf("/ledPinD0=ON") != -1)  {
    digitalWrite(ledPinD0, LOW);//Coloca pino digital D0 em nível lógico "0";
    valueD0 = LOW;//Atribui nivel lógico "0" á variável valueD0;  
  }
  if (request.indexOf("/ledPinD0=OFF") != -1)  {
    digitalWrite(ledPinD0, HIGH);//Coloca pino digital D0 em nível lógico "1";
    valueD0 = HIGH;//Atribui nivel logico "1" á variável valueD0.
  }
  //--------------------------
  if (request.indexOf("/ledPinD1=ON") != -1)  {
    digitalWrite(ledPinD1, LOW);
    valueD1 = LOW;
  }
  if (request.indexOf("/ledPinD1=OFF") != -1)  {
    digitalWrite(ledPinD1, HIGH);
    valueD1 = HIGH;
  }
  //--------------------------
  if (request.indexOf("/ledPinD2=ON") != -1)  {
    digitalWrite(ledPinD2, LOW);
    valueD2 = LOW;
  }
  if (request.indexOf("/ledPinD2=OFF") != -1)  {
    digitalWrite(ledPinD2, HIGH);
    valueD2 = HIGH;
  }
  //--------------------------
  if (request.indexOf("/ledPinD3=ON") != -1)  {
    digitalWrite(ledPinD3, LOW);
    valueD3 = LOW;
  }
  if (request.indexOf("/ledPinD3=OFF") != -1)  {
    digitalWrite(ledPinD3, HIGH);
    valueD3 = HIGH;
  }
  //--------------------------
  if (request.indexOf("/ledPinD4=ON") != -1)  {
    digitalWrite(ledPinD4, LOW);
    valueD4 = LOW;
  }
  if (request.indexOf("/ledPinD4=OFF") != -1)  {
    digitalWrite(ledPinD4, HIGH);
    valueD4 = HIGH;
  }
  //--------------------------
  if (request.indexOf("/ledPinD5=ON") != -1)  {
    digitalWrite(ledPinD5, LOW);
    valueD5 = LOW;
  }
  if (request.indexOf("/ledPinD5=OFF") != -1)  {
    digitalWrite(ledPinD5, HIGH);
    valueD5 = HIGH;
  }
  //--------------------------
  if (request.indexOf("/ledPinD6=ON") != -1)  {
    digitalWrite(ledPinD6, LOW);
    valueD6 = LOW;
  }
  if (request.indexOf("/ledPinD6=OFF") != -1)  {
    digitalWrite(ledPinD6, HIGH);
    valueD6 = HIGH;
  }
  //--------------------------
  if (request.indexOf("/ledPinD7=ON") != -1)  {
    digitalWrite(ledPinD7, LOW);
    valueD7 = LOW;
  }
  if (request.indexOf("/ledPinD7=OFF") != -1)  {
    digitalWrite(ledPinD7, HIGH);
    valueD7 = HIGH;
  }
 //--------------------------
  if (request.indexOf("/ledPinD8=ON") != -1)  {
    digitalWrite(ledPinD8, LOW);
    valueD8 = LOW;
  }
  if (request.indexOf("/ledPinD8=OFF") != -1)  {
    digitalWrite(ledPinD8, HIGH);
    valueD8 = HIGH;
  }
  //--------------------------
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  //----------------------------------------------------------
  client.print("<font size=6>");//Tamanho da fonte </font>
  client.print("<font color=#FF0000>");//Color Red
  client.print("Blog> http://sergioarduino.blogspot.com.br/");
  client.println("<br />");
  //-----------------------------
  client.print("<font size=6>");//Tamanho da fonte </font>
  client.print("<font color=#0000FF>");//Color Blue.
  client.print("Receiving status from ESP8266");
  client.println("<br/>");
  //client.println("<br />");
  //----------------------------
  client.print("<font size=10>");//Tamanho da fonte </font>
  client.print("<font color=#008000>");//Color Green. 
  //---------NodeMCU ESP8266 envia para o Android--------
  client.println("<br><br>");//Close and Open. 
  if(valueD0 == LOW) {//Testa se a variável valueD0 = nível lógico "0";
  client.print("/ledPinD0=ON");//Modifica o botão Device1 para "ON";
  } else {//Caso contrário;
    client.print("/ledPinD0=OFF");//Modifica o botão Device1 para "OFF";
  }
  client.println("<br />");
  //------------------------- 
  if(valueD1 == LOW) {
  client.print("/ledPinD1=ON");
  } else {
  client.print("/ledPinD1=OFF");
  }   
  client.println("<br />");
  //-------------------------
  if(valueD2 == LOW) {
  client.print("/ledPinD2=ON");
  } else {
  client.print("/ledPinD2=OFF");
  }   
  client.println("<br />");
  //------------------------- 
  if(valueD3 == LOW) {
  client.print("/ledPinD3=ON");
  } else {
  client.print("/ledPinD3=OFF");
  } 
  client.println("<br />");
  //------------------------- 
  if(valueD4 == LOW) {
  client.print("/ledPinD4=ON");
  } else {
  client.print("/ledPinD4=OFF");
  } 
  client.println("<br />");
  //-------------------------
  if(valueD5 == LOW) {
  client.print("/ledPinD5=ON");
  } else {
  client.print("/ledPinD5=OFF");
  }   
  client.println("<br />");
  //-------------------------
  if(valueD6 == LOW) {
  client.print("/ledPinD6=ON");
  } else {
  client.print("/ledPinD6=OFF");
  }   
  client.println("<br />");
  //-------------------------
  if(valueD7 == LOW) {
  client.print("/ledPinD7=ON");
  } else {
  client.print("/ledPinD7=OFF");
  }  
  client.println("<br />");
  //-------------------------
  if(valueD8 == LOW) {
  client.print("/ledPinD8=ON");
  } else {
  client.print("/ledPinD8=OFF");
  }  
  client.println("<br />"); 
  
  client.println("</html>");
 //-------------------------------------- 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println(""); 
}


Downloads:

Code: NodeMCU ESP8266 WiFi IOT Automation

Librari: ESP8266WiFi

Driver: CH340G



Colocando o NodeMCU ESP8266 WiFi IOT Automation para funcionar:

Estando com o driver e bibliotecas instalados: 
Abra a IDE com o código Arduino e vamos fazer as seguintes alterações: 
"ssid": Este é o nome que você atribui à conexão de seu Roteador WiFi.
"password": Esta é a senha que você atribui à conexão de seu Roteador WiFi.
 Veja no meu exemplo:
const char* ssid = "SergioWIFI";
const char* password = "SERGIO12345678";

Como obter o "ssid" e "password" do seu roteador:

Exemplo com IP do meu roteador IP:192.168.1.1


- Ligar um cabo de rede da saída LAN de seu roteador à entrada de rede de seu computador;
- Para conectar ao seu roteador digite em seu Navegador o numero de IP que consta em seu roteador, exemplo com o Roteador D-Link DI-524.

 Em meu caso estou com o nome de usuário default de fábrica: admin e estou sem uma senha então neste caso pode deixar o campo de senha em branco  e fazer o login;




- Veja nesta tela em Home a LAN com IP: 192.168.1.1 do seu roteador:


Pressione Wireless e copie o nome "ssid" e senha "password"  e cole estes dados no programa Arduino.


Se preferir use o celular que com a conexão WiFi e entre no navegador Google e digite o numero de IP como no exemplo http://192.168.1.1
Digite o nome de usuário para acesso do roteador, no meu exemplo "admin"e fazer login, veja a tela abaixo:
Pressione Wireless e copie o nome "ssid" e senha "password"  e cole estes dados no programa Arduino, veja abaixo:



 Entre no menu Ferramentas e selecione a placa corretamente:  NodeMCU 1.0 ( ESP-12E Module).



Carregar o código NodeMCU ESP8266 WiFi IOT Automation para a placa NodeMCU 1.0 ( ESP-12E Module).


Pronto já podemos fazer o primeiro teste!
Agora entre no IDE Arduino menu, selecione Ferramentas e Monitor Serial:




Veja na figura abaixo:
"ssid": SergioWiFi
URL: http://192.168.2.153


Utilizar este numero de IP que foi capturado pela placa ESP8266 e editar no APP. NodeMCU ESP8266 WiFi IOT Automation, veja a seguir:

Tela principal: Pressione o ícone de rede "NET"


Pressione o ícone cadeado para desbloquear"unblock" e editar o numero de IP

Edite o seu numero de IP que foi capturado anteriormente pela placa ESP8266 através da IDE Arduino.
Utilize aqui seu numero de IP, conforme exemplo abaixo:


Pressione o ícone cadeado para bloquear "block" o modo de edição e em seguida pressione o icone salvar "save" para salvar esta URL no banco de dados do APP.


Pressione o ícone teclado "switche " para retornar à tela principal.


Pronto o App. já está pronto para uso!
 O exemplo acima todas as chaves estão "OFF" desligado; Podemos ver o status das saídas D0 à D8 "OUT 3V", conforme explicado acima trabalhamos com módulo de relés ou leds e fazemos o acionamento quando as chaves comutam em "ON" ligado.

Basta pressionar qualquer chave referente aso dispositivos D0 à D8 para comutar em "ON" ligado, imediatamente um led ou um relé será acionado e o status indicará  "OUT 0V" ligado:




Edição dos dispositivos D0 à D8, basta proceder conforme explicamos anteriormente, pressione ícone cadeado para desbloquear, clique no dispositivo que deseja editar, neste momento um teclado se abre, digite então o novo nome do dispositivo, pressione novamente ícone cadeado para bloquear a edição e em seguida pressione o ícone "disquete" para salvar todas as edições no banco de dados do App.



Acesso WiFi/3G Rede Externa:

O processo é identico ao descrito anteriormente para conexão rede interna, com uma vantagem podemos conectar ao nosso dispositivo a qualquer distância e local, basta termos um ponto de acesso WiFi ou  3G.
No App. clique no ícone "rede" e insira o numero de IP que está chegando em seu roteador "WAN" e complete a edição do server :80, veja como ficou no exemplo abaixo:

Entre no site MEU IP para verificar qual é seu IP real neste momento.
Edite este numero de IP:80, conforme está no seu código da NodeMCU ESP8266:
WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  delay(10);

Então neste exemplo fica assim: http://178.161.324.101:80



Criando um Host:
Importante:Entre no site meu ip e veja qual é o seu ip anote e copie para o aplicativo smartphone;

Se desejar utilizar um host, isso facilita pois voce não precisará utilizar um numero mas sim um host.
Veja a sequência de imagens images abaixo:

Pesquise como dlinkddns.
Click em  creat an account:


Preencha os campos utilizando o Serial Number e MAC do seu Roteador D-Link:

Veja seu Host Name1234.dlinkddns.com:


Veja no exemplo como é fácil, seu Host mantém atualizado todas as vezes que ocorre uma mudança de IP. 



Com um HOST você fica despreucupado com mudanças de IP, pois sempre que huver uma alteração em seu IP, o serviço de Host  irá carregar seu IP atualizado, garantindo sua conexão, além de ficar muito mais fácil e personalizado, veja abaixo:


Importante para e trabalhar com Rede Externa - Abrir Portas do seu Roteador:

Importante: Advanced e Virtual Server:

- Enable para habilitar uma inclusão;
- Name: Digite ESP8266;
- IP Interno ou Private IP: 192.168.2.153
- Protocolo Type: TCP;
- Porta Interna ou Private Port: 80
- Porta Externa ou Public Port: 80
- Shedule: Always;
- Disabled;
- Pressione Apply para salvar e depois Continue e veja novamente nesta página logo abaixo está sua inclusão do ESP8266.






Acompanhe também pelos vídeos:







Atenção para o risco de choque elétrico, utilize cabos dimensionados pela capacidade de corrente;
Utilize sempre Disjuntores ou fusíveis para cada  Dispositivo a ser acionado.




















8 comentários:

  1. Excelente trabalho poderia me ajudar? Eu gostaria de fazer os acionamentos por uma pagina em php como seria a função de cada acionamento de rele? Eu imaginei algo assim
    //
    // function OnOff() {
    // var xmlhttp = new XMLHttpRequest();
    // xmlhttp.open("GET", "http://ipdoesp8266/ledPinD0");
    // xmlhttp.send();
    // }
    Consegue me ajudar?

    ResponderExcluir
  2. Como fasso para desligar e ligar pela web como coloco

    ResponderExcluir
  3. ola amigo vc poderia mandar o link do app nao estou conseguindo achar um igualna play story o que tenho aqui ele nao desliga os leds nao corresponde com o esp so que aparece a msm no monitor serial dizendo conectado depois de um curto tempo 500mls desconecta.
    grato!!!

    ResponderExcluir
  4. Excelente...Quem não conseguir elaborar este projeto, pelo forma que foi sua explicação...não só pode como deve desistir de IOT.Um grande abraço e obrigado.

    ResponderExcluir
  5. Como eu consigo o APP ESP8266 E-MAIL IFTTT monitor and control

    ResponderExcluir
  6. Gostaria de colocar o último contato pulsante, como faço??
    Top: pull boton.

    ResponderExcluir
  7. Nao consigo existe mais o aplicativo! qual serial o outro?

    ResponderExcluir
  8. Um trabalho muito bom top! so que nao existe mais o aplicativo!!!!!!.

    ResponderExcluir