相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138575人學(xué)過(guò)

軟串口通信——SoftwareSerial庫(kù)的使用
發(fā)布時(shí)間:2022-03-11 08:44 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 7034
軟件模擬串口通信——SoftwareSerial庫(kù)的使用
除HardwareSerial外,Arduino還提供了SoftwareSerial類(lèi)庫(kù),它可以將你的其他數(shù)字引腳通過(guò)程序模擬成串口通信引腳。
通常我們將Arduino UNO上自帶的串口稱(chēng)為硬件串口,而使用SoftwareSerial類(lèi)庫(kù)模擬成的串口,稱(chēng)為軟件模擬串口(簡(jiǎn)稱(chēng)軟串口)。
在Arduino UNO上,提供了0(RX)、1(TX)一組硬件串口,可與外圍串口設(shè)備通信,如果要連接更多的串口設(shè)備,可以使用軟串口。
軟串口是由程序模擬實(shí)現(xiàn)的,使用方法類(lèi)似硬件串口,但有一定局限性:在Arduino UNO MEGA上部分引腳不能被作為軟串口接收引腳,且軟串口接收引腳波特率建議不要超過(guò)57600。



SoftwareSerial類(lèi)成員函數(shù)
軟串口類(lèi)庫(kù)并非Arduino UNO核心類(lèi)庫(kù),因此使用前你需要先聲明包含SoftwareSerial.h頭文件。
其中定義的成員函數(shù)與硬件串口類(lèi)似,available()、begin()、read()、write()、print()、println()、peek() 等用法相同,這里便不一一列舉。
此外軟串口后還有如下成員函數(shù):

SoftwareSerial()
SoftwareSerial類(lèi)的構(gòu)造函數(shù),通過(guò)它可指定軟串口RX、TX引腳。
語(yǔ)法:
SoftwareSerial mySerial= SoftwareSerial(rxPin, txPin)
SoftwareSerial mySerial(rxPin, txPin)
參數(shù):
mySerial:用戶(hù)自定義軟件串口對(duì)象
rxPin:軟串口接收引腳
txPin:軟串口發(fā)送引腳

listen()
開(kāi)啟軟串口監(jiān)聽(tīng)狀態(tài)。
Arduino UNO在同一時(shí)間僅能監(jiān)聽(tīng)一個(gè)軟串口,當(dāng)你需要監(jiān)聽(tīng)某一軟串口時(shí),需要該對(duì)象調(diào)用這個(gè)函數(shù)開(kāi)啟監(jiān)聽(tīng)功能。
語(yǔ)法:
mySerial.listen()
參數(shù):
mySerial:用戶(hù)自定義的軟件串口對(duì)象
返回值:
無(wú)


isListening()
監(jiān)測(cè)軟串口是否正在監(jiān)聽(tīng)狀態(tài)。
語(yǔ)法:
mySerial.isListening()
參數(shù):
mySerial:用戶(hù)自定義的軟件串口對(duì)象
返回值:
Boolean型
True:正在監(jiān)聽(tīng)
False:沒(méi)有監(jiān)聽(tīng)

end()
停止監(jiān)聽(tīng)軟串口。
語(yǔ)法:
mySerial. end()
參數(shù):
mySerial:用戶(hù)自定義的軟件串口對(duì)象
返回值:
Boolean型
True:關(guān)閉監(jiān)聽(tīng)成功
False:關(guān)閉監(jiān)聽(tīng)失敗

overflow()
檢測(cè)緩沖區(qū)是否溢出。
語(yǔ)法:
mySerial.overflow()
參數(shù):
mySerial:用戶(hù)自定義的軟件串口對(duì)象
返回值:
Boolean型
True:溢出
False:沒(méi)有溢出

