Tư vấn: 0979.466.469 / 0938.128.290

MENU

Giao tiếp UART giữa Arduino và ESP8266

Nhận mua hàng nước ngoài

Trong bài viết này chúng ta sẽ giao tiếp UART giữa Arduino và ESP8266 bằng cách gửi một chuỗi từ Arduino Uno đến ESP8266 NodeMCU thông qua đường giao tiếp UART và hiển thị chuỗi trên màn hình LCD.

UART là giao thức truyền thông nối tiếp không đồng bộ duy nhất và được sử dụng trong các module đầu đọc thẻ RFID làm giao diện truyền thông độc lập. UART cũng được tìm thấy nhiều bên trong các bộ vi điều khiển.

Hạn chế chính của UART là không hỗ trợ giao tiếp nhiều master và nhiều slave, do đó chỉ có 1 master và 1 slave.

 

Bởi vì truyền dữ liệu không đồng bộ, UART không cần tín hiệu đồng hồ để đồng bộ hóa truyền dữ liệu và dữ liệu có thể được gửi và nhận trong các thời gian khác nhau. Nếu master và slave gửi và nhận dữ liệu cùng một lúc, được gọi là giao tiếp half duplex, mỗi thiết bị cần 2 thanh ghi shift để lưu các ký tự truyền và nhận, điều này là cần thiết vì thiết bị có thể nhận một byte dữ liệu mới trong khi vẫn gửi một byte dữ liệu.

 

Trong hầu hết các ứng dụng, bit ít quan trọng nhất sẽ được truyền trước. Để tránh mất mát dữ liệu, tốc độ truyền cao, nhiều thiết bị UART có một bộ nhớ đệm nhỏ (FIFO) giữa thanh ghi dịch chuyển và hệ thống host.

 

Tần số đồng hồ thường gấp 8 hoặc 16 lần tốc độ bit. Thiết bị thu kiểm tra trạng thái của tín hiệu đến với tần số đồng hồ. Nếu bit bắt đầu kéo dài hơn một nửa thời gian bit, thiết bị thu sẽ phát hiện ra bit bắt đầu hợp lệ. Nếu không thì bit bắt đầu bị bỏ qua. Tần số đồng hồ còn được gọi là tốc độ truyền thường được đặt là 9600 bit mỗi giây.

 

Một ưu điểm của UART là chỉ cần 2 dây cho giao tiếp giữa master và slave, vì không cần đường đồng hồ và giống như giao tiếp SPI, cũng không có đường slave select. Hai đường đó là:

 

TX (truyền)

RX (nhận)

 

Đầu tiên thiết bị truyền dữ liệu nhận song song khung dữ liệu từ bus dữ liệu. Thiết bị UART thêm bit bắt đầu, bit chẵn lẻ và bit dừng vào khung dữ liệu trước khi toàn bộ gói dữ liệu được gửi qua UART đến thiết bị nhận. Thiết bị UART trích xuất khung dữ liệu và chuyển tiếp khung dữ liệu song song qua bus dữ liệu.

 

Nếu không có giao tiếp UART nào đang hoạt động, trạng thái không hoạt động trên các đường giao tiếp là mức logic cao.

 

Bit bắt đầu là bit đầu tiên được chuyển dưới dạng logic thấp, báo hiệu rằng một ký tự mới được chuyển.

 

Sau khi bit bắt đầu theo sau khung dữ liệu thực tế, định dạng và kích thước dữ liệu có thể định cấu hình trong khoảng từ 5 đến 9 bit.

 

Sau khung dữ liệu là một bit chẵn lẻ tùy chọn, cung cấp cho UART khả năng kiểm tra lỗi. Bit chẵn lẻ là 0 nếu tổng 1 bit trong khung dữ liệu là chẵn và 1 nếu tổng 1 bit trong khung dữ liệu là lẻ. Phương pháp kiểm tra lỗi này ngăn không cho thay đổi các bit trong quá trình truyền.

Quảng cáo đặt hàng nhập

 

Các bit cuối cùng được dành riêng như các bit dừng và báo hiệu ký tự đã hoàn tất. Do đó, các bit dừng kéo đường cao.

 

Nếu quá trình giao tiếp kết thúc, master sẽ đặt đường ở mức logic thấp hơn thời gian ký tự. Điều này cho slave biết rằng giao tiếp UART đã kết thúc.

 

Hình ảnh bên dưới là kết nối giữa vi điều khiển Arduino và ESP8266 và màn hình LCD. 

Tiếp theo, chúng ta đi từng bước qua mã chương trình.

 

Phần đầu tiên là tập lệnh của Arduino Uno gửi một chuỗi qua UART.

Tập lệnh rất ngắn và dễ dàng. Không có thư viện nào đi kèm. Trong hàm thiết lập, chúng ta phải đặt tốc độ truyền là 9600. Đối số thứ hai tùy chọn định cấu hình các bit dữ liệu, chẵn lẻ và dừng. Mặc định là 8 bit dữ liệu, không chẵn lẻ và một bit dừng sử dụng trong ví dụ này.

 

Trong hàm lặp, chúng ta gửi chuỗi qua hàm nối tiếp mỗi giây. Phần “ r” sẽ cho thiết bị nhận biết rằng chuỗi đã hoàn tất.

Bây giờ chúng ta xử lý tập lệnh thiết bị thu cho ESP8266 NodeMCU.

Đầu tiên, chúng ta phải thêm thư viện LiquidCrystal_I2C để làm cho việc giao tiếp với màn hình LCD dễ dàng hơn. Thư viện thứ hai Wire phải được thêm để cho phép giao tiếp I2C giữa NodeMCU và màn hình LCD.

Chúng ta khởi tạo màn hình LCD 20 × 4 trên địa chỉ HEX 0x27. Để xác định địa chỉ Hex của thiết bị I2C bạn cần tìm Hex address scanner.

Các biến buff lưu trữ các giá trị đến thông qua UART và biến indx lưu chỉ mục của bit 8.

 

Trong setup function, tốc độ truyền được đặt thành 9600, tốc độ này phải phù hợp với tốc độ truyền của Arduino Uno. Màn hình LCD sẽ được khởi động, xóa sạch và đèn nền được bật.

 

Trong loop function, kiểm tra xem kết nối nối tiếp có khả dụng hay không và sau đó đọc từng byte dữ liệu nối tiếp đến đồng thời ghi từng byte vào vùng đệm mảng byte. Nếu phát hiện phần cuối của chuỗi, được xác định bởi “ r”, hiển thị nội dung của mảng lên màn hình LCD. Sau 1 giây, chúng ta đặt lại chỉ mục cho mảng và làm xóa màn hình cho dữ liệu đến tiếp theo.

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
50000 /Cái
/ Cái

Code: 7006-060 Còn hàng

Lưu xem sau
Sale 0%
121000 /Cái
/ Cái

Code: M-7006-040 Còn hàng

Lưu xem sau
Sale 0%
18000 /Cái
/ Cái

Code: 7201-019 Còn hàng

Lưu xem sau
Sale 0%
115000 /Cái
/ Cái

Code: 7004-022 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0359 366 469
Bạn cần linh kiện mẫu ? 7-11 ngày