簡單實現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。

Similar Posts