2017-03-21 14 views
0

Ich habe einen einfachen aktiven RFID Reader gekauft, der über RS232 Serial Port mit meinem Raspberry Pi 3 unter Verwendung RS232 Shield verbunden ist. Ich möchte die Tag-ID mit dem Reader lesen. Ich schrieb einen Code, der die Daten von einem seriellen Gerät lesen sollte. Wenn ich es starte, wartet es nur auf etwas (keine Fehlermeldung). Wie lese ich die Tags mit diesem Reader mit Python-Code oder Shell-Skript?Konvertieren von Hex in (RFID) Tag ID

import serial       

ser = serial.Serial ("/dev/ttyAMA0")  
ser.baudrate = 9600      
data = ser.read(8)      
print (data)        

UPDATE

konnte ich den Tag lesen: ein.

ser = serial.Serial("/dev/ttyS0") 

als ttyAMA0 ist Bluetooth in Raspberry Pi 3 (dies funktioniert nur auf Python 3.4, wenn ich versuche Python 2.7 die Zeichenfolge ist leer). Mein Problem ist, dass ich ein Tag habe und die ID davon ist 02160323, aber wenn ich diesen Code ausführen, ist die Ausgabe: b'\xec, b'\xfe, b\xf6, b\xfc und ähnliche (nicht sicher, was diese Werte sind). Wie erkenne ich die tatsächliche ID?

UPDATE 2

konnte ich den Text in HEX umwandeln und sie dann in numerische umzuwandeln.

import serial 

ser = serial.Serial("dev/ttyS0", 9600) 
data = ser.read() 
hexo = data.encode('hex') 
i = ord(data) 

print(i) 
print(hexo) 

Die vollständige ID ist 8 ganze Zahlen lang, und die angegebene Ausgabe hat nicht viel mit der ID auf der Karte zu tun. Wie konvertiere ich es zur Anzeige 02160323?

UPDATE 3

Mein baundrate falsch war die ganze Zeit, sollte es 115200 sein. Jetzt erhalte ich den Wert: 4000021603237440 und als deutlich sichtbar habe ich ID drin. Jetzt muss ich den Daten schreiben geeigneten Algorithmus abrufen. Kann mir jemand dabei helfen?

+1

Die Daten auf dem RFID-Tag sind eher BCD oder ASCII als binär und enthalten typischerweise Paritäts- oder Prüfbits oder Wort (e) (z. B. BCD plus Parität für 5-Bit-Ziffern). Es könnte auch Start-und-Stopp-Sender geben. Anstatt zu raten, sollten Sie das tatsächliche Datenformat ermitteln, das von den zu lesenden Tags verwendet wird. IOW Ich bin nicht überzeugt, dass Sie tatsächlich die richtigen Daten vom Lesegerät über die serielle Schnittstelle lesen. Nur weil du * etwas * bekommst, sind es nicht die eigentlichen Daten. – sawdust

+0

@Sawdust Sie haben Recht, das war falsche Daten. Ich war zunächst glücklich, weil ich Kommunikation hatte und obwohl es die richtigen Daten ist, aber ich lag falsch, jetzt kann ich die ID innerhalb der empfangenen Daten sehen, es ist nur eine Frage des Schreibens eines Algorithmus, um 02160323 von dieser Nummer zu verlassen. – UZIERSKI

Antwort

0

Gelöst es mit 7 Bytes nicht 8 und dann der Hexadezimalwert wird jedes Mal unveränderlich, wenn Sie es ausführen. Wenn Sie nur für Ihre ID überprüfen mögen dann zuerst 4 Feins Zeichen ignorieren und den restlichen 8 (Python 2.x) auswählen

import serial 

while True: 
    ser = serial.Serial('/dev/ttyS0', 115200) 
    data = ser.read(7) 
    hexo = str(data.encode('hex')) 
    tagID = hexo[4:] 
    tagID = tagID[:8] 
    print(tagID) 
0

In Bezug auf Ihre Update-Nummer 3. Ich hatte vor kurzem etwas ähnliches für einen RFID zu tun Leser und das ganze Paket hatte eine Reihe von verschiedenen Informationen (Anzahl der Tags innerhalb der Reichweite des Readers, Anzahl der Anthänen, die ein bestimmtes Tag erreichen könnten, Informationen zum Status, IDD usw.)

, Jeder Scanner hat eine andere Reihenfolge, der erste Schritt besteht darin, diese Sequenz innerhalb der Dokumentation zu identifizieren.Wenn Sie das wissen, rate ich Ihnen dringend, die hexlify-Bibliothek zu verwenden, um eine hexadezimale Repräsentation zu erhalten n Ihres Rückmeldesignals. Das Arbeiten mit dem Dezimalsystem zum Lesen und Konfigurieren von Bytes ist wirklich nicht bequem.

Sie Um ein Beispiel zu geben, was meine Leser sendet, wenn er einen Tag lesen:

Byte 1: STX Byte 2: MSB Länge Byte 3: LSB Länge Byte 4: COM-ADR Byte 5 : angeforderten Daten Byte n-1 bis n: die CRC-Prüfwert für Sie

der interessante Inhalte im Byte befindet sich 6 0xB0 Byte 6 bis n-2 (eine konstante, die Sie sperren auf Sachen helfen) zu n-2 Bereich (ich sage nicht, dass Ihr Scanner so etwas zurückgibt, aber es gibt Ihnen eine Idee). Außerdem sind RFID IDD immer am besten in Hex-Wert dargestellt!