Overlander Posted May 4, 2021 at 03:42 PM Posted May 4, 2021 at 03:42 PM Schönen Guten Tag alle mit einander Ich bin etwas am verzweifeln mit meinem NFC bricklet. Ich versuch Sensor daten auf einen NFC karten zu schreiben mit Hilfe von Python. Ich habe das Beispiel vom Shop als Basis genommen und versucht dieser zu verändern. Die Beispiele selbst funktionieren ich habe UID Localhost, etc habe ich alles angepasst auch auf die anderen Sensoren habe ich Zugang und kann die Daten in einer GUI nutzen. Aber sobald ich versuche die Daten zu verändern, die geschrieben werden sollen, geht krieg nur noch Fehlermeldungen. Könnte mir einer hier im Forum erklären wie ich ein einfaches Hello Word auf eine NFC Type2 Karten schreiben kann, steh echt auf der Leitung. Wenn ich so weit kommen kann ich den Code anpassen für die Sensordaten. Vielen dank im voraus Overlander Quote
rtrbt Posted May 5, 2021 at 11:40 AM Posted May 5, 2021 at 11:40 AM Hi, 19 hours ago, Overlander said: Aber sobald ich versuche die Daten zu verändern, die geschrieben werden sollen, geht krieg nur noch Fehlermeldungen. Zeige am besten mal, wie du das Beispiel verändert hast, sowas sieht man "am Objekt" am besten. Quote
Overlander Posted May 6, 2021 at 11:25 AM Author Posted May 6, 2021 at 11:25 AM Hi Schon mal vielen dank für die Hilfe:) Ich habe den entsprechenden Teil raus kopiert. HOST = "192.168.178.35" PORT = 4223 UIDGPS ="PuV" UIDnfc ="RSN" UIDBut ="QnZ" import tkinter as tk from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_gps_v2 import BrickletGPSV2 from tinkerforge.bricklet_nfc import BrickletNFC from tinkerforge.bricklet_dual_button_v2 import BrickletDualButtonV2 ipcon = IPConnection() # Create IP connection ipcon.connect(HOST, PORT) # Connect to brickd def buttom2(): BUT = BrickletDualButtonV2(UIDBut, ipcon) BUT1, BUT2 = BUT.get_button_state() gps = BrickletGPSV2(UIDGPS, ipcon) nfc = BrickletNFC(UIDnfc, ipcon) nfc.MODE_READER = 3 nfc.TAG_TYPE_TYPE2 = 2 if BUT2 == 0: latitude, ns, longitude, ew = gps.get_coordinates() strNFC = ("Latitude: " + str(latitude / 1000000.0) + " ° " + ns + " Longitude: " + str(longitude / 1000000.0) + " ° " + ew) lb15.config(text=strNFC)# Show data in GUI if nfc.READER_STATE_IDLE != 128: return nfc.reader_write_ndef(strNFC) lb15.after(1000, buttom2) Quote
rtrbt Posted May 6, 2021 at 12:50 PM Posted May 6, 2021 at 12:50 PM Hi, Da geht einiges durcheinander: Du musst die Konstanten wie MODE_READER usw nicht neu definieren, das hat keinen Effekt. Das NFC-Bricklet funktioniert wie ein Zustandsautomat. Du musst also die Zustandsübergänge auslösen bzw. abwarten. An der jeweiligen Funktion, ist dokumentiert, welche Zustände du durchlaufen musst. Vergleiche am besten mal die Dokumentation von z.B. reader_write_page und dem Write Read Type2-Beispiel. Folgender Abschnitt der Hardware-Doku erklärt das auch nochmal. Die Beispiele benutzen alle das state_changed-Callback als Signal, dass sich der Zustand des NFC-Bricklets geändert hat. Das würde ich dir auch empfehlen. Wenn deine Programmstruktur das nicht zulässt, kannst du auch (blockierend) den Zustand immer wieder abfragen, bis er sich ändert. (dann mit nfc.get_state() in einer Schleife) Du versuchst die GPS-Koordinaten als Text als NDEF-Record zu schreiben, NDEF-Nachrichten haben aber ein spezifisches Format, vermutlich musst du stattdessen eine Page direkt schreiben. Das wird bei Typ-2-Tags aber knapp, wenn ich unsere Hardware-Doku richtig verstehe, hast du pro Page 4 Byte Platz, du müsstest also für Breiten- und Längengrad (binär, nicht als Zeichenkette) jeweils eine Page verwenden und noch eine für die Vorzeichen von beidem. Quote
Overlander Posted May 6, 2021 at 01:17 PM Author Posted May 6, 2021 at 01:17 PM Hi Vielen danke für die schnelle Antwort :). Versuche mal den Code anzupassen. Der Speicherplatz müsste reichen. Ich habe vor der Bestellung vom NFC Bricklet mit Hilfe von NFC Karten (800Byte) und verschiedenen Handy Apps rum experimentiert. Es haben immer alle Daten auf die Karten gepasst. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.