1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài Tập Lớn Phát Triển Ứng Dụng Iot Đề Tài Thực Hành Với Arduino Uno Và Esp8266.Pdf

73 0 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

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC ĐẠI NAM

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC ĐẠI NAM

BÀI TẬP LỚN

TÊN HỌC PHẦN: PHÁT TRIỂN ỨNG DỤNG IOT

Bằng SốBằng Chữ

CÁN BỘ CHẤM THI

Trang 3

LỜI NÓI ĐẦU

Internet of Things (IoT) là một khái niệm ngày càng phổ biến trong thế giới côngnghệ hiện đại IoT là sự kết nối của các thiết bị thông minh với nhau và với internet, chophép chúng giao tiếp, thu thập và chia sẻ dữ liệu IoT có thể ứng dụng trong nhiều lĩnhvực khác nhau, từ nhà thông minh, y tế, nông nghiệp, đến công nghiệp và thành phốthông minh.

Để xây dựng các ứng dụng IoT, chúng ta cần có các phần cứng và phần mềm phùhợp Trong bài tập lớn này, tôi sẽ giới thiệu về hai loại mạch phổ biến được sử dụng trongIoT: Arduino Uno và ESP8266 Arduino Uno là một mạch vi điều khiển mã nguồn mở, dễsử dụng và lập trình, có thể kết nối với nhiều loại cảm biến và bộ điều khiển VàESP8266, một module wifi tích hợp, có thể kết nối Arduino Uno với internet, cho phéptruyền và nhận dữ liệu qua wifi

Trong bài luận này, tôi sẽ trình bày về cách hoạt động, cấu hình và lập trình củaArduino Uno và ESP8266 Cũng như đưa ra các mô hình, thiết bị cần có, sơ đồ kết nốitrên cả bo mạch Arduino Uno và ESP8266 như kết nối và điều khiển các thiết bị ngoại vithông qua mạch Arduino Uno, kết nối ESP8266 với wifi Cuối cùng, tôi sẽ đánh giá ưunhược điểm của Arduino Uno và ESP8266, cũng như các khuyến nghị để cải thiện hiệunăng và bảo mật của chúng.

Chúng em xin chân thành cảm ơn Thầy Hoàng Xuân Hiển đã truyền đạt và hướngdẫn cho chúng em những kiến thức cần thiết cho môn học phục vụ cho đề tài này Chúngem cũng xin cảm ơn vì sự hướng dẫn tận tình của Thầy trong việc tư vấn cho bài tập lớncủa chúng em.

Trang 4

MỤC LỤC

CHƯƠNG 1 PHẦN THỰC HÀNH VỚI ARDUINO UNO 1

1.1 Các bài thực hành với đèn LED 1

1.1.1 8 đèn nháy đuổi 1

1.1.2 Đèn LED sáng dần, tối dần 4

1.1.3 Đèn LED nháy đuổi điều khiển bằng biến trở 6

1.1.4 Điều khiển độ sáng của đèn LED bằng biến trở 8

1.1.5 Đèn giao thông cho người đi bộ 11

1.2 Các bài thực hành với màn hình LCD và Serial monitor 14

1.2.1 Hiển thị văn bản 14

1.2.2 Đọc dữ liệu từ serial monitor 17

1.2.3 Hiển thị các số từ 1 – 100 19

1.2.4 Màn hình nhấp nháy 21

1.2.5 Hiển thị giá trị của biến trở 23

1.3 Kết nối với DHT11 và cảnh báo thay đổi nhiệt độ bằng đèn LED 26

1.4 Các bài thực hành với động cơ bước 29

1.4.1 Kết nối động cơ bước với Arduino Uno 29

1.4.2 Điều khiển tốc độ bằng biến trở 31

1.4.3 Đảo chiều quay bằng nút nhấn 34

1.4.4 Hiển thị tốc độ, chiều quay lên màn hình LCD 36

CHƯƠNG 2 CÁC BÀI THỰC HÀNH VỚI NODE MCU ESP8266 40

