Loading

树莓派+rfid模块+条码扫描头实现自助写码

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

posted @ 2021-01-25 21:24  guwei4037  阅读(1303)  评论(0编辑  收藏  举报