#include <DHT.h>
#include <WiFi.h>
#include <Stepper.h>
#include <ESP32Servo.h>
#include "PubSubClient.h"
bool check1 = false;
bool check2 = false;
const char * MQTTServer = "broker.emqx.io";
const char * MQTT_Topic = "LED";
const char * MQTT_ID = "";
int Port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void WIFIConnect() {
Serial.println("Connecting to SSID: Wokwi-GUEST");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected");
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
void MQTT_Reconnect() {
while (!client.connected()) {
if (client.connect(MQTT_ID)) {
Serial.print("MQTT Topic: ");
Serial.print(MQTT_Topic);
Serial.print(" connected");
client.subscribe(MQTT_Topic);
Serial.println("");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
//khai báo
#define DHT_TYPE DHT22
#define DHT_PIN 15
DHT dht(DHT_PIN,DHT_TYPE);
int ledtv = 23;
int ldr = 2;
int pir = 4;
int gas = 5;
int leddo = 18;
int ledvang = 19;
int ac = 21;
int coibao = 22;
int cuanha= 32;// cửa
int rem = 33;// rèm cửa
int quat = 12;
Servo servo,servo1,servo2,servo3 ;
int pos = 0;
byte x=0;
bool den=false;
bool coi=false;
bool cua=false;
bool tv = false;
bool maylanh = false;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(ldr, INPUT);
pinMode(pir, INPUT);
pinMode(gas, INPUT);
pinMode(leddo, OUTPUT);
pinMode(ledvang, OUTPUT);
pinMode(ledtv, OUTPUT);
pinMode(coibao, OUTPUT);
servo.attach(cuanha, 500, 2400);
servo1.attach(rem, 500, 2400);
servo2.attach(ac, 500, 2400);
servo3.attach(quat, 500, 2400);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Kết nối!");
WIFIConnect();
client.setServer(MQTTServer, Port);
client.setCallback(callback);
}
//điều khiển đèn
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message: ");
String stMessage;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
stMessage += (char)message[i];
}
if(stMessage == "on"){
Serial.println("đèn bật");
digitalWrite(ledvang, HIGH);
}else{
Serial.println("đèn tắt");
digitalWrite(ledvang, LOW);
}
// điều khiển còi
if(stMessage == "on1"){
Serial.println("Máy lạnh bật");
servo2.write(180);
}else{
Serial.println("Máy lạnh tắt");
servo2.write(0);
}
// điều khiển cửa
if(stMessage == "on2"){
Serial.println("Mở cửa");
servo.write(180);
}else{
Serial.println("Đóng cửa");
servo.write(0);
}
// điều khiển tivi
if(stMessage == "on3"){
Serial.println("TV bật");
digitalWrite(ledtv, HIGH);
}else{
Serial.println("TV tắt");
digitalWrite(ledtv, LOW);
}
}
void batquat(){
for (pos = 0; pos <= 180; pos += 3) {
servo3.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 3) {
servo3.write(pos);
delay(15);
}
}
void nhietdo(){
//nhận nhiệt độ/độ ẩm
float h = dht.readHumidity();
float t = dht.readTemperature();
delay(1000);
if(t>28){
Serial.println("Bật quạt");
batquat();
}else{
Serial.println("Tắt quạt");
servo3.write(0);
}
}
void chuyendong(){
// //nhận chuyển động
int val=digitalRead(pir);
if (val==HIGH) {
Serial.println("Đã phát hiện chuyển động!");
digitalWrite(leddo, HIGH);
} else {
Serial.println("không có phát hiện chuyển động!");
digitalWrite(leddo, LOW);
}
}
void anhsang(){
//nhận ánh sáng
int anhsang = digitalRead(ldr);
if(anhsang == HIGH){
Serial.println("Kéo rèm");
servo1.write(180);
}
else{
Serial.println("Mở rèm");
servo1.write(0);
}
}
void loop() {
nhietdo();
anhsang();
chuyendong();
delay(10);
if (!client.connected()) {
MQTT_Reconnect();
}
client.loop();
}