2.1 Các trạng thái làm việc với WiFi 40

2.1.1 Tạo điểm truy cập WiFi (Access Point Mode) 40

Trang 5

2.2 Các phương thức làm việc với WebServer 46

Trang 7

MỤC LỤC HÌNH ẢN

Hình 1.1.1 Sơ đồ kết nối mô hình 8 đèn LED nháy đuổi 1

Hình 1.1.2 Kết quả bài thực hành 8 đèn LED nháy đuổi 3

Hình 1.1.3 Sơ đồ kết nối mô hình đèn LED sáng, tối dần 4

Hình 1.1.4 Kết quả mô hình đèn LED sáng, tối dần 5

Hình 1.1.5 Sơ đồ kết nối mô hình đèn LED nháy đuổi điều khiển bằng biến trở 6

Hình 1.1.6 Kết quả mô hình đèn LED nháy đuổi điều khiển bằng biến trở 7

Hình 1.1.7 Sơ đồ kết nối mô hình điều khiển độ sáng đèn LED bằng biến trở 9

Hình 1.1.8 Kết quả mô hình điều khiển độ sáng đèn LED bằng biến trở 10

Hình 1.1.9 Sơ đồ kết nối mô hình đèn giao thông cho người đi bộ 11

Hình 1.1.10 Kết quả mô hình đèn giao thông cho người đi bộ 13YHình 1.2.1 Sơ đồ kết nối mô hình kết nối LCD 15

Hình 1.2.2 Kết quả mô hình kết nối LCD 16

Hình 1.2.3 Sơ đồ kết nối mô hình đọc từ Serial Monitor 17

Hình 1.2.4 Kết quả mô hình đọc từ Serial Monitor 18

Hình 1.2.5 Sơ đồ kết nối mô hình hiển thị các số từ 1 – 100 19

Hình 1.2.6 Kết quả mô hình hiển thị các số từ 1 – 100 20

Hình 1.2.7 Sơ đồ kết nối mô hình màn hình nhấp nháy 21

Hình 1.2.8 Kết quả mô hình màn hình nhấp nháy 22

Hình 1.2.9 Sơ đồ kết nối mô hình đọc giá trị biến trở 24

Hình 1.2.10 Kết quả mô hình đọc giá trị biến trở 2Hình 1.3.1 Sơ đồ mô hình kết nối DHT11 với mạch Uno 26

Hình 1.3.2 Kết quả mô hình kết nối DHT11 với mạch Uno 2Hình 1.4.1 Sơ đồ kết nối Step motor với mạch Uno 29

Hình 1.4.2 Kết quả kết nối Step motor với mạch Uno 30

Hình 1.4.3 Sơ đồ kết nối điều khiển Step Motor bằng biến trở 31

Hình 1.4.4 Kết quả điều khiển động cơ bằng biến trở 33

Hình 1.4.5 Sơ đồ kết nối đảo chiều bằng nút nhấn 34

Hình 1.4.6 Kết quả mô hình đảo chiều bằng nút nhấn 35

Hình 1.4.7 Sơ đồ kết nối hiển thị tốc độ, chiều quay 37Hình 1.4.8 Kết quả mô hình hiển thị tốc độ, chiều quay 3

Trang 8

Hình 2.1 Sơ đồ kết nối ESP8266 40Hình 2.1.2 Kết quả mô hình ESP8266 Access Mode 41

Trang 9

Hình 2.1.3 Kết quả mô hình ESP8266 Station Mode 43

Hình 2.1.4 Kết quả mô hình ESP8266 Scan WiFi 4Hình 2.2.1 Kết quả mô hình HTTPS 47

Hình 2.2.2 Kết quả Web giới thiệu bản thân 50

Hình 2.2 3 Kết quả HTTP POST 52

Hình 2.2.4 Kết quả kết nối HTTP Get 5Hình 2.3.1 Sơ đồ kết nối ESP8266 với Uno giao thức UART 56

Hình 2.3.2 Kết nối Arduino với ESP8266 giao thức UART 59

