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

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

基于Arduino的显示测量环境数据设计

题目: 基于Arduino的显示测量环境数据设计 目录 基于Arduino的显示测量环境数据设计... 3 第一章 课题任务... 4 1.1课题任务... 4 1.2任务分工... 4 1.3设计条件... 4 第

串口不定长接收

一、保留接收区和开启接收的语句    uint8_t buffer[5];HAL_UART_Transmit_IT(&huart1,buffer,3); 二、写入开启空闲中断的语句    __HAL_UART_ENABLE_IT(&huart