如何将来自raspberer pi 3火焰传感器火灾检测的数据插入到MySQL数据库中

时间:2018-05-06 14:00:10

标签: python mysql raspberry-pi

我想将raspberry pi 3中的数据插入到mysql数据库中:

import RPi.GPIO as GPIO import time import MySQLdb db =MySQLdb.connect(host="localhost", user="root", passwd="123456", db="raspbd") cur = db.cursor()

GPIO SETUP

channel = 3 GPIO.setmode(GPIO.BCM)GPIO.setup(channel, GPIO.IN)def callback(channel):print("flamedetected")GPIO.add_event_detect(channel,GPIO.BOTH, bouncetime=300) # let us know when the pin goes HIGH or LOW GPIO.add_event_callback(channel, callback) # assign function to GPIO PIN,Run function on change

infinite loop

while True:cur.execute("INSERT INTO flame (ID,flame,) VALUES (%s, %s)", [ID,flame])db.commit() db.rollback()time.sleep (1)cur.close()db.close()

错误讯息:

ERROR: Traceback (most recent call last): 
  File "flame.py", line 24, in cur.execute("INSERT INTO flame (ID,flame,) VALUES (%s, %s)", [ID,flame])
NameError: name 'ID' is not defined

1 个答案:

答案 0 :(得分:0)

在我的拙见中,你应该避免使用无限循环,这是你应该避免的。

错误消息表明尚未定义名为ID的变量,这意味着它不存在,因此也没有任何值。 我假设应该是MySQL数据库表中的ID,你最好将其设置为自动增量,这样你就不用担心了。

如果这是您分享的整个代码,那么您很可能会有更多错误消息。您需要首先从GPIO读取数据才能将其发送到数据库。

直接回答如何将数据从传感器传输到数据库。我根本没有使用GPIO的经验。这是一个记录良好的RPi领域。

首先,您需要从相关的引脚/通道读取数据,然后通过SQL查询将其发送到数据库。

GPIO wiki(https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/)对如何完成阅读有一个非常详尽的描述。我假设您正在尝试通过将回调函数附加到引脚来执行线程解决方案,每次传感器向引脚发送信号时都会触发该函数。我不确定这是否正确:

# ...after setting up the GPIO and the DB connection

flame = ""
def my_callback(channel):
    # ...do something here...
    flame = GPIO.input(channel)
    # or perhaps you want just a string when it happened
    # flame = "detected"

channel = 3        
GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

# then you should be able to write the value to the DB
cur.execute("INSERT INTO flame (ID,flame) VALUES (%s,%s)",[ID,flame])
# ...and continue with the DB job.

# please note that this piece of code is not complete
# and will not solve the error with the ID