Hình 2.3.3 Sơ đồ kết nối ESP8266 với Uno giao thức I2C 60

Hình 2.3.4 Kết nối ESP8266 với mạch Uno giao thức I2C 62

Hình 2.3.5 Sơ đồ kết nối ESP8266 với Uno giao thức SPI 63

Hình 2.3.6 Kết nối ESP8266 với Uno giao thức SPI6Hình 3.1 Sơ đồ kết nối mô hình chung 67

Hình 3.2 Kết quả mô hình chung 72

Trang 10

CHƯƠNG 1 PHẦN THỰC HÀNH VỚI ARDUINO UNO

1.1.1 8 đèn nháy đuổiCác linh kiện cần có:

Mạch Arduino UnoDây cắmĐèn LEDBreadboard

Sơ đồ kết nối:

Trang 11

Code:void setup() {

// put your setup code here, to run once: pinMode( ,1OUTPUT);

pinMode( ,2OUTPUT); pinMode( ,3OUTPUT); pinMode( ,4OUTPUT); pinMode( ,5OUTPUT); pinMode( ,6OUTPUT); pinMode( ,7OUTPUT); pinMode( ,8OUTPUT);}

void loop() {

// put your main code here, to run repeatedly: digitalWrite(1HIGH); delay(1000); digitalWrite(1LOW); delay(1000); digitalWrite(2HIGH); delay(1000); digitalWrite(2LOW); delay(1000); digitalWrite(3HIGH); delay(1000); digitalWrite(3LOW); delay(1000); digitalWrite(4HIGH); delay(1000); digitalWrite(4LOW); delay(1000); digitalWrite(5HIGH); delay(1000); digitalWrite(5LOW); delay(1000); digitalWrite(6HIGH); delay(1000); digitalWrite(6LOW); delay(1000); digitalWrite(7HIGH); delay(1000); digitalWrite(7LOW); delay(1000); digitalWrite(8HIGH); delay(1000); digitalWrite(8LOW); delay(1000); }

Trang 12

Về phần code, ở phần setup khai báo các chân LED từ 2-9 Ở phần loop(),làm lần lượt các hàm bật và tắt đèn bao gồm 2 bước: digitgalWrite(x, HIGH) vàdigitgalWrite(x, HIGH) với công dụng lần lượt là bật và tắt đèn Thực hiện lần lượtcho từng chân LED từ 2 – 9, ta sẽ có 8 đèn LED nháy đuổi.

Trang 13

1.1.2 Đèn LED sáng dần, tối dầnLinh kiện:

Đèn LEDBo mạch UNOBreadboard Dây cắm

Sơ đồ kết nối:

Hình 1.1.3 Sơ đồ kết nối mô hình đèn LED sáng, tối dần

Trang 14

Giải thích:

Yêu cầu của bài thực hành trên là lắp một mô hình 8 đèn LED nháy theo thứtự nối tiếp nhau và điều khiển tốc độ nháy của 8 đèn LED bằng biến trở Để thựchiện, đầu tiên lắp 8 đèn LED nối tiếp nhau vào Breadboard, nối tiếp cực âm của cácđèn led vào dải điện âm trên Breadboard và nối dải này vào chân GND trên mạchUNO Kế đến nối các chân từ 2 – 9 theo thứ tự vào các cực dương của đèn LED.

Về phần code, ở phần setup() khai báo các ledPin từ 2 – 9, đặt biến ledCount =số lượng đèn LED = 8 và khai báo chân Analog = A0 Kế đến sử dụng một vòng lặpfor để thiết lập các ledPin trên là OUTPUT tức là có thể xuất ra điện áp

Ở phần loop(), thực hiện đọc giá trị analog A0 và lưu vào biến t để quyết địnhthời gian nhấp nháy của đèn LED Sử dụng một còng for để duyệt qua các chânLED và thực hiện các bước tuần tự: bật đèn LED -> dừng trong khoảng thời gian t-> tắt đèn LED.

1.1.4 Điều khiển độ sáng của đèn LED bằng biến trởLinh kiện:

Mạch Arduino UnoDây cắmĐèn LEDBreadboardBiến trở

Trang 15

Sơ đồ kết nối:

Hình 1.1.7 Sơ đồ kết nối mô hình điều khiển độ sáng đèn LED bằng biến trở

Code:int brightness = 0;int analog = A0;void setup(){

pinMode(9OUTPUT);}

void loop(){

int a = analogRead(analog); if(a>255) a = 255; analogWrite(9, a);}

Trang 16

Về phần code, phần setup() khai báo ledPin 9, biến brightness để lưu độ sáng.Phần loop(), thực hiện đọc giá trị analog A0 và lưu vào biến A để quyết định độsáng của đèn LED Sử dụng một hàm if để định dạng lại giá trị max của độ sáng.Cuối cùng là dùng analogWrite để thực hiện thay đổi độ sáng của đèn LED.

Trang 17

1.1.5 Đèn giao thông cho người đi bộLinh kiện:

Mạch Arduino UnoDây cắmĐèn LEDBreadboardCông tắc bấm

Sơ đồ kết nối:

Hình 1.1.9 Sơ đồ kết nối mô hình đèn giao thông cho người đi bộ

Trang 18

pinMode(carRed, OUTPUT); pinMode(carYellow, OUTPUT); pinMode(carGreen, OUTPUT); pinMode(pedRed, OUTPUT); pinMode(pedGreen, OUTPUT); pinMode(button, INPUT); digitalWrite(carGreen, HIGH); digitalWrite(pedRed, HIGH); }

