Per fare qualche esperimento con gli RFid mi sono comprato Parallax Rfid Card Reader
In realta' pensavo di ordinare la versione seriale da accoppiare ad Arduino (codice 28140) ma in realta' ho acquistato la versione USB (28340) per cui la uso con Raspberry
Il lettore legge il formato di Rfid a 125KHz a sola lettura (EM-4100) ed i dati vengono inviati sulla seriale virtuale rappresentata dalla porta USB come 2400 8N1
Per Linux non e' necessario installare nessun driver, su Windows invece la periferica non viene riconosciuta al volo
come indicato dal
manuale, in caso di corretta lettura viene inviata una stringa di 12 caratteri in cui il codice
Rfid (composta da 10 caratteri numerici) e' compreso dal secondo all'undicesimo carattere
Stranamente alla prima lettura viene sempre restituita una stringa di 2 caratteri... dopo di cio' il lettura funziona in modo corretto ed e' anche sufficientemente veloce
---------------------------------------------------------------
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sqlite3 as lite
import sys
import serial
ser = serial.Serial('/dev/ttyUSB0', 2400)
con = lite.connect('birra.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS birra")
cur.execute("CREATE TABLE birra(Rfid TEXT, Gratis INT)")
cur.execute("INSERT INTO birra VALUES('1100560289',1)")
while (1):
id = ser.readline()
if len(id) == 12:
r = id[:10]
print "Id = ",id
cur.execute("SELECT * FROM birra WHERE Rfid='"+r+"'")
while True:
row = cur.fetchone()
if row == None:
break
if row[1] == 1:
print "Birra gratis"
cur.execute("UPDATE birra SET Gratis=0 WHERE Rfid='"+r+"'")
else:
print "Birra da pagare"