【发布时间】:2018-01-03 04:55:12
【问题描述】:
我正在编写一个循环来连续读取两个传感器的读数。但是,每次第二次重复时我都会收到此错误。我正在使用 DHT22 传感器,并使用 pigpio 库。
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.2/tkinter/__init__.py", line 1426, in __call__
return self.func(*args)
File "/usr/lib/python3.2/tkinter/__init__.py", line 490, in callit
func(*args)
File "/home/pi/pigpio_dht22/TempHumSensorDisplayWindow3.py", line 42, in loop
humidity, tempb = readDHT22()
File "/home/pi/pigpio_dht22/TempHumSensorDisplayWindow3.py", line 34, in readDHT22
s.trigger()
File "/home/pi/pigpio_dht22/DHT22.py", line 230, in trigger
self.pi.write(self.gpio, pigpio.LOW)
File "/usr/local/lib/python3.2/dist-packages/pigpio.py", line 1381, in write
return _u2i(_pigpio_command(self.sl, _PI_CMD_WRITE, gpio, level))
File "/usr/local/lib/python3.2/dist-packages/pigpio.py", line 983, in _pigpio_command
sl.s.send(struct.pack('IIII', cmd, p1, p2, 0))
AttributeError: 'NoneType' object has no attribute 'send'
这是我的代码:
from tkinter import *
import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_MAX31855.MAX31855 as MAX31855
import datetime
import pigpio
from time import sleep
pi = pigpio.pi()
import DHT22
CLK = 25
CS = 24
DO = 18
sensor = MAX31855.MAX31855(CLK, CS, DO)
s = DHT22.sensor(pi, 4)
master = Tk()
master.wm_title('Ethane Pot Temp')
lab = Label(master, width=25)
labb = Label(master, width=25)
Label(master, width=25, text='Ethane Pot Temperature').grid(row=1, column=1)
Label(master, width=25, text='Chamber Humidity').grid(row=2, column=1)
lab.grid(row=1, column=2)
labb.grid(row=2, column=2)
temp = sensor.readTempC()
tempa = StringVar()
s.trigger()
def readDHT22():
#Get a new reading
s.trigger()
#Save our value
humidity = '%.2f' % (s.humidity())
tempb = '%.2f' % (s.temperature())
return (humidity, tempb)
def loop():
sleep(.03)
humidity, tempb = readDHT22()
print(tempb)
print(humidity)
temp = sensor.readTempC()
tempa.set(str(temp))
lab.config(text=tempa.get())
master.after(2000, loop)
loop()
s.cancel()
pi.stop()
master.mainloop()
我使用的是 tkinter 窗口,因此不能使用 while True 作为循环。
任何帮助将不胜感激。
【问题讨论】:
-
我对任何事情都不知道,但有没有可能在第一次阅读后关闭?您只调用此
temp = sensor.readTempC()一次的事实看起来可疑...好像您必须在循环的每次迭代中都这样做?再说一遍:我不知道 TkInter 或你的传感器或者......什么都没有,但这是我以前见过的一种行为,比如套接字之类的东西。 -
感谢您的回复。我尝试将它添加到循环中,但它不起作用。
-
您有正在使用的传感器对象的文档吗?传感器是否能够连续读取两个读数,或者您是否需要在两者之间做一些特别的事情?
-
@JohnGordon 我正在使用 DHT22 和 MAX31855。 MAX31855 工作良好,但 DHT22 不工作。 DHT22 的每次读数之间必须有两秒的延迟。