PN532 Keyboard

  • Hallo,


    hatte mal Zeit, ein Keyboard für den PN532 RFID-Reader zu basteln.


    Config:


    Code
    [keyboards]
    nfcreader = pn532
    [nfcreader_keyboard]
    device = tty:AMA0:pn532
    [nfcreader_InputPins]
    98DD1234 = call:**622
    [EVENT_OnKeyPressed_nfcreader.98DD1234]
    00 = call:**622

    Anstatt 98DD1234 natürlich die ID der eigenen Tags eintragen ;) (lassen sich mit dem Python-Schnipsel unten auslesen oder mit tagtool, sh. unten).


    Das keyboard benötigt noch libnfc und für python nfcpy.
    Installation in Stichworten:
    Installation libnfc nach learn.adafruit.com/adafruit-nf…pberry-pi/building-libnfc
    (link ändern - ist jetzt auf github)
    vor automake noch ein touch NEWS und touch README (sonst stürzt automake)
    pip installieren, falls nicht schon vorhanden
    dann danach vorgehen:
    nfcpy.org/latest/topics/get-started.html#installation


    Verkabelung:


    PN532 - Raspberry
    VCC - 5V
    GND - GND
    RX - TX (GPIO 14)
    TX - RX (GPIO 15)



    python tagtool.py --device tty:AMA0:pn532 -- funktioniert, tag gefunden


    srccode nach /usr/local/lib/python2.7/dist-packages/nfc kopieren (sudo)



    Zum Testen, ob die Installation von nfcpy erfolgreich war, folgenden code in ein file testnfc.py kopieren:

    dann mit python testnfc.py ausprobieren, ob eine ID ausgegeben wird, wenn man einen Tag an den Reader hält.


    Anschließend das angehängte Keyboard nach /usr/local/lib/python2.7/dist-packages/doorpi/keyboard/ entpacken.


    Was mir an der Sache noch überhaupt nicht gefällt, ist, daß es in der momentanen Version noch nicht möglich ist, zusätzlich zur ID einen User (für Logging, Weitergabe von Statusinfos an Hausautomatisierung etc) zu hinterlegen. Hier muß ich noch einiges an Arbeit reinstecken. Beim I2C-Keyboard habe ich das schon gemacht, aber momentan habe ich nicht sehr viel Zeit dafür...


    Weiters bin ich momentan ein wenig ratlos, warum das nur funktioniert, wenn auch ein OnKeyPressed-Event definiert wird (hier habe ich leider noch immer nicht ganz verstanden, wie diese Dinge in doorpi implementiert sind, ist für mich momentan aber eher Kosmetik)...


    Würde mich freuen, wenn jemand die Muße hat, das zu testen und Feedback zu geben...

  • Ich wollte den NFC Reader via SPI anbinden, scheitere jetzt jedoch daran das SPI (und I²C) in nfcpy nicht implementiert sind.


    Unfortunately there was still no time left to implement I2C or SPI communication into nfcpy. You'd need to use the UART.

    Ist Dir eine Alternative bekannt, die SPI Unterstützt?


    Ansonsten sollte das problemlos laufen :)

  • Hallo,


    nein, ehrlich gesagt ist mir keine Alternative bekannt. Ich hatte den rdm6300, aber nachdem einige im Board von dem pn532 geschrieben haben, bin ich neugierig geworden und hab mir den bestellt.


    Hast Du einen besonderen Grund, warum Du den unbedingt per SPI anbinden möchtest?

  • Genau, wegen der etwas höheren Geschwindigkeit.


    Die Idee dahinter war auch größere Datenmengen auslesen zu können um für die Zukunft gerüstet zu sein. Ein späterer Umbau auf SPI ist dann aber auch kein Hexenwerk.


    Aktuell nicht machbar, die Grundidee dahinter auslesen des Personalausweises vergleich des gespeicherten Fotos mit dem Videobild und wenn das passt dann Freigabe (sofern berechtigt)

  • Hello, Pula, thanks a lot for this topic!
    can you advise me please what should i change if i'd like to use RFID RC522? Because i have bought RC522 already.


    thank you in advance

  • Hi @pula,
    Dem PN532 ist es wahrscheinlich egal ob hier 5V oder 3,3V eingespeist werden, könnte nur ein bisschen weniger Reichweite haben. Das spart den Spannungsteiler oder Level-Shifter.


    Welchen srccode meinst Du denn? Den branch nfcpy? Dann mit dem ganzen Ordner?
    Sorry stehe heute ein bisschen auf dem Schlauch, war ne lange Nacht gestern ;)


    Danke



    --------------------------------------------------------------------------------------------------------------------------------------------


    Ich beantworte mir mal meine (doofe) Frage selbst.
    Klaro meinst Du den kompletten Ordner nfc.


    Aber noch etwas,
    wie beendet man das kleine python script testnfc.py aber so dass das Device dann nicht mehr belegt ist?


    Wenn ich mit Strg - z das script anhalte belegt es immernoch das device. Dann muss ich das device kurz von der Stromzufuhr trennen und einen reboot machen.


    ---------------------------------------------------------------------------------------------------------------------------------------------


    Noch etwas, bei mir gibt es anscheinend ein timing Problem. Wenn ich den Pi reboote und DoorPi möchte starten ist anscheinend der RFID reader noch nicht soweit und DoorPi beendet sich gleich wieder da das keyboard das device nicht findet. Getestet mit Pi3.
    Werde morgen nochmal genauer schauen, vieleicht auch ein Problem wegen meiner 3,3V Einspeisung des PN532.


    Aber ansonsten gute Arbeit pula :thumbup::thumbup: , danke.


  • Wenn ich mit Strg - z das script anhalte belegt es immernoch das device. Dann muss ich das device kurz von der Stromzufuhr trennen und einen reboot machen.

    Hi, öhm ctrl-z?? das suspendet das Skript nur, beendet es aber nicht. Zum Beenden bitte Ctrl-C nehmen ^^


    Zu dem Timing-Problem kann ich leider nichts sagen, bei mir (Pi 2) tritt das nicht auf. Kannst Du hier evtl einen trace schicken oder so? Evtl. könnte ich noch ein entsprechendes wait in das Keyboard einbauen?

  • eigenartig...
    da fällt mir nur ein: ctrl+z, dann ein ps aux und die pid heraussuchen und mit kill den Prozess beenden...
    an derartige probleme kann ich mich aber nicht erinnern bei meinen tests...

  • Das ist ja auch nicht schlimm, ist ja nur zum testen ob der tag ausgelesen wird.


    Ich bekomme aber immer mal wieder ein exception weil der resder nicht gefunden wurde.

    Ich denke das hier wirklich ein wait Befehl hier Abhilfe schaffen würde. Ich suche mir den Abschnitt mal raus und setze dann den wait Befehl.

  • Also ein sleep bringt hier nichts da es kein timing Problem ist.


    So wie ich das sehe greift hier etwas auf das RFID-Device zu und blockiert dies.

    Code
    pi@DoorPi:~ $ python /home/pi/libnfc/trunk/examples/tagtool.py --device tty:AMA0:pn532
    [nfc.clf] searching for reader on path tty:AMA0:pn532
    [main] no contactless reader available


    Erst wenn ich das Device kurz von der Stromzufuhr trenne ist das Device wieder verfügbar.

    Code
    pi@DoorPi:~ $ python /home/pi/libnfc/trunk/examples/tagtool.py --device tty:AMA0:pn532
    [nfc.clf] searching for reader on path tty:AMA0:pn532
    [nfc.clf] using PN532v1.6 at /dev/ttyAMA0
    ** waiting for a tag **

    Kann es sein dass das nfc keyboard nicht sauber beendet wird wenn DoorPi geschlossen wird?


    --------------------------------------------------------------------------------------------------------------------


    So wie ich das im Datenblatt herauslese gibt es nur einen Hardware reset und kein Software reset. Ansonsten hätte ich das device kurz resettet.


    Da müsstest Du mal bitte schauen pula da das ja leider alles python ist und ich nur Bahnhof verstehe.

  • Ich habe da etwas gefunden was das Problem erklären könnte.

    Zitat von Internet

    And I encountered the same issue as you: Accessing the PN532, through I2C, works well but *only* if the debug level 3 is defined.
    If I lower the debug level (to 1) , or switch it off completely, I get the same communication error. (and this drove me crazy !)
    After this error, the PN532 chip seems to be totally 'hanged' (it doesn't answer to I2C requests anymore, not even detected by the 'i2cdetect' tool). The only way to recover is to hard reset it (power it off / on).
    This problem seems related to some bad timings in the libnfc code, which are 'hidden' when trace logs are activated. When trace logs are active the communication with the PN532 is slowed down, which seems to 'fix' the problem.
    As a matter of example I replaced the trace logs with a short delay, and the code is working right again.

    Ich habe jetzt das device an 5V angeschlossen aber das Problem bleibt bestehen.


    Nochmal das Fehlerbild:


    Wenn DoorPi, das erste mal, gestartet wurde funktioniert der reader einwandfrei. Wenn ich DoorPi beende sei es per reboot oder per Kommandozeile und danach DoorPi wieder starte funktioniert der reader nicht mehr und logischerweise starte DoorPi dann auch nicht durch. Der reader funktioniert erst wieder wenn ich diesen kurz Spannungsfrei mache.


    Kann es sein dass das device wegen dem loop im Keyboard nicht mehr funktioniert da dieser loop nicht beendet sondern nur abgebrochen wird wenn man DoorPi beendet? Weißt Du was ich meine?
    Kann man das im script implementieren oder per Event in der doorpi.ini [AfterShutDown] ?

  • Kann mir das in den nächsten Tagen mal ansehen - mir ist ein derartiges Verhalten allerdings nicht aufgefallen bei meinen Tests.
    Ich denke auch nicht, daß der Beitrag unmittelbar damit zu tun hat, denn ich spreche das Ding nicht per I2C sondern per UART an. Bevor ich das implementiert hatte, habe ich irgendwo (hier im Forum?) gelesen, daß der PN532 mit I2C nicht wirklich stabil arbeitet....


    mach bitte mal wenn der reader blockiert ein

    Code
    ls -la /dev/ttyA*


    dann ein

    Code
    sudo lsof | grep tty


    und ein

    Code
    sudo fuser /dev/ttyAMA0


    und poste die Outputs hier. Vielleicht bringt uns das weiter....

  • Hi pula,
    danke für Deine Antwort. Hier nun die Ausgabe:

    Code
    pi@DoorPi:~ $ /home/pi/libnfc/utils/nfc-list
    /home/pi/libnfc/utils/.libs/lt-nfc-list uses libnfc 1.7.1
    error   libnfc.driver.pn532_uart        pn53x_check_communication error
    lt-nfc-list: ERROR: Unable to open NFC device: pn532_uart:/dev/ttyAMA0
    pi@DoorPi:~ $ python /home/pi/libnfc/trunk/examples/tagtool.py --device tty:AMA0                                                                                                                                                             :pn532
    [nfc.clf] searching for reader on path tty:AMA0:pn532
    [main] no contactless reader available
    pi@DoorPi:~ $ ls -la /dev/ttyA*
    crw-rw---- 1 root dialout 204, 64 Mai 18 11:20 /dev/ttyAMA0
    Code
    pi@DoorPi:~ $ ls -la /dev/ttyA*
    crw-rw---- 1 root dialout 204, 64 Mai 18 11:20 /dev/ttyAMA0



    Ich werde nochmal versuchen den Aufbau aufe einem Pi2 zu machen mit den selben Bedingungen.

  • Welches Board verwendet ihr?


    Ich konnte am RPi3 via SPI auslesen.. Nachdem ich es auf UART umgelötet habe kommt aus dem Teil rein gar nichts heraus. Wenn ich wieder zurück auf SPI löte funktioniert es einwandfrei (Geht auch nicht am RPi2 ...) Vermutlich ist das Board nix..


    UART funktioniert am RPi3

  • @HomeLab
    Hallo Heiko,
    mein Board hat die Farbe Rot und ist von "ELECHOUSE". Diese besitzt auch einen DIP Schalter für die Auswahl UART, I2C und SPI.


    @pula


    Die Info wegen dem instabilen I2C ist von mir das hatte ich mal gelesen. Ich habe aber auch die Passage bzw. Zitat und woher ich das hatte mit reingeschrieben.


    So, ich habe mit einem Pi2 jetzt eine neue Teststellung gebaut mit den gleichen Bedingungen wie vorher mit dem Pi3.
    Also hier funktioniert das Board einwandfrei ebenso Dein Keyboard.


    Nun stellt sich mir hier die Frage warum es beim Pi3 nicht 100%ig geht.


    Werde hier noch ein bisschen mit dem Pi3 und dem PN532 experimentieren.

  • @HomeLab: habe das gleiche Board wie Nea....


    Nea: Merkwürdig.... HomeLab hat hier https://www.doorpi.org/forum/t…ys0/?postID=2497#post2497
    eine Lösung geschrieben, wie UART auf dem RPI3 doch funktioniert - da ich aber keinen 3er habe, kann ich das nicht testen - vielleicht hilft Dir das aber weiter? Er hatte auch das Verhalten, daß ein Reader nur einmal funktioniert hat und dann erst wieder nach reboot...


    HomeLab weiß da garantiert mehr darüber - vorsicht, nicht daß Du Deinen RPI3 grillst....