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单片机实现电子时钟+数字秒表设计

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

74HC138译码器的原理和使用

前言 译码器就是将每个输入的二进制代码译成对应的输出高低电平信号,和编码器互为逆过程。 百度百科 74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL&#xf