![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 請問python讀取DHT22的問題
(https://www.pcdvd.com.tw/showthread.php?t=1122751)
|
---|
請問python讀取DHT22的問題
最近用樹莓派裝上DHT22跟20*4的I2C顯示器
程式寫下面那樣,但是卻只有時間及日期有循環更新 問度跟濕度只會讀取第一次,怎麼會這樣 import RPi.GPIO as GPIO import Adafruit_DHT import I2C_LCD_driver import time mylcd = I2C_LCD_driver.lcd() DHT_TYPE = Adafruit_DHT.DHT22 DHT_PIN = 4 humidity, temp = Adafruit_DHT.read(DHT_TYPE, DHT_PIN) while True: mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1) mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 2) mylcd.lcd_display_string("Humidity: %d %%" % humidity, 4) mylcd.lcd_display_string("temperature: %d C" % temp, 3) |
把 read 那行移到 while 迴圈裡試試如下。
代碼:
import RPi.GPIO as GPIO import Adafruit_DHT import I2C_LCD_driver import time mylcd = I2C_LCD_driver.lcd() DHT_TYPE = Adafruit_DHT.DHT22 DHT_PIN = 4 while True: mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1) mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 2) humidity, temp = Adafruit_DHT.read(DHT_TYPE, DHT_PIN) mylcd.lcd_display_string("Humidity: %d %%" % humidity, 4) mylcd.lcd_display_string("temperature: %d C" % temp, 3) |
引用:
會出現錯誤@@ Traceback (most recent call last): File "data_time.py", line 14, in <module> mylcd.lcd_display_string("Humidity: %d %%" % humidity, 4) TypeError: %d format: a number is required, not NoneType |
我沒樹莓派,這應該是那行 read 有時會讀到空值。
可以加個 time.sleep(1) 跟 try: except TypeError: 看看。 |
目前可以更新了,但是時間會因為偵測而延遲數秒更新
謝謝dark angel的幫忙 最後改好的程式碼如下 import RPi.GPIO as GPIO import Adafruit_DHT import I2C_LCD_driver from time import * import time mylcd = I2C_LCD_driver.lcd() while True: humidity, temp = Adafruit_DHT.read_retry(22, 4) mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1) mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 2) mylcd.lcd_display_string("temperature: %.2f C" % temp, 3) mylcd.lcd_display_string("Humidity: %.2f %%" % humidity, 4) |
我不是python 專家,
但是一般寫程式不會隨便用While true , 這會一直跑不停, 且會有很多問題(時間不準,耗電耗用cpu資源等等). 你要做的事是, 起一個timer , 隔一段時間刷一次畫面(呼叫一個沒有while true 的刷畫面function). :think: |
所有的時間均為GMT +8。 現在的時間是01:24 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。