1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo internet of things(iot) và ứng dụng

54 0 0

Đ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

Định dạng
Số trang 54
Dung lượng 2,26 MB

Cấu trúc

  • I. Tổng quan về Internet Things:..............................................................................10 of 1 2 3 .Khái niệm (0)
  • II. Tổng quan và cách cài đặt Arduino IDE (16)
  • III. Dự án IoT điều khiển khóa và thiết bị điện thông qua Node MCU Esp8266 bằng Webserver (23)
  • IV. Tổng kết và hướng phát triển (53)
  • TÀI LIỆU THAM KHẢO (54)

Nội dung

Tổng quan và cách cài đặt Arduino IDE

Arduino IDE là một phần mềm mã nguồn mở chủ yếu được sử dụng để viết và biên dịch mã vào module Arduino. Đây là một phần mềm Arduino chính thức, giúp cho việc biên dịch mã trở nên dễ dàng mà ngay cả một người bình thường không có kiến thức kỹ thuật cũng có thể làm được.

Nó có các phiên bản cho các hệ điều hành như MAC, Windows, Linux và chạy trên nền tảng Java đi kèm với các chức năng và lệnh có sẵn đóng vai trò quan trọng để gỡ lỗi, chỉnh sửa và biên dịch mã trong môi trường.

Có rất nhiều các module Arduino như Arduino Uno, Arduino Mega, Arduino Leonardo, Arduino Micro và nhiều module khác.

Mỗi module chứa một bộ vi điều khiển trên bo mạch được lập trình và chấp nhận thông tin dưới dạng mã.

Mã chính, còn được gọi là sketch, được tạo trên nền tảng IDE sẽ tạo ra một file Hex, sau đó được chuyển và tải lên trong bộ điều khiển trên bo.

Môi trường IDE chủ yếu chứa hai phần cơ bản: Trình chỉnh sửa và Trình biên dịch, phần đầu sử dụng để viết mã được yêu cầu và phần sau được sử dụng để biên dịch và tải mã lên module Arduino.

Môi trường này hỗ trợ cả ngôn ngữ C và C ++.

2.1.2) Arduino IDE hoạt động như thế nào?

Khi người dùng viết mã và biên dịch, IDE sẽ tạo file Hex cho mã File Hex là các file thập phân Hexa được Arduino hiểu và sau đó được gửi đến bo mạch bằng cáp USB Mỗi bo Arduino đều được tích hợp một bộ vi điều khiển, bộ vi điều khiển sẽ nhận file hex và chạy theo mã được viết.

2.1.3) Lí do nên sử dụng Arduino IDE

Phần mềm lập trình mã nguồn mở miễn phí.

Sử dụng ngôn ngữ lập trình C/C++ thân thiện với các lập trình viên.

Hỗ trợ lập trình tốt cho bo mạch Arduino.

Thư viện hỗ trợ phong phú.

Giao diện đơn giản, dễ sử dụng.

Hỗ trợ đa nền tảng như Windows, MacOS, Linux

2.2) Môi trường tích hợp Arduino IDE

2.2.1) Hướng dẫn và cài đặt Arduino IDE a Tải Arduino IDE

Truy cập vào link: https://www.arduino.cc/en/Main/Software để tải phần mềm. Ở đây sẽ xuất hiện các Link Download của các hệ điều hành khác nhau như

(Windows, Mac OS X, Linux) Mình sẽ demo cho các bạn cách cài đặt trên

Click chọn vào Windows Installer, for Windows XP and up hoặc Windows ZIP file for non admin install và trang sẽ chuyển hướng đến phần “Contribute to the

Arduino Software“(đây là một nền tảng mở bạn có thể đóng góp tiền để phát triển phần mềm).

Bước tiếp theo bạn Click vào JUST DOWNLOAD, bạn chọn nơi lưu trữ phần mềm có thể là ổ C,D,E tùy các bạn.

Sau khi đã tải về hoàn tất bạn vào nơi lưu trữ bản cài đặt và tiến hành cài đặt Arduino IDE.

Bạn Click vào “I Agree / Next / Install” (bạn chờ giây lát để IDE tiến hành cài đặt).

Như vây là bạn đã cài xong Arduino IDE. b Cài đặt và chức năng Arduino IDE

