2017-03-21 3 views
0

J'ai acheté un simple lecteur RFID actif qui est connecté via le port série RS232 à mon Raspberry Pi 3 en utilisant RS232 Shield. Je veux lire l'identifiant d'étiquette en utilisant le lecteur. J'ai écrit un morceau de code qui signifiait lire les données du périphérique série. Quand je l'exécute, j'attends juste quelque chose (pas de message d'erreur). Comment lire les tags en utilisant ce lecteur avec du code python ou un script shell?Convertir un code hexadécimal (RFID) ID

import serial       

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

MISE À JOUR

J'ai pu lire l'étiquette en utilisant:.

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

comme ttyAMA0 est Bluetooth Raspberry Pi 3 (ce que works sur python 3.4 lorsque je tente python 2.7 la chaîne est vide). Mon problème est que j'ai un tag et l'ID de 02160323 mais quand je cours ce code la sortie est: b'\xec, b'\xfe, b\xf6, b\xfc et semblable (pas sûr que ces valeurs sont). Comment reconnaître l'identifiant réel?

MISE À JOUR 2

j'ai pu convertir le texte en HEX et puis le convertir en valeurs numériques. L'ID complet est long de 8 entiers, et la sortie donnée n'a pas grand chose à voir avec l'ID sur la carte. Comment puis-je le convertir pour afficher 02160323?

MISE À JOUR 3

Mon baundrate a eu tort tout ce temps, il devrait être 115200. Maintenant, je reçois la valeur: 4000021603237440 et comme clairement visible j'ai l'ID en son sein. Maintenant, je dois récupérer l'algorithme d'écriture de données appropriées. Quelqu'un peut-il m'aider avec ça?

+1

Les données de l'étiquette RFID sont plus susceptibles d'être BCD ou ASCII que binaire et comprennent généralement des bits ou des mots de parité ou de vérification (par exemple BCD plus parité pour les chiffres de 5 bits). Il pourrait aussi y avoir des sentinelles de départ et d'arrêt. Au lieu de deviner, vous devriez obtenir le format de données réel qui est utilisé par le tag (s) que vous essayez de lire. Je ne suis pas convaincu que vous êtes en train de lire les données correctes du lecteur via le port série. Juste parce que vous obtenez * quelque chose * ne fait pas les données réelles. – sawdust

+0

@sawdust vous avez raison, c'était des données incorrectes. J'étais d'abord heureux parce que j'avais la communication et bien que ce soit les bonnes données mais j'avais tort, maintenant je peux voir l'ID dans les données reçues il est juste question d'écrire un algorithme pour laisser 02160323 de ce nombre. – UZIERSKI

Répondre

0

Résolu en utilisant 7 octets et non pas 8, puis la valeur hexadécimale sera immuable chaque fois que vous l'exécutez. Si vous voulez juste pour valider votre ID puis ignorer 4 premiers caractères de la chaîne et choisissez le reste 8. (Python 2.x)

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

En ce qui concerne votre numéro de mise à jour 3. J'ai eu récemment de faire quelque chose de similaire pour un RFID Le lecteur et l'ensemble du paquet contenaient un tas d'informations différentes (nombre d'étiquettes dans la portée du lecteur, nombre d'anthères pouvant atteindre une étiquette spécifique, informations relatives à l'état, IDD, etc.)

Cependant , chaque scanner a une séquence différente La première étape serait d'identifier cette séquence dans la documentation Une fois que vous le savez, je vous suggère fortement d'utiliser la bibliothèque hexlify pour obtenir une représentation hexadécimale. n de votre signal de retour. Travailler avec le système décimal pour la lecture et la configuration des octets n'est vraiment pas pratique.

Pour vous donner un exemple de ce que mon lecteur envoie quand il a lu un tag:

Octet 1: STX Octet 2: MSB longueur octet 3: LSB longueur octet 4: COM-ADR octet 5 : 0xB0 (une constante pour vous aider à verrouiller à des choses) octet 6 à n-2: données demandées octet n-1 à n: la valeur de contrôle CRC

le contenu intéressant pour vous est situé dans l'octet 6 à la gamme n-2 (je ne dis pas que votre scanner retourne quelque chose comme ça, mais ça vous donne une idée). En outre, les IDD RFID sont toujours mieux représentés en valeur hexadécimale!