Nicht nur in Hollywood Filmen werden Fingerabdruck Leser immer häufiger gesehen. Solche Module sind oftmals in Heimüberwachungssystem eingebaut und dienen der einfachen aber sicheren Verifikation von Personen. Mit einem solchen Raspberry Pi Fingerprint Sensor kann man auch einige andere Projekte, wie gesicherten Schlössern, realisieren.
Einer der Vorteile ist, dass komplett auf Passwörter bzw. Zahlencodes verzichtet werden kann. Zwar ist dies weiterhin möglich, aber ohne doch um einiges bequemer. Um zu beginnen, geht es in diesem Tutorial um den Anschluss sowie das Auslesen, Speichern und Verifizieren von eingelesenen Fingerabdrücken.
Zubehör
Diese Sensoren wurden ursprünglich für den Arduino entwickelt und können über UART ausgelesen werden. Der Raspberry Pi hat zwar zwei Pins (Pin 8 / GPIO14 und Pin 10 / GPIO 15), allerdings arbeiten diese mit 3.3V. Da es verschiedene Fingerabdruck Sensoren gibt, die nicht alle mit 3.3V arbeiten, bietet sich ein USB UART Konverter an. Einige Modelle können sowohl 3.3V als auch 5V Spannung ausgeben. Diese eignen sich besonders (auch in Verbindung mit einem Arduino).
Folgendes wird also benötigt:
- Raspberry Pi Fingerprint Sensor (bis auf die Spannung unterscheiden sich die Modelle nicht viel)
- Serieller USB Konverter (mit 3.3V und 5V Anschluss)
- Female-Female Jumper Kabel (ebay), sofern beim USB Konverter nicht inklusive
- optional: Gehäuse (welches man sich aber auch selber 3d-drucken kann)
Beachte in der Artikelbeschreibung, welche Spannung dein Sensor benötigt. Meiner braucht 3.3V Eingangsspannung, allerdings wollen z.B. andere Modelle eine Spannung zw. 3.8V und 6V. Die Spannung ist gleich entscheidend für den Anschluss.
Anschluss des Raspberry Pi Fingerprint Sensor
Der USB Adapter ist beschriftet, die Kabel des Fingerprint Sensors hingegen nicht. Die Kabel haben allerdings eine eindeutige Farbe, mit Hilfe der wir sie identifizieren und an den USB Konverter anschließen können. Wir benötigen nur vier der Kabel (falls dein Fingerabdruckssensor mehr hat, kannst du die restlichen Farben ignorieren):
- Rot: Je nach akzeptierter Spannung des Sensors an 3.3V oder 5V.
- Weiß: RXD
- Grün: TXD
- Schwarz: GND
Falls dein Sensor eine höhere Spannung als 3.3V möchte (und der Maximalwert größer/gleich 5V ist), kannst du das rote Kabel getrost an den 5V Pin anschließen.
Um zu prüfen, ob die Verkabelung richtig ist und ob der Sensor erkannt wird, kannst du deine Konsole öffnen und vor und nach dem Anschließen folgendes ausführen:
ls /dev/ttyUSB*
Falls keine anderen seriellen Geräte über USB angeschlossen sind, sollte zunächst nichts angezeigt werden und danach /dev/ttyUSB0
. Bei abweichendem Namen (weil z.B. noch andere Geräte angeschlossen sind), musst du dies in den folgenden Schritten entsprechend anpassen.
Zweite Variante per GPIO’s
Sofern du einen Sensor mit 3.3V benötigter Eingangsspannung hast, so kannst du diesen auch ohne USB Konverter direkt an die GPIOs anschließen. Theoretisch geht dies auch bei 5V mit einem TTL Konverter (wie hier gezeigt), worauf ich in diesem Tutorial aber nicht näher eingehe. Ein Vorteil der USB Variante ist, dass man einfacher überprüfen kann, ob der Sensor erkannt wurde.
Installation der Raspberry Pi Fingerprint Bibliothek
Für einige Befehle, die für die Installation nötig sind, sind Root-Rechte erforderlich. Daher starten wir ein Terminal und tippen folgendes ein, was alle folgenden Befehle als Root ausführt:
sudo bash
Nun fügen wir die benötigten Paketquellen hinzu (der Autor hat übrigens auch noch einige andere spannende Projekte):
wget -O - http://apt.pm-codeworks.de/pm-codeworks.de.gpg | apt-key add - wget http://apt.pm-codeworks.de/pm-codeworks.list -P /etc/apt/sources.list.d/
Anschließend aktualisieren wir die verfügbaren Pakete und installieren die Python Bibliothek:
apt-get update apt-get install python-fingerprint --yes
Falls ein Fehler aufgetreten ist (insbesondere, dass nicht alle abhängigen Pakete installiert wurden), führe anschließend noch folgendes aus:
apt-get -f install
Um zurück in die normale Shell (unter dem Pi Nutzer) zu kommen, führe exit
aus.
Übrigens: Wer lieber eine C++ Bibliothek nutzen möchte, kann sich diese von Adafruit (ursprünglich für Arduino) ansehen. Der Code der Python Bibliothek ist auf Github verfügbar.
Testcode & Beispielszenario
Als erstes machen wir einen kleinen Test, um zu sehen, ob der Sensor erkannt und zugriffsbereit ist. Dazu führen wir eine der angehängten Beispieldateien aus:
python2 /usr/share/doc/python-fingerprint/examples/example_index.py
Insgesamt können bis zu 1000 verschiedene Fingerabdrücke gespeichert werden. Dabei kann ein Finger auch mehrfach z.B. in unterschiedlichen Positionen gespeichert werden, damit sie schneller/eindeutiger erkannt werden. Folgendes sollte erscheinen, womit du durch die Wahl einer Seite (0-3) die Positionen anzeigen lassen kannst, unter denen ein Abdruck gespeichert ist.
1 2 |
Currently stored templates: 0 Please enter the index page (0, 1, 2, 3) you want to see: |
Sofern die Fehlermeldung „Exception message: The fingerprint sensor port „/dev/ttyUSB0″ was not found!“ erscheint, so stimmt etwas mit der Verkabelung bzw. dem Sensor nicht. Überprüfe ihn erneut.
Speichern und auslesen
Anbei sind auch Beispieldateien zum Speichern eines neuen Abdrucks, Auslesen sowie löschen gespeicherter Fingerabdrücke. Fangen wir an und speichern zunächst einen Finger. Rufe folgendes auf:
python2 /usr/share/doc/python-fingerprint/examples/example_enroll.py
Leg nun deinen Finger auf die Glasfläche, warte auf die Anweisung im Terminal und entferne deinen Finger wieder, sobald es dort steht. Anschließend musst du deinen Finger noch ein zweites mal zur Verifikation auflegen und der Abdruck ist an der nächsten freien Stelle gespeichert.
Wir wollen nun auch sehen, ob unser Finger erkannt wird. Entferne deinen Finger also wieder vom Sensor und rufe folgendes Skript auf:
python2 /usr/share/doc/python-fingerprint/examples/example_search.py
Lege deinen Finger wieder darauf. Falls der Fingerabdruck am Raspberry Pi erkannt, so erscheint eine solche Nachricht:
Currently stored templates: 2 Waiting for finger... Found template at position #1 The accuracy score is: 63 SHA-2 hash of template: 3aa1b01149abf0a7ad0d7803eaba65c22ba084009700c3c7f5f4ecc38f020851
Hierbei wird zusätzlich auch noch ein Genauigkeitswert angegeben (umso höher, umso besser).
In diesem Verzeichnis sind übrigens noch weitere Skripte, mit denen du gespeicherte Abdrücke löschen kannst oder diese gar als Bild laden kannst. Mit ls /usr/share/docs/python-fingerprint/
kannst du dir alle anzeigen lassen.
Ich habe daraus mal ein kleines Video als Vorgeschmack erstellt:
Besteht weiteres Interesse an Projekten mit Fingerprint Lesern (Tresore, etc.)?
37 Kommentare
Super Video und tolle Anleitung, sehr gut beschrieben! Ich habe da nur eine allgemeine Frage, ist es möglich an den Kabeln des Sensors zu manipulieren, um trotzdem Zugang zu bekommen oder wird das erst an der Elektronik hinter dem Flachbandkabel geregelt? Ich frage nur, denn wie schon weiter oben erwähnt, sieht man ja auch in Hollywood, dass man die Elektronik ausbaut irgendwas kurzschließt und dann die Tür trotzdem öffnet …
Die Jungs in Hollywood schließen dann nicht die Elektronik vom PI kurz, sondern
die Verdrahtung des Türöffners… 🙂
Theoretisch ja. Allerdings müsstest du dafür erst einmal wissen, welche Daten akzeptiert werden (die Auswertung findet immer noch per Software statt) und außerdem mit entsprechender Taktung senden (sprich Zubehör nötig). Da ist es einfacher einen Plastikfinger mit Abdruck zu basteln 😀
Danke für die präzise Anleitung, allerdings finde ich nicht die angehängten? Python-Beispielscripte auf dieser Seite (https://tutorials-raspberrypi.de/raspberry-pi-fingerprint-sensor-authentifizierung-nutzen/).
Bin neu hier bei den Raspi-Tutorials und stelle mich vielleicht zu blöd an.
Die Beispielskripte werden bei Installation automatisch erstellt. Du findest sie im absoluten Verzeichnis
/usr/share/doc/python-fingerprint/examples/
Danke für den Hinweis.
Hallo,
kannst du bitte den Link zu der C++ Bibliothek hinzufügen wäre sehr nett.
Danke im Voraus!!!
Gruß David
https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library
Aber die ist doch für den Arduino, oder?
Ja, aber die Bibliothek Dateien solltest du auch auf dem Raspberry Pi nutzen können (keine Garantie, habe diese Bibliothek nicht getestet, aber im Normalfall ist es so).
Ok, vielen Dank!!
tolles tutorial, ich würde gerne einmal so etwas in kombination mit einem elektronischem schloss, rfid chips, etc sehen. Ich spiele mit dem gedanken eine meiner türen so zusichern
Hallo,
habe heute meinen Sensor bekommen. Der Sensor wird aber nicht erkannt. Habe es auch am Arduino UNO versucht. Das Gleiche. Bei 4 Leitungen kann man ja nicht viel verkehrt machen.
Sollte der Sensor beim Anlegen der Spannung bereits leuchten? Ich glaube der ist defekt.
Welche Spannung hast du genommen? Die ist wichtig, da der Sensor bei zu hoher Spannung kaputt gehen kann bzw. bei zu niedriger nicht funktioniert.
Laut Datenblatt verträgt er 3,8V-7V. Da hab ich ihn an 5V angeschlossen.
Gibt es eine Möglichkeit beim Einlesen des Fingers die Speicherposition vorzugeben? Beim Löschen lässt sich ja logischer Weise auch angeben welche Position gelöscht werden soll. Mit der Funktion hätte ich die Möglichkeit, bei erkannter ID z.B. 100.
Hmm da fehlt doch was…
…bei erkannter ID größer 100 eine andere Aktion ausführen zu lassen als bei kleiner 100.
Jetzt ist es komplett
Wo kann ich den Pfad der gespeicherten Abdrücke angeben?
Würde diese gerne auf einem Server speichern.
Hab leider nicht viel Ahnung von dem ganzen.
Hallo liebe Leute!
Habe mir dein tolles Projekt als Beispiel für die Schule genommen und sitz gerade davor.
Habe auch noch eine Codematrix dazugehängt um eine Türsteuerung mit Codepanel und Fingerprint zu realisieren.
Nun mein Problem:
Ich habe eine Schleife eingebaut, dass der Fingerprint ständig nach einem Finger sucht sprich immer leuchtet und immer bereit ist, beim richtigen Finger die Tür mit dem Relais zu öffnen.
Wenn man mehrere Male einen falschen Finger eingibt und er „No Match found!“ ausgibt, dann funktioniert er auch nach 10 mal einwandfrei.
Jedoch wenn man einen richtigen Finger eingibt und dieser dann das Relais öffnet dann wartet er 10 Sekunden. Wenn man dies drei bis viermal wiederholt dann bekomme ich die Fehlermeldung: „The received package does not begin with a valid header“. Diese Meldung kommt im Sekundentakt und hört nicht mehr auf.
Nachdem diese Fehlermeldung in einer Endlosschleife ausgeben wird, muss ich den ganzen RasbPi neustarten, damit der Fingerprint wieder geht.
Auch mit STRG + C habe ich ein GPIO.cleanup() erstellt, jedoch kommt danach eine Fehlermeldung „Fingerprint could not be found!“
Ich hoffe, jemand kann mir helfen!
Vielen lieben Dank und großes Danke an dieses tolle Projekt!
LG Andi
Ich habe folgendes Problem: ich habe den Sensor direkt (über GPIO) an einen Pi Zero W angeschlossen. Das Gerät wird zwar erkannt, in der Zeile „if ( f.verifyPassword() == False ):“ bleibt das Programm allerdings hängen und tut gar nichts mehr.
Hat irgendjemand eine Idee was ich tun kann?
Moin Moin,
ich habe das ganze mal nachgebaut und habe noch meine Schwierigkeiten das ganze im LCD Display dazustellen.
Ich habe es geschafft ein Relais zu schalten, wenn ich den korrekten Finger eingescannt habe.
Ziel soll es sein ein Garagentor zu öffnen.
Jedoch bin ich zu sehr neu in der Materie um das alles richtig zu programmieren.
Hast du zu deinem Video da oben noch einen Code, den man sich mal anschauen könnte um das ganze komplett umzusetzen, so wie es im Video dargestellt ist.
Zudem sind in der Video ja noch vom Fingerscanner Wires zum Display ?!
Welches Zweck erfüllen die?
LG
Sebastian
Dafür brauchst du nur den Code aus diesem Tutorial. Die Kabel im Video haben keine Funktion (mein Sensor hatte 8 Kabel, aber nur 4 wurden gebraucht, aber ich wollte sie nicht abschneiden).
LG, Felix
Wenn ich versuche die beiden scripte miteinander zu verschmelzen. Meckert das programm immer das dies nicht möglich ist an dieser stelle :
Import lcddriver
Wenn ich es in Python Editor alles aufführe geht es. Aber in einer py Datei findet er den lcddriver nicht mehr .
Vielleicht hat ja noch jemand das Problem .
Wahrscheinlich hast du das entsprechende Skript nicht im gleichen Verzeichnis?
einfach nach den wget Commands einmal sudo apt-get update ausführen und dann nochmal probieren. Wenn es dann immer noch nicht geht sudo apt-get -f install ausführen, dann sollte es gehen
Hallo,
ist eine wirklich gut Idee bzw. Anleitung. Dies führt mich zu der Überlegung, dieses Projekt als KFZ Sicherheitsstarter einzusetzen. Also PI (wie oben beschrieben) in KFZ einbauen (Stromversorgung per 3A Car Supply / Switch über Autobattarie). Jetzt ist die Frage, wie nach der Fingerauthentifizierung der Startmechanismus fürs Auto ausgelöst wird? Vielleicht ein gutes Add-On zum obigen Projekt?
MfG
Peter
Ich habe versucht, die oben dargestellte Software für den Fingerprint-Sensor
zu installieren. Leider gab es bei der Zeile:
apt-get install python-fingerprint –yes
die folgende Fehlermeldung: E: Paket python-fingerprint kann nicht gefunden werden.
Für eine kleine Hilfe wäre ich sehr dankbar.
Gruß
Wilfried
Hast du die Paketquellen hinzugefügt? Ansonsten über git ziehen und kompilieren.
Hallo mein Sensor funktioniert nicht richtig.
habe folgende Fehlermeldung:
The fingerprint sensor could not be initialized!
Exception message: The received packet do not begin with a valid header!
Hat irgendjemand eine Idee was ich tun kann?
Ich hab genau das gleiche Problem, hast du es gelöst bekommen?
I got an error when installing python-fingerprint „Can not locate package python-fingerprint“
Hallo, httest du auch eine Anleitung Fingerprint mit Stellmotor ansteuerung?
MFG Mario
Hallo, kann man den Sensor auch hinter einer (flachen, durchsichtigen) Glasscheibe betreiben?
Ich möchte den Sensor Outdoor betreiben und ungeschützt wird er das wohl nicht lange mitmachen.
Oder gibt es diese Sensoren auch Outdoorfähig?
Danke und Gruß,
Chris
Heyyy,
Habe es inzwischen gut hinbekommen 🙂 jedoch über die normalen GPIO Pins ohne den Converter ^^
Jetzt stell ich mir aber grade die Frage wie ich bei dem Sensor die LEDs intern abschalten kann und wieder aktivieren z.b. wenn Bewegung oder ein anderer Trigger ausgelöst wird. Ich finde dazu leider nichts und ich weiß auch nicht wie ich pyfingerprint umschreiben könnte um das zu realisieren.
Was ich als Alternative probiert habe ist ihn an einen GPIO Pin anzuschließen den ich einfach auf HIGH oder LOW setze leider liefert der GPIO Pin anscheinend nicht genug saft um den Fingerprint Sensor zu aktivieren.
Ich wäre sehr dankbar für Hilfe 🙂
Hey, ich brauche mal eine kleine Hilfe!
Ich hab den Fingerprint-Sensor wunderbar über USB zum laufen gebracht auf einen RP3b, jetzt wollte ich, weil ich noch mehr damit machen wollte, einen RP4 verwenden. Installiert wie zuvor, grundsätzlich geht es auch, aber der Scanner schaltet sich nach 2-3 Sekunden ab. Wenn man ganz schnell ist nach dem STart des LEse-Script, dann geht es, aber nur ein bissl zu langsam und es ist vorbei. Beim Pi3 läuft es wunderbar, selber scanner, einfach umgesteckt, alles gut.
Einziger Konfig-Unterschied, der aber nicht direkt damit zu tun hat, auf dem 4er hab ich für einen RFID-Scanner SPI aktiviert.. sonst nix. Hat da jemand ne Idee?
Ist es möglich diese Lösung in iobroker einzubinden?
Hallo,
könnte mir jemand helfen ich finde die angehängten Python Dateien nicht.
Vielen Dank!
Mit freundlichen Grüßen
Timo