Sau khi kết nối và cài đặt xong, sẽ xuất hiện cổng COM ảo trên máy tính (Tùy từng loại hệ điều hành mà có những tên cổng như: COM1, COM2 đối với Windows.

Mở Arduino IDE và lựa chọn (tham khảo cấu hình kết nối như hình dưới):

Port: chọn cổng khi gắn thiết bị vào sẽ thấy xuất hiện.

Upload speed: Chọn cao nhất, nếu nạp không được chọn thấp dần. c Cấu trúc của một chương trình lập trình Arduino

Cũng như các ngôn ngữ lập trình khác, ngôn ngữ trong Arduino sử dụng ngôn ngữ

C, cấu trúc một chương trình Arduino bao gồm 2 phần chính : void setup()

Thực hiện việc thiết lập ban đầu cho các ứng dụng.

Vòng lặp thực hiện chương trình.

Hàm setup() được sử dụng để khởi tạo giá trị các biến, thiết lập chế độ chân, bắt đầu sử dụng các thư viện…Hàm setup chỉ thực hiện một lần khi cấp nguồn hoặc reset Arduino.

Hàm loop() được hiểu như là chương trình chính, thực hiện các chức năng được lập trình và có tính lặp lại liên tục.

2.2.2) Cài đặt board ESP8266 trên Arduino IDE

Sau khi đã cài đặt phiên bản mới nhất của Arduino IDE, các bạn tiếp tục thực hiện các bước sau đây để tiến hành cài đặt thư viện và chức năng nạp code cho Arduino IDE.

1.Mở cửa số Preferences từ Arduino IDE Vào File → Preferences.

2.Nhập http://arduino.esp8266.com/stable/package_esp8266com_inex.json vào ô

“Additional Board Manager URLs” như được hiển thị trong hình bên dưới Sau đó,nhấp vào nút “OK”:

Lưu ý: Nếu bạn đã có URL của board ESP32, bạn có thể thêm các URL bằng dấu phẩy như sau: https://dl.espressif.com/dl/package_esp32_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json

3 Tiếp theo vào Tools > Board > Boards Manager…

Sau khi chương trình tìm kiếm xong, bạn kéo xuống dưới và nhấp vào ESP8266 by

ESP8266 Community, click vào Install Chờ phần mềm tự động download và cài đặt trong vài giây.

Dự án IoT điều khiển khóa và thiết bị điện thông qua Node MCU Esp8266 bằng Webserver

ESP8266 là một hệ thống trên chip (SoC), do công ty Espressif của Trung Quốc sản xuất Nó bao gồm bộ vi điều khiển Tensilica L106 32-bit (MCU) và bộ thu phát Wi-Fi Nó có 11 chân GPIO (Chân đầu vào / đầu ra đa dụng) và một đầu vào analog, có nghĩa là bạn có thể lập trình nó giống như với Arduino hoặc vi điều khiển khác. Bản thân chip ESP8266 có 17 chân GPIO, nhưng 6 trong số các chân này (6-11) được sử dụng để giao tiếp với chip nhớ flash trên bo mạch Ngoài ra nó có kết nối Wi-Fi, vì vậy bạn có thể sử dụng nó để kết nối với mạng Wi-Fi, kết nối Internet, lưu trữ máy chủ web với các trang web thực, để điện thoại thông minh của bạn kết nối với nó, Khả năng là vô tận! Không có gì lạ khi con chip này đã trở thành thiết bị IoT phổ biến nhất hiện có.

Tần số hoạt động: 80 MHz

Bộ nhớ flash: 1MB 17 GPIO pins

Giao tiếp: I2C, SPI, I²S, UART Đặc biệt: 10bit ADC

- Động cơ Servo SG90 (Góc Quay 180) là Servo phổ biến dùng trong các mô hình điều khiển nhỏ và đơn giản như cánh tay robot Động cơ có tốc độ phản ứng nhanh, được tích hợp sẵn Driver điều khiển động cơ, dễ dàng điều khiển góc quay bằng phương pháp điều độ rộng xung PWM.

- Điện áp hoạt động: 4.8V ~ 6V DC

Tốc độ quay: 0.12 giây/60° (4.8V) , 0.1 giây/60° (6V)

Mômen xoắn: 1.8kg/cm (4.8V) , 2.5kg/cm (6V)

Chiều dài dây điện: 225mm

Figure 2 Động cơ servo SG90 180 độ

Figure 3 Dây nối hai đầu đực-cái

Figure 4 Dây nối hai đầu đực-đực

Figure 5 Dây cáp mini USB

Figure 6 Bảng đèn Led 12 bóng

-LCD 16×2 được sử dụng để hiển thị trạng thái hoặc các thông số.

 LCD 16×2 có 16 chân trong đó 8 chân dữ liệu (D0 – D7) và 3 chân điều khiển (RS, RW, EN).

