CODING WORLD RASP JP RFID Instructions [de]

Page 1
Raspberry Pi
Raspberry Pi
RFID KIT
RFID KIT
Jugend Programmiert
Jugend Programmiert
Page 2
Vorwort
LEDs
LEDs sollten nicht aus kurzer Distanz direkt angesehen werden. Ein direkter Blick kann zu Schäden an den Netzhäuten führen. Dies kann gefährlich sein, auch wenn die Verletzungen nicht sofort klar erkennbar sind. Die LEDs dürfen nur wie in den Anleitungen beschrieben verwendet werden, höhere Ströme oder Stromspannungen sind zu vermeiden.
Dieses Produkt entspricht den geltenden Europäischen Richtlinien und trägt ein CE­Kennzeichen. Der richtige Gebrauch ist in dem beiliegenden Buch erklärt.
Baue Schaltungen immer wie beschrieben auf, achte auch auf die verschiedenen GPIO Pins vom Raspberry Pi.
Herausgeber
Jugend Programmiert Coding World UG (haftungsbeschränkt) | Homwer.com Obdrupstraße 23 A, 24986 Mittelangeln www.codingworld.io Support: support@cw42.de Feedback: feedback@cw42.de
→ cw42.de/rfid/1
RFID für Anfänger
Page 3
Moin Moin und Willkommen
In diesem Kit werden uns mit dem ganzen Themenkomplex RFID beschäftigen. Du wirst lernen was RFID überhaupt ist und wie du mithilfe deines Pis und einem RFID­Reader Karten auslesen und beschreiben kannst. Natürlich haben wir das ganze praxisorientiert und spaßig verpackt. Damit dein Projekt Tagebuch nicht leer ausgeht haben wir uns auch noch mehrere Anwendungsfälle ausgedacht bei denen wir mit RFID großartige Dinge machen können, aber das wirst du schon schnell genug erfahren.
Damit du das alles machen kannst ist folgendes im Kit enthalten:
RFID Reader RFID Karten (sehen aus wie weiße EC-Karten) RFID Schlüsselanhänger
Inhalte Seite
RFID Grundlagen Seite 2
RFID Reader am Pi Seite 5
Kontaktlos LEDs zum leuchten bringen Seite 13
Das RFID Soundboard Seite 17
→ cw42.de/rfid/2
RFID für Anfänger
Page 4
RFID Grundlagen
Bevor wir direkt mit dem Pi und RFID anfangen brauchen wir erstmal ein paar Grundlagen für die Funktionsweise. RFID ist kurz für radio-frequency identification oder auf Deutsch Identifizierung mit Elektromagnetischen Wellen. Mit dieser Technik können Daten von einem Transponder mithilfe eines Schreib-/Lesegerät (wir werden die Abkürzung RFID-Reader benutzen) gelesen werden.
Wie schon gesagt gehört zu einem RFID System immer der RFID-Reader und ein Transponder. Ein Transponder kann dabei in vielen verschiedenen Formen und Größen kommen. Wir benutzen in diesem Fall RFID-Karte, RFID-Anhänger und NFC Sticker (dazu später mehr). Alle davon sind Transponder. Die Transponder die wir benutzen sind alle gleich aufgebaut. Sie lassen sich in zwei verschiedene Komponenten aufteilen, einmal die Antenne, diese befindet sich an den Außenseiten und dem Speicher und der Logik in der Form eines Chips in der Mitte des Transponders
→ cw42.de/rfid/3
RFID für Anfänger
Page 5
Die Transponder die wir benutzen haben keine eigene Stromversorgung den diese kommt durch den RFID Reader. Wenn dieser angeschlossen ist, wird ein hochfrequentes elektromagnetisches Feld erzeugt. Wenn sich der Transponder in diesem Feld befindet wird dieser darüber mit Strom versorgt. Die Energie wird dabei durch die Antennen aufgenommen und dann an den Chip weitergegeben. Wenn die Stromversorgung sichergestellt startet die Komunikation zwischen dem RFID-Reader und dem Transponder. Die hier benutzen Transponder können beschrieben oder gelesen werden. Der Transponder erzeugt dabei kein eigenes Feld oder Wellen sondern manipuliert nur das Vorhandene Feld mithilfe der Antennen. Dieses kann dann der RFID-Reader interpretieren und auswerten. Der Vorteil ist das der Transponder keine eigene Stromversorgung braucht und deswegen sehr klein sein kann. Der Nachteil ist das bei diesem Verfahren der RFID-Reader und der Transponder nicht weit von einander entfernt sein dürfen damit die Übertragung funktioniert.
NFC
Jetzt haben wir schon viel über RFID geredet und dabei auch noch NFC erwähnt. Dieses steht für Near Field Communication oder Deutsch Nahfeldkommunikation. NFC ist eine unterart von RFID die nur mit 13,56 Mhz arbeitet. Wir können diese an unserem RFID Reader benutzen weil auch dieser, in diesem Frequenz Bereich arbeitet. NFC ist eine neuere Technik und erlaubt auch das zwei Geräte wie Smartphones mit einander Kommunizieren und Daten austauschen. Auch Kontaktloses Bezahlen ist dadurch häufig möglich.
→ cw42.de/rfid/4
RFID für Anfänger
Page 6
RFID am Raspberry Pi
Jetzt haben wir genug Grundlagen gehabt und wollen jetzt diese Technik am Pi benutzen. Dafür müssen wir zuerst den RFID Reader an den Pi anschließen. Für die Komunikation zwischen dem Pi und dem Reader wird das SPI Protokoll benutzt. Wie du das einrichtest erfährst du unter http://cw42.de/spi (auch wenn du SPI schon aktiviert hast, musst du teilweise noch weitere Einstellungen treffen, das gilt vor allem bei älteren Rasobian Versionen). Bei allen Aktuellen Betriebssystem Versionen solltet ihr aber über sudo raspi-config -> 9 Advanced Options -> A5 SPI -> YES (alles bestätigen und dann neustarten) schon einfach SPI aktiviert haben.
RC522 Modul Raspberry Pi
1 - SDA GPIO8 CE0
2 - SCK GPIO11 SCKL
3 - MOSI GPIO10 MOSI
4 - MISO GPIO9 MISO
5 - IRQ
6 - GND GND
7 - RST 3.3V
→ cw42.de/rfid/5
RFID für Anfänger
Page 7
8 - 3.3V 3.3V
Bibliotheken Hinzufügen
Das Anschließen des Bauteils haben wir jetzt hinter uns und können uns jetzt wieder um die Softwareseite kümmern. Für die Kommunikation zwischen Pi und dem Reader wird das SPI Kommunikationsprotokoll benutzt. Im Gegensatz zum 5510 Display, welches im Starterkit dabei ist, senden wir diesmal nicht einfach nur Daten an den Reader sondern müssen diese natürlich auch empfangen um die einzelnen Karten wieder auslesen zu können. Deswegen ist die Software auch ein wenig Komplizierter aber natürlich gibt es dafür auch schon eine Bibliothek die wir nur für unsere zwecke anpassen müssen. Dafür gibt zwei verschiedene Komponenten die wir runterladen müssen, zuerst die Bibliothek mit der Python über die GPIO Pins SPI Kommunizieren kann:
Und jetzt die Bibliothek für die Kommunikation für den Reader.
Wenn ihr jetzt Read.py ausführt und die RFID Karte oder den RFID Anhänger solltet ihr folgendes sehen:
$ git clone https://github.com/lthiery/SPI-Py.git
1
$ cd SPI-PY
1
$ sudo python setup.py install
1
$ git clone https://github.com/coding-world/MFRC522-python.git
1 2
$ cd MFRC522-python
1
$ sudo python Read.py
1
Bash
Bash
Bash
Bash
Bash
Bash
→ cw42.de/rfid/6
RFID für Anfänger
Page 8
Wenn nichts angezeigt wird obwohl ihr mit den RFID Transpondern auch ein wenig länger (1-2 Sekunden) in der nähe der Vorderseite ist entweder etwas beim anschließen falsch gelaufen oder beim Aktivien/Installieren der Bibliotheken. Am besten versucht einfach erstmal alles nochmal.
Arbeiten mit RFID Karten
Dein RFID Reader sollte jetzt funktionieren. In diesem Teil zeigen wir dir, wie man das Read.py und Write.py Script so ändert dass wir eigene Namen oder ID's auf die Karten schreiben und diese später auch wider auslesen können.
Alle RFID Karten haben eine eigene UUID, also eine eigene eingebaute Kennung, die auch auf der Karte gespeichert sind. Wir können aber auch noch weitere Daten auf die Karten schreiben und auslesen. So lassen sich zum Beispiel Karten für die Zeiterfassung bauen. Wenn jemand ins Büro kommt registriert er sich mit seiner RFID Karte. Wir steigen einfach ein. Als erstes modifizieren wir das Write.py und Read.py Programm so, dass wir eigene Daten auf die RFID Speicher schreiben und lesen können.
Daten auf RFID Schreiben
Unsere RFID Karten haben 16 Sektoren. In jedem Sektor können wir eine Zahlen von 1-255 Speichern. Wenn du das Script Read.py ausführst und eine RFID Karte vor den Leser hältst dann sollte die Ausgabe so aussehen.
16 Sektoren, die alle auf 0 stehen. Maschinencode ist zwar toll, aber wer kann sich das merken? Wir wollen lieber Buchstaben speichern. Wenn wir 0 als A nehmen und B als 2 und C als 3 dann sind wir schnell durch. Dazu kommt dann noch das kleine a,b,c die Zahlen und Sonderzeichen. Das klingt nach viel Mühe. Zum Glück haben andere das Problem schon gelöst. Es gibt den American Standard Code for Information Interchange, kurz ASCII. Da sind alle Zeichen enthalten die wir brauchen und das beste ist, Python kann das übersetzen (Nur auf die Deutschen Umlaute und
Card detected Card read UID: 219,160,58,213 Size: 8
1 2 3
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1
→ cw42.de/rfid/7
RFID für Anfänger
Page 9
Sonderzeichen müssen verzichten aber das ist ja auch nicht so schlimm ;) ). Mehr zu ASCII gibt es auch auf
https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange.
Wir erstellen jetzt ein kleines Script das eine Eingabe in ASCII Code umwandelt. Diesen Code Speichern wir dann auf eine RFID Karte.
Erstellt eine neue Datei und schreibt folgenden Inhalt hinein: nano ASCII.py
Ok das sieht komplizierter aus als es ist. In der ersten Zeile holen wir uns die Eingabe des Nutzers und speichern diese in der Variable name. Mit
ran_input("Frage") können wir im Terminal dem Benutzers des Programmes
eine Frage stellen, und die Antworten dann in einer Variable speichern und später weiterverwenden. Wir können 16 Sektoren also 16 Zahlen von 0-255 speichern. Falls der Nutzer aber mehr Zeichen eingegeben hat zum Beispiel 18 oder 20 dann ist das zu viel. In der zweiten Zeile prüfen wir das. if len(name)>16: Bedeutet, wenn die länge von name > (größer als) 16 dann mache folgendes, die länger ist dabei natürlich die Anzahl der Zeichen. Die Funktion len() gibt uns die Länge einer Variable aus. Das kannst du selbst testen mit
Falls unsere Variable name länger ist als 16 Zeichen dann wird der eingerückte Teil ausgeführt und zwar: name=name[:16] . Übersetzt heißt das: Speichere in die Variable name nur die ersten 16 stellen aus der Variable name. Mit variable[anfangsWert:Endwert] können wir einzelne Zeichen aus einer Zeichenkette ausschneiden und ausgeben oder wieder in einer neuen oder der alten Variable speichen.
Jetzt kommt der Kern des ganzen, das übersetzten der Zeichen in ASCII.
data ist die Variable in der nachher alle Zeichen gespeichert werden. [ord(x) for
x in list(name)] besteht aus 2 Teilen. ord(x) und for x in name . Das erste
name=raw_input("Gib einen Kartennamen ein: ")
if len(name)>16:
name=name[:16] data = [ord(x) for x in list(name)]
print data
1 2 3 4 5
print len(„Das ist ein TEST“)
1
data = [ord(x) for x in name]
1
Python
Python
Python
→ cw42.de/rfid/8
RFID für Anfänger
Page 10
ist eine Python Funktion die wir auch so aufrufen können mit print ord("A") , das zweite die for-schleife, ist ähnlich wie die while-Schleife und lässt uns einzelne Elemente durchgehen. print ord(„A“) gibt uns den ASCII Wert, also eine Zahl aus, bei A ist das 97 Jetzt bleibt der kryptische Teil for x in . Das bedeutet dass er für jedes Element in der Variable name ord(x) ausführt. Das x wird dabei durch den Wert aus der Liste ersetzt. Für unser ['h', 'a', 'l', 'l', 'o'] wäre das also ord(„h“) ord(“a“) ord(„l“) usw. Ergibt zusammen: [104, 97, 108, 108, 111]
Jetzt haben wir schon erfolgreich die Buchstaben in ein Format umgewandelt welches wir auf der Karte speichern können, aber dafür müssen wir natürlich auch die Werte wirklich auf die Karte speichern.
Um nicht alles neuschreiben zu müssen benutztn wir als Grundlage die Write.py Datei. Dazu kopieren wir diese erstmal in eine neue Datei.
Jetzt können wir MyWrite.py bearbeiten und immer noch auf die alte Datei zugreifen. Diese öffnen wir jetzt mit Nano und fügen unter `ìmport signal* also in Zeile 8 unser Voheriges Programm ein, die Datei müssten bei euch dann so aussehen:
Dazu müssen wir noch Zeile 56 und 77 die neuen data Variablen auskommentieren, weil diese ansonsten unsere Variable die wir am Anfang definiert haben überschreiben. Das machen wir einfach in dem ihr vor diese Zeilen ein # schreibt. Wenn ihr nano als euren editor benutzt könntnt ihr mit Strg/Ctrl + w einen suchbegriff eingeben und dann mit Enter suchen, und nanao springt dann zu dieser
$ cp Write.py MyWrite.py
1
#!/usr/bin/env python # -*- coding: utf8 -*-
import RPi.GPIO as GPIO import MFRC522 import signal
name=raw_input("Gib einen Kartennamen ein: ")
if len(name)>16:
name=name[:16] data = [ord(x) for x in list(name)]
continue_reading = True
1 2 3 4 5 6 7 8
9 10 11 12 13
Bash
Python
→ cw42.de/rfid/9
RFID für Anfänger
Loading...