zoukankan      html  css  js  c++  java
  • 树莓派+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

  • 相关阅读:
    悟透JavaScript(理解js面向对象)(转)
    spark相关问题
    hive常见问题以及解析
    visual studio code添加leetcode插件
    阿里云oss的使用
    Poi工具类快速生成Ecxel(升级版)
    linux实现增量拷贝数据,代替scp
    nginx实现均衡负载
    idea 程序包不存在 解决办法
    通过word文件模板生成word文件
  • 原文地址:https://www.cnblogs.com/guwei4037/p/14327514.html
Copyright © 2011-2022 走看看