5 chân còn lại dùng để cấp nguồn và đèn nền cho LCD 16×2.

Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu.

 Chúng còn giúp ta cấu hình ở chế độ đọc hoặc ghi.

LCD 16×2 có thể sử dụng ở chế độ 4 bit hoặc 8 bit tùy theo ứng dụng ta đang làm.

LCD có quá nhiều nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều chân trên vi điều khiển.

Module I2C LCD ra đời và giải quyết vấn để này cho bạn.

Thay vì phải mất 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN, D7, D6, D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối.

 Điện áp hoạt động: 2.5-6V DC.

Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780).

Giao tiếp: I2C. Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2). Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt.

Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD. Để sử dụng màn hình LCD giao tiếp I2C sử dụng Arduino thì ta cần cài đặt thư viện Liquidcrystal_I2C.

Tên thiết bị Thành giá

85.000 VND 45.000 VND 30.000 VND 35.000 VND 20.000 VND 45.000 VND

Dây nối hai đầu đực-đực(ngắn)

Dây nối hai đầu đực-cái(dài)

Màn hình hiển thị LCD 1602 +

3.2) Các thao tác trên Webserver điều khiển:

3.2.1) Upload chương trình vào Node MCU Esp8266

Figure 8 Đang thực hiện Upload

Figure 10 Giao diện Serial Monitor sau khi Upload

Ta truy cập vào địa chỉ mà Serial Monitor phản hồi:

Giao diện điều khiển khóa Đây là giao diện của Webserver điều khiển khi đăng nhập vào địa chỉ, đèn tín hiệuConnection status sẽ liên tục tắt-mở.

Figure 11 Khi nhấn mở khóa

Khi ta nhấn vào nút LOCK sẽ chuyển trạng thái thành UNLOCK và biểu tượng của khóa sẽ được mở ra, đồng thời thiết bị khóa sẽ được mở, Serial Monitor nhận thông tin trả về là unlock:

Figure 12 Serial Monitor nhận phản hồi unlock

Figure 13 Giao diện cấu hình wifi

Khi ta ấn vào nút CẤU HÌNH WIFI sẽ xuất hiện giao diện như trên Ở đây chúng ta có thể thiết lập những thông tin, chế độ liên quan tới Access point Wifi (Tên, mật khẩu, chế độ hiển thị). Để quay trở lại giao diện điều khiển khóa, ta chỉ cần nhấn vào nút BACK HOME.

Figure 14 Lưu thông tin wifi mới

Thực hiện thay đổi tên, mật khẩu của Access point Wifi và nhấn SAVE, ta nhận được phản hồi:

Figure 15 phản hồi thông tin wifi mới

Quá trình thực hiện RestartThực hiện nhấn RESTART để kết nối lại với Esp8266

Quá trình thực hiện reset

Figure 17 Serial Monitor phản hồi RESET

# include include include include include include

// set the LCD number of columns and rows int lcdColumns = 16; int lcdRows = 2;

// set LCD address, number of columns and rows

// if you don't know your display address, run an I2C scanner sketch

Thiết lập wifi kết nối v char* ssid = "KIT"; char* pass = "kitga123ss"; ESP826

BlynkTimer timer_unlock; boolean ledconnect;

ESP8266WebServer webServer(80); const char MainPage[] PROGMEM = R"=====(

