Yêu cầu đề bài Mức độ 3 10 điểm: Có topic đề gửi từng dữ liệu nhiệt độ, độ ẩm, trạng thái 3 LED lên server; Topic dé gửi toàn bộ thông tin lên server theo định dạng json và form-urlenco
Trang 1BO CONG THUONG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HỎ CHÍ MINH
KHOA CÔNG NGHỆ ĐIỆN TỬ
0F HOCHIMINH CITY
A
INDUSTRIAL
BAO CAO BAI TAP NHOM
Chuyén dé IOT
Giảng viên hướng dẫn : Cao Văn Kiên
Nhóm thực hiện : Nhóm 3
Lớp học phần : DHIOT1I7B
TP.Hà Chí Minh, ngày 4 tháng 10 năm 2024
Trang 2
II Yêu cầu đề bài
Mức độ 3 (10 điểm): Có topic đề gửi từng dữ liệu nhiệt độ, độ ẩm, trạng thái 3 LED lên server; Topic dé gửi toàn bộ thông tin lên server theo định dạng json và form-urlencoded;
Có topic đọc từng dữ liệu nhiệt độ, độ am, giá trị trạng thái 3 LED từ server theo định
đạng Json và form-urlencoded Có hỗ trợ topic đọc toàn bộ dữ liệu từ server theo ca 2
định dạng Dữ liệu gửi lên được lưu vào CSDL phải có thông tin _id, thời gian, tên thiết
bị gửi lên
Lưu ý: Topic gửi từng đữ liệu lên cũng phải kích hoạt chế độ Subscribe của topic đọc
toàn bộ đữ liệu Tương ty topic gin toàn bộ dữ liệu cũng kích hoạt chế độ Subscribe của
từng topic đơn lẻ Gửi lên topic json có thê subscribe ở topic form-urlencoded và ngược
lại
IV Code
pymongo
fastapi
pydantic
time
uvicorn
)
myclient
Trang 3mycol = mydb["Sensor Data"™]
LED1:
LED2:
LED3:
Dion anelowy
("/reset_data")
(8
C C result = mycol ({})
C C return {"status"™: "success", "deleted count": result.deleted count,
"message": "Tất cả đữ liệu đã được xóa."}
app ("/update_posti")
async deft (ND: =
( ), Device: ( In
current_ time — ("SH:3M:%S")
dem = mycol Oo meas
or hoe ==
C€ C€C " 1d"; dem,
C€ €C "Date time": current time,
C C "Device": Device,
Œ € "ND": ND,
Trang 4"DA"; DA,
"LEDI": LED1,
"LED2": LED2,
"LED3": LED3
return {"status": "URL Successfully", "data": data}
app ("/data_json")
sync def (item:
C current_time = ("$H:$%M:3S")
dem = mycol Oo meas
or hoe ==
"1d"; dem,
"Date_time": current_time,
"Device": item.Device,
"ND"; item.ND,
"DA": item.DA,
"LEDi": item.LED1,
"LED2": item LED2,
"LED3": item.LED3
return {"status": "JSON_Successfully", "data": data}
a
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC ORO
app ("/data_nd_json")
sync def (item:
€ current time — ("$H:$%M:3S")
dem = mycol Oo meas
or hoe ==
C€ C€C " 1d"; dem,
C€ €C "Date time": current time,
C C "ND"; item.ND,
i
mycol (data)
Bì
l9
l9
l9
l9
l9
l9
l9
l9
@ qaqaqqaqaqgaana return {"status": "ND_ Successfully", "data": data}
("/data_da_json")
Trang 5€ current time — ("$H:$%M:3S")
dem = mycol Oo meas
or hoe ==
C€ C€C " 1d"; dem,
C€ €C "Date time": current time,
C€ C "DA": item.DA,
i
l9
l9
l9
l9
l9
l9
l9
C mycol (data)
l9 qaqqqaqaaqaana return {"status": "DA Successfully", "data": data}
app ("/data_ledi_json")
sync def (item:
C current_time = ("$H:$%M:3S")
dem = mycol Oo meas
or hoe ==
C€ C€C " 1d"; dem,
C€ €C "Date time": current time,
€ C "TED1": item.LEDI,
i
mycol (data)
return {"status": "LED1 Successfully", "data": data}
a
C
IC
C
IC
C
IC
C
IC
C ORO
app ("/data_led2_json")
sync def (item:
C current_time = ("$H:$%M:3S")
dem = mycol ({}) +
or hoe ==
C€ C€C " 1d"; dem,
Cc €C "Dạte time": current time,
C C "TED2": item.LED2,
i
mycol (data)
Bì
l9
l9
l9
l9
l9
l9
l9
l9
@ qaqqgaqaqgaaqaana return {"status": "LED2 Successfully", "data": data}
app ("/data_led3_json")
asyne def (item:
C C current_time = ("SH:3M:%S")
dem = mycol Oo meas
or hoe ==
C€ C€C " 1d"; dem,
C€ €C "Date time": current time,
€
€
€
€
Trang 6(data)
C C return {"status": "LED3 Successfully", "data": data}
app ("/data nd_url")
syne def (ND:
C current_time = ("$H:$%M:3S")
dem = mycol ({}) +
or hoe ==
C€ C€C " 1d"; dem,
C€ €C "Date time": current time,
Œ € "ND"; ND,
i
mycol (data)
Bì
l9
l9
l9
l9
l9
l9
l9
l9
@ ÒẰ return {"status": "ND_ Successfully", "data": data}
app ("/data_da_url")
syne def (DA:
C current_time = ("$H:$%M:3S")
dem = mycol Oo meas
or hoe ==
C€ C€C " 1d"; dem,
C€ €C "Date time": current time,
C C "DA": DA,
i
mycol (data)
return {"status": "DA Successfully", "data": data}
a
C
IC
C
IC
C
IC
C
IC
C 9
app ("/data_ledi_ur1")
syne def (LED1:
€ current time — ("$H:$%M:3S")
C dem = mycol Oo meas
C data — {
Cc Cc "_id": dem,
CC C "Date_time": current time,
Œ CŒC "LED1": LED1,
€ }
C mycol (data)
C
IC
C
IC
C
IC
C
Ic
Trang 7app ("/data led2_url")
syne def (LED2:
23M:%35")
Ce as
C current_time = ("$
dem = mycol
or hoe ==
cc "id":
C C "Date_time":
C C "LED2": LED2,
i
mycol
dem,
current_time,
(data)
"LED2_ Successfully",
a
C
IC
C
IC
C
IC
C
IC
C Ò
return {"status": "data":
app ("/data_led3_url")
syne def (LED3:
23M:%35")
Ce as
C current_time = is
dem = mycol
data — {
© © TW iglD;
C C "Date_time":
C C "LED3": LED3,
i
mycol
dem,
current_time,
(data)
ey
@
@
@
@
@
@
@
@
C qaqgqaaqaqaqgaana return {"status": "LED3_Successfully", "data":
ia name HT ác
(app, host="0.0.0.0",
C C uvicorn port=
Code Publish:
import paho.mgtt.client as mqtt
import json
from urllib import parse
from random import randint
Bo ha na
import Adafruit_DHT C
data }
data }
Trang 8DHT PIN = ie
"192.168.2.103"
"raspberry"
QTT_PASSWORD = "1234"
QTT_TOPTC_JSON = "send_json_i_all"
QTT_TOPIC_URL = "send url 1 all"
client = mgtt
(username=MOTT_ USERNAME, password=MQTT_PASSWORD)
(MOTT_BROKER, MỌTT PORT,
(datal, data2, ledi_status, led2 status, led3 status,
ie "ND"; datal, C
ie "DA"; data2, C
ie "TED1"; ledi_status,
ie "LED2"; led2_status,
io "TED3": led3_status,
io "Device": device C C
i
ot ype_json = json (data)
("JSON:", type_json)
client (MQTT_TOPIC_JSON, type_json)
(datal, data2, ledi_status, led2_status, led3_status, device): type_url = parse ({
C 'ND': datal,
C 'DAT: data2,
C 'LED1I': ledi_status,
C 'LED2': led2_status,
C 'LED3': led3_status,
C 'Device': device
€
iS
€
iS
€
iS
i
Trang 9client (MOTT TOPIC_URL, type_url)
(datal):
data = {"ND": datal}
type_json = json (data)
("Gửi ND:", type json)
client (MQTT_TOPIC_JSON, type_json)
(data2):
data = {"DA": data2}
type_json = json (data)
("Gửi DA:", type_json)
client (MQTT_TOPIC_JSON, type_json)
(ledi_status):
data = {"LED1": ledi_status}
type_json = json (data)
("Gửi LED1:", type_json)
client (MQTT_TOPIC_JSON, type_json)
(led2_status):
data = {"LED2": led2_status}
type_json = json (data)
("Gửi LED2:", type_json)
client (MQTT_TOPIC_JSON, type_json)
(led3_status):
data = {"LED3": led3_status}
type_json = json (data)
("GWi LED3:", type_json)
client (MQTT_TOPIC_JSON, type_json)
(datal):
type_url = parse ({'ND': datai})
("Gửi ND URL:", type_url)
client (MOTT TOPIC_URL, type_url)
Trang 10parse
DA URL:",
type_url
("Gửi
client
({'DA': data2})
type_url) (MOTT_TOPIC_URL, type_url)
(ledi_status):
type_url
("Gửi
client
parse
LED1 URL:",
(MOTT_TOPIC_URL,
({'LED1':
type_url) type_url) ledi_status})
(led2_status):
type_url
("Gửi
client
parse
LED2 URL:"
({'LED2': led2 status})
, type_url) (MOTT_TOPIC_URL, type_url)
(led3_status):
type_url
("Gửi
client
parse
cc
Cc C humidity,
_PTN)
if humidity is not
ie
ledi_status
led2_status
led3_status
device_name
€
iS
€
iS
€
iS
€
iS
€
CCCCC
CC C C C choice
nhập tên biến để gửi JSON
C CC CCC if choice ==
An
LED3 URL:",
(MQOTT_TOPIC_URL,
temperature
= randint (0,
({'TLED3':
type_url)
led3_status})
type_url)
Adafruit_DHT (DHT_SENSOR,
and temperature is not
b randint (0, ) randint (0, )
"Raspberry" €
("Nhập 1 để gửi JSON, 2 để gửi URL-encoded, hoặc
hodc URL: ")
Mi
Trang 11led3_status, device_name)
C Cc Cc eC C elif choice == '2':
CCC CCCCE
1s (temperature, humidity, ledi_status, led2_status, led3_status, device_name)
©°) [oe ©°) [oe elif choice == 'ND_json':
cc (temperature)
elif choice == 'DA_json':
cc (humidity)
elif choice == 'LED1_json':
ome (1ed1_ status)
elif choice == 'LED2_json':
ome (1egd2_ status)
elif choice == 'LED3_json':
CC (led3_status)
elif choice == 'ND_url':
Cc € (temperature)
elif choice == 'DA_url':
cc (humidity)
elif choice == 'LED1_url':
ome (ledi_status)
elif choice == 'LED2_url':
ome (led2_status)
elif choice 'TED3_ url':
CC (led3_ status)
else:
ome eccc ("Lựa chọn không hợp lệ! Hãy nhập i1, 2 hoặc tên biến như ND_json, DA Json, ND uri, LED1 url.")
eccc ("Không đọc được đữ liệu từ cảm biến DHT11!")
qaqqaqaaqaqaaaagaaaanaadnaaaanaananana aqagaaaqgaanaaanaaaanaanaaanaaaaanal
qaqqaqaaqaqaaaagaaaanaadnaaaanaananana qaqqaqaaqaqaaaagaaaanaadnaaaanaananana
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC
C
IC
Code Subscribe:
Trang 12from gpiozero import
Bo ha na
"192.168.2.103"
QTT_PASSWORD =
QTT_TOPIC_READ
(client,
fields =
try:
ec
ec
ec
fields
if fields
("Dữ liệu mới nhận:",
"raspberry"
LU eee a
= "read url all"
userdata, message):
message.payload QO
BS (fields)
fields)
('LED1') ==
C C ledi.on()
cc
else:
("LED1 bat")
C C ledi Q)
Ce
if fields
("LED1 tắt")
(TTED2')
C C led2.on()
cc
else:
(“LED2 bật")
C C led2 Q)
Ce
if fields
("LED2 tắt")
('LED3')
€ € led3.on()
cc
else:
("LED3 bật")
€ € leds Q)
€ €
Trang 13cc ("Dữ liệu không hợp lệ:", fields)
(client, userdata, flags, rc):
if re ==
cc ("Kết nếi thành công, result:
1Ö (MOTT_ TOPTC READ)
else:
CC ("Kết nối thất bại với mã lỗễi:", re)
(client, userdata, rc):
("Mất kết nếi, đang cế gắng kết nối lại
eclient_id = 'tbii3'
= mgtt (client_id)
-on_connect =
.on_disconnect =
.on_message =
(username=MOTT_ USERNAME, password=MQTT_PASSWORD)
(MOTT BROKER, MOTT PORT,
V Video minh ching & link sever
- Link Video Youtube : https://youtu.be/Ghi73 Wdtail