Ir ao conteúdo
  • Cadastre-se

Tutorial//NODEMCU ESP8266\\Como conectar ao broquer mqtt


Posts recomendados

Bom pessoal, antes de mais nada queria dedicar este tutorial primeiramente a Deus nosso criador e posteriormente a galera que se unia em outro tópico em prol de um bem comum.

..

forum "mae"

 

@alexandre.mbm @aphawk @Papibakigrafo @ViniciusKruz e INTRUDERA

 

Terminados agradecimentos vamos ao que interessa...

Este não será mais um tópico de webServer pois webserver deixou de ser tabu ha muito tempo para quem cavaca as coisas na internet. Tendo trilhões de exemplos tanto do arduino como do Nodemcu, então vou apelar para algo um pouco inédito em questão de documentação nacional. O protocolo mqtt

 

Mas o que seria esse protocolo??? Ele faz bastante coisa! Mas uma das funções que acho interessante nele é que ele age como um "carteiro" recebendo o "correio" do esp8266 conectado a sua residencia e enviando as suas "cartas" para o esp de longe...

Assim sendo vai uma imagem de exemplo no final do post. (não consegui inserir no meio do topico -_-')

Entre os protocolos mqtt existem vários!  Uns pagos, outros gratuitos mas hoje vou demonstrar o que mais gostei e me adaptei:

 

Um broquer chamado blynk, que tem como vantagens automatização dos pinos(ligar e desligar)leitura de sensores, esboçamento dos mesmos em gráficos,etc.

E desvantagens*Só pode ser usado pelo celular, pelo que eu entendi para gerar um aplicativo tem que ser pago, mas para pequenos projetos cabe como uma luva*

 

voce pode acompanhar a documentação do blynk na integra no link

 

 

Primeiro baixem o aplicativo blynk na play Store

 

Depois o própio aplicativo irá pedir um cadastro, faça-o e insira seu email.

 

Ao clicar em um novo projeto, voce escolhe a placa(entre as opções tem o nodemcu e o esp8266) e o nome do projeto.

No canto superior direiro clique na porca sextavada e no campo que se abre escolha a opção "send email".

No seu email voce receberá um token do código blynk, deverá substituir ele no campo ="auth". do código seguinte.

Como imagens valem mais do que mil palavras, segue o procedimento descrito por mim neste 

site

 

Em tempo, ia me esqueçendo, tem que instalar a biblioteca Blynk no arduino,voce pode fazer o download aqui

Então povo, o código exemplo do blynk no seu sentido mais simples e rud é este aqui:

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "5d454bdd4e7d4835907dc7a7fffe3320";//Seu token obtido pelo blynk

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Seu login";
char pass[] = "sua senha";

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}

 

-----------------

Se voce "upar" ele poderá se divertir com os acionamentos de led pelo celular, bastando apenas seu celular ter internet, não importando o lugar.

 

Mas para facilitar ainda mais as coisas, me baseei num código escrito por Renato Aloi, que vocês podem ve-lo na integra aqui

 

 

E fiz um código específico meu, para que vocês utilizem uma página do web server do nodemcu e nela vocês insirem o seu token sempre que precisar configurá-lo.

Segue o código feito por mim:

#include <EEPROM.h>

#include <ESP8266WebServer.h>
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).

// Locais dos itens da configuração
#define VERSION_START  500
#define CONFIG_START   6
#define CONFIG_VERSION "1a"




int botao1= D0;
int led=D4;


//Situação do Relê



// Estrutura de configuração da EEPROM
struct ConfigStruct
{
  
   char token[50];
  IPAddress ip;
  IPAddress gateway;
 
} wifiConfig;

ESP8266WebServer server(80);




void callback(char* topic, byte* payload, unsigned int length);

void saveConfig()
{
  for (unsigned int t = 0; t < sizeof(wifiConfig); t++) {
    EEPROM.write(CONFIG_START + t, *((char*)&wifiConfig + t));
  }
  // Salvando o ID da versão para puxar da EEPROM
  // da proxima vez que for carregar
  EEPROM.write(VERSION_START + 0, CONFIG_VERSION[0]);
  EEPROM.write(VERSION_START + 1, CONFIG_VERSION[1]);
  
  EEPROM.commit();
}

void loadConfig()
{
  if (EEPROM.read(VERSION_START + 0) == CONFIG_VERSION[0] &&
      EEPROM.read(VERSION_START + 1) == CONFIG_VERSION[1]
      
     ) {
    // Carregando a estrutura main config
    for (unsigned int t = 0; t < sizeof(wifiConfig); t++)
      *((char*)&wifiConfig + t) = EEPROM.read(CONFIG_START + t);
  }
  else {
    // Configuração inicial
   
    String token="00f2495f1d4849a2a0cdb9fe7f2a00fe";
   
   token.toCharArray(wifiConfig.token, 50);
    
    saveConfig();
  }
}


