#!/usr/bin/python3 import sys import serial import binascii import time uart_dev = '/dev/ttyUSB1' def checksum(s): ret = 0 for buf in binascii.a2b_hex(s): ret ^= buf return '%02X' % ret def seract(opcode, opdat): cmdlen = '%04X' % (int(len(opdat) / 2) + 3) cmd = 'AADD' + cmdlen + opcode + opdat + checksum(opcode + opdat) #print('cmd:' + cmd) buf_tx = binascii.a2b_hex(cmd) ser.write(buf_tx) buf_rx = ser.read() if buf_rx == '': return 'ERROR' time.sleep(0.1) buf_rx += ser.read(1000) res = binascii.b2a_hex(buf_rx).decode('utf-8').upper() #print('res:' + res) return res def rfid_wr(no,id): if no == 2: type = '02' elif no == 3: type = '03' else: type = '02' return seract(type + '0C','00' + id) # Lock(Off/On=0x00/0x01) + ID def rfid_rd(): return seract('010C','') def rfid_beep(time): return seract('0103','%02X' % time) def rfid_led(ctrl): if ctrl == 'off': opdat = '00' # Off elif ctrl == 'red': opdat = '01' # On(RED) elif ctrl == 'green': opdat = '02' # On(GREEN) elif ctrl == 'mix': opdat = '03' # On(Mix) else: opdat = '00' # Off return seract('0104',opdat) args = sys.argv argc = len(args) if (argc != 2): print('Usage: %s [-r] [ID]' % args[0]) print('-r : Read') print('ID = 0123456789') print(' ex. 1F000013ED') quit() id = args[1] if id != '-r' and len(id) != 10: print('Error:ID length is wrong') quit() ser = serial.Serial(uart_dev, 38400, timeout=0.1) rfid_led('green') if id == '-r': # --- Read --- ret = rfid_rd() sta = ret[6*2:6*2+2] rid = ret[7*2:12*2] if sta == '00': print(rid) rfid_beep(10) else: print("ERROR") rfid_beep(100) else: # --- Write --- ret = rfid_wr(2,id) ret = rfid_rd() sta = ret[6*2:6*2+2] rid = ret[7*2:12*2] if sta == '00' and id == rid: print("OK") rfid_beep(10) else: print("NG") ret = rfid_wr(3,id) ret = rfid_rd() sta = ret[6*2:6*2+2] rid = ret[7*2:12*2] if sta == '00' and id == rid: print("OK") rfid_beep(10) else: print("ERROR") rfid_beep(100) time.sleep(0.1) rfid_led('red') ser.close()
書き込み
kawasan@cyobi3:~/usr/src/python/RFID$ ./rfid_ctrl.py 1F00001308 OK読み出し
kawasan@cyobi3:~/usr/src/python/RFID$ ./rfid_ctrl.py -r 1F00001308