#include <WiFi.h>
#include "AdafruitIO_WiFi.h"
#include <DHT.h>
//definição de dados da rede
#define SSID "Nome do seu roteador"
#define senha "senha do seu roteador"
//definição dos dados do broker
#define IO_USERNAME "nome do seu usuario que vem do io.adafruit.com"
#define IO_KEY "chave gerada pelo broker io.adafruit.com"
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, SSID, senha); //instaciando objeto io
#define DHTPin 18
#define DHTType DHT11
DHT dht(DHTPin, DHTType); //instanciando objeto DHT
float temp; //variável para armazenar temperatura
float umid; //variável para armazenar umidade
float tempoLeitura; //variável para armazenar tempo de leitura
#define lamp1 4
#define lamp2 5
int lampState1 = 1; //variável para armazenar estado da lâmpada 1
int lampState2 = 1; //variável para armazenar estado da lâmpada 2
AdafruitIO_Feed *F_L1 = io.feed("lamp1"); //ponteiro para o feed 'lamp1'
AdafruitIO_Feed *F_L2 = io.feed("lamp2"); //ponteiro para o feed 'lamp2'
AdafruitIO_Feed *F_temp = io.feed("temperatura"); //ponteiro para o feed 'temperatura'
AdafruitIO_Feed *F_umid = io.feed("umidade"); //ponteiro para o feed 'umidade'
void setup() {
Serial.begin(115200);//inicialização de comuniacação Serial
pinMode(lamp1, OUTPUT);
pinMode(lamp2, OUTPUT);
digitalWrite(lamp1, lampState1);
digitalWrite(lamp2, lampState2);
dht.begin(); //inicia DHT
while(!conectaWifi()) return; //tenta conexão wifi
while(!conectaBroker()) return; //tenta conexão com Broker
}
bool conectaWifi(){//método para conexão WiFi
WiFi.begin(SSID, senha);
Serial.print("Conectando wifi: ");
Serial.println(SSID);
while(WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.println("\nWifi conectado!");
return true;
}
bool conectaBroker(){//método para conexão com o Broker
Serial.println("Conetando ao Broker");
io.connect();
while(io.status() < AIO_CONNECTED){
Serial.print(".");
delay(500);
}
Serial.println("\nConectado ao Broker!");
//envio e recebimento de informações dos feeds
F_L1 -> onMessage(handleLamp1);
F_L1 -> get();
F_L2 -> onMessage(handleLamp2);
F_L2 -> get();
return true;
}
void handleLamp1(AdafruitIO_Data *payload){
if(payload -> isTrue())
{
lampState1 = HIGH;
}
else
{
lampState1 = LOW;
}
digitalWrite(lamp1, lampState1);
}
void handleLamp2(AdafruitIO_Data *payload){
if(payload -> isTrue())
{
lampState2 = HIGH;
}
else
{
lampState2 = LOW;
}
digitalWrite(lamp2, lampState2);
}
void publicaSensor(){
if((millis() - tempoLeitura) > 5000)
{
F_temp -> save(temp);
F_umid -> save(umid);
tempoLeitura = millis();
}
}
void leituraDHT(){
temp = dht.readTemperature();
umid = dht.readHumidity();
if(isnan(temp) || isnan(umid)){
return;
}
publicaSensor();
Serial.print("\nTemperatura: ");
Serial.print(temp);
Serial.print("°C\nUmidade: ");
Serial.print(umid);
Serial.println("%");
delay(500);
}
void loop() {
io.run();//inicia conexão com o Broker
leituraDHT();
}