1. Trang chủ
  2. » Cao đẳng - Đại học

Đồ án thiết kế điện tử - Báo cáo cuối kỳ

33 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề IOT Smart Home Automation System Using ESP32
Tác giả Trương Minh Đức, Đ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
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Điện tử
Thể loại Đồ án thiết kế
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 33
Dung lượng 5,39 MB

Cấu trúc

  • 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 (25)
    • 2.4 KẾT LUẬN CHƯƠNG (27)
  • CHƯƠNG 3 KẾT QUẢ VÀ ĐÁNH GIÁ HỆ THỐNG (28)
    • 3.1 Kết quả đạt được (28)
    • 3.2 Đánh giá (30)
    • 3.3 Kết luận chương (31)
  • KẾT LUẬN...............................................................................................................................32 (32)
  • TÀI LIỆU THAM KHẢO........................................................................................................33 (33)
    • Hinh 1.1 Tìm kiếm từ khóa BotFather (0)
    • Hinh 1. 2 Chọn BotFather (0)
    • Hinh 1. 3 Khởi chạy BotFather (0)
    • Hinh 1. 4 Tạo bot mới (0)
    • Hinh 1. 5 Tạo tên cho Bot khởi tạo (0)
    • Hinh 1. 6 Username của Bot (0)
    • Hinh 1. 7 Tin nhắn tạo Bot thành công (0)
    • Hinh 1. 8 Tìm kiếm nhóm muốn thêm Bot (0)
    • Hinh 1. 9 Chọn biểu tượng thêm thành viên trong hội nhóm (0)
    • Hinh 1. 10 Thêm Bot muốn tham gia với hội nhóm (0)

Nội dung

Báo cáo đồ án thiết kế điện tử - Đề tài IOT Smarthome automation System - được đánh giá cao Dự án nhà thông minh là một nỗ lực hiện đại để tối ưu hóa sự 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.

CƠ SỞ LÝ THUYẾT

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ứ.

 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:

 Bước 3: Nhập lệnh /start và nhấn Enter để bắt đầu tạo bot mới:

 Bước 4: Nhấn vào lệnh /newbot:

 Bước 5: Nhập tên bot mà người dùng muốn tạo:

Hinh 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:

 Bước 7: Hệ thống sẽ gửi tin nhắn báo tạo bot Telegram thành công:

Hinh 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 đỏ:

Hinh 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

Tính bả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).

 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ã

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.

QUICK CHART

QuickChart là một dịch vụ tiện lợi giúp người dùng tạo hình ảnh biểu đồ một cách nhanh chóng, dễ dàng Các biểu đồ này có thể được nhúng vào nhiều định dạng khác nhau, bao gồm email, SMS, Chatbot Điểm nổi bật của QuickChart là sử dụng Chart.js, một thư viện biểu đồ nguồn mở phổ biến, để tạo nên những biểu đồ trực quan và chuyên nghiệp.

Hình 1.13 Trang chủ của QuickChart

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ở rộng hơn.

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 biến bên ngoài.

Có sẵn nhiều framework và công cụ phát triển như Arduino IDE, ESP-IDE (Espressif IoT Development Framework),MicroPython và PlatfrormIO, giúp việc phát triển ứng dụng trở nên dễ dàng hơn.

Hình 1.14 Sơ đồ chân ESP-WROOM-32-30 chân

GIAO THỨC HTTPS

HTTPS (Hypertext Transfer Protocol Secure) là giao thức truyền tải siêu văn bản an toàn Thực chất, đây chính là giao thức HTTP nhưng tích hợp thêm Chứng chỉ bảo mật SSL nhằm mã hóa các thông điệp giao tiếp để tăng tính bảo mật Có thể hiểu,HTTPS là phiên bản HTTP an toàn, bảo mật hơn.

Hình 1.16 Mô tả giao thức HTTPS

HTTPS hoạt động tương tự như HTTP, tuy nhiên được bổ sung thêm chứng chỉ SSL

(Secure Sockets Layer – tầng ổ bảo mật) hoặc TLS (Transport Layer Security – bảo mật tầng truyền tải) Hiện tại, đây là các tiêu chuẩn bảo mật hàng đầu cho hàng triệu website trên toàn thế giới.

