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 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 đề Thực Hành Với Arduino Uno Và ESP8266
Tác giả Đỗ Quốc Khánh
Người hướng dẫn Th.S. Hoàng Xuân Hiển
Trường học Trường Đại Học Đại Nam
Chuyên ngành Phát Triển Ứng Dụng IoT
Thể loại bài tập lớn
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 73
Dung lượng 18,56 MB

Cấu trúc

  • CHƯƠNG 1. PHẦN THỰC HÀNH VỚI ARDUINO UNO (10)
    • 1.1. Các bài thực hành với đèn LED (10)
      • 1.1.2. Đèn LED sáng dần, tối dần (13)
      • 1.1.3. Đèn LED nháy đuổi điều khiển bằng biến trở (0)
      • 1.1.4. Điều khiển độ sáng của đèn LED bằng biến trở (14)
      • 1.1.5. Đèn giao thông cho người đi bộ (17)
    • 1.2. Các bài thực hành với màn hình LCD và Serial monitor (20)
      • 1.2.1. Hiển thị văn bản (20)
      • 1.2.2. Đọc dữ liệu từ serial monitor (23)
      • 1.2.3. Hiển thị các số từ 1 – 100 (25)
      • 1.2.4. Màn hình nhấp nháy (0)
      • 1.2.5. Hiển thị giá trị của biến trở (29)
    • 1.3. Kết nối với DHT11 và cảnh báo thay đổi nhiệt độ bằng đèn LED (31)
    • 1.4. Các bài thực hành với động cơ bước (0)
      • 1.4.1. Kết nối động cơ bước với Arduino Uno (0)
      • 1.4.2. Điều khiển tốc độ bằng biến trở (0)
      • 1.4.3. Đảo chiều quay bằng nút nhấn (0)
      • 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)
      • 2.2.1. HTTP (46)
      • 2.2.2. Tạo trang web giới thiệu bản thân (47)
      • 2.2.3. HTTP Post (51)
      • 2.2.4. HTTP Get (53)
    • 2.3. Thực hành kết nối Arduino Uno với ESP8266 (56)
      • 2.3.1. Kết nối bằng UART (56)
      • 2.3.2. Kết nối bằng I2C (60)
      • 2.3.3. Kết nối bằng SPI (63)
  • CHƯƠNG 3. LẮP MÔ HÌNH CHUNG (67)
    • 3.1. Sơ đồ chân cắm (67)
    • 3.2. Code (67)
    • 3.3. Kết quả (72)
  • KẾT LUẬN (73)

Nội dung

PHẦN THỰC HÀNH VỚI ARDUINO UNO

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

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

Mạch Arduino Uno Dây cắm Đèn LED Breadboard

Code: void setup() { // put your setup code here, to run once: pinMode ( , 1 OUTPUT); pinMode ( , 2 OUTPUT); pinMode ( , 3 OUTPUT); pinMode ( , 4 OUTPUT); pinMode ( , 5 OUTPUT); pinMode ( , 6 OUTPUT); pinMode ( , 7 OUTPUT); pinMode ( , 8 OUTPUT);

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

} Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 2

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

Yêu cầu của bài thực hành trên là điều khiển sao cho 8 đèn LED nháy theo thứ tự nối tiếp nhau Để thực hiện điều đó, ta cần có 8 đèn LED cắm nối tiếp vào mạch Sau đó ta nối liền chân âm của các đèn LED vào phần dải điện âm trên Breadboard rồi nối phần này vào chân GND trên mạch UNO Tiếp đến, nối các chân dương của đèn LED vào mạch UNO theo thứ tự lần lượt từ chân 2 - 9

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ượt cho từng chân LED từ 2 – 9, ta sẽ có 8 đèn LED nháy đuổi.

1.1.2 Đèn LED sáng dần, tối dần Linh kiện: Đèn LED Bo mạch UNO Breadboard Dây cắm

Hình 1.1.3 Sơ đồ kết nối mô hình đèn LED sáng, tối dần Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 4

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ực hiệ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ạch UNO 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ặp for để 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 định thời gian nhấp nháy của đèn LED Sử dụng một còng for để duyệt qua các chân LED 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ở

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 ( 9, OUTPUT);

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

} Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 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ở Giải thích

