如何将传感器读数从 raspi 存储到我的数据库中?
Posted
技术标签:
【中文标题】如何将传感器读数从 raspi 存储到我的数据库中?【英文标题】:How can I store sensor readings from raspi to my database? 【发布时间】:2019-04-04 06:57:45 【问题描述】:这是我的光束传感器代码:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.IN) #Right level-1
GPIO.setup(16, GPIO.IN) #Right level-2
GPIO.setup(18, GPIO.IN) #Right level-3
while True:
if (GPIO.input(12) == 1 or GPIO.input(16) == 1 and GPIO.input(18) == 0):
print("lying down")
time.sleep(1)
elif (GPIO.input(12) == 1 or GPIO.input(16) == 1 and GPIO.input(18) == 1):
print("Sitting/Crawling")
time.sleep(1)
elif (GPIO.input(12) == 0 or GPIO.input(16) == 0 and GPIO.input(18) == 1):
print("Almost out")
time.sleep(1)
else:
print("Out of the crib")
time.sleep(1)
这是我的数据库代码:
#!/usr/bin/env python
import mysqldb
db = MySQLdb.connect("localhost", "root", "raspberry", "cribdb")
curs=db.cursor()
curs.execute ("""INSERT INTO tbstatus values(NOT NULL, 'STATUSHERE')""")
db.commit()
number_of_rows= curs.execute("SELECT * FROM tbstatus")
if (number_of_rows <= 5):
print(number_of_rows)
else:
curs.execute("""DELETE FROM tbstatus order by id LIMIT 1""")
db.commit()
print("\n Record Deleted successfully ")
如何获取传感器打印的状态(躺下、坐下/爬行、站立等)并将其放在这里
(curs.execute ("""INSERT INTO tbstatus values(NOT NULL, 'STATUSHERE')"""))
存储在我的数据库中。
【问题讨论】:
【参考方案1】:除非我误解了,你可以简单地合并这两个脚本,比如
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import MySQLdb
db = MySQLdb.connect("localhost", "root", "raspberry", "cribdb")
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.IN) # Right level-1
GPIO.setup(16, GPIO.IN) # Right level-2
GPIO.setup(18, GPIO.IN) # Right level-3
last_status = None
while True:
input_12 = GPIO.input(12)
input_16 = GPIO.input(16)
input_18 = GPIO.input(18)
if input_12 == 1 or input_16 == 1 and input_18 == 0:
status = "lying down"
elif input_12 == 1 or input_16 == 1 and input_18 == 1:
status = "Sitting/Crawling"
elif input_12 == 0 or input_16 == 0 and input_18 == 1:
status = "Almost out"
else:
status = "Out of the crib"
time.sleep(1)
if status != last_status:
print(status)
last_status = status
curs = db.cursor()
curs.execute(
"""INSERT INTO tbstatus values(NULL, %s)""", (status,)
)
db.commit()
顺便说一句,我建议在您的tbstatus
表中添加某种时间戳列,顺便说一下,除非您已经有了。
另一个改进可能是仅在状态更改时记录状态。
编辑:根据 cmets 的要求,我添加了跟踪最后状态并仅记录更改。
【讨论】:
我只是想知道,如何限制传感器读数。例如,一旦传感器检测到“躺下”,它只会打印一个“躺下”,而不是每 1 秒(time.sleep(1))。如果它是不同的状态,比如“坐着/爬行”,它只会打印另一个?谢谢!! @GeraldManibale 编辑了。:) 非常感谢。以上是关于如何将传感器读数从 raspi 存储到我的数据库中?的主要内容,如果未能解决你的问题,请参考以下文章