Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso...

24
Por Fernando Koyanagi

Transcript of Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso...

Page 1: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Por Fernando Koyanagi

Page 2: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Características principais

Leitura da Temperatura

Leitura da Umidade

Page 3: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Montagem

Page 4: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Vamos ao códigoPrimeiro passo é incluir as libs que iremos utilizar. A lib do DHT pode ser adicionada pela opção Sketch > Incluir Biblioteca > Gerenciar Bibliotecas...Na janela que abrir procure por DHT sensor library.Depois disso criamos uma variável do tipo ESP8266WebServer que será o nossoservidor que irá responder as requisições http (porta 80).Criamos também uma variável do tipo DHT com os parâmetros 0 (que é o pinoGPIO 0) e o tipo (no nosso caso DHT22)

#include <ESP8266WiFi.h>#include <WiFiClient.h>#include <ESP8266WebServer.h>#include <ESP8266mDNS.h>#include <DHT.h>//Criamos uma variável do tipo ESP8266WebServer que já possui funções//que auxiliam na criação das rotas que o ESP8266 vai responderESP8266WebServer server(80);//Variável do tipo DHT que possui funções para controlarmos o módulo dht//permitindo ler a temperatura e a umidadeDHT dht(0, DHT22);

Page 5: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

SetupNo setup vamos inicializar o Serial apenas para que tenhamos um log, caso o ESP8266 esteja conectado ao computador através da serial para utilizarmos o monitor serial.Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de acordo com a rede que irá utilizar.

//Inicialize a Serial apenas caso queira ter um log //para facilitar saber o que está acontecendo com o ESP8266Serial.begin(115200);

//Instrução para o ESP8266 se conectar à rede. //No nosso caso o nome da rede é TesteESP e a senha é 87654321. //Você deve alterar com as informações da sua redeWiFi.begin("TesteESP", "87654321" );

//Feedback caso esteja usando o Monitor Serial Serial.println("");Serial.print("Conectando");

Page 6: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

SetupAguardamos o ESP8266 se conectar à rede e após ele se conectar enviamos as configurações da rede. Altere conforme a sua rede.

//Esperamos até que o módulo se conecte à redewhile(WiFi.status() != WL_CONNECTED){

delay(500);Serial.print(".");

}//Configurações do IP fixo. Você pode alterar conforme a sua redeIPAddress ip(192, 168, 2, 8);IPAddress gateway(192, 168, 2, 1);IPAddress subnet(255, 255, 255, 0);Serial.print("Configurando IP fixo para : ");Serial.println(ip);//Envia a configuraçãoWiFi.config(ip, gateway, subnet);

Page 7: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

SetupOs próximos comandos são apenas para caso esteja com o ESP8266 conectado ao computador pela serial para que você tenha um feedback pelo Monitor Serial.Você pode conferir o IP que o ESP8266 recebeu para ver se é o mesmo que está nas configurações.

//Mostramos no Monitor Serial o ip com o qual o esp8266 se conectouSerial.println("");Serial.println("Connectado");Serial.print ("IP: ");Serial.println(WiFi.localIP());

Page 8: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

SetupAqui começamos a definir quais funções serão executadas para cada requisição.Na instrução abaixo, toda vez que o ESP8266 receber uma requisição http do tipo GET no caminho /temperature a função getTemperature irá ser executada.

//Aqui definimos qual a função será executada para o caminho e tipo.//Nesse caso quando houver uma requisição http do tipo GET no //caminho http://192.168.2.8/temperature (pode ser outro ip dependendo //da sua configuração) a função getTemperature será executadaserver.on("/temperature", HTTP_GET, getTemperature);

Page 9: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

SetupNessa outra instrução, toda vez que o ESP8266 receber uma requisição http do tipo GET no caminho /humidity a função getHumidity irá ser executada.

//Nesse outo caso quando houver uma requisição http do tipo GET //no caminho http://192.168.2.8/humidity (pode ser outro ip dependendo //da sua configuração) a função getHumidity será executadaserver.on(”/humidity ", HTTP_GET, getHumidity);

Page 10: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

SetupNessa instrução, toda vez que o ESP8266 receber uma requisição http do tipo GET no caminho /monitor a função showMonitor irá ser executada.A função showMonitor é a responsável por retornar o html principal que irá mostrar os valores da temperatura e da umidade.

//Nesse caso quando houver uma requisição http do tipo GET //no caminho http://192.168.2.8/monitor (pode ser outro ip dependendo//da sua configuração) a função showMonitor será executada. //Esta função retornará a página principal que mostrará os valores//da temperatura e da umidade e recarregará essas informações de tempos// em temposserver.on(”/monitor", HTTP_GET, showMonitor);

Page 11: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Setup

Aqui é a definição da função que deve ser executada quando o caminho requisitado não for encontrado

//Aqui definimos qual função será executada caso o caminho que //o cliente requisitou não tenha sido registrado

server.onNotFound(onNotFound);

Page 12: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

SetupAqui inicializamos o nosso servidor que declaramos anteriormente na porta 80.Com isso terminamos o setup.

//Inicializamos o server que criamos na porta 80server.begin();Serial.println("Servidor HTTP iniciado");

}

Page 13: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

LoopGraças a lib ESP8266WebServer não precisamos ficar verificando no loop se háclientes e qual o caminho da requisição. Apenas precisamos chamar handleClient()e o objeto verificará se algum cliente está fazendo alguma requisição e iráredirecionar para a função correspondente que registramos anterirormente.

void loop()

{

//Verifica se há alguma requisição de algum cliente

server.handleClient();}