void loop() {

int state = digitalRead(button);

if(state == HIGH && (millis() - changeTime)> 500){ changeLights();

}}

void changeLights() { digitalWrite(carGreen, LOW); digitalWrite(carRed, HIGH); digitalWrite(pedRed, LOW); digitalWrite(pedGreen, HIGH); delay(crossTime);

for ( x=int0; x<10; x++) { digitalWrite(pedGreen, HIGH); delay(100);

digitalWrite(pedGreen, LOW); delay(100);

}

digitalWrite(pedRed, HIGH); digitalWrite(carRed, LOW); digitalWrite(carYellow, HIGH); delay(1000);

digitalWrite(carYellow, LOW); digitalWrite(carGreen, HIGH); changeTime = millis(); }

Trang 19

Để thực hiện mô hình này, đầu tiên ta cắm ba đèn LED xanh, đỏ, vàng lần lượtvào một phần của Breadboard, đây sẽ là 3 đèn giao thông cho xe Tiếp đến cắm 2đèn xanh đỏ cho người đi bộ ở một bên của Breadboard Nối các cực âm của đènLED lại vào dải âm của Breadboard, cắm cực dương của đèn LED lần lượt như sau:Đèn xe xanh pin 8, vàng pin 9, đỏ pin 10 Đèn đi bộ đỏ pin 7, xanh pin 6

Ta cắm công tắc và nối một chân với pin 11 trên mạch Uno và nối tiếp chânnày vào một điện trở và nối vào dải cực âm của Breadboard Chân còn lại nối vàodải cực dương của Breadboard rồi nối vào chân 5V trên mạch UNO.

Trang 20

Về phần code, ở setup() lần lượt khai báo các chân pin cho công tắc và đènLED, thêm hằng crossTime để làm thời gian chuyển giữa đèn đi bộ về lại đèn giaothông và changeTime để delay từ lúc ấn nút cho đến lúc chuyển sang đèn đỏ.

Phần loop(), thực hiện đọc giá trị của nút xem nút có được nhấn nút haykhông Nếu không thì đèn xanh vẫn sẽ sáng Nếu nút được nhấn thì sau 500ms sẽthực hiện hàm changeLight(), chuyển sang trạng thái đi bộ Và sau 5 giây sẽ chuyểnlại về trạng thái đi xe.