Cả SSL và TLS đều sử dụng hệ thống PKI (Public Key Infrastructure -hạ tầng khóa công khai) không đối xứng Hệ thống này sử dụng hai “khóa” để mã hóa thông tin liên lạc, “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 đó.

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

THIẾT KẾ HỆ THỐNG

TỔNG QUAN VỀ HỆ THỐNG

Hình 2.1 Sơ đồ hệ thống.

Mô tả sơ lược về hệ thống Hệ thống nhà thông minh sử dụng esp32 bao gồm các chức năng:

 Điều khiển 4 thiết bị đầu ra qua Telagram chatbot “điều khiển được từ xa” Hay cũng có thể điều khiển trực tiếp qua cảm biến chạm (ở đây bọn em sử dụng 4 đèn là 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ẽ thực hiện bật (tắt) thiết bị và thông báo tới người dùng.

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ụ

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

Là khối Relay bao gồm trans, trở, diode, opto quang.

Khi nhận tín hiệu kích từ VĐK, relay sẽ bật các thiết bị.

4 Khối nguồn Module nguồn HiLink Chuyển từ 220v -> 5v

2.2.2 Thiết kế hệ thống trên phần mềm ALTIUM

Hình 2.2 Sơ đồ nguyên lý 2.2.2.2 Bản vẽ PCB

Hình 2.5 Lớp 3D 2.2.3 Mạch thực tế

THIẾT KẾ PHẦN MỀM

Phần này sẽ thiết kế các giao diện và các chức năng để điều khiển các thiết bị.

 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 để tạo ra Bot mong muốn.

Hình 2 9 Các bước để lấy mã token trong Telegram

 Khởi tạo Bot: Sử dụng thư viện sẵn có UniversalTelegramBot

UniversalTelegramBot bot(BOT_TOKEN, clientTCP);

Bàn phím Inline mới cho phép người dùng nhấp và gửi tin nhắn đến bot (không gửi đến cuộc trò chuyện), sau đó lập trình viên có thể xử lý bot để hiển thị kết quả như mong muốn trong cuộc trò chuyện.

String BOT_TOKEN = "6691707417:AAF0INIQzjme0ODUPY0_Yb9tWd1p9tIbVk4"; // bot token lay tu bot father

Hình 2 10 Inline Keyboards trong ứng dụng Telegram

 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\" :

F("[{\"text\" : \"STATUS\", \"callback_data\" : \"STATUS\"}],"); keyboardJson += F("[{\"text\" : \"SETUP THRESHOLD\", \"callback_data\" : \"/set\"}]]"); bot.sendMessageWithInlineKeyboard(CHAT_ID, "NHÀ THÔNG MINH", "", keyboardJson);

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ị đầu ra ở 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);

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);

