![]() |
||
Amateur Member
![]() 加入日期: Feb 2004
文章: 38
|
請問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) |
|||||||
![]() |
![]() |
Major Member
![]() 加入日期: Aug 2001
文章: 211
|
把 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)
__________________
滿招損 謙受益 |
||
![]() |
![]() |
Amateur Member
![]() 加入日期: Feb 2004
文章: 38
|
引用:
會出現錯誤@@ 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 |
|
![]() |
![]() |
Major Member
![]() 加入日期: Aug 2001
文章: 211
|
我沒樹莓派,這應該是那行 read 有時會讀到空值。
可以加個 time.sleep(1) 跟 try: except TypeError: 看看。
__________________
滿招損 謙受益 |
![]() |
![]() |
Amateur Member
![]() 加入日期: Feb 2004
文章: 38
|
目前可以更新了,但是時間會因為偵測而延遲數秒更新
謝謝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) |
![]() |
![]() |
*停權中*
加入日期: May 2014 您的住址: 某個不大不小的島
文章: 628
|
我不是python 專家,
但是一般寫程式不會隨便用While true , 這會一直跑不停, 且會有很多問題(時間不準,耗電耗用cpu資源等等). 你要做的事是, 起一個timer , 隔一段時間刷一次畫面(呼叫一個沒有while true 的刷畫面function). ![]() 此文章於 2017-02-19 02:22 PM 被 打工吧魔王大人 編輯. |
![]() |
![]() |