建立軟串口通信
SoftwareSerial類(lèi)庫(kù)是Arduino IDE默認(rèn)提供的一個(gè)第三方類(lèi)庫(kù),和硬件串口不同,其聲明并沒(méi)有包含在Arduino核心庫(kù)中,因此要建立軟串口通信,首先需要聲明包含SoftwareSerial.h頭文件,然后即可使用該類(lèi)庫(kù)中的構(gòu)造函數(shù),初始化一個(gè)軟串口實(shí)例。如:
SoftwareSerial mySerial(2, 3);
即是新建一個(gè)名為mySerial的軟串口,并將2號(hào)引腳作為RX端,3號(hào)引腳作為T(mén)X端。完整示例如下:
        
  1. /*
  2. Arduino UNO軟串口通信
  3. */

  4. #include <SoftwareSerial.h>
  5. //實(shí)例化軟串口
  6. SoftwareSerial mySerial(2, 3); // RX, TX

  7. void setup()
  8. {
  9.   Serial.begin(115200);
  10.   while (!Serial) {
  11.   }

  12.   Serial.println("Goodnight moon!");

  13.   mySerial.begin(9600);
  14.   mySerial.println("Hello, world?");
  15. }

  16. void loop()
  17. {
  18.   if (mySerial.available())
  19.     Serial.write(mySerial.read());
  20.   if (Serial.available())
  21.     mySerial.write(Serial.read());
  22. }
復(fù)制代碼


在實(shí)際使用中,你可能還會(huì)用到其他串口設(shè)備,如串口無(wú)線(xiàn)透?jìng)髂K、串口傳感器等,只要是標(biāo)準(zhǔn)串口設(shè)備,其程序的編寫(xiě)方法都基本相同。

同時(shí)使用多個(gè)軟串口
當(dāng)需要連接多個(gè)串口設(shè)備時(shí),可以建立多個(gè)軟串口,但限于軟串口的實(shí)現(xiàn)原理,Arduino UNO只能同時(shí)監(jiān)聽(tīng)一個(gè)軟串口,當(dāng)存在多個(gè)軟串口設(shè)備時(shí),你需要使用listen() 函數(shù)指定需要監(jiān)聽(tīng)的設(shè)備。如程序中存在portOne、portTwo兩個(gè)軟串口對(duì)象時(shí),你欲監(jiān)聽(tīng)portOne,便需要使用portOne.listen() 語(yǔ)句,要切換監(jiān)聽(tīng)port2,便使用portTwo.listen() 語(yǔ)句。
示例程序如下:
  1. /*
  2. Arduino UNO軟串口通信
  3. 通過(guò)listen()切換監(jiān)聽(tīng)軟串口
  4. */

  5. #include <SoftwareSerial.h>
  6. SoftwareSerial portOne(10, 11);
  7. SoftwareSerial portTwo(8, 9);

  8. void setup() {
  9.   Serial.begin(9600);
  10.   while (!Serial) {
  11.   }

  12.   portOne.begin(9600);
  13.   portTwo.begin(9600);
  14. }

  15. void loop() {
  16. //監(jiān)聽(tīng)1號(hào)軟串口
  17.   portOne.listen();

  18.   Serial.println("Data from port one:");
  19.   while (portOne.available() > 0) {
  20.     char inByte = portOne.read();
  21.     Serial.write(inByte);
  22.   }

  23.   Serial.println();
  24. //監(jiān)聽(tīng)2號(hào)軟串口
  25.   portTwo.listen();

  26.   Serial.println("Data from port two:");
  27.   while (portTwo.available() > 0) {
  28.     char inByte = portTwo.read();
  29.     Serial.write(inByte);
  30.   }

  31.   Serial.println();
  32. }
復(fù)制代碼
Arduino視頻教程基礎(chǔ)篇
我要自學(xué)網(wǎng)商城 ¥40 元
進(jìn)入購(gòu)買(mǎi)
文章評(píng)論
0 條評(píng)論 按熱度排序 按時(shí)間排序 /350
添加表情
遵守中華人民共和國(guó)的各項(xiàng)道德法規(guī),
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138575人學(xué)過(guò)

分類(lèi)選擇:
電腦辦公 平面設(shè)計(jì) 室內(nèi)設(shè)計(jì) 室外設(shè)計(jì) 機(jī)械設(shè)計(jì) 工業(yè)自動(dòng)化 影視動(dòng)畫(huà) 程序開(kāi)發(fā) 網(wǎng)頁(yè)設(shè)計(jì) 會(huì)計(jì)課程 興趣成長(zhǎng) AIGC