我正在使用Raspberry Pi 3和DHT11(温度和湿度传感器(来获取周围的值。
有时,在通过其python模块访问传感器时,会发生2-5秒的停滞,直到数据被发送回RPI(以及用于显示结果的GUI(。当仅将数据打印到终端而不涉及 GUI 更新时,也会发生此问题。
此延迟会导致整个GUI 停止。
关于将数据测量作为系统限制的这种停滞,我想知道是否可以并行/后台运行此过程(更新临时变量( - 它不会停止整个 GUI ?
以下函数访问传感器并检索数据:
ht_data():
h0,t0 = Adafruit_DHT.read_retry (11,4) # DHT module to obtain T&H
temp_var.set("%d"%t) ## update StringVar
hum_var.set("%d%%"%h) ## update StringVar
root.after(500, ht_data)
可能有一个更简单的解决方案。
正如您在这里看到的,read_retry
只是在重试之间使用time.sleep()
,从 GUI 的角度来看,这确实是不可取的。
因此,请尝试使用read()
而不是read_retry()
,如果返回(None, None)
,请不要更新值。
ht_data():
h0,t0 = Adafruit_DHT.read(11,4)
if h0 and t0:
temp_var.set("%d" % t0) ## update StringVar
hum_var.set("%d%%" % h0) ## update StringVar
root.after(2000, ht_data)
由于文档指示您每两秒只能读取一次,因此我增加了超时以匹配它。
仅当使用read()
不起作用时,才应使用单独的进程(或线程(。