上一篇 Arduino筆記(77):在Windows下使用Python 從序列埠讀取 Arduino 感測值 實做使用 Python 讀取串列埠的資料繪製成圖形,另一個應用是將讀取的感測值,儲存到 Excel 檔,就可以用 Excel 的繪圖功能,繪出折線圖。這個實做就來看看如何利用 Python 讀取串列埠傳來的感測值,並存成 Excel 可以讀取的 CSV 檔。
程式庫(Library)安裝方法請參考另一篇文章: Arduino筆記:安裝 Arduino IDE 程式庫(Library)。
為了解決這個問題,找了一下資料,只要做 utf-8 字元集的轉換即可,也就是程式中的「data_raw = data_in.decode('utf-8')」這一行。Line_count變數是判斷是否為第一列,如果是就擷取不同字段的文字,會截出「temperature」跟「humidity」。
寫到與執行 Python 程式相同目錄的 CSV 檔,可以用 Excel 開啟,結果如下:
[安裝AM2320程式庫]
本實作需要安裝以下程式庫:程式庫(Library)安裝方法請參考另一篇文章: Arduino筆記:安裝 Arduino IDE 程式庫(Library)。
[線路圖]
[程式]
以下是Arduino程式:讀取AM2320的溫濕度值,送到COM Port,可以打看串列埠視窗,每 5 秒鐘測得一個感測值。#include <Wire.h>
#include <AM2320.h>
AM2320 th(&Wire);
int line_count=0;
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
int ths = th.Read();
switch(ths) {
case 2:
Serial.println("CRC failed");
break;
case 1:
Serial.println("Sensor offline");
break;
case 0:
// 第一列印出 Excel 標題列
if(line_count == 0) {
Serial.println("temperature,humidity");
}
else {
Serial.print(th.cTemp);
Serial.print(",");
Serial.println(th.Humidity);
}
line_count ++;
break;
}
// 5秒鐘讀取一筆資料
delay(5000);
}
以下是Python程式:讀取COM Port的資料,我的 Arduino 用的序列埠是COM11,可以實際執行的 COM Port修改程式,並在命令視窗執行程式。C:\>python your_prgoram_name.py在撰寫程式過程中,遇到一個狀況是從 Python 讀取序列埠的一列文字時,將這串文字轉成變數時,在每個欄位前面會出現「b'」,如下圖:
為了解決這個問題,找了一下資料,只要做 utf-8 字元集的轉換即可,也就是程式中的「data_raw = data_in.decode('utf-8')」這一行。Line_count變數是判斷是否為第一列,如果是就擷取不同字段的文字,會截出「temperature」跟「humidity」。
import csv
import serial
SerialIn = serial.Serial("COM11",9600)
with open('AM2320.csv', mode='w' , newline='') as am2320_file:
am2320_writer = csv.writer(am2320_file, delimiter=',')
line_count=0
try:
while True:
while SerialIn.in_waiting:
data_in = SerialIn.readline()
data_raw = data_in.decode('utf-8')
print(data_raw)
if line_count==0:
temper = str(data_raw[0:11])
humid = str(data_raw[12:20])
else:
# Turn string into float value:
temper = float(str(data_raw[0:5]))
humid = float(str(data_raw[6:12]))
am2320_writer.writerow([temper,humid])
line_count = line_count + 1
except KeyboardInterrupt:
SerialIn.close()
[結果]
開啟 Arduino 的串列埠,可以看到溫濕度感測值:寫到與執行 Python 程式相同目錄的 CSV 檔,可以用 Excel 開啟,結果如下:




作者已經移除這則留言。
回覆刪除張貼留言