Page 14: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Requisição não encontradaEssa é a função que registramos anteriormente para ser executada quando o cliente fizer alguma requisição que não foi registrada.A função apenas volta o código 404 (código padrão para quando um recurso não é encontrado), o tipo de dado retornado (no caso texto puro) e um texto com os dizeres “Not Found”.

//Função que definimos para ser chamada quando o caminho //requisitado não foi registrado void onNotFound() {server.send(404, "text/plain", "Not Found" );

}

Page 15: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Retornando a temperaturaEssa é a função que retornará um json com os dados da temperatura quando o cliente fizer uma requisição do tipo GET em /temperature

//Função que definimos que será executada quando o cliente fizer uma //requisição do tipo GET no caminho http://192.168.2.8/temperature//(pode ser outro ip dependendo da sua configuração) void getTemperature(){

//Fazemos a leitura da temperatura através do módulo dhtfloat t = dht.readTemperature();

//Cria um json com os dados da temperatura String json = "{\"temperature\":"+String(t)+"}";

//Envia o json para o cliente com o código 200, que é o código quando a //requisição foi realizada com sucessoserver.send (200, "application/json", json);

}

Page 16: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Retornando a umidadeEssa é a função que retornará um json com os dados da umidade quando o cliente fizer uma requisição do tipo GET em /humidity

//Função que definimos que será executada quando o cliente fizer uma //requisição do tipo GET no caminho http://192.168.2.8/humidity//(pode ser outro ip dependendo da sua configuração) void getHumidity(){

//Fazemos a leitura da umidade através do módulo dhtfloat h = dht.readHumidity();

//Cria um json com os dados da umidadeString json = "{\”humidity\":"+String(h)+"}";

//Envia o json para o cliente com o código 200, que é o código quando a //requisição foi realizada com sucessoserver.send (200, "application/json", json);

}

Page 17: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

HTMLEssa é a função que retornará o html quando o cliente acessar /monitor. Esta página mostrará os valores da temperatura e umidade e recarregará os dados de tempos em tempos. A parte que está entre <style type=‘text/css’> e </style> definem a aparência da página e você pode alterar conforme queira.

//Função que definimos que será executada quando o cliente fizer uma requisição//do tipo GET no caminho http://192.168.2.8/monitor (pode ser outro ip dependendo da sua configuração) void showMonitor(){

String html =

"<html>"

"<head>"

"<meta name='viewport' content='width=device-width, initial-scale=1, user-scalable=no'/>"

"<title>DHT Monitor</title>"

"<style type='text/css'>"

"body{"

"padding: 35px;"

"background-color: #222222;"

"}"

Page 18: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

HTML

"h1{”

"color: #FFFFFF;"

"font-family: sans-serif;"

"}"

"p{"

"color: #EEEEEE;"

"font-family: sans-serif;”

"font-size:18px;"

"}"

"</style>"

"</head>"

Continuação do style do HTML

Page 19: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

HTML

"<body>”"<h1>DHT Monitor</h1>""<p id='temperature'>Temperature: </p>""<p id='humidity'>Humidity: </p>”"</body>"

Aqui temos a parte principal do html. Nele temos dois parágrafos que irão mostrar a temperatura e a umidade. Atenção para os ids dos parágrafos pois é através deles que iremos recuperar estes parágrafos para inserir os valores da temperatura e umidade após as requisições.

Page 20: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Javascript

"<script type='text/javascript'>""refresh();""setInterval(refresh, 5000);""function refresh()""{""refreshTemperature()""refreshHumidity();"

"}"

Aqui começamos a definir o script que vai de tempos em tempos ler os valores da temperatura e umidade. A função refresh() chama as funções refreshTemperature() e refreshHumdity() e o setInterval chama a função refresh a cada 5000 milisegundos (5 segundos)

Page 21: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Javascript

"function refreshTemperature()"

"{"

"var xmlhttp = new XMLHttpRequest();"

"xmlhttp.onreadystatechange = function() {"

"if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200){"

"document.getElementById('temperature').innerHTML = 'Temperature: ' + JSON.parse(xmlhttp.responseText).temperature+ 'ºC';"

"}"

"};"

"xmlhttp.open('GET', 'http://192.168.2.8/temperature', true);"

"xmlhttp.send();"

"}"

A função refreshTemperature() faz uma requisição à /temperature e faz o parse da informação contida no json e adiciona no parágrafo com id temperature

Page 22: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Javascript

"function refreshHumidity()"

"{"

"var xmlhttp = new XMLHttpRequest();"

"xmlhttp.onreadystatechange = function() {"

"if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200){"

"document.getElementById('humidity').innerHTML = 'Humidity: ' + JSON.parse(xmlhttp.responseText).humidity + '%';"

"}"

"};"

"xmlhttp.open('GET', 'http://192.168.2.8/humidity', true);"

"xmlhttp.send();"

"}"

"</script>"

"</html>";

A função refreshHumidity() faz uma requisição à /humidity e faz o parse da informação contida no json e adiciona no parágrafo com id humidity. E com isso finalizamos o html que enviaremos nas requisições em /monitior

Page 23: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

Finalizando showMonitor

//Envia o html para o cliente com o código 200, que é o código //quando a requisição foi realizada com sucessoserver.send(200, "text/html", html);

}

Agora que a string com o html que enviaremos está pronta podemos enviar para o cliente. Com isso finalizamos a função showMonitor e o código.

Page 24: Apresentação do PowerPoint · Iremos fazer com que o ESP8266 se conecte a nossa rede. No nosso caso usamos a rede TesteESP com a senha 87654321, mas você terá que alterar de

TestandoAgora abra seu navegador e digite http://192.168.2.8/monitor (pode ser outro ipdependendo da sua configuração)