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

Công nghệ internet of things Đề tài trao Đổi dữ liệu giữa arduino và node mcu

20 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

Thông tin cơ bản

Tiêu đề Trao Đổi Dữ Liệu Giữa Arduino Và Node Mcu
Tác giả Nguyễn Đức Thịnh, Bùi Vũ Anh Tuấn, Nguyễn Trung Dũng, Nguyễn Thị Hải Ngọc
Người hướng dẫn ThS. Phạm Trung Minh
Trường học Trường Đại Học Hàng Hải Việt Nam
Chuyên ngành Công Nghệ Internet Of Things
Thể loại Báo cáo bài tập nhóm
Năm xuất bản 2024
Thành phố Hải Phòng
Định dạng
Số trang 20
Dung lượng 752,08 KB

Nội dung

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 1

TRƯỜ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 2

Mụ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 3

LỜ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 4

Phầ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 5

Phầ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 6

Hì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 8

Phầ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 9

Hì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 11

Phầ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 12

void 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 13

  lcd.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 14

  Serial.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 16

Giao 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 17

Phầ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

Ngày đăng: 24/11/2024, 15:39

w