
Vorwort
Alle Schaltungen, Programme und Bauteile wurden vorher von uns geprüft.
Trotzdem können wir leider Fehler im Buch, den Schaltungen oder Programmen
nicht ausschließen. Bei Fragen oder Problemen gibt es unten die
Kontaktmöglichkeiten. Mehr Informationen findest du auch auf der Internetadresse
der Seitenzahl.
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 CEKennzeichen. 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

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 RFIDReader 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

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

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.

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

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
$ sudo python setup.py install
1
$ git clone
https://github.com/coding-world/MFRC522-python.git
1
2
Bash
Bash
Bash
Bash
Bash
Bash

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

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

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