簡單實現Arduino與電腦傳輸字串範例
本篇文章實作的範例為從電腦上傳字串至Arduino,在Arduino上接收來自於電腦傳送的字串後,再將此字串傳回電腦,顯示在螢幕上。
實際連接方式
簡單用傳資料的USB連接線將電腦與Arduino連接後,即可實現。
Arduino端程式
在Arduino端須將以下程式燒錄至Arduino上作運行。
下圖為程式碼在Arduino IDE開啟的樣子。
以下為Arduino端程式碼
void setup() {
Serial.begin(9600); // 設定串列通訊速率為9600 bps
}
void loop() {
if (Serial.available() > 0){
String data = Serial.readStringUntil('\n'); // 讀取從電腦發送的資料,直到換行符號
data.trim(); // 移除可能的空格
Serial.print(data); // 直接將資料回傳給電腦
Serial.print('\n'); // 在每次發送後加上換行符號
}
}
程式碼講解
一開始要先有
if (Serial.available() > 0)
代表串列通訊可行的時候,再執行if裡面的程式,這樣的好處是避免在沒有串列通訊的時候,去執行,那也不會接收到字串,來避免沒有回應的問題。
因為我們是讀取字串,要判斷字串要讀取到換行符號的時候,才算一個完整的字串
data = Serial.readStringUntil('\n');
然後後面就是用Serial.print將data也就是Arduino接收電腦傳遞的字串,再傳遞回給電腦。
Serial.print(data);
Python端程式
在電腦端要準備python程式。
以下是在spyder IDE上開啟python程式。
要運行python程式之前,要import serial與time的兩個模組。
以下為完整程式碼
import serial
import time
ser = serial.Serial('COM5', 9600, timeout=2)
time.sleep(5)
for i in range(0,10,1):
ser.write(b'Hello\n')
response = ser.readline().decode('utf-8')
print('Response from Arduino:', response)
time.sleep(1)
ser.close()
一開始會採用python的serial模組開啟串列通訊,這邊要設定好Arduino連接的連接埠,還有傳輸的baud rate。
ser = serial.Serial('COM5', 9600, timeout=2)
這邊的話我有用time.sleep先休息5秒鐘,目的在於要有個緩衝時間,讓通訊運作。
time.sleep(5)
然後將hello傳遞至Arduino
ser.write(b'Hello\n')
再將arduino傳回的字串接收,由於串列通訊是以0或1訊號傳遞,是透過ascii編碼方式,所以還是需要再將0或1訊號解碼回我們看到的字串。
response = ser.readline().decode('utf-8')
最終運行完畢後,需要關閉串列通訊。
ser.close()
實現方式
要先將Arduino端程式碼燒錄到Arduino中,代表Arduino已經開啟接收訊息與傳遞訊息的功能。
接下來,在到電腦端開啟python程式後,按下執行,即可在spyder IDE的console視窗上,得到結果。
實作結果
結果為我們就可在電腦上接收來自於Arduino回傳的字串Hello。