LỜI MỞ ĐẦUTrong thời đại công nghệ thông tin bùng nổ như hiện nay, việc giao tiếp và kết nối giữa các thiết bị điện tử không chỉ là nhu cầu, mà còn trở thành một phần cốt lõi của quá trì
Trang 1TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM
KHOA CÔNG NGHỆ THÔNG TIN
-*** -BÁO CÁO BÀI TẬP NHÓM 7
ĐỀ TÀI: TRAO ĐỔI DỮ LIỆU GIỮA ARDUINO VÀ NODE MCU
Giáo viên hướng dẫn: ThS Phạm Trung Minh
Sinh viên thực hiện: Nguyễn Đức Thịnh - 94186
Bùi Vũ Anh Tuấn - 94191 Nguyễn Trung Dũng - 90584 Nguyễn Thị Hải Ngọc - 94261
Hải Phòng Ttháng 10, Năm 2024
Trang 2Mục lục
Mục Lục
4.3 Cách liên kết giữa ESP8266 và Arduino Uno 12
5.4 Tính khả thi của việc tích hợp Blynk 15
Trang 3LỜI MỞ ĐẦU
Trong thời đại công nghệ thông tin bùng nổ như hiện nay, việc giao tiếp và kết nối giữa các thiết bị điện tử không chỉ là nhu cầu, mà còn trở thành một phần cốt lõi của quá trình phát triển ứng dụng và hệ thống Các hệ thống nhúng và mạng lưới thiết bị thông minh (IoT) đang ngày càng phổ biến, đòi hỏi sự trao đổi dữ liệu giữa các vi điều khiển một cách nhanh chóng và hiệu quả Trong số các phương pháp giao tiếp, giao thức UART (Universal Asynchronous Receiver-Transmitter) nổi bật bởi tính đơn giản, dễ triển khai và khả năng truyền thông tin ổn định với độ chính xác cao UART cho phép các thiết bị điện tử trao đổi dữ liệu qua lại mà không cần đồng bộ hóa tín hiệu, từ đó đơn giản hóa quá trình truyền dữ liệu trong
nhiều ứng dụng
Báo cáo này sẽ trình bày chi tiết về quá trình thiết lập và thực hiện truyền thông giữa hai thiết bị phổ biến trong lĩnh vực vi điều khiển: Arduino và NodeMCU Arduino, với tính linh hoạt, giá thành hợp lý và cộng đồng hỗ trợ lớn mạnh, đã trở thành một trong những nền tảng được ưa chuộng nhất cho các dự án nhúng, từ đơn giản đến phức tạp Trong khi đó, NodeMCU, với bộ điều khiển ESP8266 tích hợp Wi-Fi, mở ra nhiều khả năng cho các ứng dụng IoT, cho phép kết nối thiết bị tới Internet một cách nhanh chóng và dễ dàng Sự kết hợp giữa Arduino và NodeMCU không chỉ tối ưu hóa khả năng giao tiếp giữa các thiết bị mà còn tạo điều kiện cho việc phát triển nhiều dự án sáng tạo, từ các hệ thống điều
khiển từ xa đến giám sát môi trường
Bằng việc phân tích quy trình kết nối và lập trình giữa hai thiết bị này, báo cáo sẽ giúp người đọc hiểu rõ cách thức trao đổi dữ liệu giữa Arduino và NodeMCU qua giao thức UART, đồng thời cung cấp các kết quả từ quá trình thử nghiệm thực tế Qua đó, chúng tôi hy vọng sẽ mang lại cái nhìn toàn diện về phương pháp giao tiếp này, từ đó tạo nền tảng vững chắc cho các ứng dụng trong tương lai, đặc biệt trong lĩnh vực Internet of Things (IoT) và hệ thống nhúng thông
minh
Trang 4Phần I Giới thiệu chung
1.1 Tổng quan
Trong bối cảnh công nghệ phát triển nhanh chóng, việc kết nối và giao tiếp giữa các thiết bị điện tử ngày càng trở nên quan trọng, đặc biệt trong lĩnh vực Internet of Things (IoT) Các vi điều khiển như Arduino và NodeMCU đã trở thành những công
cụ mạnh mẽ trong việc xây dựng các hệ thống nhúng, cho phép người dùng phát triển những ứng dụng đa dạng và phong phú
Arduino, với thiết kế đơn giản và khả năng lập trình linh hoạt, đã được sử dụng rộng rãi trong nhiều dự án giáo dục và nghiên cứu Ngược lại, NodeMCU nổi bật với khả năng kết nối Wi-Fi, giúp người dùng dễ dàng tích hợp các chức năng trực tuyến vào ứng dụng của mình Sự kết hợp giữa hai nền tảng này không chỉ mở rộng khả năng giao tiếp mà còn tạo điều kiện thuận lợi cho việc phát triển các dự án thông minh
Báo cáo này sẽ trình bày chi tiết quá trình thiết lập giao tiếp giữa Arduino và NodeMCU qua chuẩn UART, một giao thức truyền thông phổ biến và hiệu quả Chúng tôi sẽ đề cập đến các bước cần thiết để thực hiện kết nối, lập trình mã nguồn cho từng thiết bị, cũng như phân tích kết quả thử nghiệm Thông qua báo cáo, chúng tôi hy vọng sẽ cung cấp cái nhìn rõ ràng về khả năng tương tác của hai nền tảng này,
từ đó thúc đẩy sự phát triển của các ứng dụng sáng tạo trong tương lai
1.2 Danh sách thiết bị
1x Mạch Vietduino Uno (Arduino Uno Compatible)
1x Mạch MakerEdu Shield for Vietduino
1x Cảm biến độ ẩm
1x Đèn LED
1x Nút ấn
1x màn hình LED
1x ESP 8266 NodeMCU
Trang 5Phần II Cơ sở lý thuyết
2.1 Giao thức UART
UART là một giao thức truyền thông nối tiếp không đồng bộ, cho phép hai thiết bị giao tiếp thông qua hai dây: một dây truyền (TX) và một dây nhận (RX) Đặc điểm chính của UART bao gồm:
Baud Rate: Tốc độ truyền dữ liệu, thường được đặt bằng 9600, 115200, v.v.
Số bit dữ liệu: Thường là 8 bit.
Bit dừng: Thường là 1 hoặc 2 bit.
Bit kiểm tra: Có thể có hoặc không có (parity).
UART là giao thức phổ biến trong các ứng dụng nhúng do tính đơn giản và hiệu quả
Hình dưới đây minh họa cấu trúc và cách thức hoạt động của giao thức UART:
Hình 1 : Giao thức UART
2.2 Arduino và NodeMCU
Arduino: Là nền tảng mã nguồn mở cho các dự án điện tử, có khả năng lập
trình dễ dàng và thư viện phong phú Arduino có nhiều loại board khác nhau, với Arduino Uno là một trong những loại phổ biến nhất
NodeMCU: Là một board mạch phát triển dựa trên chip ESP8266, tích hợp
Wi-Fi, cho phép kết nối Internet một cách dễ dàng NodeMCU hỗ trợ lập trình bằng Lua hoặc Arduino IDE
Hình dưới đây là hình ảnh của board Arduino Uno và sơ đồ chân của module NodeMCU ESP8266:
Trang 6Hình 2 : Board Arduino Uno
Hình 3 : Module NodeMCU ESP8266
2.3 Blynk
Blynk là một nền tảng IoT mạnh mẽ cho phép người dùng dễ dàng xây dựng các ứng dụng di động để điều khiển các thiết bị điện tử từ xa Các tính năng chính của Blynk bao gồm:
Trang 7 Giao diện người dùng dễ sử dụng: Người dùng có thể tạo giao diện điều
khiển cho ứng dụng của mình thông qua một trình kéo-thả trực quan
Hỗ trợ nhiều loại vi điều khiển: Blynk hỗ trợ nhiều loại board mạch như
Arduino, NodeMCU, Raspberry Pi, v.v
Giao tiếp qua Internet: Blynk sử dụng giao thức TCP/IP để kết nối các
thiết bị và ứng dụng, giúp truyền thông tin một cách hiệu quả
Hình dưới đây minh họa giao diện của Blynk:
Hình 4 5: Giao diện của Blynk
Trang 8Phần III Phương pháp nghiên cứu
3.1 Kết nối phần cứng
Phần cứng cần thiết:
1 x Arduino: Chẳng hạn như Arduino Uno, là board phát triển phổ biến cho
các dự án điện tử
1 x ESP 8266 NodeMCU: Board mạch phát triển dựa trên chip ESP8266, tích
hợp Wi-Fi, cho phép kết nối Internet
Dây jumper: Dùng để kết nối giữa các chân của Arduino và NodeMCU.
Nguồn cung cấp: Nếu cần, có thể sử dụng adapter AC-DC hoặc pin để cấp
nguồn cho các board
Breadboard: Để kết nối và thử nghiệm các mạch điện một cách linh hoạt.
Cảm biến hoặc thiết bị ngoại vi: Có thể sử dụng để mở rộng dự án, như cảm
biến nhiệt độ, cảm biến ánh sáng, hoặc các thiết bị khác
Sơ đồ kết nối:
- TX của Arduino được kết nối với RX của NodeMCU.
- RX của Arduino được kết nối với TX của NodeMCU.
- GND của cả hai thiết bị được kết nối chung để đảm bảo mức điện áp đồng nhất,
tránh tình trạng truyền thông bị lỗi
- Kết nối Blynk:
ESP8266 sẽ được lập trình để kết nối với Wi-Fi và sử dụng Blynk để nhận lệnh từ ứng dụng di động
Cần cấu hình các thông số như SSID, pass, và auth trong mã nguồn ESP8266
Trang 9Hình dưới đây minh họa sơ đồ kết nối giữa Arduino và NodeMCU:
Hình 5 : Kết nối giữa Arduino và NodeMCU
3.2 Cài đặt phần mềm
Môi trường lập trình:
- Sử dụng Arduino IDE để lập trình cho cả Arduino và NodeMCU Bạn có thể
tải xuống từ trang chính thức của Arduino
- Cài đặt driver cho board nếu cần, để máy tính nhận diện được Arduino và
NodeMCU
Cài đặt thư viện:
- Mở Arduino IDE và vào Library Manager bằng cách chọn Sketch > Include Library > Manage Libraries.
- Tìm kiếm và cài đặt thư viện Blynk bằng cách gõ "Blynk" vào ô tìm kiếm Cài
đặt phiên bản mới nhất
- Cài đặt thư viện ESP8266WiFi nếu chưa có sẵn.
Cấu hình mã nguồn:
- ESP8266:
Cấu hình các thông số như SSID, password và auth token trong mã
nguồn để ESP8266 có thể kết nối với mạng Wi-Fi và Blynk
Đảm bảo rằng #define BLYNK_TEMPLATE_ID và #define BLYNK_TEMPLATE_NAME được đặt chính xác
- Arduino:
Đặt chân GPIO cho LED và nút nhấn trong mã nguồn
Trang 10 Đảm bảo Serial Monitor được cấu hình đúng để xem thông tin từ Arduino
Tải mã nguồn lên board:
- Kết nối Arduino và NodeMCU với máy tính thông qua cáp USB.
- Chọn đúng cổng COM và loại board trong Arduino IDE.
- Nhấn nút "Upload" để tải mã nguồn lên cả hai thiết bị.
Kiểm tra kết nối:
- Mở Serial Monitor để kiểm tra các thông điệp từ Arduino và NodeMCU.
- Đảm bảo rằng cả hai thiết bị đang hoạt động và có thể giao tiếp với nhau.
Trang 11Phần IV Kết quả nghiên cứu
4.1 Mã nguồn ESP8266
#define BLYNK_TEMPLATE_ID "TMPL6JJEpiefq"
#define BLYNK_TEMPLATE_NAME "esp test"
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char ssid[] = "Tuyet";
char pass[] = "FIFA2020";
char auth[] = "7meyrnuDT3GrRGqEBFfA8-0jasHhDcWC";
BlynkTimer timer;
float temperature = 0;
float humidity = 0;
int ledState = 0;
void setup() {
Serial.begin(9600); // Kết nối với Arduino qua Serial
Serial.println("ESP8266 started");
Blynk.begin(auth, ssid, pass);
}
BLYNK_WRITE(V1) { // Hiển thị nhiệt độ
Blynk.virtualWrite(V1, temperature);
}
BLYNK_WRITE(V3) { // Hiển thị độ ẩm
Blynk.virtualWrite(V3, humidity);
}
BLYNK_WRITE(V2) { // Điều khiển LED
ledState = param.asInt(); // Nhận giá trị từ Blynk
Serial.print("LED:");
Serial.println(ledState); // Gửi tín hiệu điều khiển LED sang Arduino
}
Trang 12void loop() {
if (Serial.available() > 0) {
String data = Serial.readStringUntil('\n');
if (data.startsWith("TEMP:")) {
temperature = data.substring(5).toFloat(); // Nhận giá trị nhiệt độ
} else if (data.startsWith("HUM:")) {
humidity = data.substring(4).toFloat(); // Nhận giá trị độ ẩm
}
}
Blynk.virtualWrite(V1, temperature); // Cập nhật giá trị nhiệt độ lên Blynk Blynk.virtualWrite(V3, humidity); // Cập nhật giá trị độ ẩm lên Blynk
Blynk.run();
timer.run();
}
4.2 Mã nguồn Arduino
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
const int ledPin = A1; // Pin đèn LED
const int buttonPin = 9; // Pin nút bấm
const int moistureSensorPin = 10; // Pin cảm biến độ ẩm (moisture sensor)
bool ledState = false;
bool buttonPressed = false;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Địa chỉ I2C của màn hình LCD
DHT dht(moistureSensorPin, DHT11); // Cảm biến DHT11 trên chân D10
float temp, humi;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600); // Khởi động Serial cho giao tiếp với ESP8266
lcd.init();
Trang 13lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(0, 1);
lcd.print("Humi:");
dht.begin();
}
void loop() {
// Xử lý nút bấm và đèn LED
if (digitalRead(buttonPin) == LOW) {
if (!buttonPressed) {
ledState = !ledState;
digitalWrite(ledPin, ledState);
Serial.print("LED:");
Serial.println(ledState);
buttonPressed = true;
}
} else {
buttonPressed = false;
}
// Đọc dữ liệu từ cảm biến DHT11
temp = dht.readTemperature();
humi = dht.readHumidity();
// Cập nhật giá trị trên màn hình LCD
lcd.setCursor(6, 0);
lcd.print(temp, 2);
lcd.write(0xDF); // Ký tự độ (°)
lcd.print("C ");
lcd.setCursor(6, 1);
lcd.print(humi, 2);
lcd.print("% ");
// Gửi dữ liệu nhiệt độ và độ ẩm qua Serial cho ESP8266
Serial.print("TEMP:");
Serial.println(temp);
Trang 14Serial.print("HUMI:");
Serial.println(humi);
// Kiểm tra tín hiệu Serial từ ESP8266
if (Serial.available() > 0) {
String data = Serial.readStringUntil('\n');
if (data.startsWith("LED:")) {
int espLedState = data.substring(4).toInt();
digitalWrite(ledPin, espLedState);
ledState = espLedState;
}
}
delay(1000); // Đo lại sau 1 giây
}
4.3 Cách liên kết giữa ESP8266 và Arduino Uno
Kết nối ESP8266:
VCC -> Nguồn 3.3V.
GND -> Kết nối GND của nguồn và kết nối chung GND với Arduino Uno.
CH_PD -> 3.3V (giữ luôn ở mức cao để bật ESP8266).
TX/RX -> Kết nối với RX/TX của Arduino Uno qua các điện trở phân áp nếu
cần thiết (vì Arduino Uno hoạt động ở mức 5V, cần giảm áp xuống 3.3V cho ESP8266)
Kết nối Arduino Uno:
Có thể cấp nguồn riêng qua cổng USB hoặc Jack DC
GND: Kết nối GND của Arduino với GND của ESP8266 (để có chung hệ tham
chiếu)
Trang 15 uno
Hình 5: Kết nối của arduino
4.4 Kết quả thực nghiệm
Khi cả hai chương trình được chạy trên thiết bị tương ứng, các kết quả quan sát được như sau:
Chương trình ESP8266:
ESP8266 sẽ kết nối với mạng Wi-Fi và thiết lập kết nối với Blynk Khi nhận được tín hiệu từ Blynk (thông qua ứng dụng di động), LED sẽ bật/tắt theo trạng thái được gửi từ ứng dụng
Giao diện Serial Monitor của ESP8266 hiển thị thông tin trạng thái LED và dữ liệu nhận được, giúp người dùng theo dõi quá trình hoạt động của thiết bị
Chương trình Arduino:
Arduino sẽ kiểm tra trạng thái nút nhấn Khi nút nhấn được nhấn, LED sẽ bật lên và thông tin sẽ được gửi đến Serial Monitor dưới dạng "LED: 1" hoặc
"LED: 0" khi LED tắt
Nếu Arduino nhận được dữ liệu từ ESP8266, nó sẽ cập nhật trạng thái của LED tương ứng
Trang 16Giao diện Blynk:
Người dùng có thể điều khiển LED từ xa thông qua ứng dụng Blynk Bất kỳ thay đổi nào trên ứng dụng đều được phản ánh ngay lập tức trên LED kết nối với Arduino
4.5 Kết quả thực nghiệm điều khiển LED
Khi thực hiện mã nguồn trên Arduino, LED sẽ bật lên khi nút nhấn được nhấn, cho phép người dùng tương tác trực tiếp với hệ thống
Kết quả cho thấy rằng việc tích hợp Blynk đã mang lại tính năng điều khiển từ
xa, giúp mở rộng khả năng của hệ thống Điều này tạo điều kiện thuận lợi cho việc phát triển các ứng dụng IoT phức tạp hơn trong tương lai
Vd khi đèn tắt
VD khi đèn bật
Hình 6 :Kết quả thực nghiệm
Trang 17Phần V Thảo luận
5.1 Ưu điểm của UART
Đơn giản: Giao thức UART rất dễ thiết lập và sử dụng, phù hợp cho người mới
bắt đầu và các dự án đơn giản
Chi phí thấp: Không cần thiết bị phức tạp hay phần mềm bổ sung để thực hiện
truyền thông, giúp giảm chi phí cho dự án
Hiệu suất cao: Thích hợp cho truyền thông trong khoảng cách ngắn, như trong
các ứng dụng nhúng
5.2 Hạn chế của UART
Khoảng cách truyền ngắn: UART thường chỉ hiệu quả trong khoảng cách
ngắn (tối đa khoảng 15 mét) Điều này có thể gây khó khăn trong các ứng dụng cần khoảng cách lớn hơn
Tốc độ truyền cố định: Các thiết bị phải sử dụng cùng một tốc độ baud rate để
truyền thông chính xác, điều này yêu cầu sự đồng bộ hóa cao trong thiết kế hệ thống
5.3 Các ứng dụng tiềm năng
Giao thức UART có thể được áp dụng trong nhiều lĩnh vực, chẳng hạn như:
Hệ thống giám sát: Kết nối cảm biến với Arduino và truyền dữ liệu về
NodeMCU để xử lý, hỗ trợ các ứng dụng giám sát môi trường
Tự động hóa nhà thông minh: Giao tiếp giữa các thiết bị trong hệ thống tự
động hóa, bao gồm điều khiển LED bật tắt bằng nút nhấn
Dự án học tập: Hỗ trợ sinh viên và nhà nghiên cứu thực hiện các dự án nghiên
cứu về IoT
5.4 Tính khả thi của việc tích hợp Blynk
Việc tích hợp Blynk vào dự án đã mở ra khả năng điều khiển từ xa, cho phép người dùng tương tác với hệ thống qua ứng dụng di động Điều này không chỉ giúp nâng cao tính linh hoạt mà còn tạo cơ hội để mở rộng dự án sang các lĩnh vực khác như nhà thông minh, nông nghiệp thông minh, và giám sát sức khỏe
Các ứng dụng tương lai có thể bao gồm cảm biến và thiết bị khác được tích hợp, cho phép người dùng kiểm soát và theo dõi nhiều thông số cùng lúc