今日讀的進度,以及筆記 For python3的部分
現在已經可以利用python讀取DHT11的值並且畫出圖形,主要程式部分我會列在下方,大致的作法是分析資料和切開資料
1.先確認Arduino部分送出來的值 可以發現是有下列三個值
- temperature:溫度值
- Humidity:濕度值
- Flag:控制指標值
#include#define dht_dpin A0 //定義訊號要從Pin A0 進來 dht DHT; boolean flagPlot = true; void setup(){ Serial.begin(9600); delay(300); //Let system settle //Serial.println("Humidity and temperature\n\n"); //Wait rest of 1000ms recommended delay before //accessing sensor } void loop(){ DHT.read11(dht_dpin); //去library裡面找DHT.read11 Serial.print("temperature:"); Serial.println(DHT.temperature); delay(200); Serial.print("Humidity:"); Serial.println(DHT.humidity); //Serial.print("% "); delay(200); Serial.print("Flag:"); Serial.println(flagPlot); delay(200); }
在python程式的部分程式有使用Tkinter
#!/usr/bin/python3 import serial import sys import numpy as np import tkinter from matplotlib import pyplot, rcParams port = serial.Serial('COM6', 9600, timeout=1) # Tkinter canvas top = tkinter.Tk() top.title("Tkinter + matplotlib") # Create flag to work with indefinite while loop flag = tkinter.BooleanVar(top) flag.set(True) def cleanText(data): data = data.replace("\r\n", "") return data def onStartButtonPress(): while True: if flag.get(): line = port.readline().decode('UTF-8') reading = line.split(':') # print (reading) if len(reading) == 2: for i in range(2): if reading[0] == "temperature": TempLabel.config(text=cleanText(reading[1])) TempUnitLabel.config(text="C") TempUnitLabel.update_idletasks() # if reading[0] == "Temperature(F)": # TempLabel.config(text=cleanText(reading[1])) # TempUnitLabel.config(text="F") # TempUnitLabel.update_idletasks() if reading[0] == "Humidity": HumdLabel.config(text=cleanText(reading[1])) pData.append(float(reading[1])) del pData[0] # if reading[0] == "Light(lx)": # LighLabel.config(text=cleanText(reading[1])) if reading[0] == "Flag": # print (reading[1]) if int(reading[1]) == 1: try: print ("In flag") print ("In flag -> if ") l1.set_xdata(np.arange(len(pData))) l1.set_ydata(pData) # update the data pyplot.ylim([0, 100]) pyplot.draw() # update the plot except: print ("In flag except") pyplot.figure() pyplot.title('Humidity') ax1 = pyplot.axes() l1, = pyplot.plot(pData) pyplot.ylim([0, 100]) if int(reading[1]) == 0: try: pyplot.close('all') l1 = None except: continue port.flushInput() top.update() else: flag.set(True) break def onExitButtonPress(): print ("Exiting....") flag.set(False) port.close() top.quit() top.destroy() print ("Done.") sys.exit() pyplot.ion() rcParams['toolbar'] = 'None' pData = [0] * 25 tkinter.Label(top, text="Temperature").grid(column=1, row=1) tkinter.Label(top, text="Humidity").grid(column=1, row=2) tkinter.Label(top, text="Light").grid(column=1, row=3) TempLabel = tkinter.Label(top, text=" ") TempLabel.grid(column=2, row=1) HumdLabel = tkinter.Label(top, text=" ") HumdLabel.grid(column=2, row=2) LighLabel = tkinter.Label(top, text=" ") LighLabel.grid(column=2, row=3) TempUnitLabel = tkinter.Label(top, text=" ") TempUnitLabel.grid(column=3, row=1) HumdUnitLabel = tkinter.Label(top, text="%") HumdUnitLabel.grid(column=3, row=2) LighUnitLabel = tkinter.Label(top, text="lx") LighUnitLabel.grid(column=3, row=3) # Create Start button and associate with onStartButtonPress method StartButton = tkinter.Button(top, text="Start", command=onStartButtonPress) StartButton.grid(column=1, row=4) # Create Exit button and destroy the window ExitButton = tkinter.Button(top, text="Exit", command=onExitButtonPress) ExitButton.grid(column=2, row=4) top.mainloop()
可以得到這兩個畫面
Comments
comments powered by Disqus