/

Arduino 串列通訊

Arduino 串列通訊

為了與 Arduino 和其他裝置進行通訊,我們可以使用串列通訊。這通常用於與電腦”對話”,以可視化從 Arduino 傳來的資料,以及除錯你的專案。或者,也可以用於與其他裝置進行通訊。

Arduino 內建了 Serial 函式庫,所以你不需要載入任何特別的函式庫來使用它。

計算機與 Arduino 之間的 USB 連接用於向 Arduino IDE 通過串列通訊發送和接收訊息,用於上傳程式到裝置上。

現在讓我們看一下如何通過串列发送資料。

在 Arduino 程式的 setup() 函式中,你需要通過設定串列數據傳輸速率(以波特為單位)來初始化串列通訊。通常使用 9600

1
Serial.begin(9600);

波特 = 每秒位元數

然後你可以使用一個或多個 Serial 函數。

例如,Serial.print()

1
Serial.print("Hello!");

嘗試編譯並上傳這個程式到 Arduino:

1
2
3
4
5
6
7
void setup() {
Serial.begin(9600);
Serial.print("Hello!");
}

void loop() {
}

將程式保存並上傳到 Arduino,然後點擊 Arduino IDE 的右上角的”串列監視器”按鈕:

這個按鈕將在計算機上打開串列介面監視器。確保它的波特率與程式中設置的一致,你應該會看到打印出”Hello!”字串:

Serial.print() 只是你可以運行的函式之一。

你還可以使用 Serial.println(),它會在寫入的內容後添加 \n 換行符號,這樣每個訊息都會被打印在一行上。

你還可以從這個串列介面監視器向 Arduino 發送訊息。看到上面的輸入框和”發送”按鈕了嗎?

在 Arduino 程式中,你可以使用 Serial.read()。字符是使用 ASCII 編碼的,如果你執行這個程式:

1
2
3
4
5
6
7
8
9
void setup() {
Serial.begin(9600);
}

void loop() {
if (Serial.available() > 0) {
Serial.print(Serial.read());
}
}

你會在串列介面中看到你發送的字符的 ASCII 十進制值。試著寫入 “test” 並點擊”發送”:

最好使用 Serial.println(),讓每個數字都單獨印在一行上:

116t 的 ASCII 編碼
101e 的 ASCII 編碼
115s 的 ASCII 編碼

10 是換行字符。

參考我列出的可打印不可打印的ASCII代碼。

如果想顯示字符而不是ASCII編碼,請使用 Serial.write() 函式:

1
2
3
4
5
6
7
8
9
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 上有一組 txrx 引腳。在 Arduino Uno 上,它們是引腳 0 和 1,在 MKR 1010 上它們是引腳 13 和 14。當你通過 USB 進行串列通訊時,不要將這些引腳用於 I/O,否則可能會對你的數據產生干擾。

也就是說,這些引腳用作串列介面,這在直接與其他裝置通訊時非常有用,而不是通過 USB 與計算機通訊。

tags: [“Arduino”, “Serial communication”, “ASCII”]