python - 如何将传感器读数从 raspi 存储到我的数据库中?
问题描述
这是我的光束传感器代码:
#!/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')"""))
存储在我的数据库中。
解决方案
除非我误解了事情,否则您可以简单地合并这两个脚本,例如
#!/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
顺便说一下,除非您已经有一个。
另一个改进可能是仅在状态更改时记录状态。
编辑:按照评论中的要求,我添加了跟踪最后状态并仅记录更改。
推荐阅读
- sql - 在 IMPLA/HIVE 中添加带有 SELECT 的新列后,旧表数据变为 NULL
- html - 翻译服务的AngularJS插值问题
- xml - 使用codesynthesis-xsd解析/验证xml不包括有关xsd的信息
- c# - 我怎样才能使重载更简单
- kotlin - 如何在 kotlin 的 mockitoDeepMock#someMethod() 中修复 NPE
- swift - Swift - ScrollView 中的 StackView 不滚动
- c# - 在保存到数据库之前将数据存储到变量
- javascript - 无法在浏览器上下载excel文件
- excel - Excel 自动绘制具体数据范围的图表
- cloud-foundry - https 在 swisscom CloudFoundry 上没有按预期工作