Các hàm chức năng. void thietbi1() { state_tb1 = ~state_tb1;

Serial.println("TB1"); digitalWrite(relay_1, state_tb1);

} void thietbi2() { state_tb2 = ~state_tb2;

Serial.println("TB2"); digitalWrite(relay_2, state_tb2);

} void thietbi3() { state_tb3 = ~state_tb3;

Serial.println("TB3"); digitalWrite(relay_3, state_tb3);

} void thietbi4() { state_tb4 = ~state_tb4;

Serial.println("TB4"); digitalWrite(relay_4, state_tb4);

2.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(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) {

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 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 gian thực, tạo data thời gian.

 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':

[{'label':'Nhietdo','borderColor':'blue','fill':false,'borderWidth':3,'da ta':[";

{'label':'Doam','borderColor':'green','fill':false,'borderWidth':3,'data' :[";

String str4 = "]}]},'options':{'legend':{'position':'bottom'},'title':

{'text':'Chart.jsTimeScale'},'scales':{'xAxes':[{'type':'time','time':

DDTHH:mm:ssZ','unit':'minute','unitStepSize':15,'displayFormats':

{'display':false,'labelString':'Time'},'ticks':{'major':

{'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)'}}]},'plugi ns':{'datalabels':

{'display':true,'color':'gray','align':'right','formatter':function(value ,context)

{index=context.dataIndex;data=context.dataset.data;if(index==a.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 đồ sẽ có 2 cộ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 40℃ đến 40℃, thang độ ẩm từ 55% , thang độ ẩm từ 55% đến 95% Còn trục X biểu diễn thời gian trong 2h và độ chia là 15’

//Creat_data(); int sizee = ReportData.size();

String str1 = "https://quickchart.io/chart?c={'type':'line','data':

[{'label':'Nhietdo','borderColor':'blue','fill':false,'borderWidth':3,'da ta':[";

{'label':'Doam','borderColor':'green','fill':false,'borderWidth':3,'data' :[";

String str4 = "]}]},'options':{'legend':{'position':'bottom'},'title': {'text':'Chart.jsTimeScale'},'scales':{'xAxes':[{'type':'time','time':

DDTHH:mm:ssZ','unit':'minute','unitStepSize':15,'displayFormats':

{'display':false,'labelString':'Time'},'ticks':{'major':

{'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)'}}]},'plugi ns':{'datalabels':

{'display':true,'color':'gray','align':'right','formatter':function(value ,context)

{index=context.dataIndex;data=context.dataset.data;if(index==a.length -1)return(data[index].y);return('');}}}}}";

String times, nhiet_do, do_am;

Data_x = Build_axisX(); for (int i = 0; i < ReportData.size(); i++) { nhiet_do += "{'x':'" +

EpochTime_to_string(ReportData[i].EpochTime_number) + "','y':" +

String(ReportData[i].temperatures) + "}"; do_am += "{'x':'" +

EpochTime_to_string(ReportData[i].EpochTime_number) + "','y':" +

String(ReportData[i].humiditys) + "}"; if (i < ReportData.size() - 1) { do_am += ","; nhiet_do += ",";

String graphURL = str1 + Data_x.c_str() + str2 + nhiet_do + str3 + do_am + str4; //+times+str5;

Serial.println(graphURL); return graphURL;

Trong đoạn mã trên, hàm "create_image()" đảm nhiệm vai trò đóng gói các dữ liệu về nhiệt độ, độ ẩm, và thời gian theo biểu đồ có sẵn Quá trình này tương tự như đóng gói sản phẩm trước khi gửi đi.

Khi có yêu cầu từ bảng điều khiển Telegram, vi xử lý sẽ gửi ảnh lên Telegram bằng phương thức GET theo chuẩn HTTP Telegram sẽ phản hồi với mã 200 nếu yêu cầu thành công, nếu không sẽ trả về mã khác (do kết nối mạng không ổn định).

Code thực hiện chức năng gửi nhiệt độ - độ ẩm hiện tại và biểu đồ nhiệt độ - độ ẩm if (text == "now") { float t = dht.readTemperature(); float h = dht.readHumidity();

String temp = "Nhiệt độ: "; temp += float(t); temp += "*C\n"; temp += " Độ ẩm: "; temp += float(h); temp += " %"; bot.sendMessage(CHAT_ID, temp, "");

} else if (text == "2 hours") { unsigned long EpochTime = timeClient.getEpochTime(); time_t timestamp = EpochTime; tmElements_t times; breakTime(timestamp, times); start_time = EpochTime - 3600 - times.Minute * 60 - times.Second; if (ReportData[0].EpochTime_number >= start_time + 60 * 60 ) { start_time += 60 * 60;

Delete_data(start_time); end_time = start_time + 2 * 60 * 60 ;

String url = url_send_photo + tam;

Serial.println(url); http.begin( url); int httpResponseCode = http.GET(); if (httpResponseCode > 0) { response = http.getString();

Serial.println("Sending photo: " + response);

Serial.print("Error send photo Error code: ");

2.3.4 Thiết lập ngưỡng cho nhiệt độ, độ ẩm

Mục đích của việc cài đặt ngưỡng tự động này là giúp người dùng có thể tự cài đặt ngưỡng bật thiết bị trong phòng một cách tự động theo nhiệt độ và độ ẩm trong phòng được cảm biến ghi lại.

Tạo giao diện chọn. if (text == F("/set")) {

F("[[{ \"text\" : \"Temperature\", \"callback_data\" : \"temp\" },

{ \"text\" : \"Humidity\", \"callback_data\" : \"hum\" }]]"); bot.sendMessageWithInlineKeyboard(CHAT_ID, "SETUP THRESHOLD", "", keyboardJson);

Hình 2.13 Giao diện chọn ngưỡng theo nhiệt độ và độ ẩm.

Khi ta nhấn chọn “Temperture” hay “Humidity” thì hệ thống thông báo ngưỡng mà chúng ta muốn cài đặt và chúng ta nhậm theo đúng cú pháp để cài đặt, được minh họa như hình dưới đây.

Code thực hiện đọc ngưỡng người dùng nhập từ cửa sổ chat. if (text == "temp") { bot.sendMessage(CHAT_ID, "Bạn hãy nhập ngưỡng cho nhiệt độ

(min-max): "); flag_temp = true ; flag_hum = false ;

} else if (text == "hum") { bot.sendMessage(CHAT_ID, "Bạn hãy nhập ngưỡng cho độ ẩm (min- max): "); flag_hum = true; flag_temp = false ;

String text = bot.messages[i].text;

Serial.println(text); if (text.startsWith( "/") && flag_temp) { flag_temp = false; textMax = text.substring(4, 6);

TemMax = textMax.toInt(); textMin = text.substring(1, 3);

Serial.println("Nhan duoc gia tri:");

Serial.println(TemMin); text = "Nhan duoc gia tri: \n"; text += "Tempmax: "; text += float(TemMax); text += "\nTemMin: "; text += float(TemMin); bot.sendMessage(CHAT_ID, text, "");

} if ( text.startsWith( "/") && flag_hum) { flag_hum = false; textMax = text.substring(4, 6);

HumMax = textMax.toInt(); textMin = text.substring(1, 3);

Serial.println("Nhan duoc gia tri:");

Serial.println(HumMin); text = "Nhan duoc gia tri: \n"; text += "Hummax: "; text += float(HumMax); text += "\nHumMin: "; text += float(HumMin); bot.sendMessage(CHAT_ID, text, "");

Code thực hiện thông báo và điều khiển khi nhiệt độ vượt quá ngưỡng float Humidity = dht.readHumidity(); float Temperature = dht.readTemperature();

// -SETUP TEMPRERATURE - if (Temperature >= TemMax && !tempAlertSent) { // Nếu nhiệt độ lớn hơn

T max và thông báo chưa được gửi state_tb1 = 1; digitalWrite(relay_1, state_tb1);

String temp = "Nhiệt độ đã vượt quá "; temp += String(TemMax); // Sử dụng String() để chuyển đổi số thành chuỗi temp += "*C\n"; temp += "Thực hiện bật quạt"; bot.sendMessage(CHAT_ID, temp, ""); tempAlertSent = true; // Đánh dấu là thông báo đã được gửi

} else if (Temperature TemMin) { tempAlertSent = false;

// -SETUP-HUM - if (Humidity >= HumMax && !humAlertSent) { // Nếu Do am lớn hơn max và thông báo chưa được gửi state_tb3 = 1; digitalWrite(relay_3, state_tb3);

String hum = "Độ ẩm đã vượt quá "; hum += String(HumMax); // Sử dụng String() để chuyển đổi số thành chuỗi hum += "%\n"; hum += "Thực hiện bật hút ẩm"; bot.sendMessage(CHAT_ID, hum, ""); humAlertSent = true; // Đánh dấu là thông báo đã được gửi

} else if (Humidity TemMin) { humAlertSent = false;

KẾT LUẬN CHƯƠNG

Chương 2 đã hoàn thành phần thiết kế hệ thống, từ thiết kế chatbot, các chức năng trên chatbot cho đến thiết kế phần cứng.

KẾT QUẢ VÀ ĐÁNH GIÁ HỆ THỐNG

Kết quả đạt được

 Giao diện khi hệ thống được khởi động :

 Khi người dùng bấm vào LIGHT:

 Khi người dùng chọn TEMPERATURE – HUMIDITY

 Khi người dùng chọn STATUS

 Khi người dùng chọn SETUP THRESHOLD

 Thông báo khi độ ẩm vượt quá mức cài đặt :

 Biểu đồ nhiệt độ - độ ẩm khi đo được trong 2 giờ :

Đánh giá

 Các bước cài đặt và thêm bot vào hội nhóm đơn giản, dễ dàng với người dùng.

 Tận dụng được tính năng bảo mật mạnh của Telegram (không phải tự mở cổng server ra internet).

 Không phải cài thêm hoặc tự làm app riêng để điều khiển smarthome và người dùng đã quen thuộc với các app chat.

Với khả năng kết nối mọi lúc mọi nơi, người dùng có thể dễ dàng giám sát và điều khiển các thiết bị gia dụng thông minh từ xa, mang đến sự tiện lợi trong việc quản lý ngôi nhà.

 Dữ liệu đầu vào đơn giản chỉ là dạng văn bản người dùng gõ máy, chưa có xử lý dữ liệu như ản hay nhận dạng tiếng nói.

Một số tính năng cao cấp như tùy chỉnh giao diện bot, tự động thêm hoặc xóa thành viên bằng bot, đang bị hạn chế do phụ thuộc vào API bot của Telegram.

Kết luận chương

Chương III là những kết quả đạt được, thử nghiệm với hệ thống thực tế để đưa ra những đánh giá ưu điểm và nhược điểm của hệ thống Từ đó có thể đưa ra những giải pháp lựa chọn phù hợp với người dùng smart home.

Ngày đăng: 01/06/2024, 11:04

HÌNH ẢNH LIÊN QUAN

Hình 1.13 Trang chủ của QuickChart - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 1.13 Trang chủ của QuickChart (Trang 12)
Hình 1.14 Sơ đồ chân ESP-WROOM-32-30 chân - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 1.14 Sơ đồ chân ESP-WROOM-32-30 chân (Trang 13)
Hình 1.16 Mô tả giao thức HTTPS - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 1.16 Mô tả giao thức HTTPS (Trang 14)
Hình 2.1 Sơ đồ hệ thống. - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2.1 Sơ đồ hệ thống (Trang 15)
Hình 2.2 Sơ đồ nguyên lý 2.2.2.2 Bản vẽ PCB - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2.2 Sơ đồ nguyên lý 2.2.2.2 Bản vẽ PCB (Trang 16)
Hình 2.5 Lớp 3D 2.2.3 Mạch thực tế - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2.5 Lớp 3D 2.2.3 Mạch thực tế (Trang 17)
Hình 2.8 Mạch thực tế - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2.8 Mạch thực tế (Trang 17)
Hình 2. 9 Các bước để lấy mã token trong Telegram - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2. 9 Các bước để lấy mã token trong Telegram (Trang 18)
Hình 2. 10 Inline Keyboards trong ứng dụng Telegram - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2. 10 Inline Keyboards trong ứng dụng Telegram (Trang 19)
Hình 2. 11 Kết quả chạy chương trình khởi đầu dùng Inline Keyboard - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2. 11 Kết quả chạy chương trình khởi đầu dùng Inline Keyboard (Trang 19)
Hình 2. 12 Kết quả giao diện điều khiển Inline Keyboard - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 2. 12 Kết quả giao diện điều khiển Inline Keyboard (Trang 20)
Hình 3.2 Kết quả 2 - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 3.2 Kết quả 2 (Trang 28)
Hình 3.1 Kết quả 1 - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 3.1 Kết quả 1 (Trang 28)
Hình 3.4 Kết quả 4 - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 3.4 Kết quả 4 (Trang 29)
Hình 3.3 Kết quả 3 - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 3.3 Kết quả 3 (Trang 29)
Hình 3.9 Kết quả 9 - Đồ án thiết kế điện tử - Báo cáo cuối kỳ
Hình 3.9 Kết quả 9 (Trang 30)

TỪ KHÓA LIÊN QUAN

w