為了與 Arduino 和其他裝置進行通訊,我們可以使用串列通訊。這通常用於與電腦"對話",以可視化從 Arduino 傳來的資料,以及除錯你的專案。或者,也可以用於與其他裝置進行通訊。
Arduino 內建了 Serial
函式庫,所以你不需要載入任何特別的函式庫來使用它。
計算機與 Arduino 之間的 USB 連接用於向 Arduino IDE 通過串列通訊發送和接收訊息,用於上傳程式到裝置上。
現在讓我們看一下如何通過串列发送資料。
在 Arduino 程式的 setup()
函式中,你需要通過設定串列數據傳輸速率(以波特為單位)來初始化串列通訊。通常使用 9600
:
Serial.begin(9600);
波特 = 每秒位元數
然後你可以使用一個或多個 Serial
函數。
例如,Serial.print()
:
Serial.print("Hello!");
嘗試編譯並上傳這個程式到 Arduino:
void setup() {
Serial.begin(9600);
Serial.print("Hello!");
}
void loop() {
}
將程式保存並上傳到 Arduino,然後點擊 Arduino IDE 的右上角的"串列監視器"按鈕:
這個按鈕將在計算機上打開串列介面監視器。確保它的波特率與程式中設置的一致,你應該會看到打印出"Hello!“字串:
Serial.print()
只是你可以運行的函式之一。
你還可以使用 Serial.println()
,它會在寫入的內容後添加 \n
換行符號,這樣每個訊息都會被打印在一行上。
你還可以從這個串列介面監視器向 Arduino 發送訊息。看到上面的輸入框和"發送"按鈕了嗎?
在 Arduino 程式中,你可以使用 Serial.read()
。字符是使用 ASCII 編碼的,如果你執行這個程式:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
Serial.print(Serial.read());
}
}
你會在串列介面中看到你發送的字符的 ASCII 十進制值。試著寫入 “test” 並點擊"發送”:
最好使用 Serial.println()
,讓每個數字都單獨印在一行上:
116
是 t
的 ASCII 編碼
101
是 e
的 ASCII 編碼
115
是 s
的 ASCII 編碼
10
是換行字符。
如果想顯示字符而不是ASCII編碼,請使用 Serial.write()
函式:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
Serial.write(Serial.read());
}
}
Serial.available()
確保有數據可以被讀取。如果沒有數據被傳送,它將返回 -1
,所以如果我們不添加這個檢查,我們只會在串列監視器中看到一大堆重複的 -1
。
串列物件中還有其他更多的函式可用。
詳細查看這裡: https://www.arduino.cc/reference/en/language/functions/communication/serial/。
需要注意的是,Arduino 上有一組 tx
和 rx
引腳。在 Arduino Uno 上,它們是引腳 0 和 1,在 MKR 1010 上它們是引腳 13 和 14。當你通過 USB 進行串列通訊時,不要將這些引腳用於 I/O,否則可能會對你的數據產生干擾。
也就是說,這些引腳用作串列介面,這在直接與其他裝置通訊時非常有用,而不是通過 USB 與計算機通訊。