Thư viện nối tiếp phần mềm trong Arduino

Thu Vien Noi Tiep Phan Mem Trong Arduino



Nền tảng Arduino cho phép mọi người tạo ra các dự án khác nhau. Arduino là một nền tảng thân thiện với người dùng với sự hỗ trợ cho nhiều loại thư viện, bao gồm Thư viện nối tiếp phần mềm . Các Thư viện nối tiếp phần mềm cho phép bạn tạo một cổng nối tiếp trên bất kỳ chân kỹ thuật số nào trên bo mạch Arduino của bạn.

Trong bài viết này, chúng ta sẽ tìm hiểu sâu hơn về thư viện SoftwareSerial và khám phá cách thức hoạt động của nó.







Giới thiệu về thư viện SoftwareSerial

Các Thư viện nối tiếp phần mềm là một thư viện Arduino tiêu chuẩn cho phép giao tiếp nối tiếp trên các chân kỹ thuật số khác với TX và RX. Thư viện cho phép tạo một cổng nối tiếp phần mềm, cổng này có thể được sử dụng để giao tiếp với các thiết bị khác, chẳng hạn như các bộ vi điều khiển, máy tính khác hoặc thậm chí cả các mô-đun Bluetooth. Thư viện SoftwareSerial được bao gồm trong Arduino IDE và có thể được sử dụng với bất kỳ bảng Arduino nào.



Ghi chú: Nói chung là, TX RX các chân được sử dụng cho giao tiếp nối tiếp nhưng sử dụng thư viện này, chúng ta có thể cho phép bo mạch Arduino sử dụng bất kỳ chân kỹ thuật số nào để thay thế các chân TX và RX.



Hiểu chức năng thư viện SoftwareSerial

Các Thư viện nối tiếp phần mềm có một số chức năng cho phép bạn thiết lập và kiểm soát cổng nối tiếp phần mềm. Dưới đây là một số chức năng chính bạn nên biết:





Nối tiếp phần mềm()

Chức năng này tạo ra một thể hiện mới của phần mềmnối tiếp lớp học. Chức năng này có hai đối số, chân RX và chân TX. Ví dụ: nếu bạn muốn tạo cổng nối tiếp phần mềm trên chân 2 và 3, bạn sẽ sử dụng đoạn mã sau:

Phần mềmSerial mySerial ( 2 , 3 ) ; // RX, TX



Các Nối tiếp phần mềm() phương thức được sử dụng để tạo một thể hiện mới của một phần mềmnối tiếp sự vật. Nó cho phép tạo nhiều phiên bản tuy nhiên tại một thời điểm chỉ có một phiên bản có thể hoạt động.

cú pháp

Cú pháp cho Nối tiếp phần mềm() phương pháp như sau:

phần mềmnối tiếp ( rxPin, txPin, nghịch đảo_logic )

Thông số

Các thông số cho Nối tiếp phần mềm()

rxpin: Tham số này chỉ định mã pin sẽ được sử dụng để nhận dữ liệu nối tiếp.

txpin: Tham số này chỉ định chân sẽ được sử dụng để truyền dữ liệu nối tiếp.

nghịch đảo_logic: Tham số này là tùy chọn và nó đảo ngược ý nghĩa của các bit đến. Giá trị mặc định là sai, nghĩa là mức THẤP trên chân RX được hiểu là bit 0 và mức CAO là bit 1. Nếu được đặt thành true, mức THẤP trên chân RX giờ đây sẽ là 1 bit và CAO là 0 bit.

Trở lại

Các Nối tiếp phần mềm() không trả lại bất cứ điều gì.

Chức năng thư viện Arduino SoftwareSerial()

Arduino Nối tiếp phần mềm() có một danh sách các chức năng để giao tiếp nối tiếp giữa các thiết bị. Một số chức năng chính được thảo luận ở đây:

bắt đầu()

Các bắt đầu() chức năng khởi tạo cổng nối tiếp phần mềm với tốc độ baud. Tốc độ truyền là tốc độ truyền dữ liệu qua cổng nối tiếp. Ví dụ: để đặt 9600 làm tốc độ truyền cho giao tiếp nối tiếp, bạn sẽ sử dụng đoạn mã sau:

mySerial.begin ( 9600 ) ;

có sẵn()

Các có sẵn() f unction trả về các byte có sẵn để đọc tại cổng nối tiếp phần mềm. Ví dụ: để kiểm tra xem có bất kỳ dữ liệu nào có sẵn để đọc hay không, bạn sẽ sử dụng đoạn mã sau:

nếu như ( mySerial.available ( ) > 0 ) {
// đọc dữ liệu đầu vào
char đếnByte = mySerial.read ( ) ;
}

đọc()

Các đọc() chức năng đọc byte dữ liệu tiếp theo từ cổng nối tiếp phần mềm. Ví dụ: để đọc một byte dữ liệu và in nó ra màn hình nối tiếp, bạn sẽ sử dụng đoạn mã sau:

char đếnByte = mySerial.read ( ) ;
Nối tiếp.println ( đếnByte ) ;

viết()

Các viết() chức năng ghi một byte dữ liệu vào cổng nối tiếp phần mềm. Ví dụ, để gửi thư 'MỘT' qua cổng nối tiếp phần mềm, bạn sẽ sử dụng đoạn mã sau:

mySerial.write ( 'MỘT' ) ;

Mã ví dụ thư viện Arduino SoftwareSerial()

Bây giờ chúng ta sẽ giao tiếp giữa hai bảng Arduino qua giao tiếp nối tiếp bằng thư viện này. Lấy hai bảng Arduino và kết nối chúng như trong hình bên dưới.