void configWifi()
{
 
  String html = "<html><head><title>Configurar o token</title><center>";
  html += "<meta charset='UTF-8' language='pt-br'><style type='text/css' media='all'>";
html += "body{background-color:#527F76;color:#FFFF99;font-family:Verdana,'Times New Roman',Arial;font-size:20px;}";
html +="input{background-color:#2F2F4F;color:#E6E8FA;font-family:'Times New Roman',Arial,Verdana;font-size:22px;}</style>";
    html += "</head><body>";
  html += "<h1>Eletronica e utilidades</h1><br><br><h2> Uso do protocolo mqtt</h2>";
  html+="<br><br>";
  html +="<p>Para mais informações,acesse o site do Blynk:http://www.blynk.cc/";
  html += "<form method=POST>";
  html += "<p>token: <input name=txttoken type=text value=\"";

  
  html += wifiConfig.token;
  html += "\" /></p>";
  
  html += "<p><input name=button1  type=submit value=Enviar /></p></form>";
  html += "</body></html>";

  server.send(200, "text/html", html);
}
void handleNotFound(){
  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);
}

void configWifiSubmit()
{
 String html = "<html><head><title>Configurar o token submit</title><center>";
  html += "<meta charset='UTF-8' language='pt-br'><style type='text/css' media='all'>";
html += "body{background-color:#527F76;color:#FFFF99;font-family:Verdana,'Times New Roman',Arial;font-size:15px;}";
html +=".btn{background-color:#2F2F4F;color:#E6E8FA;font-family:,'Times New Roman',Arial,Verdana;font-size:20px;}</style>";

   html += "</head><body>";
  html += "<h1>configuração do token </h1>";
  html += "<p>Dados gravados com sucesso!</p>";

  String token = server.arg("txttoken");
  
 
  token.toCharArray(wifiConfig.token,50);
  
  
   html += "<p>Senha do token de uso do wifi Blynk: <b>";
  html += wifiConfig.token;
  html += "</b></p>";
  
  html += "</b></p>";
  html += "<form method=GET>";
  html += "<p><input name=button2 type=submit value=Voltar /></p></form>";
  html += "</body></html>";
 
  server.send(200, "text/html", html);

  saveConfig();
  ESP.restart();
}


void setup()
{
  pinMode(botao1,INPUT);
  pinMode(led,OUTPUT);
 
  // Iniciando Serial
  Serial.begin(9600);
  
   

  // Iniciando EEPROM
  EEPROM.begin(512);
 
     loadConfig();
  if(digitalRead(botao1)==HIGH){
    digitalWrite(led,LOW);
 WiFi.begin("Seu login", "sua senha");
  IPAddress subnet(255, 255, 255, 0);  
  WiFi.config(IPAddress(192,168,0,135), 
  IPAddress(192,168,0,1), subnet); 
  
  // Aguardando conectar na rede
  Serial.println("");
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print('.');
  }
  }
  if(digitalRead(botao1)==LOW){
 digitalWrite(led,HIGH);
Blynk.begin(wifiConfig.token, "Seu login","sua senha");
     
  }
 
 
  
  
  
    Serial.println("Web Server ativo em: http://");
    Serial.print(WiFi.localIP());
  
  

  
 
  // Apresenta dados da conexão
  Serial.println("");
  Serial.print("Connected to ");
  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  
 
  // Atribuindo urls para funções
  // Quando não especificado método, uma função trata todos
 
  // Chamada dos métodos de configuração
  server.on("/", HTTP_GET, configWifi);
  server.on("/", HTTP_POST, configWifiSubmit);
 
 
  server.begin();
  Serial.println("HTTP server started");
  
}
void loop()
{
 
    

 
 
  // No loop só precisa dessa função
  server.handleClient();
  
    Blynk.run();
  
  
}

1° As explicações. Esse código opera de duas formas diferentes:

Com o web server ligado e com o protocolo mqtt ligado.

1° voce deverá ligado nas configurações do webserver, para isso pegue o pino D0 e ligue ele ao positivo por meio de um resistor de 10k conforme uma das imagens em anexo,só depois que você liga o aparelho na fonte.

Se fizer isso a luz azul dele irá ascender, denotando que ele está configurado como Webserver, nesse caso basta voce digitar o ip:192.168.0.135 que voce entrará na pagina de configuração do token, e lá no token digite o token que voce recebeu por email "melhor, dê control+c e control+v kkkkkkkkkkkkkkk".

 

Pronto, os dados foram gravados. Agora desligue o seu node e desfaça a gambiarra no pino 0,depois ligue o pino d0 direto no terra, depois volte a ligar o nodemcu .Assim o node entrará em modo "mqtt" e se conectará ao blynk server, e pronto, voce pode acionar leds, relays, de qualquer lugar do mundo :)

 

Segue logo embaixo as páginas do node em modo web server, minha intenção real era espalhar as imagens enquanto ia explicando as coisas no tópico, mas não sei como fazer isso o/

 

Fig3.1_4.png

button_nodemcu.png

jkkj.png

llll.png

  • Curtir 5
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...