Schlagwort-Archive: NFC

Ausgabe des NFC Moduls über die Shell verwenden

Die Inbetriebnahme des NFC Moduls ist wie in dem Artikel zu lesen sehr einfach. Leider lässt sich die Ausgabe mit Hilfe von | nicht umleiten und kann somit auf der Shell nicht weiter verwendet werden.
Ich habe mit den Sourcecode(main.c) der mitgelieferten Polling Software angesehen und ein wenig angepasst, nun wird die UID des Tags in die Datei polling.log geschrieben.

Um so wenig Ausgaben wie möglich zu erhalten habe ich die meisten printf... Ausgaben aus dem Code entfernt, ausgegeben werden nun nur noch Fehlerausgaben und die UID.

Damit die Ausgabe in eine Datei geschrieben wird, habe ich folgendes in der main.c ausgetauscht.
Vorher:
printf("UID: ");
uint8_t i;
for(i = 0; i < bLength; i++) { printf("%02X ", bUid[i]); } printf("\n\n");

Nachher:
uint8_t i;
FILE *f = fopen("polling.log","a+");
for(i = 0; i < bLength; i++) { fprintf(f,"%02X", bUid[i]); } fprintf(f,"%s\n", ""); fclose(f);

Zusätzlich habe ich sleep(1) auf sleep(4) gesetzt.

Nach dem kompilieren kann die Software wie vorher über ./card_polling gestartet werde und die UID´s werden in die polling.log geschrieben.

Die UID´s aus der polling.log greife ich über ein kleines Shellscript ab, hierfür mussten zuvor die inotify-tools installiert werden.

apt-get install inotify-tools

Das Script selbst ist wie folgt aufgebaut:
#!/bin/bash
FILE="polling.log"
while true;
do
inotifywait -e modify "${FILE}"
for i in `cat ${FILE}`
do
echo $i
echo "" > ${FILE}
done
done

Wenn das Shellscript gestartet wurde, wird die polling.log überwacht.
Sobald es eine Änderung gibt wird die UID(echo $i) ausgegeben und im Anschluss wird die polling.log geleert.
Anstatt der echo $i Ausgabe könnte die UID auch in eine mysql Datenbank geschrieben werden, diese könnte dann in einem Webfrontend für zum Beispiel eine Zeiterfassung verwendet werden.
Es wäre auch möglich mit zusätzlicher Hardware ein Türschloss zu öffnen oder ein Programm auf dem Raspberry Pi zu starten.

Natürlich wäre das ganze einfacher wenn man den Sourcecode komplett anpassen würde, um zum Beispiel die UID in die mysql Datenbank zu schreiben, für mich reicht jedoch die Verwendung der UID über die Shell.

NFC Modul für den Raspberry Pi

Zu dem NFC Modul welches ich bei Farnell element14 bestellt habe gehört das Modul selbst, ein kleiner Zettel mit Mini Anleitung und eine RFID Karte. Das Modul ist ungefähr so groß wie der Rasbperry Pi und wird direkt auf die GPIO Ports gesetzt. Durch das aufsetzen des Moduls sind leider die anderen GPIO Ports nicht mehr nutzbar.

Damit das Modul genutzt werden kann muss SPI aktiviert werden.
Hierfür auf der Kommandozeile sudo raspi-config ausführen und unter den Advancded Options SPI aktivieren, im Anschluss den Rasbperry Pi neustarten.

Über einem Windows oder Linux Rechner (nicht über den Rasbperry Pi) die benötigte Software hier herunterladen und entpacken. In den entpackten Verzeichnissen befindet sich die card_polling.zip, diese muss auf den Rasbperry Pi kopiert und werden.

Für das kompilieren der polling Software muss zunächst cmake installiert werden.

Als root auf der Kommandozeile:
apt-get update
apt-get install cmake

Nun als Pi user in das Verzeichniss wechseln in der die zip Datei liegt und mit unzip card_polling.zip entpacken.
Nach dem entpacken müssen folgende Befehle ausgeführt werden:

cd ~/card_polling/build
cmake ../source
make

Nun über ./card_polling die kompilierte Software starten und das polling beginnt.

/home/pi/card_polling/build# ./card_polling
/****** Begin Polling ******/
No card or Tag detected
No card or Tag detected
MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

No card or Tag detected
No card or Tag detected

Sobald eine RFID Karte auf das Modul gelegt wird, gibt die Software den Typ und die UID der Karte aus.

NFC Paket

NFC montiert

UPDATE:Leider hatte ich vergessen die verwendete Distribution mit anzugeben, ich nutze hier Raspian. Danke für den Hinweis Marco