#include <WiFi.h>
#include "PubSubClient.h"
#include "DHTesp.h"
#include <ESP32Servo.h>
#include "ESP32_MailClient.h"
const char * MQTTServer = "mqtt.eclipseprojects.io";
const char * MQTT_Topic = "vlute-iot";
#define TRIG_PIN 12
#define ECHO_PIN 14
const char * MQTT_ID = "thao123";
int Port = 1883;
const int DHT_PIN = 15;
int lamp = 25;
int lightPin = 26;
int isLight = 0;
int isDetected = 0;
const int servoPin = 27;
int pos = 0;
int pir = 4;
int buzzer = 5;
Servo heater;
//mail
SMTPData smtpData;
#define SMTP_HOST "smtp.office365.com"
#define SMTP_PORT 587
/* The sign in credentials */
#define AUTHOR_EMAIL "[email protected]"
#define AUTHOR_PASSWORD "Maithao2412@"
/* Recipient's email*/
#define emailSubject "Cảnh báo "
#define RECIPIENT_EMAIL "[email protected]"
DHTesp dhtSensor;
void sendCallback(SendStatus info);
void sendCallback(SendStatus msg) {
Serial.println(msg.info());
if (msg.success()) {
Serial.println("----------------");
}
}
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);
}
}
}
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 == "batden") {
digitalWrite(lamp, HIGH);
}
else if (stMessage == "batmb") {
turnOn();
}
else if (stMessage == "tatmb") {
turnOff();
}
else if (stMessage == "tatloa") {
noTone(buzzer);
}
else if (stMessage == "batloa") {
tone(buzzer,160,5000);
}
}
void setup() {
Serial.begin(115200);
heater.attach(servoPin);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
WIFIConnect();
client.setServer(MQTTServer, Port);
client.setCallback(callback);
pinMode(lamp, OUTPUT);
pinMode(lightPin, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(pir, INPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
///cambienldr
isLight = (digitalRead(lightPin) == LOW);
if (isLight) {
digitalWrite(lamp,LOW);
Serial.println("Trời sáng -> tắt đèn ");
} else {
digitalWrite(lamp,HIGH);
Serial.println("Trời tối -> bật đèn ");
}
//cambienmucnuoc
float distance = readDistanceCM();
if( distance < 100)
{
turnOn();
}
else{
turnOff() ;
}
//cambienchuyendong
isDetected = digitalRead(pir);
if (isDetected == HIGH)
{
tone(buzzer,160,5000);
sendMail("HÌNH NHƯ CÓ AI ĐANG CỐ GẮNG ĐỘT NHẬP VÀO NÔNG TRẠI CỦA BẠN. HÃY KIỂM TRA NGAY");
}
else
{
noTone(buzzer);
}
//cambiendht
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
if (!client.connected()) {
MQTT_Reconnect();
}
client.loop();
float nd = data.temperature;
float da = data.humidity;
//Đóng gói
String dongoi = String(nd) + "|" + String(da);
client.publish("VLUTE/nhietdo/19004187", dongoi.c_str());
delay(5000);
}
void turnOn() {
for (pos = 0; pos <= 180; pos += 1) {
// in steps of 1 degree
heater.write(pos);
}
}
void turnOff() {
for (pos = 180; pos >= 0; pos -= 1) {
// in steps of 1 degree
heater.write(pos);
}
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void sendMail(String nd) {
smtpData.setLogin(SMTP_HOST, SMTP_PORT, AUTHOR_EMAIL, AUTHOR_PASSWORD);
smtpData.setSender("Nông trại thông minh", AUTHOR_EMAIL);
smtpData.setPriority("High");
smtpData.setSubject(emailSubject);
smtpData.setMessage("<div style=\"color:red;\"><h1> " + nd + " </h1>", true);
smtpData.addRecipient(RECIPIENT_EMAIL);
smtpData.setSendCallback(sendCallback);
if (!MailClient.sendMail(smtpData))
Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
smtpData.empty();
}Cảm biến ánh sáng
Đèn
Cảm biến chuyển động
Máy bơm nước
Loa cảnh báo chuyển động
Cảm biến DHT22