ros rfid Python ros-serial接受RFID数据发送

RFID 串口读取 Python

#!/usr/bin/python
#--coding:utf-8--
#############################################################################
#请求读取才会发送数据,rfid_tag_id id_time 
#############################################################################

import rospy
from rfid_reader_demo.msg import rfid_tag_info#msgs自己定义
import serial #千万不要ipi2 install serial ,只需要pyserial和rosserial-python,不然会出错
#具体pip2 list | serial 去查看
import time

pub = rospy.Publisher('/rfid_tag_info', rfid_tag_info, queue_size=20)

def rfidFuc():
    g_ser_rfid.write([0xbb, 0x00, 0x27, 0x00, 0x03, 0x22, 0x27, 0x10 , 0x83, 0x7e])#多次轮训指令
    #我这里需要给个读取的命令,然后才有数据发送过来
    # g_ser_rfid.write([0xbb, 0x00, 0x22, 0x00, 0x00, 0x22, 0x7e])#单次轮训指令
    read = g_ser_rfid.read(512)#读取1024长度的字符串
    read_hex = read.encode('hex')
    if(len(read_hex)):
        # print(read_hex)
        return read_hex
    else:
        return 'error1231231123';
    
def hex_to_dec(hex_str):
        # 把16进制字符串转成带符号10进制
    if hex_str[0] in '0123456789':
        dec_data = int(hex_str, 16)
    else:
        # 负数算法
        width = 16  # 16进制数所占位数
        d = 'FF' + hex_str
        dec_data = int(d, 16)
        if dec_data > 2 ** (width - 1) - 1:
            dec_data = 2 ** width - dec_data
            dec_data = 0 - dec_data
    return str(dec_data)

def  idPub():
    rospy.loginfo("---开始阅读RFID标签---")
    rate = rospy.Rate(5)  # 5hz
    rfid_tag_msg = rfid_tag_info()
    while not rospy.is_shutdown(): 
        rfid_msgs = rfidFuc()
        length = len(rfid_msgs)
        # rospy.loginfo("len============%d",length)
        # print(rfid_msgs)
        #这里读取数据,根据你的数据类型来过滤
        #我的是bb开头,7e结尾,中间ff就是返回错误,所以也不要,剩下的就是正确的数据
        for i in range(length):
            if i+50<=length:
                if rfid_msgs[i]+rfid_msgs[i+1]=='bb' and rfid_msgs[i+4]+rfid_msgs[i+5]!="ff" and rfid_msgs[i+46]+rfid_msgs[i+47]=="7e":
                    # print(rfid_msgs)
                    rfid_tag_msg.tagEpc = rfid_msgs[i+16:i+40]
                    rfid_tag_msg.tagRssi = rfid_msgs[i+10]+rfid_msgs[i+11]
                    rfid_tag_msg.tagRssi = hex_to_dec(rfid_tag_msg.tagRssi)
                    rfid_tag_msg.keyId = rfid_msgs[i+36:i+40]
                    # print(rfid_tag_msg)
                    pub.publish(rfid_tag_msg)
            else:
                break   

        rate.sleep()
    g_ser_rfid.close()#被结束了的时候关闭串口


if __name__ == '__main__':

    input_port = "/dev/ttyUSB0"#ll /dev/ttyUSB*查看ubuntu18
    input_baudrate = "115200"#波特率
    print('====== defalt setting ======')
    print("port: " + input_port)
    print("baudrate: " + input_baudrate)
    print('=========================')
    g_ser_rfid = serial.Serial(input_port, input_baudrate, bytesize=8,
                               parity=serial.PARITY_EVEN, stopbits=1, timeout=0.07)

    time.sleep(0.2)

    try:
        rospy.init_node('rfid_tag_info_publisher', anonymous=True)
        idPub()
    except rospy.ROSInterruptException:
        pass

简单的程序却很好用

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值