In questo articolo è presentato un lettore di badge/chiavi RFID sviluppato attraverso la scheda Raspberry PI , con la possibilità di monitorare in tempo reale con una pagina Web, esposto tramite un web server, i vari accessi ID catalogati su un database (DB) MySQL. Utilizzando una chiamata asincrona AJAX (tramite XMLHttpRequest) il browser richiederà periodicamente (1 volta al secondo) lo stato del DB alla Raspberry PI e lo visualizzerà formattato opportunamente in una pagina html anch'essa esposta dal WebServer. Per quanto il sistema sia utilizzabile praticamente senza modifiche, lo scopo di questo articolo e' la valenza didattica della presentazione delle varie tecnologie utilizzate per la sua realizzazione.
Introduzione
Il progetto e' pensato per essere rigorosamente Open Source, sia nelle librerie software utilizzate che nei sorgenti che implementano l'applicativo. Il codice sorgente è scaricabile attraverso il seguente link github. Un altro aspetto da sottolineare e' la particolarità del sistema di essere CrossPlatform, ovvero compilabile e funzionante su piu' piattaforme. In particolare, la piattaforma e' stata sviluppata e testata inizialmente su un MacBook Pro, con i due lettori inizialmente pluggati nelle due porte USB disponibili. In seguito, i sorgenti con pochissimi adattamenti al makefile sono stati poi portati e testati sulla Raspberry PI. Come molti lettori sapranno, il sistema operativo OS X e' in realta' un sistema Unix accessibile da shell che i lettori piu' intraprendenti avranno sicuramente provato ad utilizzare. Essendo un fratello maggiore (o minore, a seconda dei punti di vista) di Linux (presente sulla Rasberry PI) e' stato molto semplice portare il codice che, nativamente, compila già anche per Linux. Per poter avere un sistema portabile e ricompilabile su piattaforme diverse, non si sono utilizzati gli strumenti tipici su OS X per sviluppare, ovvero Xcode e simili, bensi' il codice e' sviluppato tutto da editor di testo (mate) e compilato usando la pratica standard sui sistemi Unix/Linux, ovvero makefile e derivati. Allo stato attuale non si e' ancora portato il sistema su una piattaforma Windows, sia per mancanza di tempo che per problemi tecnici con la compatibilita' delle librerie HidApi (dettagli maggiori su questo nella sezione dedicata alle librerie software utilizzate) su piattaforma Win. In caso si volesse comunque utilizzare questo sistema su sistemi Win, si puo' usare l'escamotage di installare emulatori di ambienti Linux su Windows, quali cygwin o similari. Nel prosieguo dell'articolo procederemo alla descrizione del progetto, partendo da come preparare da zero la Raspberry, installando via via il sistema operativo Raspbian e tutte le librerie necessarie per compilare i sorgenti. Alcune di queste librerie verranno installate piu' comodamente usando il gestore di pacchetti nativo della distribuzione Linux (in gergo distro), ovvero apt dalla linea di comando. Altre di queste, verranno invece scaricate come sorgenti e compilate e configurate con un metodo piu' avanzato, ma meno automatico dell'apt.
Accedere alla shell della Raspberry da remoto
Gli approcci possono essere principalmente due: da rete tramite il comando ssh o un client telnet quale Putty o simili. Quando si lavora su OS X, la sua shell offre nativamente il comando ssh senza installare altro. Prima di tutto si deve determinare quale indirizzo IP sia stato assegnato dal server DHCP solitamente presente in rete (dopo il primo accesso si potra' poi assegnare un IP statico che non confligga con altri dispositivi sulla rete, in modo da avere un IP noto a priori da usare). Per lo sviluppo di questo sistema, la Raspberry PI (Model B+, Pi 2 Model B) e' stata messa in rete tramite cavo ETH (si puo' anche usare una dongle WiFi, dopo aver settato la password tramite il WPA supplicant, oppure la Raspberry Pi 3). Si e' poi determinato, accedendo al router in rete, che questo aveva assegnato l'IP 192.168.1.7 alla board. A quel punto, ricordando che di default Raspbian ha come user “pi” e password “raspberry”, si potra' digitare il seguente comando:
> ssh -lpi 192.168.1.7
La board chiederà la password e a quel punto si accedera' alla shell della Raspberry PI direttamente dalla shell corrente bash. Questa procedura non servira' solo per lanciare e usare l'applicativo che verra' compilato seguendo le istruzioni, ma anche per eseguire tutta la procedura di installazione e compilazione delle librerie, che verra' descritta piu' avanti nella sezione apposita. Per i lettori piu' orientati all'hardware e ai gadget, si segnala anche il secondo metodo dove si puo' usare un dispositivo USB -> seriale TTL che si connette direttamente ai PIN liberi sulla Raspberry PI. A quel punto si potra' lavorare direttamente dalla shell esposta dalla seriale, che e' in echo su quella descritta qui sopra dallo stack TCP/IP della board. Nella figura 1 si puo' vedere un dispositivo del genere, disponibile per una decina di euro circa su ebay.
Anche per questo si potra' trovare la mappatura in base al colore in rete su molti siti. Benche' questo progetto sia molto semplice nel suo utilizzo (basta infatti pluggare i lettori, passare i badge e vederne i dati raccolti e aggiornati in tempo reale su di un qualsiasi browser puntato sulla pagina esposta dalla Raspberry PI), coinvolge molte tecnologie e librerie software riutilizzabili anche in altri contesti e altri progetti.
Descrizione funzionale
Il componente fondamentale attorno al quale ruota tutto il sistema e' la board Raspberry PI, in particolare la sua versione B+. Il sistema attualmente lavora utilizzando dei RFID com frequenza di 125KHz (standard EM4100 compatible transponder), ma non vi e' alcun vincolo per [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3999 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
E’ molto interessante utilizzare più risorse assieme, per la realizzazione di un progetto. Il risultato che ne deriva è un prodotto molto potente e altamente performante. In questo articolo, l’Autore ha sapientemente organizzato, tra loro, embedded, linguaggi di programmazione ed elettronica per realizzare qualcosa di realmente bello.
Salve Giovanni,
La ringrazio molto per il suo giudizio. Essendo uno sviluppatore, ho chiaramente dato un taglio orientato al codice piu’ che all’elettronica, senza pero’ addentrarmi troppo sui sorgenti. Potrebbe essere interessante eventualmente descrivere piu’ nel tecnico le librerie usate e la gestione a mutex per proteggere le risorse.
A proposito di RFID, ultimamente abbiamo trattato molti articoli al riguardo http://it.emcelettronica.com/category/rfid-nfc 😉
Molto interessante, nella piccola azienda dove lavoro mi è stato commissionato di realizzare un sistema di monitoraggio delle risorse umane, nel senso che ogni postazione di lavoro dovrebbe essere fornita di un lettore e l’operatore di un badge.
Io ho realizzato, con difficoltà, essendo alle prima armi una cosa del genere ma molto piu’ semplice e costosa in quanto ogni postazione è formata da un RaspBerry con W10 e lettore badge.
Nel tuo esempio un solo Rasp quanti lettori può gestire ? Un cavo seriale del genere quanto può essere lungo?
Grazie
Ciao Gian Mario,
il numero di lettori per Raspi e’ nominalmente illimitato e viene sentito alla partenza dell’eseguibile (se serve, lo si puo’ anche sentire a caldo aggiungendo 1 bottone di “Update RFID readers” dalla pagina esposta dal webserver).
Le prove che ho fatto, come si vede dalla foto, sono per ora di 2 lettori, ma la libreria che uso apre 1 canale stagno di comunicazione fra ogni lettore e la Raspi, senza il pericolo di mix di caratteri dai 2 lettori (ogni lettore viene visto come una tastiera che spara caratteri).
Attualmente quindi il limite che vedo e’ nelle sole 4 porte USB che espone la Raspi, ma mettendo 1 HUB USB su ogni scheda si puo’ alzare il numero di lettori.
Per quanto riguarda la lunghezza del cavo seriale (immagino tu parli del cavo USB da ogni lettore alla Raspi), ha come limite la lunghezza de cavi USB commerciali. Non sono 1 sistemista o HWrista, ma immagino che mettendo anche li’ degli opportuni HUB USB nel mezzo (facente funzioni di ripetori) tu possa allungare i cavi a piacere.
Grazie della lettura e dell’attenzione, ciao.
Grazie della risposta, appena posso mi ci metto a ‘giocare’ 🙂
OK Gian Mario. Con 2 lettori, per ora di bachi non ne ho trovati. Magari se li aumenti magari subentra qualche problema di sincronizzazione, anche se non dovrebbe.
Se hai bisogno, mi trovi qui, ciao 🙂
In realta’ il bottone di riconoscimento a caldo gia’ esiste e si chiama “Recognise”, esposto dalla pagina del web browser. Quindi la funzionalità’ e’ gia’ disponibile. A quel punto pero’, se si sono gia’ loggati dei record su 2 readers, il sistema non e’ ora in grado di mantenerne la sequenza corretta, aggiungendone un terzo.
Salve Riccardo molto bello l’articolo. Volevo porti una domanda:
A che distanza massima gli RFID rilevano i Badge?
Inoltre dici che colleghi “i lettori RFID tramite il bus USB” potresti essere più preciso per un neofita come me?
Grazie
Grazie ytooong per l’apprezzamento.
Ho provato or ora per darti una risposta piu’ significativa e le distanze di rilevazione sono:
1) 5-6 cm nel caso di badge card (quella bianca a forma di carta di credito nell’immagine in cima).
2) 2-3cm nel caso di RFID a gioca di portachiavi (quelli tutti colorati a forma di goccia nell’immagine in cima).
Questa differenza e’ dovuta (credo) alla differenza nell’area disponibile dove viene messo il RFID, che nel caso della card e’ molto piu’ esteso e quindi riesce a essere rilevata a distanza circa doppia che col portachiavi.
Per quanto riguarda il collegamento dei sensori, questi sono dei sensori RFID al cui capo vi e’ una porta USB maschio, che quindi viene collegata alla presa USB femmina della Raspberry PI.
In questo modo, il sistema lavora nitidamente fino a 4 lettori, poiche’ 4 sono le porte USB disponibili sulla Raspberry PI (usando un HUB USB e’ cmq possibile estendere questo numero di porte).
Come descritto nell’articolo questi sensori vengono visti da qualsiasi scheda o computer come dispositivi HID (Human Interface Device), ovvero, per dirla piu’ semplicemente, sono tutti gli effetti come una tastiera USB che usi tutti i giorni sul tuo desktop. Quando passi l badge, ad esempio, il sensore legge l’ID e manda il tutto tramite l’USB carattere per carattere.
La particolare gestione fatta in questo progetto, permette di gestire ogni lettore come un compartimento stagno, quindi come se a tutti gli effetti avessi connesso diverse tastiere USB senza pero’ avere il problema da quale tastiera arrivano i tasti premuti: ogni lettore ha infatti un canale stagno verso la Raspberry PI.
Grazie della cortese ed esaustiva risposta.
Potrei conoscere quali sensori rfid hai utilizzato tu?
Stò cercarndo di mettere in pratica il tuo interessantissimo progetto.
In realta’ non so la marca esatta del sensore, ma e’ questo:
http://www.ebay.it/itm/USB-RFID-ID-Contactless-Proximity-Smart-Card-Reader-125Khz-EM4100-EM4001-Windows-/222219808107?hash=item33bd552d6b
Questo lavora a quella data frequenza rispettando l’EM4100/EM4001:
http://www.priority1design.com.au/em4100_protocol.html
ed e’ uno dei protocolli piu’ utilizzati. Anche i badge e chiavi devono quindi attenersi allo stesso protocollo. Come detto nell’articolo, cmq, puoi tranquillamente scegliere anche altri protocolli RFID, a patto chiaramente di prendere poi i badge abbinati.
Il protocollo viene completamente astratto dall’USB che manda i caratteri allo stesso modo, indipendentemente dal protocollo fra badge e sensore. Addirittura potresti montate sulla stessa Raspi uno sensore di un tipo e uno di un altro, e il sistema continuerebbe a funzionare senza problemi, poiche’ per la scheda questi vengono visti tutti come tastiere USB, alla fine dei conti.
Io ho usato come detto semplicemente uno dei piu’ usati, in modo da poter reperire facilmente in rete.
Per il resto non farti problemi a chiedermi. La parte piu’ complicata e’ stata sicuramente l’installazione e configurazione di MySQL, ma magari con le mie istruzioni farai meno fatica.
Good luck 🙂
Sera carissimo Ho collegato il raspberry in remoto al mac
quando chiedo di aggiornare delle librerie con il comando:
sudo apt-get install autoconf automake libtool
mi restituisce un lungo log di errore ne posto un piccolo pezzo
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main libsigsegv2 armhf 2.10-4
Impossibile risolvere “mirrordirector.raspbian.org”
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main m4 armhf 1.4.17-4
Impossibile risolvere “mirrordirector.raspbian.org”
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main autoconf all 2.69-8
Impossibile risolvere “mirrordirector.raspbian.org”
Grazie buona serata
Ciao ytooong (ti do del tu, spero vada bene),
e’ il classico errore ritornato quando non raspbian non trova il server in remoto per scaricare i pacchetti. I motivi possono essere molti, qui cmq trovi una possibile soluzione:
https://raspberrypi.stackexchange.com/questions/27479/cannot-connect-to-mirrordirector-raspbian
Potrebbe chiaramente non funzionare, perche’ magari il tuo e’ un altro problema. Può’ anche darsi che il server fosse giu’ in quel momento (ma dubito).
Ciao Riccardo anziche lavorare in remoto, nn sono riuscito a scaricare le librerie, stò lavorando direttamente sulla tv.
Quando installo questa libreria
sudo apt-get install libmysqlclient-dev
durante l’installazione non mi ha chiesto:
“Durante l’installazione, il server chiedera’ di impostare la password dell’utente root dei Database. Si dia pure invio senza inserire alcunche’, ”
scarica tutto regolarmente ma nn mi chiede la pass e il collegamento al server
Non ci dovrebbero essere differenze fra il prompt da remoto e quello che hai aperto dalla versione visuale da TV. In ogni caso magari il pacchetto e’ leggermente diverso e magari non ti chiede la password. Prova a procedere cmq, tanto la pwd la dovrai inserire piu’ tardi, come descritta nell’articolo.
grazie carissimo!!!!
Posso avere la tua mail?
Certo, [email protected]
Se cmq ti serve assistenza sull’articolo sarebbe forse meglio continuarla qui, cosi’ potrebbero giovarne anche gli altri lettori.
Tranquillo senza dubbio!!!!
Ciao Buona serata!!!
Compilazione librerie hidapi
quando digito il comando:
git clone https://github.com/signal11/hidapi.git
mi chiede id e password.
A me non capitava, forse usavo una versione piu’ vecchia di git.
Prova cmq a seguire questo consiglio per tenerti la password in cache:
https://stackoverflow.com/questions/5343068/is-there-a-way-to-skip-password-typing-when-using-https-on-github
Credo di aver realizzato solo ora quale sia il problema. Da quando github e’ passato come gestione in https, la procedura di git clone richiede che chi si collega a github abbia un account su github stesso.
A me non l’ha chiesto poiche’ regolarmente sulla scheda dove ho lavorato, pushavo regolarmente le modifiche su github con git, quindi in automatico la mia Raspberry ha cachato il mio userID e password.
Devi quindi necessariamente crearti un account github, anche senza pubblicare nulla di tuo. Questo ti garantira’ di poter clonare tutti i repository che vuoi.
Se poi cmq avessi ancora problemi, dopo aver creato l’ID e la PWD usa il link di qui sopra per cachare i tuoi dati, oppure usa anche il link seguente:
https://help.github.com/articles/caching-your-github-password-in-git/
Spero che questi ti aiuti, ciao.
Ok grazie Riccardo!!!
Ho appena effettuato la registrazione al sito. Spero entro domani di continuare con l’installazione del programma. Grazie per l’assistenza. Buona serata
OK ytooong, credo proprio che sia solo quello.
Purtroppo ricreare esattamente tutte le condizioni che si possono verificare in giro per il mondo
e’ molto difficile, e non mi ero mai posto questo problema poiche’ non mi si e’ mai presentato.
Questo tra l’altro dovrebbe risolverti anche il problema che avresti trovato piu’ avanti con la git clone dal mio repository, poiche’ anch’esso e’ su GitHub.
Puo’ darsi che nei we non riesca a risponderti, perche’ spesso sono in posti senza connessione, porta pazienza quindi. Ciao, a presto.
Se cmq non riuscissi ancora , per problemi vari, se vai direttamente sul sito:
https://github.com/signal11/hidapi.git
vedrai che sulla destra ti permette anche di scaricare il progetto zippato. A quel punto lo puoi scaricare su chiavetta dal PC, e passarlo sulla raspi, unzippandolo dovresti avresti clonato l’altro.