如何解决无法从 DHT 传感器获取数据
嘿伙计们, 实际上,我正在为我的学校开发浇水系统。 在我尝试用 tkinter 制作 gui 之后,令人惊讶的是什么工作。一段时间后,我的 grovepi DHT 传感器出现问题。
错误:
pi@raspberrypi:~/Desktop $ python3 t.py ^CTraceback(最近调用 最后):文件 "/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py",第 227 行,在 read_i2c_block 文件中 "/usr/local/lib/python3.7/dist-packages/Dexter_AutoDetection_and_I2C_Mutex-0.0.0-py3.7.egg/di_i2c.py",第 373 行,在 read_list 文件中 "/usr/local/lib/python3.7/dist-packages/Dexter_AutoDetection_and_I2C_Mutex-0.0.0-py3.7.egg/di_i2c.py",第 129 行,在传输文件中 "/usr/local/lib/python3.7/dist-packages/Dexter_AutoDetection_and_I2C_Mutex-0.0.0-py3.7.egg/di_mutex.py",第 48 行,在获取键盘中断
在处理上述异常的过程中,又发生了一个异常:
回溯(最近一次调用最后一次):文件“t.py”,第 5 行,在 [temp,hum] = grovepi.dht(dht_sensor,0) 文件“/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py”, 第 335 行,在 dht 文件中 "/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py",第 242 行,在 read_identified_i2c_block 文件中 "/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py",第 232 行,在 read_i2c_block KeyboardInterrupt
我的代码:
import grovepi
dht_sensor = 5
[temp,0)
print(temp)
即使在这个发生的小代码中...... 这是不完整的代码:
import time
import datetime
import grovepi
import tkinter
from tkinter import messagebox
from tkinter import ttk
from tkinter import *
import threading
import sys
import math
#############################################################
#definition global variables
global str_temp
global str_hum
global str_moist
global thresh
global watered
global stop_thread
global button_status
#############################################################
#define some start values
thresh = 300
stop_thread = True
watered = False
#############################################################
#connect senosrs/actors
#connect grove LEDS to digital ports (green=7),(red=8)
green = 7
red = 8
#connect button tu digital port D2
button = 2
button_status = grovepi.digitalRead(button)
#connect relay to digital port D3
relay = 3
#connect dht sensor(temperature and humidity) to digital port D4
dht_sensor = 4
#connect moisture sensor to analog port A1
moisture = 1
#############################################################
#define pin modes
grovepi.pinMode(green,"OUTPUT")
grovepi.pinMode(red,"OUTPUT")
grovepi.pinMode(relay,"OUTPUT")
grovepi.pinMode(button,"INPUT")
#############################################################
#define functions
def on_closing():
close_gui = tkinter.messagebox.askquestion("Diplomarbeit Stanislav Shubenok","Programm beenden?")
if close_gui == "yes":
grovepi.digitalWrite(relay,0)
grovepi.digitalWrite(green,0)
grovepi.digitalWrite(red,0)
root.destroy()
else:
return
#############################################################
def green():
grovepi.digitalWrite(green,1)
def red():
grovepi.digitalWrite(red,1)
#############################################################
def emergency_stop():
while True:
button_status = grovepi.digitalRead(button)
if button__status == 0:
continue
else:
grovepi.digitalWrite(relay,0)
grovepi.digitalWrite(green,0)
grovepi.digitalWrite(red,0)
root.destroy()
#############################################################
def stop_thread():
global stop_thread
stop_thread = False
def reset_stop_thread():
global stop_thread
stop_thread = True
#############################################################
def automatic():
return
#############################################################
def getdata():
stop_thread()
reset_stop_thread()
underlabel.config(text="Daten werden jede Sekunde aktualisiert")
time.sleep(3)
while True:
if not stop_thread:
break
else:
[temp,0)
mosit = grovepi.analogRead(moisture)
str_temp = str(temp)
str_hum = str(hum)
str_moist = str(moist)
named_tuple = time.localtime()
time_string = time.strftime("%H:%M")
second = tim.time()
local_time = time.ctime(second)
middleLabel1.config(text=str_temp)
middelLabel2.config(text=str_hum)
middleLabel3.config(text=str_moist)
upperLabel.config(text=local_time)
underLabel.config(text="")
time.sleep(1)
#############################################################
def manually():
stop_thread()
moist = grovepi.analogRead(moisture)
if (moist > thresh):
grovepi.digitalWrite(relay,0)
underLabel.config(text="die Erde ist noch feucht")
reset_stop_thread()
time.sleep(3)
threadin.Thread(target=getdata).start()
else:
underLabel.config(text="es wird 5 Sekunden lang bewässert")
grovepi.digitalWrite(relay,1)
time.sleep(5)
grovepi.digitalWrite(relay,0)
underLabel.config(text="Bewässerung beendet")
reset_stop_thread()
time.sleep(2)
threading.Thread(target=getdata).start()
#############################################################
def read_button():
while True:
button_status = grovepi.digitalRead(button)
if button_status == 0:
print("nicht gedrückt")
else:
print("gedrückt")
#############################################################
#--------------------------main programm-------------------
root= tkinter.Tk()
root.wm_title("Diplomarbeit Stanislav Shubenok")
root.config(background="#C4C4C4")
#root.attribute('-zoomed')
root.geometry("400x400")
outerFrame = tkinter.Frame(root,bg="#000000",pady=10,padx=5)
outerFrame.pack(pady=1,padx=1)
mainFrame = tkinter.Frame(outerFrame,bg="#FFFFFF",padx=5)
mainFrame.pack(pady=1,padx=1)
upperLabel = tkinter.Label(mainFrame,text=local_time,font=('Arial','20'))
upperLabel.grid(row=0,column=0,columnspan=3,padx=5)
underLabel = tkinter.Label(mainFrame,text="Infos Hier",'20'))
underLabel.grid(row=0,column=4,padx=5)
leftLabel1 = tkinter.Label(mainFrame,text="Temperatur:",bg="#FFFFF",'20'))
leftLabel1.grid(row=1,padx=5)
leftLabel2 = tkinter.Label(mainFrame,text="Luftfeuchtigkeit:",'20'))
leftLabel2.grid(row=2,padx=5)
leftLabel3 = tkinter.Label(mainFrame,text="Erdfeuchtigkeit",'20'))
leftLabel3.grid(row=3,padx=5)
middleLabel1 = tkinter.Label(mainFrame,text=str_temp,'20'))
middleLabel1.grid(row=1,column=1,padx=5)
middleLabel2 = tkinter.Label(mainFrame,text=str_hum,'20'))
middleLabel2.grid(row=2,padx=5)
middleLabel3 = tkinter.Label(mainFrame,text=str_moist,'20'))
middleLabel3.grid(row=3,padx=5)
B_getdata = tkinter.Button(mainFrame,text="Daten aktualisieren",bg="#FFFF00",width=15,'20'),command=lambda:threading.Thread(target=getdata).start())
B_getdata.grid(row=1,column=2,padx=5)
B_automatic = tkinter.Button(mainFrame,text="Automatisch",bg="#00FF00",command=lambda:threading.Thread(target=automatic).start())
B_automatic.grid(row=2,padx=5)
B_manually = tkinter.Button(mainFrame,text="Manuell",bg="#0088FF",command=lambda:threading.Thread(target=manually).start())
B_manually.grid(row=3,padx=5)
threading.Thread(target=getdata).start()
root.protocol("WM_DEKETE_WINDOW",on_closing)
root.mainloop()
sys.exit("Ein Fehler ist aufgetreten,das Programm wurde geschlossen.")
我是编程初学者,需要heeelp :(
解决方法
即使我试图从 grovepi 获取其他数据,也存在同样的问题...:
import grovepi
dht_sensor = 5
moisture = 1
moist = grovepi.analogRead(moisture)
#[temp,hum] = grovepi.dht(dht_sensor,0)
print(moist)
错误:
pi@raspberrypi:~/Desktop $ python3 t.py ^CTraceback(最近调用 最后):文件 "/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py",第 228 行,在 read_i2c_block KeyboardInterrupt
在处理上述异常的过程中,又发生了一个异常:
回溯(最近一次调用最后一次):文件“t.py”,第 7 行,在 潮湿 = grovepi.analogRead(moisture) 文件“/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py”, 第 261 行,在模拟读取文件中 "/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py",第 242 行,在 read_identified_i2c_block 文件中 "/usr/local/lib/python3.7/dist-packages/grovepi-1.4.1-py3.7.egg/grovepi.py",第 232 行,在 read_i2c_block KeyboardInterrupt pi@raspberrypi:~/Desktop $^C
:(
,更改 Grovepi 总线:
grovepi.set_bus("RPI_1")
现在可以工作了,如果以前没有改变公交车就可以工作。
我认为是线程的干扰。多个线程试图在同一个传感器上读/写数据。
我做到了,所以它不会为读取和显示数据的特定情况打开多个线程。
可以关闭
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。