Yêu cầu của bài thực hành là lắp mô hình điều khiển độ sáng của đèn LED bằng biến trở Để thực hiện mô hình, đầu tiên ta lắp đèn LED vào Breadboard, nối cực âm của đèn LED vào dải âm trên Breadboard và nối vào chân GND trên bo mạch UNO.

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.

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

Mạch Arduino Uno Dây cắm Đèn LED Breadboard Công tắc bấm

Hình 1.1.9 Sơ đồ kết nối mô hình đèn giao thông cho người đi bộ Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 11

Code: int carRed = 10; carYellow = int 9; int carGreen = 8; int button = 11; int pedRed = 7; int pedGreen = 6; int crossTime P00; unsigned long changeTime;\ void setup() { 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= int 0; x 0) { receivedChar = Serial.read(); lcd.clear(); lcd.setCursor( 0, 0 ); Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 17 lcd.print("Received Char:"); lcd.setCursor( 0, 1 ); lcd.print(receivedChar);

Hình 1.2.4 Kết quả mô hình đọc từ Serial Monitor Giải thích:

Trong hàm setup(), khởi tạo màn hình LCD bằng cách gọi lcd.init() và lcd.begin(16, 2) Bật đèn nền của màn hình LCD bằng cách gọi lcd.backlight() Tiếp theo, khởi tạo giao tiếp Serial với tốc độ 9600 bps.

Trong hàm loop(), kiểm tra xem liệu có dữ liệu đã được nhận từ Serial hay khô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à

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

Mạch Arduino Uno Dây cắm Breadboard Module LCD

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

LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd init(); lcd begin(16, 2) ; lcd backlight() ; } void loop() { Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 19 for (int i = 1; i = interval) { previousMillis = currentMillis; if (isBacklightOn) { lcd noBacklight() ; isBacklightOn = false;

} else { lcd backlight() ; isBacklightOn = true;

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

Khai báo một biến boolean isBlackLightOn để theo dõi trạng thái đèn nền của màn hình LCD, mặc định để là true để bật đèn nền.

Khai báo biến previousMilis để lưu thời điểm trước đó và biến interval để cố định khoảng thời gian nhấp nháy đèn nền, ở đây là 0.5 giây (500ms).

Trong setup(), khởi tạo màn hình LCD bằng hàm lcd.init() và 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.

Trong loop(), lấy thời điểm hiện tại bằng hàm milis() và lưu vào biến currentMilis.

Kiểm tra xem đã đủ khoảng thời gian trôi qua (tương đương biến interval) bằng cách so sánh 2 biến previousMilis và currentMilis.

Trong hàm if, kiểm tra trạng thái biến isBlackLightOn, nếu là true sẽ tắt đèn nền bằng hàm lcd.noBlacklight() và update biến isBlackLightOn() thành false.

Ngược lại, nếu đang tắt thì gọi hàm lcd.BlackLight() và update isBlackLightOn thành true.

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

Mạch Arduino Uno Dây cắm Breadboard Module LCD Biến trở Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 23

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

LiquidCrystal_I2C lcd(0x27, 16, ; 2) int analog = A0; void setup() { lcd init(); lcd begin(16, 2) ; lcd backlight() ; } void loop() { int aValue = analogRead(analog); int changedValue = map(aValue, 0, 1023, 10, 10000); lcd.clear(); lcd print("Potentiometer:"); lcd setCursor(0, 1); lcd print(changedValue); delay( 500 ) ;

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

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

Linh kiện: Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 25

Mạch Arduino Uno Dây cắm Đèn LED Breadboard DHT11 Sơ đồ kết nối:

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

#include const int DHTPIN = 4; const int red = 13; const int yellow = 12; const int green = 7; const int DHTTYPE = DHT11;

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

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

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

} } Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 27

Hình 1.3.2 Kết quả mô hình kết nối DHT11 với mạch Uno Giải thích:

Yêu cầu của bài thực hành là kết nối DHT11 với mạch Uno và thể hiện các cảnh báo thay đổi nhiệt độ thông qua đèn LED.

Các bước thực hiện lắp mô hình bao gồm: Nối dải cực dương của Breadboard với pin 3.3V trên mạch Uno, nối dải cực âm với pin GND trên mạch Uno Bước tiếp theo, lắp các đèn LED sau đó cắm các cực âm vào dải cực âm trên Breadboard, nối cực dương lần lượt đèn đỏ vào chân pin số 8, đèn vàng vào chân pin số 9, đèn xanh vào chân pin số 10

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. if (buttonState1 == HIGH ) { forward();

} } void forward(){ myStepper.setSpeed(speed); myStepper.step(-100 );

} void backward(){ myStepper.setSpeed(speed); myStepper.step(100 );

Hình 1.4.6 Kết quả mô hình đảo chiều bằng nút nhấn Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 35

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ới mỗi bước là 100

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

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

Hình 1.4.7 Sơ đồ kết nối hiển thị tốc độ, chiều quay Code:

LiquidCrystal_I2C lcd( 0x27, , 20 4 ); const int stepsPerRevolution = 2038;

Stepper myStepper(stepsPerRevolution, 8, , , 10 9 11); const int buttonPin1 = 2; int buttonState1 = LOW; int speed = 15; void setup() { pinMode ( 2, INPUT);

Serial begin ( 9600); lcd.init(); lcd.backlight();

// dao(); int t = analogRead (A); Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 37 buttonState1 = digitalRead(buttonPin1); if (buttonState1 == HIGH ) { thuan();

} } void thuan(){ myStepper.setSpeed(speed); myStepper.step(100 );

Serial println(speed); lcd.setCursor(3 0 , ); lcd.print("Thuan"); lcd.setCursor(3 1 , ); lcd.print(speed);

} void dao(){ myStepper.setSpeed(speed); myStepper.step(-100 );

Serial println(speed); lcd.setCursor(3 0 , ); lcd.print("Dao"); lcd.setCursor(3 1 , ); lcd.print(speed);

Hình 1.4.8 Kết quả mô hình hiển thị tốc độ, chiều quay Giải thích

Trong setup(), dùng lcd.init() để khởi tạo màn hình, bật đèn nền bằng lcd.blacklight().

Trong loop(), mặc định sẽ gọi hàm Dao() để chạy động cơ bước theo chiều thuận và in thông tin lên màn hình LCD.

Nếu nút được nhấn, gọi hàm Thuan() để đảo chiều quay của động cơ và in ra màn hình LCD.

2 A Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 39

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

Module ESP8266 Dây nối Micro-USB Sơ đồ kết nối chung:

Hình 2.1 Sơ đồ kết nối ESP8266

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

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

#include const char *ssid = "khanh"; const char *password = "123456a@"; void setup() { Serial begin ( 9600); delay ( 10);

CÁC BÀI THỰC HÀNH VỚI NODE MCU ESP8266

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

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

#include const char *ssid = "khanh"; const char *password = "123456a@"; void setup() { Serial begin ( 9600); delay ( 10);

Serial println(WiFi.softAPIP()); int dev = WiFi.softAPgetStationNum();

Serial.printf("Devices connected = %d\n", dev); delay ( 3000);

Hình 2.1.2 Kết quả mô hình ESP8266 Access Mode Giải thích:

Khai báo thư viện ESP8266WiFi.h để hỗ trợ kết nối WiFi

Các biến ssid và password lưu trữ tên và mật khẩu của điểm truy cập WiFi muốn tạo

Trong setup(), thiết lập cấu hình ban đầu, khởi tạo serial để giao tiếp với máy tính trông qua cổng Serial với baud là 9600.

Trong loop(), sử dụng hàm WiFi.softAP(ssid, password) để thiết lập một điểm truy cập In ra màn hình Serial thông báo rằng điểm truy cập đã được khởi động với tên ssid. Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 41

In ra màn hình địa chỉ IP của điểm truy cập WiFi bằng softAPIP()

Sử dụng hàm WiFi.softAPgetStationNum() để lấy số lượng thiết bị đã kết nối đến điểm truy cập.

2.1.2 Truy cập 1 WiFi (Station Mode) Code:

#include const char* ssid = "Khanh"; const char* password = "123456a@"; void setup() { Serial begin ( 9600 );

} void loop() { Serial println ( "Setting WIFI mode ");

Serial print(ssid); while(WiFi.status()!=WL_CONNECTED){ delay ( 500);

Serial print ( "Connected,IP address");

Serial println(WiFi.localIP()); Serial.printf("Signal Strength in dB = %d\n",WiFi.RSSI()); delay ( 3000);

Hình 2.1.3 Kết quả mô hình ESP8266 Station Mode Giải thích:

Khai báo thư viện ESP8266WiFi.h Các biến ssid và password lần lượt lưu trữ tên và mật khẩu mạng WiFi Trong setup(), khởi tạo Serial để giao tiếp với máy tính với baud là 9600 Trong loop(), thiết lập WiFi của ESP8266 ở chế độ Station (WIFI_STA) Tiến hành kết nối với mạng WiFi với tên (ssid) và mật khẩu (password) Sử dụng vòng lặp While để chờ cho đến khi kết nối thành công.

Sau khi kết nối thành công, in ra màn hình địa chỉ IP bằng hàm localIP() In ra màn hình độ mạnh tính hiệu WiFi bằng hàm WiFi.RSSI() Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 43

#include void setup() { Serial begin ( 9600);

Serial println(); WiFi.mode(WIFI_STA); delay ( 100);

Serial println ( "Wi-Fi Network Scan Started");

} void loop() { int n = WiFi.scanNetworks();

Serial println ( "Scan done"); if (n == 0) { Serial println ( "No Networks Found");

} else { Serial print(n); Serial println ( " Networks found"); for (int i = 0; i < n; ++i) { Serial print ( "Sr No: ");

Serial print(i + 1); // Serial Number Serial print ( ": SSID: ");

Serial print(WiFi.SSID(i)); // SSID Serial print ( " (Signal Strength: ");

Serial print(WiFi.RSSI(i)); // Signal Strength Serial print ( " dBm, MAC: ");

Serial print(WiFi.BSSIDstr(i)); // MAC Address Serial print ( ", Security: "); switch (WiFi.encryptionType(i)) { case ENC_TYPE_NONE:

Serial println ( "Unsecured"); break; case ENC_TYPE_WEP:

Serial println ( "WEP"); break; case ENC_TYPE_TKIP:

Serial println ( "WPA"); break; case ENC_TYPE_CCMP:

} } Serial println ( ""); // Wait a bit before starting a new scan again delay ( 5000);

Hình 2.1.4 Kết quả mô hình ESP8266 Scan WiFi Giải thích:

Trong setup(), thiết lập Serial để giao tiếp với máy tính với baud là 9600.

Thiết lập WiFi của ESP8266 ở chế độ Station (WIFI_STA)

Trong loop(), sử dụng hàm WiFi.scanNetworks() để quét các mạng WiFi và lưu số mạng tìm thấy vào biến “n”.

Sau khi quá trình tìm kết thúc, in ra thông tin chi tiết về các mạng (Số thứ tự – Serial Number, tên mạng – SSID, độ mạnh – Signa Strength, địa chỉ MAC và loại bảo mật (Unsercured, WEP, WPA, WPA2, Auto, Unknown)

Nếu không tìm thấy mạng nào (n==0) in ra màn hình “No Networks Found”. Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 45

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

#include const char* wifiName = "Khanh"; const char* wifiPass = "123456a@";

ESP8266WebServer server(80); void handleRoot() { digitalWrite(2, 0); // Blinks on board LED on page request server.send(200, "text/plain", "My fullname is Do Quoc Khanh"); digitalWrite(2, 1);

} void setup() { Serial begin ( 9600); delay ( 10); pinMode ( 2, OUTPUT);

Serial println(); Serial println ( "Connecting");

WiFi begin (wifiName, wifiPass); while (WiFi.status() != WL_CONNECTED) { delay ( 500);

Serial println ( "Wi-Fi connected");

Serial println(WiFi.localIP()); server.on( , handleRoot); "/" server.begin();

Serial println ( "HTTP server started");

Hình 2.2.1 Kết quả mô hình HTTPS Giải thích:

Khai báo các thư viện ESP8266WiFi.h, ESP8266WebServer.h, ESP8266mDNS.h

Khai báo biến wifiName chứa tên của WiFi và wifiPass chưa mật khẩu mạng Khởi tạo ESP8266WebServer với cổng 80 Định nghĩa hàm handleRoot để xử lý khi có yêu cầu truy cập sẽ dẫn đến đường dẫn gốc (“/”) của máy chủ web Hàm này sẽ nháy 1 đèn led trên bo mạch và gửi một chuỗi văn bản đến Serial Monitor và tắt đèn LED.

Trong setup(), khởi động serial với baud 9600 và đặt pin số 2 ở chế độ OUTPUT.

Sau khi kết nối thành công, , in ra thông tin chi tiết về các mạng (Số thứ tự – Serial Number, tên mạng – SSID, độ mạnh – Signa Strength, địa chỉ MAC và loại bảo mật (Unsercured, WEP, WPA, WPA2, Auto, Unknown)

Trong loop(), gọi hàm server.handleClient để xử lý các yêu cầu đền máy chủ web

2.2.2 Tạo trang web giới thiệu bản thân Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 47

#include const char* wifiName = "fourcongchua"; const char* wifiPass = "gaugaugau";

ESP8266WebServer server(80); const char htmlPage[] PROGMEM = R"=====(

body { font-family: Arial, sans-serif;

} rounded-avatar { width: 200px; height: 200px; border-radius: 50%; object-fit: cover;

} container { max-width: 500px; margin: 0 auto; padding: 20px; background-color: #f5f5f5; border-radius: 10px;

} img { width: 300px; height: 300px;

)====="; void handleRoot() { server.send( 200 , "text/html", htmlPage);

} void setup() { pinMode ( LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH);

} void loop() { Serial println(); Serial println ( "Đang k t n i" ế ố );

WiFi.begin(wifiName, wifiPass); while (WiFi.status() != WL_CONNECTED) { delay ( 500);

Serial println ( "Wi-Fi đã k t n i" ế ố );

Serial println(WiFi.localIP()); if (MDNS.begin ( "esp8266")) { Serial println ( "MDNS responder đã kh i đ ng" ở ộ );

} server.on("/", handleRoot); server.begin();

Serial println ( "HTTP server đã kh i đ ng" ở ộ ); server.handleClient();

} Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 49

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

Khai báo các thư viện ESP8266WiFi.h, ESP8266WebServer.h, ESP8266mDNS.h

Khai báo biến wifiName chứa tên của WiFi và wifiPass chưa mật khẩu mạng Khởi tạo ESP8266WebServer với cổng 80 Định nghĩa hàm handleRoot để xử lý khi có yêu cầu truy cập sẽ dẫn đến đường dẫn gốc (“/”) của máy chủ web Hàm này sẽ nháy 1 đèn led trên bo mạch và gửi một chuỗi văn bản đến Serial Monitor và tắt đèn LED.

Trong setup(), khởi động serial với baud 9600 và đặt pin số 2 ở chế độ OUTPUT.

Sau khi kết nối thành công, , in ra thông tin chi tiết về các mạng (Số thứ tự – Serial Number, tên mạng – SSID, độ mạnh – Signa Strength, địa chỉ MAC và loại bảo mật (Unsercured, WEP, WPA, WPA2, Auto, Unknown)

#include // Thêm dòng này const char* ssid = "Khanh"; const char* password = "123456a@"; void setup() { Serial begin ( 9600); delay ( 10);

WiFi begin (ssid, password); while (WiFi.status() != WL_CONNECTED) { delay ( 500);

} Serial println(); Serial println ( "Wi-Fi connected");

} void loop() { // Th c hi n yêu c u POST ự ệ ầ HTTPClient http2;

WiFiClient client2; // T o m t đ i t ạ ộ ố ượ ng WiFiClient khác http2 begin (client2, "http://httpbin.org/post"); http2.addHeader("Content-Type", "application/x-www-form-urlencoded");

String postData = "data3&sensor=temperature"; int httpCode2 = http2.POST(postData); if (httpCode2 > 0) { Serial print ( "HTTP Code (POST): ");

Serial println(httpCode2); if (httpCode2 == HTTP_CODE_OK) { String payload = http2.getString();

Serial println ( "Response Data (POST): ");

} else { Serial println ( "Failed to connect (POST)");

} Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 51

Hình 2.2 3 Kết quả HTTP POST Giải thích:

Khai báo các thư viện ESP8266WiFi.h, ESP8266WebServer.h, ESP8266mDNS.h

Khai báo biến wifiName chứa tên của WiFi và wifiPass chưa mật khẩu mạng Khởi tạo ESP8266WebServer với cổng 80 Định nghĩa hàm handleRoot để xử lý khi có yêu cầu truy cập sẽ dẫn đến đường dẫn gốc (“/”) của máy chủ web Hàm này sẽ nháy 1 đèn led trên bo mạch và gửi một chuỗi văn bản đến Serial Monitor và tắt đèn LED.

Trong setup(), khởi động serial với baud 9600 và đặt pin số 2 ở chế độ OUTPUT.

Trong loop(), gọi hàm server.handleClient để xử lý các yêu cầu đến máy chủ web Khởi tạo yêu cầu HTTP bằng hàm HTTPClient.POST.

#include const char* ssid = "Khanh"; const char* password = "123456a@"; void setup() { Serial begin( 9600 ) ; delay( ) 10 ; WiFi.begin(ssid, password); while (WiFi status() != WL_CONNECTED) { delay( 500 ) ;

Serial println(); Serial println("Wi-Fi connected"); } void loop() { // Th c hi n yêu c u GET ự ệ ầ HTTPClient http;

WiFiClient client; // T o m t đ i t ạ ộ ố ượ ng WiFiClient http begin(client, "http://httpbin.org/get"); int httpCode = http GET(); if (httpCode > 0) { Serial print("HTTP Code: "); Serial println(httpCode); if (httpCode == HTTP_CODE_OK) { String payload = http.getString();

Serial println("Response Data: "); Serial println(payload); }

} else { Serial println("Failed to connect"); } http end(); }

Kết quả: Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 53

Hình 2.2.4 Kết quả kết nối HTTP Get

Khai báo các thư viện ESP8266WiFi.h, ESP8266WebServer.h, Định nghĩa hàm handleRoot để xử lý khi có yêu cầu truy cập sẽ dẫn đến đường dẫn gốc (“/”) của máy chủ web

Trong setup(), khởi động serial với baud 9600 và đặt pin số 2 ở chế độ OUTPUT.

Trong loop(), tạo một đối tượng HTTPClient để thực hiện yêu cầu HTTP Tạo đối tượng WiFiClient để sử dụng hàm Client cho yêu cầu kết nối HTTP

Gửi yêu cầu GET đến địa chỉ "http://httpbin.org/get" sử dụng đối tượng HTTPClient và WiFiClient.

Nhận HTTP code trả về từ yêu cầu, kiểm tra và in ra serial monitor

Nếu yêu cầu thành công, in ra HTTP_Code_OK(200) bằng serial.println(), ngược lại thì in ra yêu cầu thất bại

Kết thúc yêu cầu HTTP Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 55

Thực hành kết nối Arduino Uno với ESP8266

2.3.1 Kết nối bằng UART Linh kiện:

Module ESP8266 Bo mạch Arduino Uno Dây cắm micro USB Dây nối giữa 2 mạch Sơ đồ kết nối:

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

Phần code chạy trên ESP8266:

#include const byte TX = 14; const byte RX = 12;

SoftwareSerial mySerial = SoftwareSerial(RX, TX);

String inputString = ""; bool stringComplete1 = false; void setup() { Serial begin ( 9600); mySerial.begin(9600);

} void loop() { Uno2Esp(); delay ( 2000);

} void Uno2Esp() { while (mySerial available ()) { char inChar = (char)mySerial read (); inputString += inChar; if (inChar == '\n') { stringComplete1 = true;

} } if (stringComplete1 == true) { Serial print ( "Uno sent to Esp: ");

Serial println(inputString); inputString = ""; stringComplete1 = false;

} } void Esp2Uno() { mySerial.println("ESP"); delay ( 1000); mySerial.flush();

} Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 57

Code chạy trên bo mạch Uno:

#include 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 void setup() { // Serial, mySerial Begin at 9600 Baud Serial begin ( 9600); mySerial.begin(9600);

} void loop() { Uno2Esp(); delay ( 2000);

} void Esp2Uno() { while (mySerial available ()) { char inChar = (char)mySerial read (); inputString += inChar; if (inChar == '\n') { stringComplete = true;

} } if (stringComplete == true) { Serial print ( "Esp sent to Uno: ");

Serial println(inputString); inputString = ""; stringComplete = false; // Reset the flag }

Hình 2.3.2 Kết nối Arduino với ESP8266 giao thức UART Giải thích:

Trong code chạy trên ESP8266, khai báo chân 14(TX) và 12(RX) của ESP8266 Tạo đối tượng SoftwareSerial Esp8266 sẽ nhận dữ liệu từ Arduino, in ra Serial Monitor thông qua hàm Uno2Esp() và lưu dữ liệu nhận được vào biến inputString.

Trong hàm Esp2Uno(), ESP8266 sẽ gửi chuỗi “ESP” đến Uno thông qua Serial.Println().

Trong code của Arduino, khai báo sử dụng chân 2(RX) và chân 3(TX) của Uno Arduino nhận dữ liệu từ ESP8266, in ra Serial Monitor thông qua hàm Esp2Uno() và lưu vào biến stringComplete (mặc định đặt là false) Sau khi nhận dữ liệu, thông báo chuỗi đã hoàn chỉnh và đặt stringComplete thành True In dẽ liệu ra serial monitor và đặt lại inputString thành chuỗi rỗng, stringComplete thành false

Trong hàm Uno2Esp(), Uno gửi chuỗi “UNO” đến Esp8266 thông qua Serial.Println(). Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 59

2.3.2 Kết nối bằng I2C Linh kiện:

Module ESP8266 Bo mạch Arduino Uno Dây cắm micro USB Dây nối giữa 2 mạch Sơ đồ kết nối:

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

( Wire write "Hello Servant"); /* sends hello servant string */

Wire.requestFrom(8, ); 13 /* request & read data of size 13 from slave */

( while Wire available()){ char c = Wire read(); Serial print(c); }

Code chạy trên mạch Uno:

#include void setup() { Wire begin ( ); 8 /* join i2c bus with address 8 */

Wire.onReceive(receiveEvent); /* register receive event */

Wire.onRequest(requestEvent); /* register request event */

Serial begin ( 9600 ); /* start serial for debug */

// function that executes whenever data is received from master void receiveEvent( howMany) { int while (0 < Wire available()) { char c = Wire read (); /* receive byte as a character */

Serial print (c); /* print the character */

// function that executes whenever data is requested from master void requestEvent() {

Wire write ( "Hello Master"); /*send string on request */

} Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 61

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

Thiết lập ESP8266 sẽ là Master:

Trong setup(), khởi tạo kết nối ESP8266 qua I2C thông qua Wire.begin(SDA, SCL) Ở đây, chân SDA (D1) là 5 và SCL (D2) là 4

Trong loop(), ESP8266 gửi chuỗi “Hello Servant”, nhận dữ liệu từ Uno(Servant) thông qua Wire.requestFrom(8, 13) và in ra Serial Monitor.

Thiết lập Arduino Uno là Servant:

Trong setup(), khởi tạo kết nối I2C thông qua Wire.begin(8), đặt địa chỉ servant là 8 Khai báo thêm 2 hàm reveiveEvent() và requestEvent() để xử lý sự kiện nhận dữ liệu và yêu cầu dữ liệu từ Master.

Trong loop(), Arduino có một độ trễ ngắn delay(100) để đảm bảo độ ổn định trong giao tiếp I2C.

2.3.3 Kết nối bằng SPI Linh kiện:

Module ESP8266 Bo mạch Arduino Uno Dây cắm micro USB Dây nối giữa 2 mạch Sơ đồ kết nối:

Hình 2.3.5 Sơ đồ kết nối ESP8266 với Uno giao thức SPI Đỗ Quốc Khánh – Lớp CNTT 14-05 Trang 63

#include char buff[]="Hello Slave\n"; void setup() {

Serial begin 9600); /* begin serial with 9600 baud */

} void loop() { ( for int i=0; i

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

HÌNH ẢNH LIÊN QUAN

Sơ đồ kết nối: - 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
Sơ đồ k ết nối: (Trang 10)
Hình 1.1.2. Kết quả bài thực hành 8 đèn LED nháy đuổi Giải thích: - 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
Hình 1.1.2. Kết quả bài thực hành 8 đèn LED nháy đuổi Giải thích: (Trang 12)
Sơ đồ kết nối: - 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
Sơ đồ k ết nối: (Trang 15)
Hình 1.1.8. Kết quả mô hình điều khiển độ sáng đèn LED bằng biến trở Giải thích - 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
Hình 1.1.8. Kết quả mô hình điều khiển độ sáng đèn LED bằng biến trở Giải thích (Trang 16)
Sơ đồ kết nối: - 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
Sơ đồ k ết nối: (Trang 17)
Hình 1.1.10. Kết quả mô hình đèn giao thông cho người đi bộ Giải thích: - 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
Hình 1.1.10. Kết quả mô hình đèn giao thông cho người đi bộ Giải thích: (Trang 19)
Sơ đồ kết nối: - 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
Sơ đồ k ết nối: (Trang 21)
Hình 1.2.2. Kết quả mô hình kết nối LCD Giải thích: - 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
Hình 1.2.2. Kết quả mô hình kết nối LCD Giải thích: (Trang 22)
Hình 1.2.4.  Kết quả mô hình đọc từ Serial Monitor - 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
Hình 1.2.4. Kết quả mô hình đọc từ Serial Monitor (Trang 24)
Hình 1.2.5. Sơ đồ kết nối mô hình hiển thị các số từ 1 – 100 Code: - 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
Hình 1.2.5. Sơ đồ kết nối mô hình hiển thị các số từ 1 – 100 Code: (Trang 25)
Hình 1.2.7. Sơ đồ kết nối mô hình màn hình nhấp nháy Code: - 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
Hình 1.2.7. Sơ đồ kết nối mô hình màn hình nhấp nháy Code: (Trang 27)
Sơ đồ kết nối: - 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
Sơ đồ k ết nối: (Trang 30)
Hình 1.2.10. Kết quả mô hình đọc giá trị biến trở - 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
Hình 1.2.10. Kết quả mô hình đọc giá trị biến trở (Trang 31)
Hình 1.3.1. Sơ đồ mô hình kết nối DHT11 với mạch Uno - 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
Hình 1.3.1. Sơ đồ mô hình kết nối DHT11 với mạch Uno (Trang 32)
Hình 1.3.2. Kết quả mô hình kết nối DHT11 với mạch Uno Giải thích: - 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
Hình 1.3.2. Kết quả mô hình kết nối DHT11 với mạch Uno Giải thích: (Trang 34)
Sơ đồ kết nối: - 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
Sơ đồ k ết nối: (Trang 37)
Hình 1.4.8. Kết quả mô hình hiển thị tốc độ, chiều quay Giải thích - 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
Hình 1.4.8. Kết quả mô hình hiển thị tốc độ, chiều quay Giải thích (Trang 39)
Hình 2.1.3. Kết quả mô hình ESP8266 Station Mode Giải thích: - 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
Hình 2.1.3. Kết quả mô hình ESP8266 Station Mode Giải thích: (Trang 43)
Hình 2.1.4. Kết quả mô hình ESP8266 Scan WiFi Giải thích: - 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
Hình 2.1.4. Kết quả mô hình ESP8266 Scan WiFi Giải thích: (Trang 45)
Hình 2.2.1. Kết quả mô hình HTTPS Giải thích: - 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
Hình 2.2.1. Kết quả mô hình HTTPS Giải thích: (Trang 47)
Hình 2.2. 3. Kết quả HTTP POST Giải thích: - 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
Hình 2.2. 3. Kết quả HTTP POST Giải thích: (Trang 52)
Hình 2.2.4. Kết quả kết nối HTTP Get - 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
Hình 2.2.4. Kết quả kết nối HTTP Get (Trang 54)
Hình 2.3.1. Sơ đồ kết nối ESP8266 với Uno giao thức UART - 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
Hình 2.3.1. Sơ đồ kết nối ESP8266 với Uno giao thức UART (Trang 56)
Hình 2.3.2. Kết nối Arduino với ESP8266 giao thức UART Giải thích: - 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
Hình 2.3.2. Kết nối Arduino với ESP8266 giao thức UART Giải thích: (Trang 59)
Hình 2.3.3. Sơ đồ kết nối ESP8266 với Uno giao thức I2C Code: - 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
Hình 2.3.3. Sơ đồ kết nối ESP8266 với Uno giao thức I2C Code: (Trang 60)
Hình 2.3.4. Kết nối ESP8266 với mạch Uno giao thức I2C Giải thích: - 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
Hình 2.3.4. Kết nối ESP8266 với mạch Uno giao thức I2C Giải thích: (Trang 62)
Hình 2.3.5. Sơ đồ kết nối ESP8266 với Uno giao thức SPI - 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
Hình 2.3.5. Sơ đồ kết nối ESP8266 với Uno giao thức SPI (Trang 63)
Hình 2.3.6. Kết nối ESP8266 với Uno giao thức SPI - 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
Hình 2.3.6. Kết nối ESP8266 với Uno giao thức SPI (Trang 65)
Hình 3.1. Sơ đồ kết nối mô hình chung - 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
Hình 3.1. Sơ đồ kết nối mô hình chung (Trang 67)
Hình 3.2. Kết quả mô hình chung - 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
Hình 3.2. Kết quả mô hình chung (Trang 72)

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

TÀI LIỆU LIÊN QUAN

w