我想将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
答案 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