8 Tìm ki m nhóm mu n thêm Bot ế ố ➢ Bước 2: Chọn tên của nhóm để hiển th khung Group Infor, sau đó nhấn biểu ịtượng thêm thành viên khung màu ở đỏ:... 9 Chọn biểu tượng thêm thành viên t
Trang 1HỌC VIỆN CÔNG NGH Ệ BƯU CHÍNH VIỄN THÔNG
- -
Đề tài : “IOT smart home automation system using ESP32”
Giảng viên hướng dẫn : Trương Minh Đức
Nhóm h c t p ọ ậ : 01
Sinh viên th c hi nự ệ : Đoàn Long Vũ - B21DCDT247
: Nguy n S ễ ỹ Toản B21DCDT223: Phan Mạnh Cường - B21DCDT051
-: Đỗ Dương Thanh - B21DCDT207 : Lê Xuân Quốc - B21DCDT183
HÀ NỘI – 2024
Trang 2MỤC L C Ụ
MỤC L C 2Ụ
MỤC L C HÌNH Ụ ẢNH 4
L I M Ờ Ở ĐẦU 6
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 7
1.1 Gi i thi u Bot trên Telegram 7ớ ệ 1.2.1 Cách t o Bot 7ạ 1.2.2 Cách thêm Bot trong h i nhóm 10ộ 1.2 Tính b o m t cả ậ ủa ứng d ng Telegram 11ụ 1.3 L a ch n Telegram Bot API 12ự ọ 1.4 QUICK CHART 12
1.5 GIỚI THI U V ESP32 13Ệ Ề 1.6 GIAO TH C HTTPS 13Ứ 1.5 K T LUẾ ẬN CHƯƠNG 14
CHƯƠNG 2 THIẾT KẾ HỆ THỐNG 15
2.1 TỔNG QUAN V H Ề Ệ THỐNG 15
2.2 THI T K Ế Ế PHẦN CỨNG 16
2.2.1 Danh sách linh ki n và chệ ức năng 16
2.2.2 Thi t k h ế ế ệ thống trên ph n m m ALTIUM 16ầ ề 2.2.3 M ch th c t 17ạ ự ế 2.3 THI T K Ế Ế PHẦN M M 17Ề 2.3.1 Kh i t o Bot 17ở ạ 2.3.2 Telegram bot button 18
2.3.1 Điều khiển 4 thiết bị đầu ra ở Telegram 19
2.3.2 Điều khiển thiết bị sử dụng cảm biến chạm 20
2.3.3 Kh i t o biố ạ ểu độ nhiệt độ độ ẩ m 21
2.3.4 Thi t lế ập ngưỡng cho nhiệt độ, độ ẩ m 24
2.4 K T LUẾ ẬN CHƯƠNG 27
CHƯƠNG 3 KẾT QUẢ VÀ ĐÁNH GIÁ HỆ THỐNG 27
3.1 K t qu ế ả đạt được 27
3.2 Đánh giá 30
Trang 33.3 K t luế ận chương 30
K T LU N 31Ế Ậ TÀI LI U THAM KH O 32Ệ Ả Giáo trình & bài gi ng Ti ng Viả ế ệt: 32 Tài li u tham kh o Ti ng Anh: 32ệ ả ế
Trang 4MỤC L C HÌNH NH Ụ Ả
Hinh 1.1 Tìm ki m t khóa BotFather 7ế ừHinh 1 2 Ch n BotFather 8ọHinh 1 3 Kh i ch y BotFather 8ở ạHinh 1 4 T o bot m i 8ạ ớHinh 1 5 T o tên cho Bot kh i t o 9ạ ở ạHinh 1 6 Username c a Bot 9ủHinh 1 7 Tin nh n t o Bot thành công 10ắ ạHinh 1 8 Tìm ki m nhóm mu n thêm Bot 10ế ốHinh 1 9 Ch n biọ ểu tượng thêm thành viên trong h i nhóm 11ộHinh 1 10 Thêm Bot mu n tham gia v i h i nhóm 11ố ớ ộHình 1.13 Trang ch c a QuickChart 12ủ ủHình 1.14 Sơ đồ chân ESP-WROOM-32-30 chân 13 Hình 1.16 Mô t giao th c HTTPS 14ả ứHình 2.1 Sơ đồ hệ thống 15 Hình 2.2 Sơ đồ nguyên lý 16 Hình 2.5 L p 3D 17ớHình 2.8 M ch th c t 17ạ ự ếHình 2 9 Các bước để lấy mã token trong Telegram 18 Hình 2 10 Inline Keyboards trong ng d ng Telegram 18ứ ụHình 2 11 K t qu ế ả chạy chương trình khởi đầu dùng Inline Keyboard 19Hình 2 12 K t qu giao diế ả ện điều khi n Inline Keyboard 20ểHình 2.13 Giao di n chệ ọn ngưỡng theo nhiệt độ và độ ẩm 25Hình 3.1 K t qu 1 27ế ảHình 3.2 K t qu 2 28ế ảHình 3.3 K t qu 3 28ế ảHình 3.4 K t qu 4 28ế ảHình 3.5 K t qu 5 29ế ảHình 3.8 K t qu 8 29ế ảHình 3.9 K t qu 9 29ế ả
Trang 6LỜI M Ở ĐẦ U
Dự án nhà thông minh là m t n l c hiộ ỗ ự ện đại để ối ưu hóa sự t tiện nghi và an ninh trong không gian s ng V i vi c tích h p các công ngh tiên tiố ớ ệ ợ ệ ến như Internet of Things (IoT),
và t ự động hóa, nhà thông minh không ch mang l i s ỉ ạ ự thoải mái và ti n lệ ợi mà còn tăng
cường sự an toàn và ti t kiế ệm năng lượng Từ việc điều ch nh ánh sáng, nhiỉ ệt độ đến
qu n lý thi t bả ế ị gia đình từ xa, dự án nhà thông minh mang đến tr i nghi m s ng hiả ệ ố ện
đại và tiên tiến cho cư dân, đồng th i giúp tờ ối ưu hóa quản lý và sử d ng tài nguyên ụNội dung chính của đề tài:
• Chương 1: Cơ sở lý thuyết
• Chương 2: Thiết k h ế ệ thống
• Chương 3: Kết quả sản ph ẩm và đánh giá hoạ t động
Dưới đây em xin trình bày chi tiết các ph n trong n i dung c a đề tài ầ ộ ủ
Trang 7
CHƯƠNG 1 CƠ S LÝ THUYẾT Ở
Chương này sẽ trình những kiến thức tổng quan cần thiết để phát triển một chatbot bao g m các nồ ội dung chính như: Tổng quan v ề chatbot, tính bảo m t c a Telegram, lậ ủ ựa chọn API và giao thức giao tiếp kết nối giữa các thiết bị
1.1 Giới thi u Bot trên Telegram ệ
➢ Được gi i thiớ ệu vào năm 2015, Telegram Bots là ứng dụng trò chuyện c a bên ủthứ ba được thực hiện với API Telegram Bot Các bot Telegram về cơ bản là tài kho n Telegram tả ự động có th trò chuy n ho c thêm làm b n bè vào các cuể ệ ặ ạ ộc trò chuyện, nhóm ho c kênh c a mình ặ ủ
➢ Trong khi các ng d ng nhứ ụ ắn tin khác như WhatsApp và Kakao đặt ra các giới
h n nghiêm ng t vạ ặ ề những gì người dùng có th tể ạo, Telegram cho phép người dùng của họ ạ t o Telegram Bots cho h u hầ ết mọi thứ
1.2.1 Cách t o Bot ạ
➢ Bước 1: Trên Telegram, tìm kiếm Botfather:
Hinh 1.1 Tìm ki m t khóa BotFather ế ừ
➢ Bước 2: Chọn BotFather có tích xanh:
Trang 9Hinh 1 5 T o tên cho Bot kh i t o ạ ở ạ
➢ Bước 6: Nhập username cho Bot của người dùng tạo:
Hinh 1 6 Username c a Bot ủ
➢ Bước 7: Hệ thống sẽ gửi tin nhắn báo tạo bot Telegram thành công:
Trang 10Hinh 1 7 Tin nh n t o Bot thành công ắ ạ
1.2.2 Cách thêm Bot trong h i nhóm ộ
➢ Bước 1: M ng d ng Telegram, nh p tên nhóm lên khung chat mu n thêm ở ứ ụ ậ ố Bot:
Hinh 1 8 Tìm ki m nhóm mu n thêm Bot ế ố
➢ Bước 2: Chọn tên của nhóm để hiển th khung Group Infor, sau đó nhấn biểu ịtượng thêm thành viên khung màu ở đỏ:
Trang 11Hinh 1 9 Chọn biểu tượng thêm thành viên trong h i nhóm ộ
➢ Bước 3: Chọn tên Bot muốn thêm, sau đó ấn nút add ở dưới cùng:
Hinh 1 10 Thêm Bot mu n tham gia v i h i nhóm ố ớ ộ
➢ Bước 4: Kết quả thành công sau khi thêm Bot
2 Tính b1 ảo m t c ậ ủa ứng d ng Telegram ụ
➢ Telegram sử d ng biụ ện pháp mã hóa đầu cu i giố ống như WhatsApp và Signal Loại mã hóa này chuyển đổi tin nh n thành m t mã mà không c n s ắ ậ ầ ự trợ giúp của máy ch ủ ở gi a khi n nó gữ ế ần như không thể truy c p vào giao ti p giậ ế ữa hai người dùng khi không có s ự đồng ý của họ
➢ Cơ chế bảo mật của Telegram:
• Telegram là ứng d ng trò chuy n miụ ệ ễn phí và độ ả b o m t cậ ực kỳ cao
• Cơ chế bảo mật của Telegram tốt đến mức các công ty của Nga cũng không th truy cể ập được
• Cuộc gọi, tin nhắn, đoạn chat của người dùng trên Telegram được mã hóa
đầu cu i (end to end) ố – –
Trang 12• Dữ liệu s ẽ được mã hóa ngay tại điện tho i cạ ủa người g i chuyử ển đến điện thoại người nhận và sau đó được gi i mã ả
1.3 Lựa ch n Telegram Bot API ọ
➢ Telegram Bots là những tài khoản đặc bi t không yêu c u thêm sệ ầ ố điện thoại đểthiết l p Các tài khoậ ản này đóng vai trò là giao diện cho mã ch y ạ ở đâu đó trên máy chủ của ngươif dùng
➢ Để s dử ụng tính năng này, người dùng không c n bi t b t k ầ ế ấ ỳ điều gì v cách thề ức
hoạt động c a giao thủ ức mã hóa MTProto của nhà phát tri n ể
➢ Máy ch trung gian c a hãng s x lý t t c quá trình mã hóa và giao ti p vủ ủ ẽ ử ấ ả ế ới API Telegram cho người dùng
➢ Người dùng có thể giao tiếp v i máy chủ này thông qua giao diện HTTPS đơn ớ
gi n cung c p phiên bả ấ ản đơn giản hóa c a API Telegram ủ
Trang 131.5 GIỚI THI U V ESP32 Ệ Ề
ESP32 là m t module Wi-Fi và Bluetooth tích hộ ợp, được phát tri n b i Espressif ể ởSystem Được ra mắt vào năm 2016 , ESP32 được biết đến như một phiên bản nâng cấp của ESP8266 v i nhiớ ều tính năng và khả năng mở năng mở ộng hơn r
Ngoài Wi-Fi và Bluetooth , ESP32 còn hỗ trợ các giao tiếp khác như UART, SPI, I2C, GPIO, PWM và nhi u giao ti p khác, tề ế ạo điều ki n thu n l i cho vi c kệ ậ ợ ệ ết ố ớn i v i các thiết b và c m bi n khác ESP32 cung cị ả ế ấp các chân GPIO đa dạng cho phép người dùng
m r ng chở ộ ức năng của module thông qua vi c kệ ết nối với các module mở ộ r ng và cảm
Trang 14“khóa công khai” (public key) và “khóa riêng” (private key) Bất c ứ thứ gì được mã hóa
b ng khóa công khai ch có th ằ ỉ ể được gi i mã bả ởi khóa riêng và ngược l i Các tiêu chuạ ẩn này đảm b o các n i dung s ả ộ ẽ được mã hóa trước khi truyền đi, và giải mã khi nhận Điều này khi n hacker dù có chen ngang lế ấy được thông tin cũng không thể “hiểu” được thông tin đó
1.5 K T LUẾ ẬN CHƯƠNG
➢ Qua nh ng ki n th c tữ ế ứ ổng quan đã được tìm hi u và nghiên c u, tham kh o t ể ứ ả ừnhi u ngu n khác nhau, ề ồ chúng em đã quyết định và hình dung được thi t k h ế ế ệthống c a em g m những phần chính sau: ủ ồ
• S d ng vi x ử ụ ử lý là ESP32 để ử x lý các tác v ụ
• Các thiết bị trong nhà được giao tiếp v i nhau qua giao thớ ức HTTPS
• S dử ụng trang web QuickChart để thực hiện v biẽ ểu đồ nhiệt độ, độ ẩ m
Trang 15là 4 thi t bế ị đầu ra)
➢ Đo nhiệt độ , độ ẩm (được đọc từ cảm biến DHT22) gửi tin nhắn về Telegram chatbot bằng dạng text và biểu đồ
➢ Thực hiện cài đặt ngưỡng cho nhiệt độ và độ ẩm, nếu nhiệt độ ộ ẩm) vượt quá (đkhoảng đã được cài đặt thì sẽ ực hiện bật (tắt) thiết bị và thông báo tới ngườth i dùng
Trang 162.2 THI T K Ế Ế PHẦN C NG Ứ
2.2.1 Danh sách linh kiện và chức năng
STT Khối Tên linh ki n ệ Chức nămg trong h ệ
thống
1 Vi điều khiển ESP32 Xử lý t t c các tác v ấ ả ụ
2 Khối đầu vào
Các c m bi n chả ế ạm - Touch
Là công tăng có tác dụng b t t t các thiậ ắ ệt
bị
C m bi n nhiả ế ệt độ DTH22 Đo nhiệt độ, độ ẩm
3 Khối đầu ra Là kh i Relay bao g
4 Khối ngu n ồ Module ngu n HiLink ồ Chuy n t 220v -> 5v ể ừ
IC ASM1117 Chuy n t ể ừ 5v -> 3v3 2.2.2 Thi t k h ế ế ệ thống trên phần mềm ALTIUM
2.2.2.1 Sơ đồ nguyên lý
Hình 2.2 Sơ đồ nguyên lý
2.2.2.2 Bản vẽ PCB
Trang 17➢ Mỗi Bot Telgram đều có m t mã token khác nhau ộ
➢ Khi người dùng khởi tạo Bot thành công thì Botfather sẽ gửi tin nhắn đến bao
g m Token c a Bot ồ ủ
➢ Người lập trình sẽ sử d ng Bot T ken kết h p vụ ọ ợ ới Bot Api để ạo ra Bot mong tmuốn
Trang 18Hình 2 9 Các bước để ấ l y mã token trong Telegram
➢ Khai báo Bot:
➢ Khởi t o Bot: S dạ ử ụng thư viện s n có UniversalTelegramBot ẵ
UniversalTelegramBot bot(BOT TOKEN, clientTCP);
2.3.2 Telegram bot button
➢ New Inline Keyboards: Cho phép người dùng ấn chọn và thực hiện gửi tin nhắn
t i bot (Không g i tin nhớ ử ắn đến cu c trò chuyộ ện), sau đó ngườ ậi l p trình xử lý bot để có thể hiển thị kết qu mong muốn tới cuộc trò chuyện ả
Hình 2 10 Inline Keyboards trong ng d ng Telegram ứ ụ
String BOT_TOKEN = "6691707417:AAF0INIQzjme0ODUPY0_Yb9tWd1p9tIbVk4"; //bot token lay tu bot father
String CHAT_ID = "-4088291504";
Trang 19➢ Xây dựng chương trình tạo Inline Keyboard cho giao diện bắt đầu:
String keyboardJson F= ("[[{ \"text\" : \"LIGHT\", \ "callback_data\ " :
\"light\" },{ \"text\" : \"TEMPERATURE-HUMIDITY\ ", \ "callback_data\ " :
Hình 2 11 K t qu ế ả chạy chương trình khởi đầu dùng Inline Keyboard
2.3.1 Điều khi n 4 thiể ết bị đầ ra ởu Telegram
Code t o giao diạ ện điều khi n ể
if (text == F("light")) {
String keyboardJson F= ("[[{ \"text\" : \"ON LED 1\",
\"callback_data\" : \"ON1\" },{ \"text\" : \"OFF LED 1\",
\"callback_data\" : \"OFF1\" }],");
keyboardJson += F("[{ \"text " : \"ON LED 2\", \\ "callback_data\" : \"ON2\" },{ \"text\" : \"OFF LED 2 ", \"callback_data\" : \"OFF2\" \ }],");
keyboardJson += F("[{ \"text " : \"ON LED 3\", \\ "callback_data\" : \"onfan1\" },{ \"text\" : \"OFF LED 3\", \"callback_data\" :
\"offfan1\" }],");
keyboardJson += F("[{ \"text " : \"ON LED 4\", \\ "callback_data\" : \"onfan2\" },{ \"text\" : \"OFF LED 4\", \"callback_data\" :
\"offfan2\" }],");
keyboardJson += F("[{ \"text " : \"ON ALL\", \\ "callback_data\" :
\"onall\ " },{ \ "text\ " : \"OFF ALL\", \"callback_data\" : \"offall\" }]]");
bot.sendMessageWithInlineKeyboard CHAT_ID( , "LED LIGHTS", "",
keyboardJson);
}
Trang 20➢ K t qu : ế ả
Hình 2 12 K t qu giao diế ả ện điều khi n Inline Keyboard ể
➢ Đ ềi u khi n b t t t 4 thi t bị u ra qua Telegram, khi ta nh n t ng nút trên bể ậ ắ ế đầ ấ ừ ảng điều khi n ể
2.3.2 Điều khi n thi t b s d ng cể ế ị ử ụ ảm biến ch m ạ
S d ng ng t (attachInterrupt) vử ụ ắ ới ểki u kích ho t ạ là “FALLING” FALLING : kích
hoạt khi trạng thái c a chân digital chuy n t mủ ể ừ ức điện áp cao sang mức điện áp th p ấGọi hàm ng t trong Setup vắ ới mức kích ho t là FALLING ạ
attachInterrupt switch_1 thietbi1 FALLING( , , );
attachInterrupt switch_2 thietbi2 FALLING( , , );
attachInterrupt switch_3 thietbi3 FALLING( , , );
attachInterrupt switch_4 thietbi4 FALLING( , , );
Trang 212.3.3 Khối tạo biểu độ nhiệt độ độ ẩ m
Bước đầu c a tạo ảnh là tạo data cho ảnh ủ Đọc data nhiệt độ, độ ẩm từ cảm bi n ếDHT22 và t o data thạ ời thời gian thực bằng việc sử ụ d ng hàm tính thời gian thực echotime() trong thư viện NTPClient.h
Code t o data : ạ
void Creat_data() {
long epochTime timeClient= getEpochTime(); // Lấy epoch time
float Humidity dht readHumidity= ();
float Temperature dht= readTemperature();
Serial.println Humidity( );
Serial.println Temperature( );
if isnan( (Humidity) || isnan(Temperature)) {
Serial.println("Lỗi khi đọc dữ liệu từ cảm biến DHT!");
return ;
}
ReportData.push({Temperature, Humidity, epochTime});
}
void Delete_data(unsigned long t ) {
while (ReportData size () > 0 &&ReportData[0].EpochTime_number t < ) {
Serial.print("xoa ");
ReportData.shift();
}
}
String EpochTime_to_string ( unsigned long number ) {
time_t timestamp number= ;
tmElements_t t;
breakTime(timestamp, t);
char buffer[25];
sprintf(buffer, "%4d-%02d-%02dT%02d:%02d:%02dZ", t Year + 1970,
t Month , t Day , t.Hour t Minute t, , Second);
return String buffer( );
}
String Build_axisX() {
String left_time = EpochTime_to_string start_time( );
String right_time = EpochTime_to_string end_time( );
String times = "'" left_time + + "'," + "'" right_time + + "'";
Serial print (times);
return times;
}
• Hàm “Creat_data()” có chức năng ấl y dữ liệu từ cảm bi n DHT22 và thời hiện ế
tại và g i vào cử ấu trúc ReportData.
• Hàm “Delete_data(unsigned long t)” có chức năng làm mới l i data dữ li u ạ ệsau khoảng th i gian t (2 giờ ờ)
• Hàm “EpochTime_to_string( unsigned long number)” có chức năng tính toán thời gianthực, tạo data thời gian
Trang 22• Hàm “Build_axisX()” tạo thời gian bắ ầt đ u và kết thúc cho trục biểu diễn thời gian
Sau khi chúng ta đã tạo data xong Thì chúng ta đến bước tạo ảnh Đầu tiên tạo một mã Json tạo biểu đồ theo yêu c u hi n th ầ ể ị
String str1 =
"https://quickchart.io/chart?c={'type':'line','data':{'labels':[";
String str2 =
"],'datasets':[{'label':'Nhietdo','borderColor':'blue','fill':false,'bord erWidth':3,'data':[";
String str3 =
"]},{'label':'Doam','borderColor':'green','fill':false,'borderWidth':3,'d ata':[";
String str4 =
"]}]},'options':{'legend':{'position':'bottom'},'title':{'text':'Chart.js TimeScale'},'scales':{'xAxes':[{'type':'time','time':{'parser':'YYYY-MM- DDTHH:mm:ssZ','unit':'minute','unitStepSize':15,'displayFormats':{'minute ':':mm'}},'scaleLabel':{'display':false,'labelString':'Time'},'ticks':{'m ajor':{'enabled':true}}}],'yAxes':[{'id':'y-axis-
1','position':'left','scaleLabel':{'display':false,'labelString':'Nhi?tđ? ','fontColor':'rgba(255,0,0,1)'},'ticks':{'min':0,'max':100,'stepSize':10 ,'fontColor':'rgba(255,0,0,1)'}},{'id':'y-axis-
2','position':'right','scaleLabel':{'display':false,'labelString':'Đ??m', 'fontColor':'rgba(0,0,255,1)'},'ticks':{'min':0,'max':100,'stepSize':10,' fontColor':'rgba(0,0,255,1)'}}]},'plugins':{'datalabels':{'display':true, 'color':'gray','align':'right','formatter':function(value,context){index= context.dataIndex;data=context.dataset.data;if(index===data.length-
1)return(data[index].y);return('');}}}}}";
• B n bi n string (str1,str2,str3,str4) ố ế trên chứa mã Json v biẽ ều đồ đã được phác
họa và được link đến trang Wed Quickchart
• Mô tả biểu đồ: Biểu đồ ẽ có 2 cộ s t Y1 và Y2 lần lượt là thang nhiệt độ và độ
ẩm Với thang nhi t độ bi u di n giá trịệ ể ễ từ 0℃ n 40đế ℃, thang độ ẩm từ 55%
đến 95% Còn tr c X biểu diễn thụ ời gian trong 2h và độ chia là 15’
String str3 =
"]},{'label':'Doam','borderColor':'green','fill':false,'borderWidth':3,'d ata':[";
String str4 =
"]}]},'options':{'legend':{'position':'bottom'},'title':{'text':'Chart.js