在后台python中运行GPIO进程

时间:2017-07-09 06:52:49

标签: python

我使用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)

1 个答案:

答案 0 :(得分:1)

可能有一个更简单的解决方案。

正如您所看到的hereread_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()不起作用时,才应使用单独的进程(或线程)。

相关问题