MO DAU Nhằm đáp ứng yêu cầu của học phần Triển khai, phát triển ứng dụng AI và IoT, tài liệu tập trung mơ tả về basic platform của bài thực hành của học phần.. Bài thực hành bảo đảm đủ c
Trang 1
TRUONG DAI HOC DAI NAM
KHOA CONG NGHE THONG TIN
ĐẠI NAM UNIVERSITY
KHOA CONG NGHE THONG TIN
ĐẶC TA KY THUAT PLATFORM BAI THUC HANH CANH BAO AN NINH, AN TOAN CUA TOA NHA Học phần: Triển khai, phát triển ứng dung AI và IoT
(Lưu hành nội bộ)
TS Trần Đăng Công
TS Hoàng Xuân Hiến
TS Nguyễn Tài Tuyên
TS Bùi Hải Phong
Hà Nội - 2023
Trang 2
MUC LUC scccesesvavesssussssssssvesssnsssscassssasueavssssesvssssssssssssssssesesssststestavsssvavsrestsssatsestssestssesesseevees 3
L YEU CAU BÀI TOÁN 22 c1 1 21221211111121121211 112111111211 11112111 22212211 nre 4
1.1 Yêu cầu công năng -s c s T121 211211111 1101 1 11 111101112 e 4
", ÉP con an 5
II ĐẶC TẢ KỸ THUẬTT 52-2111 155125151151511115111111112122121121211511 11111 rya 6
3.1 Thu thập đữ liệu từ cảm biến DHTTIL - 55c s2 221111221221211 21211171 1121 px 6 3.2 Lập trình gửi dữ liệu lên CÏoud -¿ 2: 22 2223221221221 11133 1111111111111 1x+2 7 3.2.1 Sử dụng Ethernet WŠ1ÚO L 201 211211211511 211 1222212120118 11 7 3.2.2 Sử dụng ESP8266 55 n t2 TT 2121212121221 rrrrrve 8 3.3 Lập trình điều khién thiét bic ccc esceececeecesesessessesessessessessessessessesseeeen 14 3.3.1 Sử dụng Ethernet WŠ1ÚO 2 2.11211211101111 1111111111111111111111 11 xe 14 3.3.2 Sử dụng ESP8266 55s 2n TT E112 12a 19 3.4 Lập trình lưu trữ đữ liệu về CSDIL - 5 1 1 11 211111211211211 112111211121 xx 27 3.5 Lập trình Front-End -. -:- c1 c1 2212211211153 151 11512511 1511111 111111111111 81 H1 Hy HH 29 3.6 Lập trình Back-End - - c 22: 2211221201113 133 13011131131 111 11111111111 1111111111 1111 1x 30 3.7 Lập trình AI hỗ trợ ra quyết định - s22 1211571111111121111122121111x 1x xe 30
Trang 3MO DAU
Nhằm đáp ứng yêu cầu của học phần Triển khai, phát triển ứng dụng AI và IoT, tài liệu tập trung mơ tả về basic platform của bài thực hành của học phần Bài thực hành bảo đảm đủ cho sinh viên trải nghiệm từ kỹ thuật, kiến thức về các nội dung:
- Thiết kế giải pháp tơng thê cho bài thực hành
- Lập trình nhúng trên Arduino, ESP8§266/ESP32 theo yêu cầu của bài
- Lập trình IòT kết nĩi thiết bị lập trình nhúng với internet, kết nối với các thing khac qua Internet
- Lập trình thu thập đữ liệu từ thiết bị IoT và lưu trữ vào CSDL
- Lập trình Full-Stack và điều khiển thiết bị
- Lập trình AT dự báo, phân loại theo yêu cầu
Các bài tốn cần giải quyết tập trung đề tài Cảnh báo an nỉnh, an tồn của tịa nhà Platform được cung cấp ở mức cơ bản nhất, trên cơ sở đĩ sinh viên tham khảo và phát triển để hồn thiện bài tập thực hành theo yêu cầu của giảng viên
Việc tơ chức thực hành được tổ chức theo nhĩm gồm 03 thành viên, các nhĩm tự chuẩn bị vật tư, dụng cụ thu hanh (Tool Kit), trong do:
- 01 thanh vién tap trung lap trinh Full-Stack
- 01 thanh vién tập trung lập trình loT
- 01 thanh vién tap trung lap trinh AI
Mỗi bài thực hành cần phát huy cao nhất khả năng sáng tạo, cải tiến, tự điều chỉnh, tính chủ động của sinh viên và khả năng khởi nghiệp và áp dụng trong thực tế
TAC GIA
Trang 4I YEU CAU BAI TOÁN
1.1 Yêu cầu công năng
Cảnh báo về nguy co, su cô về an ninh, an toàn đối với tòa nhà, tập trung các nội dung:
- Cháy nỗ
- Gió, âm thanh bất thường
- Hoạt động lạ (hành động, thời gian)
- Đông người bắt thường
- Các yếu tố khác
Các tình huống ra cảnh báo cần huấn luyện cho hệ thông hiểu và nhận biết, từ đó có những hỗ trợ ra quyết định mức độ về an nình, an toàn Cuối cùng sẽ có những cảnh báo
và báo cáo cụ thể
1.2 Yêu cầu kỹ thuật
- Quyết định cảnh báo mức độ an ninh, an toàn dựa trên các dữ liệu: nhiệt độ, ap suất,
độ âm, khó gas, gió, âm thanh, hình ảnh
- Sử dụng kết nối qua đường internet wiÑ/ethernet
- Cho phép thu thập từ nhiều địa điểm trong tòa nhà đề ra quyết định cảnh báo 1.3 Yêu câu triên khai
- Triển khai tại phòng Lab và các địa điểm học tập
- Đối với thử nghiệm lấy đữ liệu mẫu cho cháy nô cần bảo đảm an toàn
Trang 5- Sử dụng các công cụ phát trién Back-End theo sé trrong (ASP.NET PHP )
- Python: Dung xu ly di liệu
- SQL Server: Dùng lưu trữ đữ liệu
2.2.5 M6 tả hoạt động
(1) Arduino/ESP thu thập dữ liệu nhận tử sensor
(2) Arduino/ESP gửi dữ liệu lên dweet.to
(3)(4) Tai dir ligu tir dweet.io vé SQL Server
(5) Tuong tac gitra Back-End va Front-End
(6) Diéu khién thiét bi
Trang 6(7) Điều khiến cơ cầu chấp hành
II BAC TA KY THUẬT
3.1 Thu thập dữ liệu từ cảm bién DHT11
#include "DHT.h"
#define DHTPIN 4 // what pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 # // DHT 11
//tdefine DHTTYPE DHT22 // DHT 22 (AM23@2)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialize DHT sensor for normal 16mhz Arduino
// Reading temperature or humidity takes about 25@ milliseconds!
// Sensor readings may also be up to 2 seconds ‘old' (its a very slow sensor) float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true) ;
// Check if any reads failed and exit early (to try again)
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index
// Must send in temp in Fahrenheit!
Trang 7#include<SPI.h> // thư viện để kết nối shield
#include<Ethernet.h> // thư viện cho dự án
byte mac[] = {@xDE, @xAD, @xBE, @xEF, @xFE, @xED };
Trang 8Serial.println("Ban da ket noi thanh cong mang ethernet ");
}
void loop() {
EthernetClient client = server.available();
if (client = true) { //if client:
while (client.connected()) {
if (client.available()) { char c = client.read();
// Xử lý dữ liệu tại day
3.2.2 Sir dung ESP8266
*/ Lập trình tương tác giữa Arduino LJNO với ESPS266
- Led xanh: Internet connected
- Led vàng: Dữ liệu gửi tr UNO:
AIA=>On A0A=> Off
#include <SoftwareSerial.h>
const byte RX = 2;
const byte TX = 3;
SoftwareSerial mySerial = SoftwareSerial(RX, TX);
String outputString="", inputString = ""; // a String to hold incoming data bool stringComplete = false; // whether the string is complete
String outputString1="", inputString1 = ""; // aString to hold incoming data bool stringComplete1 = false; // whether the string is complete
Trang 9// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
else if(inputString indexOf(”A9A”)>=8) { digitalwrite(8, LOW);
// get the new byte:
char inChar = (char)mySerial.read();
// add it to the inputString:
Trang 10else if(inputString1.indexOf ("AGA") >=0){
// Replace with your network credentials
const char* ssid = "tdcong";
const char* password = "mai12345”;
const byte RX = D6;
const byte TX = D5;
SoftwareSerial mySerial = SoftwareSerial(RX, TX);
char server[] = "www.dweet.io";
Trang 11WiFiClient client;
› inputString = ""; // a String to hold incoming data bool stringComplete = false; // whether the string is complete
String inputString1 = ""; // a String to hold incoming data
bool stringComplete1 = false; // whether the string is complete
Trang 12outputString="A1A" ;
}
}
}
// this method makes a HTTP connection to the server:
void httpRequest (String str) {
//Check WiFi connection status
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
Serial println(inputString) ; inputString="";
Trang 13// get the new byte:
char inChar = (char)mySerial.read();
// add it to the inputString:
Serial print (inputString1) ; inputString1="";
Trang 14#include<SPI.h>
an
#include<Ethernet.h> // thư viện cho dự
@xED }; ÔxEF, ØxFE, , ØxAD, @xBE,
= {ØxDE
TPAddress ip(192, 168, 5, 1090);
byte mac[ ]
EthernetServer (86) ; String readString; readString
int AN1, AN2
EthernetServer server
» AN3, AN4, ANS;
14
Trang 15if (readString.length() < 100) { readString += c;
}
if (c == '\n') { Serial println(readString) ; client.printlin("HTTP/1.1 280 OK");
client printin("Content-Type: text/html");
15
Trang 16client.printlin("Refresh: 5");
client printin();
client printin("<HTML>");
client printin("<HEAD>");
client.printin("<TITLE>He Thong Dieu Khien Thiet Bi Bang Arduino Uno
- Ethernet Shield Arduino</TITLE>");
client printin("</HEAD>") ; client printlin("<BODY>");
client.print(" Gia tri cong analog 2 la:
client print( AN2);
client printlin("<br/>");
client printlin("<br/>");
client.print(" Gia tri cong analog 3 la:
client print( AN3);
Trang 17client.print(" Gia tri cong analog 4 la: ");
client print( AN4);
//Stop Client:
client stop();
Serial.println("client disconnected");
if (readString.indexOf("buttonion") > @) { digitalWrite(9, HIGH);
}
if (readString.indexOf("buttonloff") > @) { digitalWrite(9 , LOW);
}
if (readString.indexOf("button20n") > 9) { digitalWrite(8, HIGH);
}
if (readString.indexOf("button20ff") > @) { digitalurite(8 , LOW);
}
if (readString.indexOf("button30n") > 9) { digitalWrite(7, HIGH);
}
if (readString.indexOf("button30ff") > @) { digitalWrite(7 , LOW);
}
readString = me,
3
Trang 18
18
Trang 19AC TỔ Red TR lcoh [§ 00Bubiến [§ WXbGS ÍR§ Trining | Reodng ÔN Böndiu [Website B DaNam dễ MGi-TônĐêng
HE THONG DIEU KHIEN THIET BI QUA INTERNET BANG ARDUINO UNO VA MODULE ETHERNET
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' >"
" <title>Diéu khién thiét bi</title>"
<meta name='viewport' content='width=device-width, initial-scale=1' >"
"<div style="width: 33@px;height: auto;margin: @ auto;margin-top: 7@px'>"
"<h1 align='center'»Điều khiển thiết bị ToT</h1>"
<table align="center’ >"
<tr>”
<td><a href='/ledion'><button class='b'>Bat 1</button></a><td>"
<td><a href='/ledloff'><button class='t'>Tat 1</button></a><td>"
<tr>”
<tr>”
Trang 20<td><a href='/led2on'><button class='b'>Bat 2</button></a><td>"
<td><a href='/led2off'><button class='t'>Tat 2</button></a><td>”
<tr>"
<tr>"
<td><a href='/led3on'><button class='b'>Bat 3</button></a><td>"
<td><a href='/led3o0ff'><button class='t'>Tat 3</button></a><td>”
// Replace with your network credentials
const char* ssid = "tdcong";
const char* password = "mai12345”;
// const char* ssid = "MinhPhong”;
// const char* password = "phuonganhi";
// Set Local Host
byte mac[] = {@xDE, @xAD, @xBE, @xEF, @xFE, ØxED };
IPAddress staticTP(192,168,5,188); // Local IP
Trang 22void httpRequest (String str) {
//Check WiFi connection status
if(WiFi.status()== WL_CONNECTED){
if (client.connect(server, 80)) {
String s = "GET /dweet/for/trandangcong?";
s.concat(str) ; Serial println(s);
// get the new byte:
char inChar = (char)mySerial.read();
// add it to the inputString:
Serial print(inputString) ; outputStringDHT= inputString;
Trang 23A Not secure | 192.168.5.45/led1on
Ih Research [§ Toots Ä Dðlieubiến j WebG§S ÑŸ Training [| Reading [| Trandau j Website [§ OaiNam eh Mail- Trin Dang ¢
.À ak 2h +
Điều khiến thiết bị loT
Trang 24*/ Arduino UNO Code
#include <SoftwareSerial.h>
#include "DHT.h"
const byte RX = 2;
const byte TX = 3;
SoftwareSerial mySerial = SoftwareSerial(RX, TX);
String inputString = ""; // a String to hold incoming data
bool stringComplete = false; // whether the string is complete
Trang 25}
}
String read_DHT(){
String tmp="";
// Reading temperature or humidity takes about 25@ milliseconds!
// Sensor readings may also be up to 2 seconds ‘old' (its a very slow sensor) float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true) ;
// Check if any reads failed and exit early (to try again)
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index
// Must send in temp in Fahrenheit!
// get the new byte:
char inChar = (char)mySerial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag so the main loop can
25
Trang 26// do something about it:
Trang 28from threading import Thread, Event
from urllib import request
def getLatestDweet_Thread(thingName, event):
conn = pyodbc.connect('Driver={SQL Server};'
"Server=SERVERNAME ; ' 'Database=SmartHome; ' 'UTD=sa; '
'PWD=xxxx; ` 'Trusted_Connection=no; ' cursor = conn.cursor()
last_time = ""
while not event.isSet():
try:
url = dweepy.get_latest_dweet_for(thingName) dict = url[e@]
longdate = dict['created' ] date = longdate[:10]
print("Missing a row!") time.sleep(2)
def stopGetDataDweet_Thread(event):
event.set()
def main():
28
Trang 29# Create an Event object
event = Event()
# Create and start the file download thread
getdata_thread = Thread(target=getLatestDweet_Thread,
args=("trandangcong”, event)) getdata_thread.start()
count=8
while(count<3):
count = count +1 print("Count=", count) time.sleep(1)
stop = input("Két thúc (y/n)? ")
if stop=="y":
print("Main thread finished ") event.set()
HE THONG CANH BAO AN NINH, AN TOAN TOA NHA
-EDANHMỤC ~S=DU'LIEUGIAMSAT ~-=CANHBAOANNINH,ANTOAN = ~ = DIEU KHIEN THIET B] IOT
DỮ LIỆU GIÁM SÁT
Time Temperature Humidity Wind Pressure Noise 2023-07-31 03:58:54 328 71
2023-07-31 03:58:51 328 71 2023-07-31 03:58:48 328 71
2023-07-31 03:58:45 32.8 71
2022-07-31 03:58:42 328 71 2023-07-31 03:58:38 328 71 2023-07-31 03:58:35 328 71 2023-07-31 03:58:32 328 71
29