ESP8266 envia e-mail leitura de sensores e controla dispositivos ON/OFF Wi-Fi
Google Play: ESP8266 e-mail IFTTT monitor and control
https://play.google.com/store/apps/details?id=appinventor.ai_antoniosergiosouzaalmeida.ESP8266_email_IFTTT_monitor_and_control
Icones:
ESP8266 envia e-mail referente à leitura do sensor DHT22 temperatura e umidade;
Envia e-mail referente a leitura do sensor HC-SR501-PIR sensor de movimento e detecção de ondas de calor infra vermelho.
O ESP8266 funciona conectado à rede Wi-Fi sem fio, os parâmetros dos sensores podem ser ajustados para enviar e-mail com os valores desejados.
Veja passo a passo utilização do App. e como é fácil enviar novos e-mails com o IFTTT:
Código ESP8266 completo utilizando IDE Arduino.
O APP. possui também :
- 5 Botões tipo chaves ON/OFF para acionamento de dispositivos conectados à rede 110/220V, através de relés;
- 1 Botão de pulso tipo push button para abertura de portão com trava eletromagnética conectado à rede 110/220V, através de relé;
- Todos os botões são editáveis com os nomes dos dispositivos específicos;
- Todos os botões são sinalizados quando acionados:
O ESP8266 recebe dados do APP. processa a informação e retorna ao APP. os status sobre a leitura das portas acionadas, o que faz a sinalização correta quando uma chave é acionada.
E-mail:
O ESP8266 faz conexão com com sua rede Wi-Fi, através do nome de usuário e senha;
Estando conectado podemos ver na IDE Arduino todas essas informações inclusive o numero de IP e porta;
Então basta copiar IP e porta para a URL do App. como exemplo:
http://192.168.1.50:8088
IFTTT: IF THIS THEN THAT
Nesta página faremos as referências sobre as atuações dos sensores, a lista de E-mails e o corpo do E-mail com a descrição ou tipo de atuação, como exemplo:
E-mail: Alerta temperatura acima de 30C, Umidade acima do valor permitido(95%) ou ainda Alerta: Movimentação nesta área, favor verificar imediatamente.
Para editar a URL ou nome dos botões, basta pressionar o botão cadeado para destravar, entrar em modo de edição, terminado pressione cadeado novamente para sair do modo de edição e em seguida pressione o botão salvar;
Todos os dados serão salvos no banco de dados do App.
Todos os dados de leitura dos sensores serão monitorados a cada 5 segundos;
O App. possui um botão atualizar que atualiza os dados sobre sensores ou botões instantaneamente.
Modo de atualização: Recupera a ultima atuação de botões ou sensores;
Quando sair do App. e entrar novamente pressione o botão atualizar e verá que o App. recupera todos os status de botões e sensores enviados pelo ESP8266.
Resumo:
- Enviar e-mail sobre a atuação de sensores com valores ajustados no App.;- Enviar outros e-mails, basta criar novo e-mail e inserir no código do ESP8266;
- Editar código exemplo ESP8266 IDE Arduino e enviar e-mail em condições diversas;
- Temperatura e Umidade com o sensor DHT22;
- Movimento e detecção de ondas de calor infra vermelho com o sensor HC-SR501-PIR;
- Leitura dos sensores com ajustes(máximo e mínimo) e sinalização;
- Monitorar sensores;
- 5 Botões tipo chaves ON/OFF para acionamento de dispositivos conectados à rede 110/220V, através de relés;
- 1 Botão de pulso tipo push button para abertura de portão com trava eletromagnética conectado à rede 110/220V, através de relé;
- Editável: Campos editáveis;
- Salvar dados no banco de dados do App.;
- Botão atualizar: retorna o status dado do ultimo acionamento ou leitura de sensor.
Veja passo a passo utilização do App. e como é fácil enviar novos e-mails com o IFTTT:
Código ESP8266 completo utilizando IDE Arduino.
Google Play: ESP8266 e-mail IFTTT monitor and control
https://play.google.com/store/apps/details?id=appinventor.ai_antoniosergiosouzaalmeida.ESP8266_email_IFTTT_monitor_and_control
Instalações:
- Meu SSID: sergioDWR116
- Meu PASSWORD: sergio1234
- Meu PASSWORD: sergio1234
Esquema Elétrico:
Ligações dos relés:
Exemplo de ligações utilizando módulo de relés na rede elétrica:
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.
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.
Programa ESP8266: ESP8266 e-mail IFTTT monitor and control
#include <ESP8266WiFi.h>
#include <String.h>
//------------------------------
#include <WiFiClientSecure.h>
WiFiClientSecure client;
#define EVENTO "ESP_DHT22"
#define HOSTIFTTT "maker.ifttt.com"
//------------------Inserir sua chave de código do IFTTT-----------------------------------
//---------------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------
//CHAVES DE CODIGO APENAS PARA TESTES DO CODIGO ESP8266;
//COM ESTAS CHAVES DE EXEMPLO NÃO SERÁ ENVIADO E-MAIL;
//CRIAR SUAS PRÓPRIAS CHAVES NO IFTTT;
//VEJA NESTE BLOG EXPLICAÇÃO PASSO A PASSO DE COMO CRIAR AS CHAVES DE CODIGO NO IFTTT;
//------------------Inserir sua chave de código do IFTTT-----------------------------------
//---------------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------
//CHAVES DE CODIGO APENAS PARA TESTES DO CODIGO ESP8266;
//COM ESTAS CHAVES DE EXEMPLO NÃO SERÁ ENVIADO E-MAIL;
//CRIAR SUAS PRÓPRIAS CHAVES NO IFTTT;
//VEJA NESTE BLOG EXPLICAÇÃO PASSO A PASSO DE COMO CRIAR AS CHAVES DE CODIGO NO IFTTT;
#define IFTTTKEY "NuJoiOsa3qAOcFteiLcg01234567895hsNSvXkU25L"
//---------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
//--------Inserir aqui o seu SSID e PASSWORD----------------------------------------------------
const char* ssid = "sergioDWR116";//Inserir aqui o nome da rede Wi-Fi do seu roteador;
const char* password = "sergio1234";//Inserir aqui a senha da rede Wi-Fi do seu roteador;
//------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------
//------Inserir aqui seus eventos e chaves de código do IFTTT----------------------------------
//---------------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------
//CHAVES DE CODIGO APENAS PARA TESTES DO CODIGO ESP8266;
//COM ESTAS CHAVES DE EXEMPLO NÃO SERÁ ENVIADO E-MAIL;
//CRIAR SUAS PRÓPRIAS CHAVES NO IFTTT;
//VEJA NESTE BLOG EXPLICAÇÃO PASSO A PASSO DE COMO CRIAR AS CHAVES DE CODIGO NO IFTTT;
const char* resource = "/trigger/Alert: Temperature/with/key/NuJoiOsa3qAOcFteiLcg01234567895hsNSvXkU25L";
const char* resource3 = "/trigger/Alert_High_Humidity/with/key/NuJoiOsa3qAOcFteiLcg01234567895hsNSvXkU25L";
const char* resource2 = "/trigger/Alert: Movement in this area!/with/key/NuJoiOsa3qAOcFteiLcg01234567895hsNSvXkU25L";
//---------------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------
//---------------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------
//CHAVES DE CODIGO APENAS PARA TESTES DO CODIGO ESP8266;
//COM ESTAS CHAVES DE EXEMPLO NÃO SERÁ ENVIADO E-MAIL;
//CRIAR SUAS PRÓPRIAS CHAVES NO IFTTT;
//VEJA NESTE BLOG EXPLICAÇÃO PASSO A PASSO DE COMO CRIAR AS CHAVES DE CODIGO NO IFTTT;
const char* resource = "/trigger/Alert: Temperature/with/key/NuJoiOsa3qAOcFteiLcg01234567895hsNSvXkU25L";
const char* resource3 = "/trigger/Alert_High_Humidity/with/key/NuJoiOsa3qAOcFteiLcg01234567895hsNSvXkU25L";
const char* resource2 = "/trigger/Alert: Movement in this area!/with/key/NuJoiOsa3qAOcFteiLcg01234567895hsNSvXkU25L";
//---------------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------ATENÇÃO---------
const char* server = "maker.ifttt.com";
byte conta1=0;//button_pressed;
byte conta2=0;//Temperatura acima de 30C;
byte conta3=0;//Temp.abaixo de 27C;
int contaLoop=0;//Contagem de loop;
int setTemp=30;
//------------------------------
WiFiServer server2(8088);//80---------------------------------------------------------
//------------------------------
String header;
String request;
String outputD0State = "OFF";
String outputD1State = "OFF";
String outputD2State = "OFF";
String outputD3State = "OFF";
//-------------------------------------
String incSetTemp = "OFF";
String decSetTemp = "OFF";
//--------------------------------------
//Mapeamento de pinos do NodeMCU
#define PinD0 16
#define PinD1 5
#define PinD2 4
#define PinD3 0
#define PinD4 2
#define PinD5 14
#define PinD6 12
#define PinD7 13
#define PinD8 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;
//---------------------------------------
float DHT22T=30;//Set Temperature;
float DHT22H=95;//Set Humidity;
//---------------------------------------
//---------------------------------------
#include "DHT.h"
#define DHTPIN PinD7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
struct package
{
float temperature ;
float humidity ;
};
//float h = dht.readHumidity();
//float t = dht.readTemperature();
typedef struct package Package;
Package data;
//--------------------------------------
void setup() {
Serial.begin(9600);
delay(10);
dht.begin();
//-------------------------
pinMode(PinD0, OUTPUT);
pinMode(PinD1, OUTPUT);
pinMode(PinD2, OUTPUT);
pinMode(PinD3, OUTPUT);
pinMode(PinD4, OUTPUT);
pinMode(PinD5, OUTPUT);
pinMode(PinD6, INPUT);//PIR-SR501
pinMode(PinD7, INPUT);//DHT22
pinMode(PinD8, OUTPUT);
digitalWrite(PinD0, HIGH);//Btn1;
digitalWrite(PinD1, HIGH);//Btn2;
digitalWrite(PinD2, HIGH);//Btn3;
digitalWrite(PinD3, HIGH);//Btn4;
digitalWrite(PinD4, HIGH);//Btn5;
digitalWrite(PinD5, HIGH);//Pulse1;
digitalWrite(PinD6, LOW);//PIR SR_501;
digitalWrite(PinD7, HIGH);//DHT22;
digitalWrite(PinD8, HIGH);//N/C
//-----------Iniciar Web-----------
Serial.println("");
Serial.print("Connecting to ");
Serial.print("ssid:");
Serial.print(ssid);
Serial.print(", password: ");
Serial.print(password);
Serial.println("");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.print("IP address: ");
Serial.print(WiFi.localIP());
Serial.print(", server: 8088");
Serial.println("");
Serial.println("");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.print(":8088");
Serial.println("");
server2.begin();//Web
}
//-------------------------------------
void loop(){
//-----Sensor PIR active after 30 seconds-
contaLoop++;
if(contaLoop>=10000){
contaLoop=0;
conta1=0;
}
float h = dht.readHumidity();
float t = dht.readTemperature();
WiFiClient client = server2.available();
if (client) {
Serial.println("New Client.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
//header += c;
request += c;
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println("Refresh: 2"); //Recarrega a pagina a cada 30seg---------------------------
client.println();
//----------------------------------------------------------
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println((float)t,1);
client.println((float)h,1);
//--------------------------------
client.println((float)DHT22T,0);
client.println((float)DHT22H,0);
//--------------------------------
//--------NodeMCU ESP8266 recebe do Android------
if (request.indexOf("/PinD0=ON") != -1) {
digitalWrite(PinD0, LOW);//Coloca pino digital D0 em nível lógico "0";
valueD0 = LOW;//Atribui nivel lógico "0" á variável valueD0;
}
if (request.indexOf("/PinD0=OFF") != -1) {
digitalWrite(PinD0, HIGH);//Coloca pino digital D0 em nível lógico "1";
valueD0 = HIGH;//Atribui nivel logico "1" á variável valueD0.
}
//--------------------------
if (request.indexOf("/PinD1=ON") != -1) {
digitalWrite(PinD1, LOW);
valueD1 = LOW;
}
if (request.indexOf("/PinD1=OFF") != -1) {
digitalWrite(PinD1, HIGH);
valueD1 = HIGH;
}
//--------------------------
if (request.indexOf("/PinD2=ON") != -1) {
digitalWrite(PinD2, LOW);
valueD2 = LOW;
}
if (request.indexOf("/PinD2=OFF") != -1) {
digitalWrite(PinD2, HIGH);
valueD2 = HIGH;
}
//--------------------------
if (request.indexOf("/PinD3=ON") != -1) {
digitalWrite(PinD3, LOW);
valueD3 = LOW;
}
if (request.indexOf("/PinD3=OFF") != -1) {
digitalWrite(PinD3, HIGH);
valueD3 = HIGH;
}
//--------------------------
if (request.indexOf("/PinD4=ON") != -1) {
digitalWrite(PinD4, LOW);
valueD4 = LOW;
}
if (request.indexOf("/PinD4=OFF") != -1) {
digitalWrite(PinD4, HIGH);
valueD4 = HIGH;
}
//--------------------------
if (request.indexOf("/PinD5=ON") != -1) {
digitalWrite(PinD5, LOW);
valueD5 = LOW;
}
if (request.indexOf("/PinD5=OFF") != -1) {
digitalWrite(PinD5, HIGH);
valueD5 = HIGH;
}
//---------------------------
Serial.println("");
if (request.indexOf("/S") != -1) {//Atualiza dados;
Serial.println("S: Updated data");
}
//--------------------------
Serial.println("");
if (request.indexOf("/Z") != -1) {//Incrementa valor para temperatura;
Serial.println("Z: Increment value for temperature");
DHT22T++;
}
//--------------------------
Serial.println("");
if (request.indexOf("/z") != -1) {//Decrementa valor para temperatura;
Serial.println("z: Decrement value for temperature");
DHT22T--;
}
//--------------------------
Serial.println("");
if (request.indexOf("/Q") != -1) {//Incrementa valor para temperatura;
Serial.println("Q: Increment value for humidity");
DHT22H++;
}
//--------------------------
Serial.println("");
if (request.indexOf("/q") != -1) {//Decrementa valor para temperatura;
Serial.println("q: Decrement value for humidity");
DHT22H--;
}
//---------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("/PinD0=ON");//Modifica o botão Device1 para "ON";
} else {//Caso contrário;
client.print("/PinD0=OFF");//Modifica o botão Device1 para "OFF";
}
client.println("<br />");
//-------------------------
if(valueD1 == LOW) {
client.print("/PinD1=ON");
} else {
client.print("/PinD1=OFF");
}
client.println("<br />");
//-------------------------
if(valueD2 == LOW) {
client.print("/PinD2=ON");
} else {
client.print("/PinD2=OFF");
}
client.println("<br />");
//-------------------------
if(valueD3 == LOW) {
client.print("/PinD3=ON");
} else {
client.print("/PinD3=OFF");
}
client.println("<br />");
//-------------------------
if(valueD4 == LOW) {
client.print("/PinD4=ON");
} else {
client.print("/PinD4=OFF");
}
client.println("<br />");
//-------------------------
if(valueD5 == LOW) {
client.print("/PinD5=ON");
} else {
client.print("/PinD5=OFF");
}
client.println("<br />");
//---------Send data to Android: Temperature------
if(t>=DHT22T){
client.print("/LM");
}else{
client.print("/Lm");
}
client.println("<br />");
//---------Send data to Android: Humidity---------
if(h>=DHT22H){
client.print("/LN");
}else{
client.print("/Ln");
}
client.println("<br />");
//---------Send data to Android: Movement---------
if(digitalRead(PinD6)==HIGH){
client.print("/LO");
}else{
client.print("/Lo");
}
//---------Print---------------------
Serial.print("Temperature: ");
Serial.print((float)t,1);
Serial.println("C");
Serial.print("Humidity: ");
Serial.print((float)h,1);
Serial.println("%");
Serial.println("");
//-----------------------------------
break;
} else { // if you got a newline, then clear currentLine
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
}
//Limpa a variável header
//header = "";
request = "";
//Fecha a conexão
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
//-------------------------------------
client.println("</html>");
//--------------------------------------
delay(1);
//---------------------"Movement in this area!" send e-mail---------------------
if((digitalRead(PinD6)==HIGH)&&(conta1==0)){
delay(250);
initWifi();
makeIFTTTRequest2();
//ESP.deepSleep(0);
conta1=1;
Serial.println("");
Serial.print("E-mail: ");
Serial.print("Alert Movement in this area! ");
Serial.println("");
Serial.println("");
}
//-------------"High Temperatura >= 30ºC" send e-mail---------
if((t>=DHT22T)&&(conta2==0)){//setTemp
initWifi();
makeIFTTTRequest();
//ESP.deepSleep(0);
conta2=1;
Serial.println("");
Serial.print("E-mail: ");
Serial.print("Alert High Temperatute ");
Serial.print(t,0);
Serial.print("C");
Serial.println("");
Serial.println("");
}
if(t<DHT22T){
conta2=0;
}
//-------------"High Humidity >= 95%" send e-mail---------
if((h>=DHT22H)&&(conta3==0)){
initWifi();
makeIFTTTRequest3();
//ESP.deepSleep(0);
conta3=1;
Serial.println("");
Serial.print("E-mail: ");
Serial.print("Alert High Humidity ");
Serial.print(h,0);
Serial.print("%");
Serial.println("");
Serial.println("");
}
if(h<DHT22H){
conta3=0;
}
delay(1);//2000
}//loop----------loop---------loop---------loop------------loop------------
//---E-MAIL GMAIL---E-MAIL GMAIL---E-MAIL GMAIL---E-MAIL GMAIL---
void initWifi() {
Serial.print("Connecting to: ");
Serial.print("ssid: ");
Serial.print(ssid);
Serial.print(", password: ");
Serial.print(password);
//--------------------------------------
WiFi.begin(ssid, password);
int timeout = 10 * 4; // 10 seconds
while(WiFi.status() != WL_CONNECTED && (timeout-- > 0)) {
delay(250);
Serial.print(".");
}
Serial.println("");
if(WiFi.status() != WL_CONNECTED) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("WiFi connected in: ");
Serial.print(millis());
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
//------------Make an HTTP request to the IFTTT WEB SEVICE-----------
void makeIFTTTRequest() {
Serial.print("Connecting to ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while(!!!client.connect(server, 80) && (retries-- > 0)) {
Serial.print(".");
}
Serial.println();
if(!!!client.connected()) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("Request resource: ");
Serial.println(resource);
client.print(String("GET ") + resource +
" HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0)){
delay(100);
}
if(!!!client.available()) {
Serial.println("No response, going back to sleep");
}
while(client.available()){
Serial.write(client.read());
}
Serial.println("\nclosing connection");
client.stop();
}
//------------Make an HTTP request to the IFTTT WEB SEVICE-----------
void makeIFTTTRequest2() {
Serial.print("Connecting to ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while(!!!client.connect(server, 80) && (retries-- > 0)) {
Serial.print(".");
}
Serial.println();
if(!!!client.connected()) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("Request resource: ");
Serial.println(resource2);
client.print(String("GET ") + resource2 +
" HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0)){
delay(100);
}
if(!!!client.available()) {
Serial.println("No response, going back to sleep");
}
while(client.available()){
Serial.write(client.read());
}
Serial.println("\nclosing connection");
client.stop();
}
//------------Make an HTTP request to the IFTTT WEB SEVICE-----------
void makeIFTTTRequest3() {
Serial.print("Connecting to ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while(!!!client.connect(server, 80) && (retries-- > 0)) {
Serial.print(".");
}
Serial.println();
if(!!!client.connected()) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("Request resource: ");
Serial.println(resource3);
client.print(String("GET ") + resource3 +
" HTTP/1.1\r\n"
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0)){
delay(100);
}
if(!!!client.available()) {
Serial.println("No response, going back to sleep");
}
while(client.available()){
Serial.write(client.read());
}
Serial.println("\nclosing connection");
client.stop();
}
A sigla IFTTT significa “If This, Then That”, algo próximo de “Se for isso, então é aquilo”
A ideia central é fazer o IFTTT automatizar tudo, desde seus aplicativos e sites favoritos até alguns dispositivos domésticos inteligentes, compatíveis com o serviço.
Com esta chave de código usaremos em nosso projeto com o ESP8266;
Então se ocorrer um evento faremos uma ação.
Se houver movimentação em uma área: Enviar um e-mail com o nome do evento;
Se a Temperatura ultrapassar o valor máximo setado: Enviar um e-mail com o valor da Temperatura;
Se a Umidade ultrapassar o valor máximo setado: Enviar um e-mail com o valor da Umidade;
Inserir seus dados no código como segue:
- ssid e password dados copiados do seu roteador Wi-Fi:
Veja como fica no Monitor da IDE Arduino.:
- Copiar também a URL neste exemplo http://192.168.1.51:8088 para o aplicativo Android(http://IP:PORTA).
- Nome do Evento;
- Chave de código do IFTTT;
- ssid e password do seu roteador Wi-Fi;
- Temperatura, Umidade e Movimento: Inserir os 3 eventos com as chaves de código.
Veja que o E-MAIL será enviado todas as vezes que:
1- A temperatura(sensor DHT22) ultrapassar o limite ajustado no aplicativo;
2- A Umidade(sensor DHT22) ultrapassar o limite ajustado no aplicativo;
3- Houver movimentação(sensor PIR) em uma área determinada.
Como criar a chave de código no IFTTT que será utilizada no projeto com ESP8266?
O que é IFTTT e como utilizaremos em nosso projeto com o ESP8266 para enviar E-MAIL?
Acompanhe o passo a passo para essas respostas e veja que em minutos seu código estará pronto e funcionando:
A sigla IFTTT significa “If This, Then That”, algo próximo de “Se for isso, então é aquilo”
A ideia central é fazer o IFTTT automatizar tudo, desde seus aplicativos e sites favoritos até alguns dispositivos domésticos inteligentes, compatíveis com o serviço.
O IFTTT suporta atualmente 520 serviços, chamados de “canais”, compatíveis com dispositivos Android e iOS, além da plataforma para PC.
Entre estes serviços estão, aplicativos e sites como Facebook, Instagram, Flickr, Tumblr, Google Drive, LinkedIn, SoundCloud, WordPress, YouTube e centenas de outros.
Como usar o IFTTT?
Para começar a usar o IFTTT basta se inscrever em uma conta no site do serviço usando apenas um e-mail, um nome de usuário e senha.
Ou, basta apenas entrar com sua conta do Facebook ou do Google, automaticamente. Após a inscrição, o IFTTT cria automaticamente uma receita recomendada para sua caixa de entrada de e-mail.
Iremos criar um aplicativo para enviar e-mail no IFTTT que nos fornecerá uma chave de código;Com esta chave de código usaremos em nosso projeto com o ESP8266;
Então se ocorrer um evento faremos uma ação.
Se houver movimentação em uma área: Enviar um e-mail com o nome do evento;
Se a Temperatura ultrapassar o valor máximo setado: Enviar um e-mail com o valor da Temperatura;
Se a Umidade ultrapassar o valor máximo setado: Enviar um e-mail com o valor da Umidade;
Localizar o IFTTT no navegador e logar com seu e-mail do G-MAIL, como segue:
Entrar e logar com seu G-MAIL:
Iniciar o IFTTT " Get started":
Em Webhooks clicar em My Applets e em New Applets:
Em New Applet clicar em THIS:
Em Choose a service digite Web e então clique em Webhooks:
Choose trigger:
Complete trigger fields, digite o event name e clique em Create trigger:
Veja que esse nome de evento é o mesmo que será utilizado daqui para frente, com todos os caracteres e não poderá ser alterado;
Como exemplo "Alert: Movement in this area!" mantenha essa frase até ao final para testarmos o envio do E-MAIL então posteriormente quando tudo estiver funcionando, faça suas alterações a vontade, escolha novos nomes para os eventos.
Agora clique em THAT:
Em Choose action service digite gmail:
Selecione Send an email:
Agora coloque em To address seu e-mail principal e em CC address outro e-mail(opcional):
Termine preenchendo os dados de Subject e clique em Create action:
Veja abaixo como ficou o meu Web já preenchido com os meus dados, em seguida clique em Save:
Confira o nome do evento que deve ser exatamente igual ao criado e clique em Finish:
Selecione Webhooks e clique em Documentation:
Insira o nome do evento: Alert: Movement in this area!
Pronto, agora copie esta chave de código que será usada no código do ESP8266:
Você já pode fazer um teste, clique em Test it e confira no seu e-mail o evento.
Teste seu aplicativo, clique em Test it e confira no seu e-mail o evento, veja como ficou:
Com isso terminamos de criar o aplicativo do IFTTT que irá enviar nosso e-mail responsável pelo sensor de movimento;
Não se esqueça agora você deve repetir esta operação para criar outros dois aplicativos que serão responsáveis pelo sensor DHT22 Temperatura e DHT22 Umidade;
Lembre-se que o nome do evento criado no IFTTT deve ser exatamente igual ao do código no ESP8266;
Então insira todos os dados no código ESP8266 conforme segue abaixo:
Atenção:
Obs1.: - Se você deseja testar apenas com o sensor de movimento então deverá desabilitar ou comentar com "//" toda a parte do código responsável pelo envio de e-mail com o sensor DHT22.
Obs2.: - Prefira por copiar todo o código exemplo do ESP8266 sem alterações para testar o funcionamento, somente após ter funcionado faça suas modificações ou personalize seu código.
Veja como ficaram meus aplicativos no Webhooks My Applets:
Insira este link na URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Veja como ficaram meus aplicativos no Webhooks My Applets:
Precisando de ajuda com a instalação do ESP8266 na IDE Arduino?
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:
Google Play: ESP8266 e-mail IFTTT monitor and control
Olá Sergio tudo bom, gostaria de fazer uma pergunta, no meu caso eu tenho que monitorar quando ocorre a falta energia em uma empresa, como devo configurar o aplicativo para ele me enviar essa informação?, desde já lhe agradeço pela atenção e parabéns pelos seus projetos, vc é o cara!
ResponderExcluir