Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
Neste projeto, criamos um circuito onde utilizamos um sensor detemperatura DS18B20, um LED RGB juntamente com um BUZZER como alarme, eumaESP8266. De acordo com astemperaturas lidas no sensor obteremos as cores do LED RGB que irão variarentre vermelho, verde e azul. CriamosumServidorCloudmqttpara receber informações da ESP8266 e, através da conexão com o pino 13, enviamos essas informações para o Arduino. Utilizamos o App MQTT Dash, para controlar o alarme remotamente. Utilizamos o monitor serial da IDE do Arduino para exibir as informações lida da ESP8266 e do arduino.
#include <OneWire.h> //Biblioteca que necessária
#include <DallasTemperature.h> //Biblioteca que necessária
OneWire pino(10);
DallasTemperature barramento(&pino);
DeviceAddress sensor;
const int RED = 6; // Led RGB vermelho
const int GREEN = 9; // Led RGB verde
const int BLUE = 7; // Led RGB azul
const int BUZZER = 8;
const int ESTADOPORTA = 11; //botao que dirá se a porta está aberta ou fechada
const int RelePin = 5;
const int BOTAOREMOTO = 3;
void setup() {
Serial.begin(9600); //Inicia a serial para ler as temperaturas
pinMode(13,INPUT);
barramento.begin();
barramento.getAddress(sensor, 0);
pinMode(ESTADOPORTA, INPUT_PULLUP);
pinMode(BOTAOREMOTO, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
pinMode(RelePin, OUTPUT);
}
void estado_porta() {
if (digitalRead(ESTADOPORTA) == 1) { // Leitura do botao para descrever o estado da porta
Serial.println("A porta esta aberta..");
Serial.println("");
//digitalWrite(RelePin, LOW);
} else {
Serial.println("A porta esta fechada..");
Serial.println("");
}
}
void botao_remoto() {
if (digitalRead(BOTAOREMOTO) == 1) { // Controle remoto do rele
Serial.println("Porta liberada");
digitalWrite(RelePin, HIGH);
delay(1000);
digitalWrite(RelePin, LOW);
}
}
void alarme() {
barramento.requestTemperatures();
float temperatura = barramento.getTempC(sensor);
Serial.print("Temp: ");
Serial.println(temperatura);
if ((temperatura > 5 && temperatura < 10) || (temperatura > 20 && temperatura < 24)) {
digitalWrite(BLUE, HIGH);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
//lcd.setCursor(0,1);
Serial.print("WARNING ");
//Serial.print(val2);
Serial.println(" ");
digitalWrite(BUZZER, HIGH);
delay(800);
digitalWrite(BUZZER, LOW);
delay(1500);
}
else if (temperatura >= 11 && temperatura < 19) {
digitalWrite(BLUE, LOW);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
//lcd.setCursor(0,1);
Serial.print("ACEITAVEL ");
//Serial.print(val2);
Serial.println(" ");
delay(1000);
}
else if (temperatura <= 4 || temperatura >= 25) {
digitalWrite(BLUE, LOW);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
Serial.print("CRITICO ");
digitalWrite(BUZZER, HIGH);
delay(800);
digitalWrite(BUZZER, LOW);
delay(800);
}
}
void loop() {
int alarme_re;
int botao_re;
delay(1000);
alarme_re = Serial.read();
botao_re = Serial.read();
Serial.println(digitalRead(13));
if (digitalRead(13) == HIGH) {
while (digitalRead(13) == HIGH) {
digitalWrite(BLUE, LOW);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
Serial.println("Alarme remoto ativado ");
digitalWrite(BUZZER, HIGH);
delay(800);
digitalWrite(BUZZER, LOW);
delay(800);
}
Serial.println("Alarme remoto desativado!");
}
if (botao_re == 1) {
botao_remoto();
}
alarme();
estado_porta();
}
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#define DEBUG
#define porta_node D1
#define Ar1 14 //pino de saida para acionamento da Alarme Ar1
//informações da rede WIFI
const char* ssid = "JG"; //SSID da rede WIFI
const char* password = "santiago"; //senha da rede wifi
//informações do broker MQTT - Verifique as informações geradas pelo CloudMQTT
const char* mqttServer = "postman.cloudmqtt.com"; //server
const char* mqttUser = "snritjmi"; //user
const char* mqttPassword = "Buv9Yrt3Wtqf"; //password
const int mqttPort = 14274; //port
const char* mqttTopicSub ="alarme/Ar1"; //tópico que sera assinado
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
pinMode(Ar1, OUTPUT);
pinMode(D1,OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
#ifdef DEBUG
Serial.println("Conectando ao WiFi..");
#endif
}
#ifdef DEBUG
Serial.println("Conectado na rede WiFi");
#endif
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
while (!client.connected()) {
#ifdef DEBUG
Serial.println("Conectando ao Broker MQTT...");
#endif
if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
#ifdef DEBUG
Serial.println("Conectado");
#endif
} else {
#ifdef DEBUG
Serial.print("falha estado ");
Serial.print(client.state());
#endif
delay(2000);
}
}
//subscreve no tópico
client.subscribe(mqttTopicSub);
}
void callback(char* topic, byte* payload, unsigned int length) {
//armazena msg recebida em uma sring
payload[length] = '\0';
String strMSG = String((char*)payload);
#ifdef DEBUG
Serial.print("Mensagem chegou do tópico: ");
Serial.println(topic);
Serial.print("Mensagem:");
Serial.print(strMSG);
Serial.println();
Serial.println("-----------------------");
if(strMSG == "1"){
Serial.println("cheguei aqui");
digitalWrite(porta_node,HIGH);
}else{
digitalWrite(porta_node,LOW);
}
#endif
//aciona saída conforme msg recebida
if (strMSG == "1"){ //se msg "1"
digitalWrite(Ar1, LOW); //coloca saída em LOW para ligar o alarme
}else if (strMSG == "0"){ //se msg "0"
digitalWrite(Ar1, HIGH); //coloca saída em HIGH para desligar o alarme
}
}
//função pra reconectar ao servido MQTT
void reconect() {
//Enquanto estiver desconectado
while (!client.connected()) {
#ifdef DEBUG
Serial.println("Tentando conectar ao servidor MQTT");
#endif
bool conectado = strlen(mqttUser) > 0 ? client.connect("ESP8266Client", mqttUser, mqttPassword) : client.connect("ESP8266Client");
if(conectado) {
#ifdef DEBUG
Serial.println("Conectado!");
#endif
//subscreve no tópico
client.subscribe(mqttTopicSub, 1); //nivel de qualidade: QoS 1
} else {
#ifdef DEBUG
Serial.println("Falha durante a conexão.Code: ");
Serial.println( String(client.state()).c_str());
Serial.println("Tentando novamente em 10 s");
#endif
//Aguarda 10 segundos
delay(10000);
}
}
}
void loop() {
if (!client.connected()) {
reconect();
}
client.loop();
}










Comments