我在Pi Zero上运行了以下脚本,并附加了一个倾倒桶雨量计。正如您所看到的,它会统计提示的数量,并每30分钟记录一次sql。不过,我还是有一些误报。大约每30分钟1到2次。每一天,即使是最干燥的日子。我怎样才能避免它们呢?我在想这样的事情:
if rainTick <= 2:
rainTick = 0但我不想让它重置一整天,只重置最后30分钟。它应该只会在午夜完全重置。
import time
import datetime
import RPi.GPIO as GPIO
import mysql.connector
rainTick = 0
Input_Sig = 6
starttime = time.time()
last_day = datetime.datetime.now().day
lastrainevent = datetime.datetime.now()
GPIO.setmode(GPIO.BCM)
GPIO.setup(Input_Sig, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(Input_Sig, GPIO.FALLING, bouncetime=5)
def raintrig(self):
global rainTick
rainTick += 1
mydb = mysql.connector.connect(
host='localhost',
user='pi',
passwd='************',
database='weatherDB'
)
mycursor = mydb.cursor()
def write2DB(values):
sqlText = '''INSERT INTO rainfall(rain) VALUES({:.2f})'''.format(values)
#print( values, 'mm')
mycursor.execute(sqlText)
mydb.commit()
GPIO.add_event_callback(Input_Sig, raintrig)
while True:
rainFall = rainTick * 0.2794
day = datetime.datetime.now().day
if day != last_day:
last_day = day
rainTick = 0
print(rainFall, 'mm')
write2DB(rainFall)
time.sleep(1800.0 - ((time.time() - starttime) % 60.0))发布于 2021-02-27 21:12:53
好吧,我想我可能已经解决了。至少是一个非常基本的方法。
import time
import datetime
import RPi.GPIO as GPIO
import mysql.connector
rainTick = 0
lastTick = 0
inputPin = 6
startTime = time.time()
lastDay = datetime.datetime.now().day
GPIO.setmode(GPIO.BCM)
GPIO.setup(inputPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(inputPin, GPIO.FALLING, bouncetime=5)
def rainTrig(self):
global rainTick
global lastTick
rainTick += 1
lastTick += 1
mydb = mysql.connector.connect(
host='localhost',
user='pi',
passwd='Snabela1',
database='weatherDB'
)
mycursor = mydb.cursor()
def write2DB(values):
sqlText = '''INSERT INTO rainfall(rain) VALUES({:.2f})'''.format(values)
mycursor.execute(sqlText)
mydb.commit()
GPIO.add_event_callback(inputPin, rainTrig)
while True:
if lastTick <= 2:
rainTick -= lastTick
rainFall = rainTick * 0.2794
day = datetime.datetime.now().day
if day != lastDay:
lastDay = day
rainTick = 0
lastTick = 0
#print(rainFall, 'mm')
write2DB(rainFall)
time.sleep(1800.0 - ((time.time() - startTime) % 60.0))我设置了一个新变量,每次重置一次,如果它等于1或2,它会从总数中减去vlue。
https://stackoverflow.com/questions/66392130
复制相似问题