#include <WiFi.h>
#include "PubSubClient.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// MAN HINH OLED
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// DHT22
#define DHTPIN 12
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
// MQTT
const char * MQTTServer = "broker.emqx.io";
const char * MQTT_Topic = "20004019-TranThanhDat";
// Tạo ID ngẫu nhiên tại: https://www.guidgen.com/
const char * MQTT_ID = "";
int Port = 1883;
int ldr = 14;
int relay = 27;
WiFiClient espClient;
PubSubClient client(espClient);
const int ledPin = 2;
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");
display.setCursor(1, 20);
display.print(MQTT_Topic);
display.display();
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];
}
Serial.println();
if (stMessage == "on") {
digitalWrite(relay, HIGH);
}
else if (stMessage == "off") {
digitalWrite(relay, LOW);
} else if (stMessage == "n") {
display.setCursor(2, 30);
display.print("Nguy hiểm");
display.display();
digitalWrite(18, HIGH);
} else if (stMessage == "t"){
display.setCursor(2, 30);
display.print("bình thường");
display.display();
}
}
void manhinholed() {
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 allocation failed");
for (;;); // Don't proceed, loop forever
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
}
void cambien() {
float t = dht.readTemperature();
float h = dht.readHumidity();
int value_ldr = digitalRead(ldr);
String Ldr = "";
if(value_ldr > 0)
{
Ldr = "Tối";
} else{
Ldr = "Sáng";
}
String payload = "{\"temperature\":" + String(t) + ",\"humidity\":" + String(h)+ ",\"ldr\":" + String(value_ldr) + "}";
client.publish("dat", payload.c_str());
// display.setCursor(2, 30);
// display.print("Nhiet do: ");
// display.print(t);
// display.setCursor(3, 40);
// display.print("Do am: ");
// display.print(h);
// display.display();
}
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(ldr, INPUT);
manhinholed();
WIFIConnect();
display.setCursor(0, 10);
display.print("Wifi connected");
display.display();
client.setServer(MQTTServer, Port);
client.setCallback(callback);
pinMode(ledPin, OUTPUT);
pinMode(18, OUTPUT);
digitalWrite(18, LOW);
pinMode(relay, OUTPUT);
}
void loop() {
delay(10);
if (!client.connected()) {
MQTT_Reconnect();
}
cambien();
// String chuoi = "hello";
// client.publish("dat", chuoi.c_str());
client.loop();
delay(500);
}
// CODE PYTHON
/*
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.models import load_model
import numpy as np
import mimetypes
import argparse
import imutils
import pickle
import cv2
import os
from PIL import Image
print("[INFO] loading object detector...")
model = load_model('./20004019.h5')
from PIL import Image
from keras.preprocessing.image import img_to_array
image = Image.open('./mango_mealybug_228.jpg')
image = image.resize((112, 112))
image = img_to_array(image) / 255.0
image = np.expand_dims(image, axis=0)
(boxPreds, labelPreds) = model.predict(image)
lb = ['beetle', 'grasshopper', 'mango_hopper', 'mango_mealybug', 'moth']
i = np.argmax(labelPreds, axis=1)
result = lb[np.argmax(labelPreds)]
accuracy = float(labelPreds[0][i]) * 100
print(accuracy)
print(result)
import mysql.connector
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = "",
database = "plant_disease"
)
if db.is_connected():
print("Ket noi thanh cong")
cursor = db.cursor()
sql = f"SELECT d.name, d.is_danger FROM diseases d JOIN images i ON d.id_disease = i.id_disease WHERE i.file_name = '{result}'"
cursor.execute(sql)
count = cursor.fetchall()
for row in count:
name = row[0]
status = row[1]
print("name :", name)
print("status :", status)
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Kết nối thành công")
else:
print("Kết nối thất bại")
def on_publish(client, userdata, mid):
print("Đã gửi dữ liệu ")
client = mqtt.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect("broker.emqx.io", 1883)
if status == 0:
client.publish("20004019-TranThanhDat", "n")
else:
client.publish("20004019-TranThanhDat", "t")
client.publish("20004019-TranThanhDat", "TT" + name + status)
*/
/CODE WEB
/*
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<script src="https://code.jquery.com/jquery-3.6.1.min.js" type="text/javascript"></script>
</head>
<body>
<div id="doam">Độ ẩm:</div>
<div id="nhietdo">Nhiệt độ:</div>
<button class="btnOn">ON</button>
<button class="btnOff">OFF</button>
<!-- CODE ĐIỀU KHIỂN RELAY ESP32 -->
<script>
$('.btnOn').click(function(){
console.log("click");
message = new Paho.MQTT.Message("on");
message.destinationName = "20004019-TranThanhDat";
client.send(message);
});
$('.btnOff').click(function(){
message = new Paho.MQTT.Message("off");
message.destinationName = "20004019-TranThanhDat";
client.send(message);
});
</script>
<!-- CODE NHẬN DỮ LIỆU TỪ ESP32 -->
<script>
var client = new Paho.MQTT.Client("broker.emqx.io", Number(8083), "");
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
client.connect({onSuccess:Connect});
function Connect() {
console.log("onConnect");
client.subscribe("dat");
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
function onMessageArrived(message) {
var payload = message.payloadString;
var data = JSON.parse(payload);
var temperature = data.temperature;
var humidity = data.humidity;
var ldr = data.ldr;
console.log(ldr);
// console.log(temperature);
var h = document.getElementById("doam");
var t = document.getElementById("nhietdo");
h.innerHTML = "Độ ẩm: " + humidity;
t.innerHTML = "Nhiệt độ: "+ temperature;
}
</script>
</body>
</html>
*/