首先这个自助写码是写超高频标签的,所以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