Kết nối D2 của bảng Master Arduino với D3 của bảng Slave Arduino, kết nối tương tự D3 của Master Arduino với D2 của Arduino nô lệ.

Ghi chú: Đối với giao tiếp nối tiếp, TX pin luôn được kết nối với RX chân của Arduino đối diện và RX chân của Master luôn được kết nối với TX chân của Arduino khác.

Sau đây là phần cứng của cả hai bo mạch Arduino.

Đây là một mã Arduino ví dụ minh họa cách sử dụng Thư viện nối tiếp phần mềm để thiết lập giao tiếp giữa hai bảng Arduino:

Mã bảng người gửi

Đoạn mã dưới đây dành cho Arduino người gửi sẽ ghi một chuỗi vào bảng Arduino của người nhận.

#include

// Thiết lập đối tượng sê-ri phần mềm
Phần mềmSerial mySerial ( 2 , 3 ) ;

thiết lập vô hiệu ( ) {
// Bắt đầu giao tiếp nối tiếp
Nối tiếp.bắt đầu ( 9600 ) ;
trong khi ( ! nối tiếp ) {
; // Chờ đợi cổng nối tiếp để kết nối
}

// Bắt đầu giao tiếp nối tiếp phần mềm
mySerial.begin ( 9600 ) ;
}

vòng lặp trống ( ) {
// Gửi tin nhắn qua kết nối nối tiếp phần mềm
mySerial.println ( 'Xin chào, bảng thu!' ) ;
trì hoãn ( 1000 ) ;
}

Mã bảng thu

Mã dưới đây dành cho bảng nhận. Sử dụng mã này, Arduino sẽ nhận chuỗi từ một bảng khác qua giao tiếp nối tiếp được thiết lập giữa hai bảng Arduino.

#include

// Thiết lập đối tượng sê-ri phần mềm
Phần mềmSerial mySerial ( 2 , 3 ) ;

thiết lập vô hiệu ( ) {
// Bắt đầu giao tiếp nối tiếp
Nối tiếp.bắt đầu ( 9600 ) ;
trong khi ( ! nối tiếp ) {
; // Chờ đợi cổng nối tiếp để kết nối
}

// Bắt đầu giao tiếp nối tiếp phần mềm
mySerial.begin ( 9600 ) ;
}

vòng lặp trống ( ) {
// Kiểm tra nếu như dữ liệu có sẵn trên kết nối nối tiếp phần mềm
nếu như ( mySerial.available ( ) ) {
// Đọc dữ liệu và in nó ra màn hình nối tiếp
Nối tiếp.println ( mySerial.readString ( ) ) ;
}
}

Trong ví dụ này, trước tiên chúng tôi bao gồm Thư viện nối tiếp phần mềm ở đầu mã. Sau đó, chúng tôi tạo một phần mềmnối tiếp đối tượng được gọi là “ mySerial ” với chân 2 và 3 được chỉ định tương ứng là chân RX và TX.

bên trong cài đặt() chức năng, chúng tôi bắt đầu cả giao tiếp nối tiếp phần cứng và nối tiếp phần mềm với tốc độ truyền là 9600. Trong vòng() chức năng của bảng người gửi, chúng tôi gửi tin nhắn qua kết nối nối tiếp phần mềm bằng phương thức mySerial.println() và đợi một giây trước khi gửi tin nhắn tiếp theo.

Trong chức năng loop() của bảng thu, mã sẽ kiểm tra tính khả dụng của dữ liệu nối tiếp trên kết nối nối tiếp phần mềm bằng cách sử dụng mySerial.available() phương pháp. Nếu có sẵn dữ liệu, chúng tôi đọc dữ liệu bằng phương thức mySerial.readString() và in nó ra màn hình nối tiếp bằng phương thức Serial.println().

Hạn chế của thư viện SoftwareSerial()

Các Thư viện nối tiếp phần mềm có nhiều ưu điểm khác nhau nhưng cũng có một số hạn chế mà người dùng cần lưu ý. Những hạn chế này bao gồm

  • Không có khả năng truyền và nhận dữ liệu đồng thời.
  • Khi sử dụng nhiều cổng nối tiếp phần mềm, chỉ một cổng có thể nhận dữ liệu cùng một lúc.
  • Các cổng nối tiếp dựa trên phần mềm được tạo bằng thư viện này hoạt động ở tốc độ truyền thấp hơn và không đáng tin cậy như các cổng nối tiếp dựa trên phần cứng.
  • Một số chân trên bảng Mega và Mega 2560 không hỗ trợ ngắt thay đổi cho RX, hạn chế những chân nào có thể được sử dụng.
  • Tương tự, trên bo mạch Leonardo và Micro, chỉ một số chân nhất định có thể được sử dụng cho RX do thiếu ngắt thay đổi.
  • Tốc độ RX tối đa trên bo mạch Arduino hoặc Genuino 101 là 57600 bps.
  • RX không hoạt động trên chân kỹ thuật số 13 của bo mạch Arduino hoặc Genuino 101.
Bảng Chân RX
Mega & Mega 2560 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14(68), A15(69).

Leonardo & Micrô 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Phần kết luận

Các Thư viện nối tiếp phần mềm trong Arduino là một công cụ hữu ích để giao tiếp với các thiết bị sử dụng giao thức truyền thông nối tiếp. Nó cho phép các nhà phát triển tạo các cổng nối tiếp dựa trên phần mềm có thể được sử dụng cùng với các cổng nối tiếp dựa trên phần cứng. Thư viện này có một số hạn chế vì nó không cho phép truyền dữ liệu đồng thời. Để biết thêm chi tiết đọc bài viết trên.