[여기에 이미지 설명 입력] [1] 현재 학교 프로젝트를 진행 중이며 벽에 도달 할 때가되었습니다.
Raspberry Pi 3+의 USB 포트에서 데이터를 가져 오려고합니다. Arduino Nano를 연결했고 USB 포트를 통해 Pi로 문자열 (RFID 카드의 십진수로 된 UID 번호)을 보내고 있습니다. 여기에서 모든 것이 잘 작동하며 문제없이 문자열 (ID)을 인쇄 할 수 있습니다. 카드의 ID를 데이터베이스의 ID와 비교하고 있으며 정적 번호 (코드 아래에 주석으로 표시됨)를 입력하면 데이터가 인쇄됩니다. 그러나 직렬 회선으로 시도하면 아무 일도 일어나지 않습니다. 데이터를 전혀 가져 오지 않는 것 같습니다. 내 데이터베이스의 전망은 아래에 있으며 파이썬 코드도 있습니다. 미리 감사드립니다!
card_id serial_no LastName FirstName
1 | 2136106133 | Hansen | Peter |
2 | 117254270 | Larsen | Thompson |
#! / usr / bin / env 파이썬
import MySQLdb
import serial
ser = serial.Serial('/dev/ttyUSB0',9600)
db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="root", # your username
passwd="root", # your password
db="RFID") # name of the data base
cur=db.cursor()
CardID = 0
LastName = ""
FirstName = ""
while True:
CardID=ser.readline()
print "pweasda"
print CardID
print "pewpew"
# CardID = 117254270 - this works. The problem is that I have many RFID cards/tags with different IDs of course. With this statement it prints everything correctly.
cur.execute('SELECT * FROM cards WHERE serial_no=%s',(CardID))
results = cur.fetchall()
for row in results:
FirstName = row[3]
LastName = row [2]
serial_no = row [1]
card_id = row [0]
#print the fetched results
print "FirstName=%s,LastName=%s,serial_no=%s,card_id=%s" % \
(FirstName, LastName, serial_no, card_id )
db.commit()
print "Data committed"
출력 이미지 (오류 없음) : [1] : http://postimg.org/image/jf2doogrv/
가능한 해결책은 다음과 같습니다.
import sqlite3
conn = sqlite3.connect("users.db")#path to your sqlite db file!
cursor = conn.cursor()
CardID=ser.readline().strip()
sql = "SELECT * FROM cards WHERE serial_no=?"
cursor.execute(sql, [(CardID)])
try:
results = cursor.fetchall()[0]# just fetching the first row only, you can loop through all rows here!
FirstName = results[3]
LastName = results[2]
serial_no = results[1]
card_id = results[0]
print "FirstName=%s,LastName=%s,serial_no=%s,card_id=%s" % \
(FirstName, LastName, serial_no, card_id )
except IndexError as e:
print 'CardID Not Exist'+str(e)
except Exception as e2:
print(str(e2))
위의 코드에서 나는 데이터베이스가 sqlite DB에 있다고 가정하고 예외도 처리하므로 런타임 오류가 있으면 알아낼 수 있습니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다