Mục lục:

Giao tiếp nối tiếp Arduino: 5 bước
Giao tiếp nối tiếp Arduino: 5 bước

Video: Giao tiếp nối tiếp Arduino: 5 bước

Video: Giao tiếp nối tiếp Arduino: 5 bước
Video: [Arduino] 05. Giao tiếp cổng Serial 2024, Tháng bảy
Anonim
Giao tiếp nối tiếp Arduino
Giao tiếp nối tiếp Arduino

Nhiều dự án Arduino dựa vào việc truyền dữ liệu giữa một số Arduino.

Cho dù bạn là người có sở thích chế tạo ô tô RC, máy bay RC hay thiết kế trạm thời tiết với màn hình từ xa, bạn sẽ cần biết cách truyền dữ liệu nối tiếp từ Arduino này sang Arduino khác một cách đáng tin cậy. Thật không may, rất khó để những người có sở thích giao tiếp dữ liệu nối tiếp hoạt động trong các dự án của riêng họ, vì dữ liệu nối tiếp được gửi dưới dạng một dòng byte.

Nếu không có bất kỳ loại ngữ cảnh nào trong dòng byte, thì gần như không thể giải thích dữ liệu. Nếu không có khả năng diễn giải dữ liệu, Arduinos của bạn sẽ không thể giao tiếp một cách đáng tin cậy. Điều quan trọng là thêm dữ liệu ngữ cảnh này vào luồng byte bằng cách sử dụng thiết kế gói nối tiếp tiêu chuẩn.

Thiết kế gói nối tiếp, nhồi gói và phân tích gói là phức tạp và khó đạt được. May mắn cho người dùng Arduino, có sẵn các thư viện có thể thực hiện tất cả các logic phức tạp này đằng sau hậu trường, do đó bạn có thể tập trung vào việc đưa dự án của mình hoạt động mà không phải lo lắng. Có thể hướng dẫn này sẽ sử dụng thư viện SerialTransfer.h để xử lý gói nối tiếp.

Tóm lại: Có thể hướng dẫn này sẽ trình bày cách bạn có thể triển khai dữ liệu nối tiếp mạnh mẽ một cách dễ dàng trong bất kỳ dự án nào bằng cách sử dụng thư viện SerialTransfer.h. Nếu bạn muốn tìm hiểu thêm về lý thuyết cấp thấp về giao tiếp nối tiếp mạnh mẽ, hãy xem hướng dẫn này.

Quân nhu

  • 2 Arduinos

    Chúng tôi rất khuyến khích bạn sử dụng Arduinos có nhiều UART phần cứng (tức là Arduino Mega)

  • Trèo lên dây
  • Cài đặt SerialTransfer.h

    Có sẵn thông qua Trình quản lý thư viện của Arduino IDE

Bước 1: Kết nối vật lý

Kết nối vật lý
Kết nối vật lý

Khi sử dụng giao tiếp nối tiếp, cần lưu ý một số điểm nối dây:

  • Đảm bảo rằng tất cả các cơ sở được kết nối!
  • Chân của Arduino TX (Truyền) cần được kết nối với chân RX (Nhận) của Arduino khác

Bước 2: Cách sử dụng Thư viện

Cách sử dụng Thư viện
Cách sử dụng Thư viện

SerialTransfer.h cho phép bạn dễ dàng gửi một lượng lớn dữ liệu bằng giao thức gói tùy chỉnh. Dưới đây là mô tả về tất cả các tính năng của thư viện - nhiều tính năng chúng tôi sẽ sử dụng ở phần sau của hướng dẫn này:

SerialTransfer.txBuff

Đây là một mảng byte trong đó tất cả dữ liệu trọng tải được gửi qua nối tiếp được lưu vào bộ đệm trước khi truyền. Bạn có thể nhồi bộ đệm này với các byte dữ liệu để gửi đến Arduino khác.

SerialTransfer.rxBuff

Đây là một mảng byte trong đó tất cả dữ liệu tải trọng nhận được từ Arduino khác được lưu vào bộ đệm.

SerialTransfer.bytesRead

Số byte trọng tải mà Arduino khác nhận được và được lưu trữ trong SerialTransfer.rxBuff

SerialTransfer.begin (Luồng & _port)

Khởi tạo một thể hiện của lớp của thư viện. Bạn có thể chuyển bất kỳ đối tượng lớp "Serial" nào làm tham số - ngay cả các đối tượng lớp "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

Điều này làm cho Arduino của bạn gửi số byte "messageLen" trong bộ đệm truyền tới Arduino khác. Ví dụ: nếu "messageLen" là 4, 4 byte đầu tiên của SerialTransfer.txBuff sẽ được gửi qua nối tiếp đến Arduino khác.

SerialTransfer.available ()

Điều này làm cho Arduino của bạn phân tích cú pháp bất kỳ dữ liệu nối tiếp nào nhận được từ Arduino khác. Nếu hàm này trả về boolean "true", điều đó có nghĩa là một gói mới đã được phân tích cú pháp thành công và dữ liệu của gói mới nhận được sẽ được lưu trữ / có sẵn trong SerialTransfer.rxBuff.

SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Nhồi "len" số byte của một đối tượng tùy ý (byte, int, float, double, struct, v.v.) vào bộ đệm truyền bắt đầu từ chỉ mục như được chỉ định bởi đối số "chỉ mục".

SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Đọc số byte "len" từ bộ đệm nhận (rxBuff) bắt đầu từ chỉ mục như được chỉ định bởi đối số "chỉ mục" thành một đối tượng tùy ý (byte, int, float, double, struct, v.v.).

GHI CHÚ:

Cách dễ nhất để truyền dữ liệu là trước tiên xác định một cấu trúc chứa tất cả dữ liệu bạn muốn gửi. Arduino ở đầu nhận phải có cấu trúc giống hệt nhau được xác định.

Bước 3: Truyền dữ liệu cơ bản

Bản phác thảo sau truyền cả giá trị ADC của analogRead (0) và giá trị của analogRead (0) được chuyển đổi thành điện áp tới Arduino # 2.

Tải bản phác thảo sau lên Arduino # 1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; điện áp phao; } dữ liệu; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (dữ liệu, sizeof (dữ liệu)); myTransfer.sendData (sizeof (dữ liệu)); chậm trễ (100); }

Bước 4: Nhận dữ liệu cơ bản

Đoạn mã sau in giá trị ADC và điện áp nhận được từ Arduino # 1.

Tải mã sau lên Arduino # 2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; điện áp phao; } dữ liệu; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (dữ liệu, sizeof (dữ liệu)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("LỖI:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); else if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Bước 5: Kiểm tra

Khi cả hai bản phác thảo đã được tải lên Arduino tương ứng của chúng, bạn có thể sử dụng Trình theo dõi nối tiếp trên Arduino # 2 để xác minh rằng bạn đang nhận dữ liệu từ Arduino # 1!

Đề xuất: