#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <DHT.h>
// #include <Adafruit_GFX.h>
// #include <Adafruit_SSD1306.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 20, 4);
// #define SCREEN_WIDTH 128
// #define SCREEN_HEIGHT 64
// Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const char * MQTTServer = "broker.emqx.io";
const char * MQTT_Topic = "dang";
const char * MQTT_Topic2 = "dang2";
const char * MQTT_Topic3 = "dang3";
const char * MQTT_ID = "";
int Port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
const int ledPin = 19;
const int relay = 14;
#define DHT_TYPE DHT22
#define DHT_PIN 18
#define LDR 36
DHT dht(DHT_PIN,DHT_TYPE);
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);
client.subscribe(MQTT_Topic2);
client.subscribe(MQTT_Topic3);
Serial.println("");
lcd.setCursor(0,0);
lcd.print("Topic: ");
lcd.print(MQTT_Topic);
lcd.print(" ket noi");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" kết nối thất bại try again in 5 seconds");
lcd.setCursor(0,0);
lcd.print("failed, rc=");
lcd.println(" kết nối thất bại try again in 5 seconds");
delay(500);
lcd.clear();
}
}
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message: ");
String stMessage;
String stMessage1;
String stMessage2;
if (strcmp(topic, MQTT_Topic2) == 0) {
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
stMessage += (char)message[i];
}
Serial.println();
if (stMessage == "on") {
lcd.setCursor(0,2);
lcd.print(" ");
digitalWrite(relay, HIGH);
lcd.setCursor(0,2);
lcd.print("on");
}
else if (stMessage == "off") {
lcd.setCursor(0,2);
lcd.print(" ");
digitalWrite(relay, LOW);
lcd.setCursor(0,2);
lcd.print("off");
}else{
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(stMessage);
digitalWrite(ledPin, LOW);
}
}
if(strcmp(topic, MQTT_Topic3) == 0){
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
stMessage1 += (char)message[i];
}
Serial.println();
if (stMessage1 == "nguyhiem") {
lcd.setCursor(0,3);
lcd.print("nguy hiem");
digitalWrite(ledPin, HIGH);
}else{
//lcd.setCursor(0,3);
//lcd.print(" ");
//digitalWrite(ledPin, LOW);
}
}
}
void setup() {
Serial.begin(115200);
WIFIConnect();
client.setServer(MQTTServer, Port);
client.setCallback(callback);
pinMode(ledPin, OUTPUT);
pinMode(LDR, INPUT);
pinMode(relay, OUTPUT);
pinMode(12,OUTPUT);
dht.begin();
Wire.begin(5,17);
lcd.init();
lcd.backlight();
IPAddress ip = WiFi.localIP();
String ipStr = String(ip[0]) + "." + String(ip[1]) + "." + String(ip[2]) + "." + String(ip[3]);
// Print the IP address to the LCD
lcd.setCursor(0, 1); // Set the cursor to the second row
lcd.print("IP: ");
lcd.print(ipStr);
// if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
// Serial.println(F("SSD1306 allocation failed"));
// while(1);
// }
// delay(2000);
// display.clearDisplay();
// display.setTextSize(1);
// display.setTextColor(WHITE);
// display.setCursor(0, 2);
// display.display();
// display.println("THI");
}
void loop() {
delay(10);
float t = dht.readTemperature();
float h = dht.readHumidity();
float lx = analogRead(LDR);
ndpublish();
if (!client.connected()) {
MQTT_Reconnect();
}
client.loop();
}
void ndpublish() {
float t = dht.readTemperature();
float h = dht.readHumidity();
float lx = analogRead(LDR);
String nt_da = "{\"nhietdo\":\"" + String(t)+ "\",\"doam\":\"" + String(h)+ "\",\"anhsang\":\"" + String(lx)+"\"}";
client.publish("dang",String(nt_da).c_str());
delay(2000);
}
/*
<!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>
<p id="Nhietdo"></p>
<p id="Doam"></p>
<p id="Anhsang"></p>
<button class="bat">Bật LED</button>
<button class="tat">Tắt LED</button>
</body>
</html>
<script>
$('.bat').click(function(){
message = new Paho.MQTT.Message("on");
message.destinationName = "dang2";
client.send(message);
});
$('.tat').click(function(){
message = new Paho.MQTT.Message("off");
message.destinationName = "dang2";
client.send(message);
});
client = new Paho.MQTT.Client("broker.emqx.io", Number(8083), "80170395-61ac-4234-825a-2d395a8be325");
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
client.connect({onSuccess:onConnect});
function onConnect() {
client.subscribe("dang");
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
function onMessageArrived(message) {
console.log("onMessageArrived:"+message.payloadString);
const obj = JSON.parse(message.payloadString);
console.log(obj.nt_da);
document.getElementById("Nhietdo").innerHTML = "Nhiet do: "+ obj.nhietdo+" do C";
document.getElementById("Doam").innerHTML = "Do am: "+obj.doam+" %";
document.getElementById("Anhsang").innerHTML = "Do am: "+obj.anhsang;
}
</script>
*/
/*
!pip install tensorflow
=======================================
!pip install opencv-python
===============================
from tensorflow.keras.models import load_model
import cv2
import numpy as np
model = load_model("./20004195_model.h5")
lb =['beetle', 'grasshopper', 'mango_hopper', 'mango_mealybug', 'moth']
image = cv2.imread("./beetle (161).jpg")
image = cv2.resize(image,(224,224))
arr = np.array(image, dtype="float32")
arr_re = arr.reshape((-1,224,224,3))
_,output = model.predict(arr_re)
result = lb[np.argmax(output)]
print (result)
print (np.max(output)*100)
================================================
pip install paho-mqtt
============================================
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)
client.publish("THI", "56") # tên topic , nội dung gửi
=============================================
pip install mysql-connector-python
==================================
import mysql.connector
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = "123456",
database = "plant_disease"
)
if db.is_connected():
print ("ket noi thanh cong")
cursor = db.cursor()
===================================
sql = "SELECT * from diseases"
cursor.execute(sql)
result = cursor.fetchall()
print(result)
print(len(result))
=================================
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 ("Lỗi kết nối")
def on_publish(client, userdata, mid):
print("Gửi thành công")
client = mqtt.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect("broker.emqx.io", 1883)
import mysql.connector
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = "123456",
database = "plaint_disease"
)
if db.is_connected():
print("Ket noi thanh cong")
cursor = db.cursor()
import datetime
now = datetime.datetime.now()
# hours = now.hour
hours = 8
if 7 <= hours <= 11 or 13 <= hours <= 17:
sql = f"SELECT * from users where full_name = '{result}'"
cursor.execute(sql)
count = cursor.fetchall()
if len(count) >0:
print ("Đã mở cửa")
client.publish("20004128", "Y" + result)
else:
print ("Không có quyền truy cập")
client.publish("20004128", "N")
else:
print ("Không có quyền truy cập")
client.publish("20004128", "N")
=============================
!pip install tensorflow
!pip install opencv-python
!pip install paho-mqtt
!pip install mysql-connector-python
from tensorflow.keras.models import load_model
import cv2
import numpy as np
model = load_model("D:/Dowload/module3/20004195_model.h5")
lb =['beetle', 'grasshopper', 'mango_hopper', 'mango_mealybug', 'moth']
image = cv2.imread("D:/Dowload/module3/beetle (161).jpg")
image = cv2.resize(image,(224,224))
arr = np.array(image, dtype="float32")
arr_re = arr.reshape((-1,224,224,3))
_,output = model.predict(arr_re)
result = lb[np.argmax(output)]
print (result)
print (np.max(output)*100)
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 ("Lỗi kết nối")
def on_publish(client, userdata, mid):
print("Gửi thành công")
client = mqtt.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect("broker.emqx.io", 1883)
client.publish("dang2", result) # tên topic , nội dung gửi
import mysql.connector
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = "",
database = "knn"
)
if db.is_connected():
print("Ket noi thanh cong")
cursor = db.cursor()
sql = f"SELECT * from disease where name = '{result}' and is_danger = 1"
cursor.execute(sql)
count = cursor.fetchall()
if len(count) >0:
print ("nguyhiem")
client.publish("dang3", "nguyhiem")
else:
print ("Khong nguy hiem")
client.publish("dang3", "khongnguyhiem")
*/