Un piccolo problemino con Nexus 7: nonostante tutti i Nexus condividano il medesimo chip ed antenna per l'NFC/RFID su Nexus 7 non sempre viene riconosciuto il tag
la soluzione e' semplice: l'antenna non e' grande quanto la dimensione del dispositivo ed e' ubicata poco sopra la E della scritta Nexus. Per leggere i tag e' quindi necessario strusciarli nella posizione esatta dell'antenna
Visualizzazione post con etichetta Rfid. Mostra tutti i post
Visualizzazione post con etichetta Rfid. Mostra tutti i post
giovedì 26 settembre 2013
lunedì 9 settembre 2013
Lettura di RFID Mifare con API di Android
In questo post viene descritto come leggere i tag Rfid Mifare Classic (13.56 MHz) disponendo di un telefono con antenna NFC come il Nexus S (attenzione che per leggere
Si parte da un progetto vuoto (Hello World) e si effettuano le modeste modifiche indicate in giallo nel listato seguente
Per prima cosa si deve modificare il file Manifest per dichiarare l'uso del sensore NFC e si deve dichiare una nuova intent che si apre quando viene passato un tag sotto il lettore
Manifest.xml
------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test4"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.NFC"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.test4.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="@string/event_verify" android:name="verifytagscanact">
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/filter_nfc"/>
</activity>
</application>
</manifest>
L'interno con l'hardware NFC di un Nexus S (IFixIt) |
Si parte da un progetto vuoto (Hello World) e si effettuano le modeste modifiche indicate in giallo nel listato seguente
Per prima cosa si deve modificare il file Manifest per dichiarare l'uso del sensore NFC e si deve dichiare una nuova intent che si apre quando viene passato un tag sotto il lettore
Manifest.xml
------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test4"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.NFC"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.test4.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="@string/event_verify" android:name="verifytagscanact">
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/filter_nfc"/>
</activity>
</application>
</manifest>
------------------------------------------------
Si deve creare poi una nuova cartella xml nelle risorse e si crea un nuovo file filter_nfc
/xml/filter_nfc.xml
------------------------------------------------
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.MifareClassic</tech>
</tech-list>
</resources>
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.MifareClassic</tech>
</tech-list>
</resources>
------------------------------------------------
la Main Activity e' composta da un solo Adapter che apre una nuova intent. A questo punto si apre la funzione OnNewIntent che legge il contenuto del tag
la Main Activity e' composta da un solo Adapter che apre una nuova intent. A questo punto si apre la funzione OnNewIntent che legge il contenuto del tag
MainActivity.java
------------------------------------------------
package com.example.test4;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.nfc.Tag;
import android.nfc.NfcAdapter;
import android.nfc.tech.MifareClassic;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter.MalformedMimeTypeException;
import android.util.Log;
import android.widget.Toast;
import java.math.BigInteger;
public class MainActivity extends Activity {
NfcAdapter adapter;
PendingIntent pendingIntent;
IntentFilter writeTagFilters[];
String[][] techListsArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
try {
tagDetected.addDataType("*/*");
}
catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
writeTagFilters = new IntentFilter[] { tagDetected };
techListsArray = new String[][] { new String[] { MifareClassic.class.getName() } };
}
static String bin2hex(byte[] data) {
return String.format("%0" + (data.length * 2) + "X", new BigInteger(1,data));
}
@Override
protected void onNewIntent(Intent intent){
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
Toast.makeText(getApplicationContext(), bin2hex(tag.getId()), Toast.LENGTH_SHORT).show();
}
public void onPause() {
super.onPause();
adapter.disableForegroundDispatch(this);
}
public void onResume() {
super.onResume();
adapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, techListsArray);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
package com.example.test4;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.nfc.Tag;
import android.nfc.NfcAdapter;
import android.nfc.tech.MifareClassic;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter.MalformedMimeTypeException;
import android.util.Log;
import android.widget.Toast;
import java.math.BigInteger;
public class MainActivity extends Activity {
NfcAdapter adapter;
PendingIntent pendingIntent;
IntentFilter writeTagFilters[];
String[][] techListsArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
try {
tagDetected.addDataType("*/*");
}
catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
writeTagFilters = new IntentFilter[] { tagDetected };
techListsArray = new String[][] { new String[] { MifareClassic.class.getName() } };
}
static String bin2hex(byte[] data) {
return String.format("%0" + (data.length * 2) + "X", new BigInteger(1,data));
}
@Override
protected void onNewIntent(Intent intent){
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
Toast.makeText(getApplicationContext(), bin2hex(tag.getId()), Toast.LENGTH_SHORT).show();
}
public void onPause() {
super.onPause();
adapter.disableForegroundDispatch(this);
}
public void onResume() {
super.onResume();
adapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, techListsArray);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
------------------------------------------------
giovedì 5 settembre 2013
Creazione di post automatici su Facebook con RFID (6)
Riprendendo il filone degli esperimenti precedenti in questo caso il lettore Rfid e' legato ad una Arduino che si occupa del carico di lavoro per l'interfaccia Web
Le connessioni per il lettore RFID sono
MOSI: Pin 11 / ICSP-4
MISO: Pin 12 / ICSP-1
SCK: Pin 13 / ISCP-3
SS: Pin 6
RST: Pin 7
La scheda Arduino ha ovviamente montato lo Shield Ethernet
----------------------------------------
#include <SPI.h>
#include <Ethernet.h>#include <RFID.h>
#define SS_PIN 6
#define RST_PIN 7
RFID rfid(SS_PIN, RST_PIN);
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "m.xxxxxnifi.it";
IPAddress ip(192,168,0,177);
EthernetClient client;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.init();
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
else
{
Serial.println("IP Acquisito");
}
delay(1000);
}
void loop()
{
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
String Id = String(rfid.serNum[0],HEX)+String(rfid.serNum[1],HEX)+String(rfid.serNum[2],HEX)+String(rfid.serNum[3],HEX)+ String(rfid.serNum[4],HEX);
Serial.println(Id);
if (client.connect(server, 80)) {
Serial.println("connected");
client.println("GET /luca/xxxxxxx/rfid_server2.php?rfid="+Id+" HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
}
else {
Serial.println("connection failed");
}
}
}
rfid.halt();
}
----------------------------------------
----------------------------------------
<?
require_once '../src/facebook.php';
//Luca
if ($_GET["rfid"] == "f479abb492")
{
$accessToken = "CAAJkNq2LttoBAJywtmNSbVHqFPubOjYmQ2yyUG4kpibD75BHid9J7xsvif8osSOc4ewgK4aYerrLZBsZCQM5wykRTYVLDkCJXlXYl3gi8WFRQ8U4p4y4ZAXYsdamz6RVdRJZAe4vZA80mWBayuG0qc4IAj2TMDmQXKiv1OrKp8CwKjD6Rz2ZCAqp8yxxxxxxxx";
print "Luca<br>";
}
$appid = '673135956xxxxxx';
$appsecret = 'dde6cfb07dbb769c7efe949xxxxxx';
$msg = $_GET["msg"];
$title = 'Dove sono ??';
$uri = 'http://debiaonoldcomputers.blogspot.com/';
$desc = 'Sono ad Arcetri';
$pic = 'http://wwxxxxxxxxxxxxxxxxxmes/Boozook/images/testa.gif';
$action_name = 'Link';
$action_link = 'http://www.geo.unifi.it/';
$facebook = new Facebook(array(
'appId' => $appid,
'secret' => $appsecret,
'cookie' => false,
));
$user = $facebook->getUser();
$attachment = array(
'access_token' => $accessToken,
'message' => $msg,
'name' => $title,
'link' => $uri,
'description' => $desc,
'picture'=>$pic,
'actions' => json_encode(array('name' => $action_name,'link' => $action_link))
);
$status = $facebook->api("/me/feed", "post", $attachment);
print "Ok";
?>
martedì 3 settembre 2013
Rfid su Nexus S
Sono riuscito ad farmi prestare un tag Rfid da 13.56 MHz per testare la capacita' NFC di Nexus S. La storia racconta che la funzione di lettura/scrittura di Rfid era stata implementata all'interno di Android senza documentarla e che e' stata scoperta (e sfruttata) da alcuni utilizzatori
Per la prova ho usato un normale tag di sola lettura da 13.56 Mhz ed il programma NFC Reader, del quale sono disponibili anche i sorgenti su GitHub
L'antenna fa il suo lavoro anche se non e' molto sensibile (il tag va letteralmente strusciato sulla cover del telefono)
Per la prova ho usato un normale tag di sola lettura da 13.56 Mhz ed il programma NFC Reader, del quale sono disponibili anche i sorgenti su GitHub
L'antenna fa il suo lavoro anche se non e' molto sensibile (il tag va letteralmente strusciato sulla cover del telefono)
Lettore RFID RC522 su Arduino
Il lettore RFID RC522 e' forse il sistema meno costoso per leggere i tag Rfid a 13.56 MHz in quanto il suo costo arriva al minimo anche a 5 dollari su E-Commerce cinesi
L'interfaccia e' a sette cavi
MOSI: Pin 11 / ICSP-4
MISO: Pin 12 / ICSP-1
SCK: Pin 13 / ISCP-3
SS: Pin 10
RST: Pin 9
(possono essere modificati da programma i pin 9 e 10)
oltre ovviamente ai due collegamenti di alimentazione a GND e 3.3V
La mia versione del lettore mostra le scritte solo sul lato superiore e quindi, quando montato sulla breadboard, non si riesce a leggere la pedinatura. Per comodita' metto questa foto del medesimo lettore ma con le scritte sul lato inferiore per facilitare il montaggio
La programmazione della scheda viene effettuata mediante la libreria che si trova a questo indirizzo
Per la lettura di un tag si puo' impiegare l'esempio CardRead compreso nella libreria stessa (attenzione: ogni lettura viene confrontata con l'ultima acquisita e se uguale non mostra niente a schermo se non una fila di puntini)
versione corta
------------------------------------------
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);
// Setup variables:
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop()
{
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
String Id = String(rfid.serNum[0],HEX)+String(rfid.serNum[1],HEX)+String(rfid.serNum[2],HEX)+String(rfid.serNum[3],HEX)+ String(rfid.serNum[4],HEX);
Serial.println(Id);
}
}
rfid.halt();
}
-----------------------------------
-----------------------------------
/**
* Read a card using a mfrc522 reader on your SPI interface
* Pin layout should be as follows (on Arduino Uno):
* MOSI: Pin 11 / ICSP-4
* MISO: Pin 12 / ICSP-1
* SCK: Pin 13 / ISCP-3
* SS: Pin 10
* RST: Pin 9
*
* Script is based on the script of Miguel Balboa.
* New cardnumber is printed when card has changed. Only a dot is printed
* if card is the same.
*
* @version 0.1
* @author Henri de Jong
* @since 06-01-2013
*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);
// Setup variables:
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop()
{
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
if (rfid.serNum[0] != serNum0
&& rfid.serNum[1] != serNum1
&& rfid.serNum[2] != serNum2
&& rfid.serNum[3] != serNum3
&& rfid.serNum[4] != serNum4
) {
/* With a new cardnumber, show it. */
Serial.println(" ");
Serial.println("Card found");
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
//Serial.println(" ");
Serial.println("Cardnumber:");
Serial.print("Dec: ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[4],DEC);
Serial.println(" ");
Serial.print("Hex: ");
Serial.print(rfid.serNum[0],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[1],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[2],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[3],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");
} else {
/* If we have the same ID, just write a dot. */
Serial.print(".");
}
}
}
rfid.halt();
}
-----------------------------------
L'interfaccia e' a sette cavi
MOSI: Pin 11 / ICSP-4
MISO: Pin 12 / ICSP-1
SCK: Pin 13 / ISCP-3
SS: Pin 10
RST: Pin 9
(possono essere modificati da programma i pin 9 e 10)
La mia versione del lettore mostra le scritte solo sul lato superiore e quindi, quando montato sulla breadboard, non si riesce a leggere la pedinatura. Per comodita' metto questa foto del medesimo lettore ma con le scritte sul lato inferiore per facilitare il montaggio
La programmazione della scheda viene effettuata mediante la libreria che si trova a questo indirizzo
Per la lettura di un tag si puo' impiegare l'esempio CardRead compreso nella libreria stessa (attenzione: ogni lettura viene confrontata con l'ultima acquisita e se uguale non mostra niente a schermo se non una fila di puntini)
versione corta
------------------------------------------
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);
// Setup variables:
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop()
{
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
String Id = String(rfid.serNum[0],HEX)+String(rfid.serNum[1],HEX)+String(rfid.serNum[2],HEX)+String(rfid.serNum[3],HEX)+ String(rfid.serNum[4],HEX);
Serial.println(Id);
}
}
rfid.halt();
}
-----------------------------------
-----------------------------------
/**
* Read a card using a mfrc522 reader on your SPI interface
* Pin layout should be as follows (on Arduino Uno):
* MOSI: Pin 11 / ICSP-4
* MISO: Pin 12 / ICSP-1
* SCK: Pin 13 / ISCP-3
* SS: Pin 10
* RST: Pin 9
*
* Script is based on the script of Miguel Balboa.
* New cardnumber is printed when card has changed. Only a dot is printed
* if card is the same.
*
* @version 0.1
* @author Henri de Jong
* @since 06-01-2013
*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);
// Setup variables:
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop()
{
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
if (rfid.serNum[0] != serNum0
&& rfid.serNum[1] != serNum1
&& rfid.serNum[2] != serNum2
&& rfid.serNum[3] != serNum3
&& rfid.serNum[4] != serNum4
) {
/* With a new cardnumber, show it. */
Serial.println(" ");
Serial.println("Card found");
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
//Serial.println(" ");
Serial.println("Cardnumber:");
Serial.print("Dec: ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[4],DEC);
Serial.println(" ");
Serial.print("Hex: ");
Serial.print(rfid.serNum[0],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[1],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[2],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[3],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");
} else {
/* If we have the same ID, just write a dot. */
Serial.print(".");
}
}
}
rfid.halt();
}
lunedì 2 settembre 2013
Creazione di post automatici su Facebook con RFID(5)
Questo riepilogo non è disponibile.
Fai clic qui per visualizzare il post.
martedì 2 luglio 2013
Lettore RFID EM4100
Oltre al precedente lettore Parallax ho acquistato anche questo modello che legge i medesimi tag ma essendo commercializzato dalla Cina (dealextreme) ha un prezzo inferiore ai 20 Euro. Sulla confezione e sul lettore non e' riportato nessun codice identificativo
Le connessione riguardano una porta USB per la sola alimentazione ed una porta seriale standard DB9 (per la quale e' necessario l'adattore seriale-usb)
In alcuni siti si legge che questo lettore si dovrebbe comportare come una interfaccia HID ed emulare la tastiera e non dovrebbe aver bisogno di nessun driver. Nel mio caso ho provato sia su Linux che su Windows ma l'unico sistema per ottenere la lettura del dato e' connettersi alla porta seriale DB9
La comunicazione avviene su porta seriale con i parametri 9600 8N1
Le connessione riguardano una porta USB per la sola alimentazione ed una porta seriale standard DB9 (per la quale e' necessario l'adattore seriale-usb)
In alcuni siti si legge che questo lettore si dovrebbe comportare come una interfaccia HID ed emulare la tastiera e non dovrebbe aver bisogno di nessun driver. Nel mio caso ho provato sia su Linux che su Windows ma l'unico sistema per ottenere la lettura del dato e' connettersi alla porta seriale DB9
La comunicazione avviene su porta seriale con i parametri 9600 8N1
Parallax Rfid Card Reader 28340
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"
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"
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...