Como posts sobre web servers tem aos rodos, irei fazer algo meio inédito ainda, posts sobre Iots.
Antes de tudo vamos nos situar, o que é um broquer?
Bem broquer é um serviço que pode ser tanto executado pela "nuvem" quanto pelos embarcados de sua residencia, mas no post de hoje irei fazer a execução pela nuvem.
A groço modo o serviço de mqtt é um "carteiro" onde seu embarcado se conecta pela nuvem e fica "vendo" de tempos em tempos se tem alguma requisição, se tem "carta" pra ele. Voce se conecta a nuvem também de onde estiver e manda a tal "carta, e dependendo do conteúdo da carta, o embarcado faz seu desejo, seria algo mais ou menos como a imagem a seguir:
Basicamente com este serviço voce manda uma "carta" para a nuvem mandando acender o led, a nuvem manda pro embarcado e o embarcado acende o led :)
E é o que faremos neste tutorial
Existem vários serviços de broquers disponíveis, uns gratuítos, outros pagos, o que vou utilizar é um gratuíto, disponibilizado pela empresa Blynk
E mais um embarcado, o nodemcu:
A documentação dele voce pode acompanhar no seu própio site aqui
Baixe o aplicativo Blynk na play store no seu celular
Depois instale e faça o cadastro, ira te pedir emails e blabla e voce confirma.
Quando terminar de se registrar esta na hora de criar o projeto, no celular clique na caixa verde:
Depois escolha um nome e embaixo escolha o seu embarcado, entre as opções tem esp8266 e nodemcu, se voce estiver usando o nodemcu*como eu*escolha o nodemcu
No canto superior esquerdo do seu cel tem um desenho de uma porca sextavada, clique nela e será aberta esta tela:
clique em send email e no seu email aparecera o token:
voce pode usar ele neste código primário:
---------------------------------
#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(); }
-----------------------------------
Mas para facilitar ainda mais a vida de voces eu criei uma página Web quevoce pode colocar o seu
token numa caixa de texto e dar o enter :)
Veja as scans da pagina antes deu colocar o código
----------------------
#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>
// ID de Configuração
int posicao=0;
int botaoreset=D0;
int led=D4;
// Estrutura de configuração da EEPROM
ESP8266WebServer server(80);
void configWifi()
{
String token="";
int i=0;
char valor=char(EEPROM.read(i));
while(valor!='\0'){
valor=char(EEPROM.read(i));
token +=valor;
i++;
}
String taken="";
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:15px;}";
html +=".btn{background-color:#2F2F4F;color:#E6E8FA;font-family:,'Times New Roman',Arial,Verdana;font-size:20px;}</style>";
html += "</head><body>";
html += "<h1>Eletronica e utilidades, uso do protocolo mqtt</h1>";
html += "<form method=POST>";
html += "<p>token: <input name=txttoken type=text value=\"";
html += "\" /></p>";
html+="<br><br><H1>Valor do token</h1>";
html+="<br><br>";
html +=(token);
html+="<br><br>";
html += "<p>Clique em enviar</p>";
html += "<p><input name=button1 class='btn' type=submit value=Enviar /></p></form>";
html += "</body></center></html>";
server.send(200, "text/html", html);
}
void configWifiSubmit()
{byte contador=0;
char token[50]="";
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 +="input{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 taken = server.arg("txttoken");
taken.toCharArray(token,50);
for(int i=0;i<sizeof(token);i++){
contador=i;
EEPROM.write(i,token[i]);
}
EEPROM.commit();
html += "<p>token: <b>";
html += token;
html+= contador;
html += "<form method=GET>";
html += "<p><input name=button2 type=submit value=Voltar /></p></form>";
html += "</body></center></html>";
server.send(200, "text/html", html);
ESP.restart();
}
void setup()
{
pinMode(botaoreset,INPUT);
pinMode(led,OUTPUT);
// Iniciando Serial
Serial.begin(9600);
// Iniciando EEPROM
EEPROM.begin(512);
String token="";
char taken[50]="";
int i=0;
char valor=char(EEPROM.read(i));
while(valor!='\0'){
valor=char(EEPROM.read(i));
token +=valor;
i++;
}
token.toCharArray(taken,50);
if(digitalRead(botaoreset)==HIGH){
digitalWrite(led,LOW);
WiFi.begin("Seu login wifi", "sua senha wifi");
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(botaoreset)==LOW){
digitalWrite(led,HIGH);
digitalWrite(led,HIGH);
Blynk.begin(taken, "Seu login wifi","sua senha wifi");
}
Serial.println("");
Serial.print("Connected to ");
Serial.print("sua rede ");
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);
// Iniciando servidor
server.begin();
// Apenas informando que servidor iniciou
Serial.println("HTTP server started");
}
void loop()
{
// No loop só precisa dessa função
server.handleClient();
if(digitalRead(botaoreset)==LOW){
Blynk.run();
}
}
#include <ESP8266WebServer.h>
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
// ID de Configuração
int posicao=0;
int botaoreset=D0;
int led=D4;
// Estrutura de configuração da EEPROM
ESP8266WebServer server(80);
void configWifi()
{
String token="";
int i=0;
char valor=char(EEPROM.read(i));
while(valor!='\0'){
valor=char(EEPROM.read(i));
token +=valor;
i++;
}
String taken="";
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:15px;}";
html +=".btn{background-color:#2F2F4F;color:#E6E8FA;font-family:,'Times New Roman',Arial,Verdana;font-size:20px;}</style>";
html += "</head><body>";
html += "<h1>Eletronica e utilidades, uso do protocolo mqtt</h1>";
html += "<form method=POST>";
html += "<p>token: <input name=txttoken type=text value=\"";
html += "\" /></p>";
html+="<br><br><H1>Valor do token</h1>";
html+="<br><br>";
html +=(token);
html+="<br><br>";
html += "<p>Clique em enviar</p>";
html += "<p><input name=button1 class='btn' type=submit value=Enviar /></p></form>";
html += "</body></center></html>";
server.send(200, "text/html", html);
}
void configWifiSubmit()
{byte contador=0;
char token[50]="";
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 +="input{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 taken = server.arg("txttoken");
taken.toCharArray(token,50);
for(int i=0;i<sizeof(token);i++){
contador=i;
EEPROM.write(i,token[i]);
}
EEPROM.commit();
html += "<p>token: <b>";
html += token;
html+= contador;
html += "<form method=GET>";
html += "<p><input name=button2 type=submit value=Voltar /></p></form>";
html += "</body></center></html>";
server.send(200, "text/html", html);
ESP.restart();
}
void setup()
{
pinMode(botaoreset,INPUT);
pinMode(led,OUTPUT);
// Iniciando Serial
Serial.begin(9600);
// Iniciando EEPROM
EEPROM.begin(512);
String token="";
char taken[50]="";
int i=0;
char valor=char(EEPROM.read(i));
while(valor!='\0'){
valor=char(EEPROM.read(i));
token +=valor;
i++;
}
token.toCharArray(taken,50);
if(digitalRead(botaoreset)==HIGH){
digitalWrite(led,LOW);
WiFi.begin("Seu login wifi", "sua senha wifi");
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(botaoreset)==LOW){
digitalWrite(led,HIGH);
digitalWrite(led,HIGH);
Blynk.begin(taken, "Seu login wifi","sua senha wifi");
}
Serial.println("");
Serial.print("Connected to ");
Serial.print("sua rede ");
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);
// Iniciando servidor
server.begin();
// Apenas informando que servidor iniciou
Serial.println("HTTP server started");
}
void loop()
{
// No loop só precisa dessa função
server.handleClient();
if(digitalRead(botaoreset)==LOW){
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
Pronto pessoal, e em breve o vídeo, espero que tenham gostado o/
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
Pronto pessoal, e em breve o vídeo, espero que tenham gostado o/
Nenhum comentário:
Postar um comentário