< title>SMART HOME style> body { text-align:center; color:white

} input { height:25px; width:270px; font-size:20px; margin: 10px auto;

#cdhdwifi input { height:25px; width:25px; font-size:15px; margin: 10px 10px;

#content { border: white solid 1px; padding:5px;

//height:380px; width:330px; border-radius:20px; margin: 0 auto;

#ledconnect{ outline: none; margin: 10px 5px -1px 5px; width: 15px; height: 15px; border: solid 1px #00EE00; background-color: #00EE00; border-radius: 50%;

-moz-border-radius: 50%; webkit-border-radius: 50%;

.button_setup { height:30px; width:280px; margin: 5px 0; border: solid 1px white; background-color:#222222; border-radius:12px; outline:none; color:white; font-size:15px;

.button_wifi{ height:50px; width:90px; margin:5px 0; outline:none; color:white; font-size:15px; font-weight: bold;

#wifisetupap{ height:390px; font-size:20px; display:none;

#button_save { background-color:#00BB00; border-radius:5px;

#button_restart { background-color:#FF9900; border-radius:5px;

#button_reset { border-radius:5px;

#button_lock{ width: 180px; height: 60px; border-radius: 10px; background-color: blue; outline:none; font-weight: bold; color: white; font-size: 25px;

#iconlock { outline: none; width: 180px; height: 180px; background-color: #222222; position: relative;

.iconlock_right{ outline: none; width: 90px; height: 180px; background-color: yellow; border-radius: 0 90px 90px 0; position: absolute; left: 90px; top: -10px;

.iconlock_left{ outline: none; width: 90px; height: 180px; background-color: #00BB00; border-radius: 90px 0 0 90px; position: absolute; top: -10px; left: 0px;

#iconunlock { outline: none; width: 180px; height: 180px; background-color: #222222; margin: 0 auto; position: relative;

.iconunlock_right{ outline: none; width: 90px; height: 180px; background-color: yellow; border-radius: 0 90px 90px 0; position: absolute; left: 100px; top: -10px;

.iconunlock_left{ outline: none; width: 90px; height: 180px; background-color: #00BB00; border-radius: 90px 0 0 90px; position: absolute; top: -10px; left: -10px;

div id="homecontrol" style="height:370px; display: block;">

HOME REMOTE div style="position: relative;width: 180px; height: 160px; margin: 30px auto;">

input type="button" class="iconlock_left"/>

input type="button" class="iconunlock_left"/>

/div> div> button class="button_setup" onclick="configurewifiap()">CẤU HÌNH

SSID Access point:

< div style="text-align:left; width:270px; margin:0px 25px;">Password: div> div style="text-align:left;width:270px; margin:0px 25px;">Chế độ hoạt động: div style="text-align:left; height: 50px; margin-left: 20px;" id="cdhdwifi">

Hiện

Ẩn

SAVE button id="button_restart" class="button_wifi" onclick="restartESP()">RESTART button id="button_reset" class="button_wifi" onclick="clearEEPROM()">RESET

Connection status

WELCOME BACK HOME br>Email: thanh.ntr.61cntt@ntu.edu.vn

/div> script> window.onload = function(){ init(); document.getElementById("homecontrol").style.display = "block"; document.getElementById("wifisetupap").style.display = "none";

// -Hàm khởi tạo đối tượng request - function create_obj(){ if(td == "Microsoft Internet Explorer"){ obj = new ActiveXObject("Microsoft.XMLHTTP");

} else{ obj = new XMLHttpRequest(); return obj;

//===========Configure WiFi==================================== var xhttp = create_obj(); function configurewifiap(){ document.getElementById("homecontrol").style.display = "none"; document.getElementById("wifisetupap").style.display = "block"; document.getElementById("ssidap").value = ssid_ap; document.getElementById("passap").value = pass_ap; var cd_hdwifi = document.getElementsByName("cdhdwifi"); for (var i = 0, length = cd_hdwifi.length; i < length; i++) { if (cd_hdwifi[i].value == cdhd_wifi) { document.getElementsByName("cdhdwifi")[i].checked = "true"; break;

// -Thiết lập dữ liệu và gửi request ssid và password - function writeEEPROMap(){ if(Empty(document.getElementById("ssidap"), "Please enter ssid!")&&Empty(document.getElementById("passap"), "Please enter password")){ var ssidap = document.getElementById("ssidap").value; var passap = document.getElementById("passap").value; var cd_hdwifi = document.getElementsByName("cdhdwifi"); for (var i = 0, length = cd_hdwifi.length; i < length; i++) { if (cd_hdwifi[i].checked) {

// do whatever you want with the checked radio cd_hdwifihdwifi[i].value;

/ only one radio can be logically checked, don't check the rest

} xhttp.open("GET","/writeEEPROMap? ssidap="+ssidap+"&passap="+passap+"&cdhdap="+cd_hdwifi,true); xhttp.onreadystatechange = process;//nhận reponse xhttp.send();

} function clearEEPROM(){ if(confirm("Do you want to delete all saved wifi configurations?")){ xhttp.open("GET","/clearEEPROM",true); xhttp.onreadystatechange = process;//nhận reponse xhttp.send();

} function restartESP(){ if(confirm("Do you want to reboot the device?")){ xhttp.open("GET","/restartESP",true); xhttp.send(); alert("Device is restarting! If no wifi is found please press reset!"); }

// -Kiểm tra response - function process(){ if(xhttp.readyState == 4 && xhttp.status == 200){

// -Updat data sử dụng javascript - ketqua = xhttp.responseText; alert(ketqua);

//============Hàm thực hiện chứ năng khác=============================== function backHOME(){ document.getElementById("homecontrol").style.display = "block"; document.getElementById("wifisetupap").style.display = "none";

// -CHECK EMPTY - function Empty(element, AlertMessage){ if(element.value.trim()== ""){ alert(AlertMessage); element.focus(); return false;

//============WEBSOCKETCLIENT============================== var Socket; //Khai báo biến Socket var d4, ssid_ap, pass_ap, cdhd_wifi, led; function init(){

Socket = new WebSocket('ws://' + window.location.hostname + ':81/');

JSONobj = JSON.parse(event.data); //Tách dữ liệu json

//alert(event.data); d4 = JSONobj.D4; ssid_ap = JSONobj.SSIDap; pass_ap = JSONobj.PASSap; cdhd_wifi = JSONobj.CDHDap; led = JSONobj.LED;

//Kiểm tra trạng thái khóa và hiển thị lên webserver if(d4 == "0"){ document.getElementById("button_lock").value ="UNLOCK" document.getElementById("iconlock").style.display ="none"; document.getElementById("iconunlock").style.display = "block";

} else{ document.getElementById("button_lock").value = "LOCK" document.getElementById("iconlock").style.display = "block"; document.getElementById("iconunlock").style.display = "none";

} if(led == "0"){document.getElementById("ledconnect").style.background = "#222222";

//document.getElementById("status_Door").style.color = "#FFFFFF";

} else{ document.getElementById("ledconnect").style.background = "#00EE00"; //document.getElementById("status_Door").style.color = "#222222";

} function lockactive(){ if(document.getElementById("button_lock").value == "LOCK"){

//Khởi tạo bộ nhớ EEPROM lcd.init();

// turn on LCD backlight lcd.backlight(); pinMode(D5,OUTPUT); pinMode(D8,OUTPUT); digitalWrite(D8,LOW); //Thiết lập đèn nối với chân D8 tắt myservo.attach(D4); //Thiết bị khóa ở chân D4 myservo.write(180); //Thiết lập khóa đóng lcd.setCursor(0, 0); //Thiết lập LCD hiển thị từ vị trí (0, 0)

// print message lcd.print("close the door!"); read_EEPROM();

Serial.print("Connecting"); while(WiFi.status()!=WL_CONNECTED){ delay(500); Thiết lập kết nối với wi phản hồi

Serial.println(WiFi.localIP()); delay(100);

WiFi.mode(WIFI_AP_STA);

Serial.println("Soft Access Point mode!");

Serial.print("Please connect to ");

Serial.println(pass_ap); startWebServer(); webSocket.begin(); webSocket.onEvent(webSocketEvent);

Serial.print("Web Server IP Address: ");

Serial.println(ip_ap); timer_update.setInterval(500L, updateStateD); timer_unlock.setTimeout(5000L,unLock);

} void loop() { webServer.handleClient(); webSocket.loop(); timer_update.run(); timer_unlock.run();

//==========CHƯƠNG TRÌNH CON===================================// / -Đọc bộ nhớ EEPROM -

Serial.println("Reading EEPROM "); if(EEPROM.read(0)!=0){ ssid_ap = ""; pass_ap = ""; cdhd_ap = ""; for (int i=0; i

Ngày đăng: 06/12/2022, 10:07

HÌNH ẢNH LIÊN QUAN

Mở Arduino IDE và lựa chọn (tham khảo cấu hình kết nối như hình dưới): - BÁO cáo internet of things(iot) và ứng dụng
rduino IDE và lựa chọn (tham khảo cấu hình kết nối như hình dưới): (Trang 19)
- Động cơ Servo SG90 (Góc Quay 180) là Servo phổ biến dùng trong các mơ hình điều khiển nhỏ và đơn giản như cánh tay robot - BÁO cáo internet of things(iot) và ứng dụng
ng cơ Servo SG90 (Góc Quay 180) là Servo phổ biến dùng trong các mơ hình điều khiển nhỏ và đơn giản như cánh tay robot (Trang 24)
Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu. - BÁO cáo internet of things(iot) và ứng dụng
c chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu (Trang 25)
Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780). Giao tiếp: I2C. - BÁO cáo internet of things(iot) và ứng dụng
tr ợ màn hình: LCD1602,1604,2004 (driver HD44780). Giao tiếp: I2C (Trang 26)
Màn hình hiển thị LCD1602 + - BÁO cáo internet of things(iot) và ứng dụng
n hình hiển thị LCD1602 + (Trang 27)
3.2.3) CẤU HÌNH WIFI - BÁO cáo internet of things(iot) và ứng dụng
3.2.3 CẤU HÌNH WIFI (Trang 31)
3.4) Mơ hình mạch vật lí: - BÁO cáo internet of things(iot) và ứng dụng
3.4 Mơ hình mạch vật lí: (Trang 51)

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w