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)

版权声明:本文为CSDN博主「zyam」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyamor/article/details/122389531

前言

笔者最近在做一个和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)

版权声明:本文为CSDN博主「zyam」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyamor/article/details/122389531

生成海报
点赞 0

zyam

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

【电子系统综合实践】--2021电赛F题智能送药小车

主要内容     设计并制作智能送药小车,模拟完成在医院药房与病房间药品的送取作业。院区结构示意如图1所示。院区走廊两侧的墙体由黑实线表示。走廊地面上画有居中的红实线,并放置标识病房号的黑色数字可移动纸张。药房和近端