Hàm changeLight() khi được gọi sẽ thực hiện lần lượt: Tắt đèn xe xanh, sángđèn vàng 1 giây rồi sáng đèn xe đỏ Khi đèn xe đỏ sáng, đèn đi bộ đỏ tắt và đènxanh sáng Sau 5 giây, đèn đi bộ xanh nhấp nháy và chuyển sang đỏ, đèn xe đỏ tắt,đèn vàng sáng 1 giây rồi chuyển về xanh

1.2.1 Hiển thị văn bảnLinh kiện:

Mạch Arduino UnoDây cắmBreadboardModule LCD

Trang 21

Sơ đồ kết nối:

Hình 1.2.1 Sơ đồ kết nối mô hình kết nối LCD

#include <LiquidCrystal.h>LiquidCrystal lcd(12, , , , , );void setup() {

lcd.begin(16 2, ); lcd.print("Do Quoc Khanh");}

void loop() { lcd.setCursor(0); lcd.print("CNTT 14 05");}

Trang 22

Về phần code, khai báo thư viện LiquidCrystalI2C và khởi tạo đối tượng lcdvới các chân pin 2, 3, 4, 5, 11, 12 trên mạch Uno Ở setup(), sử dụng hàm lcd.beginđể thiết lập số hàng và cột, ở đây là 16 cột và 2 hàng Sử dụng lcd.print() để in ravăn bản Trong phần loop(), sử dụng hàm setCursor để đặt lại con trỏ

Trang 23

1.2.2 Đọc dữ liệu từ serial monitorLinh kiện:

Mạch Arduino UnoDây cắmBreadboardModule LCD

Sơ đồ kết nối:

Hình 1.2.3 Sơ đồ kết nối mô hình đọc từ Serial MonitorCode:

#include <LiquidCrystal.h>LiquidCrystal lcd(12, , , , , ); char receivedChar;

void setup() { lcd.begin(16 2, ); Serial begin.(9600); }

void loop() {

ifSerial available() > 0) { receivedChar = Serial.read(); lcd.clear();

lcd.setCursor(00);

Trang 24

lcd.print("Received Char:"); lcd.setCursor(01); lcd.print(receivedChar); }

Trong hàm loop(), kiểm tra xem liệu có dữ liệu đã được nhận từ Serial haykhông bằng cách sử dụng Serial.available() Nếu có dữ liệu,chúng ta đọc chuỗi dữliệu từ Serial cho đến khi gặp ký tự xuống dòng ('\n') bằng cách sử dụngSerial.readStringUntil('\n') Sau đó, xóa màn hình LCD bằng cách gọi lcd.clear() và

Trang 25

1.2.3 Hiển thị các số từ 1 – 100Linh kiện:

Mạch Arduino UnoDây cắmBreadboardModule LCD

lcd backlight.();

