首先這個自助寫碼是寫超高頻標簽的,所以rfid模塊是基於超高頻的r2000模塊。樹莓派與rfid模塊采用串口通信,樹莓派接條碼掃描頭采用usb通信,流程就是條碼掃描頭識別到條碼或二維碼之后觸發寫碼動作,實現自助寫碼。
一、樹莓派接usb條碼掃描頭掃碼識別
可以參考這篇資料:https://blog.csdn.net/afeiqiang/article/details/105033316
二、樹莓派接rfid模塊進行寫碼 這個需要看rfid模塊引腳圖以及引腳定義,比如:
串口需要接5個引腳,對應關系如下:
1).rfid的5v -> 樹莓派的5v
2).rfid的gnd -> 樹莓派的gnd
3).rfid的tx -> 樹莓派的rx
4).rfid的rx -> 樹莓派的tx
5).rfid的en(enable,使能引腳,開關) -> 樹莓派的無特殊功能的gpio引腳(比如BCM編碼模式下的12號引腳)
接線接好之后就可以在樹莓派中寫串口代碼控制rfid了,這個需要去看對應的rfid模塊的串行接口通訊協議文檔。 比如:
上位機指令數據包格式如上,那么在樹莓派中就可以用串口發命令了。
import serial ser = serial.Serial('/dev/ttyAMA0',115200,timeout=0.5) ser.isOpen() ser.write(bytearray.fromhex('A0030172EA')) ser.inWaiting() version = ser.read(7) ser.close() print(version)
A0030172EA,其中EA是校驗位,需要根據A0030172通過某種算法計算得到。那么看文檔校驗和算法如下:
C語言:
unsigned char CheckSum(unsigned char *uBuff, unsigned char uBuffLen) { unsigned char i,uSum=0; for(i=0;i<uBuffLen;i++) { uSum = uSum + uBuff[i]; } uSum = (~uSum) + 1; return uSum; }
翻譯成Python代碼:
def uchar_checksum(data, byteorder='little'): length = len(data) checksum = 0 for i in range(0, length): checksum += int.from_bytes(data[i:i+1], byteorder, signed=True) checksum = ((~checksum) + 1 ) & 0xFF return hex(checksum)
最后附上截圖:
參考資料:
1.https://www.cnblogs.com/YaoYing/p/12673221.html
2.https://blog.csdn.net/naruhina/article/details/105300566