python2 树莓派串口发送一串十六进制数据

前言

笔者最近在做一个和ROS机器人相关的项目,其中一部分要求实现的功能是用树莓派根据相关的指令同时去控制Uhand左右两只机械手的动作。实现这个功能的主要的坑在于:1)Uhand控制指令是一串十六进制的信号,我们因该如何通过串口去发送一连串中间只有以空格为间隔的十六进制数据呢?答案使用struct.pack模块,先将若干个十六进制指令进行打包,再对打包的数据进行发送。

准备工作

树莓派串口配置

具体配置过程可以参考这篇博客: 博客连接

树莓派串口通信

基本的树莓派串口通信过程可以参考下面这篇博客: 博客连接

树莓实现串口发送十六进制数据的代码

实现树莓派串口通信过程的代码如下所示。

# encoding: utf-8
"""
树莓派向机械手控制板发送控制信号
"""

import serial
import struct
import sys

reload(sys)
sys.setdefaultencoding('utf8')


class Tohand():
    def __init__(self):
       # 指令的映射
        self.handCommand = {u"love":(0x00, 0x01), u"hello":(0x01, 0x02), u"thank":(0x02, 0x03), 
              u"welcome":(0x04, 0x04), u"happy": (0x04, 0x05), u"dream": (0x05,0x06), u"forget": (0x06, 0x07)}
        self.ser = serial.Serial('/dev/ttyUSB0', 9600, timeout = 0.5)
        self.ser2 = serial.Serial('/dev/ttyUSB1', 9600, timeout = 0.5)

    
    # 向Uhand右手发送控制信息
    def sendToRight(self, words):
        print self.handCommand[words][1]
        # 对十六进制数据打包
        pack = struct.pack("BBBBBBB", 0x55, 0x55, 0x05, 0x06, self.handCommand[words][1], 0x01, 0x00)
        self.ser.write(pack)

    # 向Uhand左手发送控制信息
    def sendToLeft(self,words):
        pack = struct.pack("BBBBBBB", 0x55, 0x55, 0x05, 0x06, self.handCommand[words][1], 0x01, 0x00)
        self.ser2.write(pack)
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值