voidloop() {

Trang 26

for(int i = 1; i <= 100; i++) { lcd clear.();

lcd print.( )i ;

delay(1000);

Kết quả:

Hình 1.2.6 Kết quả mô hình hiển thị các số từ 1 – 100Giải thích:

Khai báo thư viện LiquidCrystal_I2C

Trong setup() khởi tạo màn hình LCD bằng hàm lcd.init(), sử dụng hàm lcd.begin để thiết lập số hàng và cột, ở đây là 16 cột và 2 hàng.

Trang 27

Linh kiện:

Mạch Arduino UnoDây cắmBreadboardModule LCD

bool isBacklightOn = true;

unsignedlong previousMillis = 0;

const unsignedlong interval = 500;

voidsetup() { lcd init.(); lcd begin.(16, );

}

Trang 28

voidloop() {

unsigned long currentMillis = millis();

if(currentMillis - previousMillis >= interval) {

previousMillis = currentMillis;

if(isBacklightOn){ lcd noBacklight.();

isBacklightOn = false;

}else{ lcd backlight.();

isBacklightOn = true;

} }

Kết quả:

Hình 1.2.8 Kết quả mô hình màn hình nhấp nháy

Trang 29

1.2.5 Hiển thị giá trị của biến trởLinh kiện:

Mạch Arduino UnoDây cắmBreadboardModule LCDBiến trở

Trang 30

lcd backlight.();

voidloop() {

int aValue = analogRead(analog);

int changedValue = map(aValue, 0, 1023, 10, 10000); lcd.clear();

lcd print.("Potentiometer:"); lcd setCursor.(01); lcd print.(changedValue); delay(500);

Kết quả:

Trang 31

Hình 1.2.10 Kết quả mô hình đọc giá trị biến trởGiải thích:

Khai báo biến analog để lưu giá trị đọc được từ biến trở.

Trong setup(), khơi tạo màn hình lcd bằng hàm init() và begin() Bật đèn nền bằng hàm blacklight().

Trong loop(), thực biện đọc giá trị biến trở bằng hàm readAnalog() và gán giá trị vào biến aValue Giá trị đọc được sẽ nằm trong khoảng 0 – 1023.

Sử dụng hàm map để ánh xạ giá trị đọc được từ aValue sang khoảng 10 – 10000 và lưu kết quả vào biến changedValue.

Xóa màn hình LCD bằng hàm lcd.clear(), dùng lcd.print() để in chuỗi “Potentionmeter: ” lên màn hình Sử dụng hàm setCursor() để di chuyển con trỏ đến dòng thứ 2 vị trí đầu tiên của màn hình LCD và dùng

lcd.print(changedValue) để in ra giá trị của biến trở.

Linh kiện:

Trang 32

Mạch Arduino UnoDây cắmĐèn LEDBreadboardDHT11Sơ đồ kết nối:

Hình 1.3.1 Sơ đồ mô hình kết nối DHT11 với mạch Uno

Trang 33

#include <DHT.h>#include <Wire.h>const int DHTPIN = 4; const int red = 13; const int yellow = 12; const int green = 7; const int DHTTYPE = DHT11;DHT dht(DHTPIN, DHTTYPE);LiquidCrystal_I2C lcd(0x27, , ); 16 2

void setup() { Serial begin.(9600); dht.begin();

pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT);}

void loop() {

float h = dht.readHumidity(); float t = dht.readTemperature(); Serial print.("Nhiet do: "); Serial println(t); Serial print.("Do am: "); Serial println(h); delay(1000);

if (t >60) { // B t đèn LEDậ digitalWrite(red, HIGH); digitalWrite(yellow, LOW); digitalWrite(green, LOW); } else if (h<55

// T t đèn LEDắ digitalWrite(red, LOW); digitalWrite(yellow, HIGH); digitalWrite(green, LOW); }else{

digitalWrite(red, LOW); digitalWrite(yellow, LOW); digitalWrite(green, HIGH); }

}

Trang 34

Cắm DHT11 vào Breadboard, nối chân dương vào dải mạch dương trênBreadboard, chân data vào chân pin số 6 trên mạch Uno, chân âm vào dải âm trênBreadboard.

Trang 35

if (buttonState1 == HIGH) { forward();

}else{ backward(); } }

void forward(){

myStepper.setSpeed(speed); myStepper.step(-100 );}

void backward(){

myStepper.setSpeed(speed); myStepper.step(100 );}

Kết quả:

Hình 1.4.6 Kết quả mô hình đảo chiều bằng nút nhấn

Trang 36

Giải thích

Trong setup(), đặt chế độ của nút nhấn là INPUT

Trong loop(), thực hiện đọc trạng thái của nút nhấn và lưu vào biến buttonState1 Nếu là HIGH thì thực hiện hàm favorable(), ngược lại thì là reverse().

Hàm forward(), định hướng motor quay theo chiều thuận kim đồng hồ với mỗi bước là -100

Hàm backward() định hướng motor quay theo chiều ngược kim đồng hồ vớimỗi bước là 100

1.4.4 Hiển thị tốc độ, chiều quay lên màn hình LCDLinh kiện:

Bo mạch Arduino UnoĐộng cơ bước – Step motor Driver module ULN2003Dây nối

Nút nhấnModule LCD

Ngày đăng: 25/05/2024, 10:09

Xem thêm:

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

TÀI LIỆU LIÊN QUAN

w