上一篇 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 開啟,結果如下:
作者已經移除這則留言。
回覆刪除張貼留言