发送步骤

  • 导入pyserial库——import serial 用于操作串口(详情见serial简介)
  • 初始化串口——serial.Serial
        portx = "/dev/ttyUSB0"    #端口(此处为Unix下的端口号,Windows下为portx = “com3”形式bps = 115200          #波特率timex = 0.5            #超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)MySerial = serial.Serial(portx, int(bps), timeout=timex) # 打开串口,并得到串口对象
  • 导入struct库——import struct 用于将浮点型数据转换为字符串,该字符串为字节流,浮点型数据为四字节流(详情见struct库简介)
  • 将浮点型数据转化为字节流——struct.pack
    分析
>>> import struct
>>> F =12.34
>>> B =struct.pack('f',F)       #‘f'表示以浮点型格式进行转化
>>> type(B)
<class 'bytes'>                 #bytes 类型用来表示一个字节串,记录内存中的原始数据
>>> print(B)
b'\xa3pEA'                        #默认以'UTF-8'的形式进行编码,对于非ASCII字符,打印输出的是十六进制形式,因此前面输出了个’\xa3'
>>> type(B[0])
<class 'int'>
>>> print(B[0])
164                             #164是16进制数\xa4的10进制形式,这说明浮点数据的低字节位存放在低地址处#十进制(12.34)的单精度浮点数值:414570A4,(01000001010001010111000010100100)

bytes数据类型简介:bytes数据类型简介
大小端模式:大小端模式简介

eg:电机转速浮点型数据转换为bytes数据类型

left_front = -float(speeds[0]);
right_front = float(speeds[1]);
left_rear = -float(speeds[2]);
right_rear = float(speeds[3]);
data_motor_fl = struct.pack('f', left_front) #低位字节放在最前面,总共四个字节
data_motor_fr = struct.pack('f', right_front)    #十进制(12.345)的单精度浮点数值:4145851E,(01000001010001011000010100011110)
data_motor_bl = struct.pack('f', left_rear)      #字节流顺序为"0x1E","0x85","0x45","0x41"
data_motor_br = struct.pack('f', right_rear) #小端模式存放数据
  • 向下位机发送数据
comma_head = 'H';     #首校验位
comma_trail = 'T';       #尾校验位
comma_Motor_FL = 0x01; #指令(左前方电机)
comma_Motor_FR = 0x02; #指令(右前方电机)
comma_Motor_BL = 0x03;
comma_Motor_BR = 0x04;
send_data_fl_motor = comma_head + comma_Motor_FL + data_motor_fl + comma_trail #首校验位+指令+数据+尾校验位
send_data_fr_motor = comma_head + comma_Motor_FR + data_motor_fr + comma_trail
send_data_bl_motor = comma_head + comma_Motor_BL + data_motor_bl + comma_trail
send_data_br_motor = comma_head + comma_Motor_BR + data_motor_br + comma_trail
MySerial.wtrite(send_data_fl_motor )
MySerial.wtrite(send_data_fl_motor )
MySerial.wtrite(send_data_fl_motor )
MySerial.wtrite(send_data_fl_motor )
  • 下位机接收数据(C语言环境)
typedef union
{uint_8 CharNum[4];float FloatNum;
}DataUnion;DataUnion UartData;void Uart_getchar (UART_Type *base, uint8_t *ch)//读串口寄存器数据函数,参数依次为串口号,读数变量地址void main(void)
{temp = (uint8_t*)malloc(1);order = (uint8_t*)malloc(1);while(1){Uart_getchar(UART1, temp);                   //读进首校验字符if(*temp == head)//当第一个字符是首校验字符时开始读进指令,否则跳过{Uart_getchar(UART1, order);             //读进指令字符Uart_getchar(UART1, UartData.CharNum);   //读进数据字符,上位机发送的第一个数据位是最低字节位,这里也让低地址位接收其低字节位Uart_getchar(UART1, UartData.CharNum+1);//单片机为小端模式Uart_getchar(UART1, UartData.CharNum+2);Uart_getchar(UART1, UartData.CharNum+3);Uart_getchar(UART1, temp);              //读进尾校验字符if(*temp == tail){switch(*order){case 0x01: //左前电机赋值Motor_FL = UartData.FloatNumbreak;case 0x02: //右前电机赋值Motor_FR = UartData.FloatNumbreak;case 0x03: //左后电机赋值Motor_BL = UartData.FloatNumbreak;case 0x04: //右后电机赋值Motor_BR = UartData.FloatNumbreak;}}}}
}void Uart_getchar (UART_Type *base, uint8_t *ch)   //uart接收一个字符
{while(!(base->S1 & UART_S1_RDRF_MASK));*ch =  base->D;
}

Python串口通信发送浮点型数据相关推荐

  1. FPGA自学笔记--串口通信发送多字节数据(verilog版)

    1.需求分析 关于uart协议实现这部分大家可以参考我上一篇的博客.<FPGA自学笔记--串口通信实现(vivado&verilog版)>.在上一篇博客中,主要实现了将单字节的数据 ...

  2. python串口通信的接收与发送_31.用python中的serial向串口发送和接收数据(案例一)...

    代码功能说明:1.向串口助手发送十六进制数据:0X01,0X03,0X00,0X00,0X00,0X01,0X84,0X0A: 2.用串口助手向代码发送数据,并将发送过来的数据保存在数据库中,按数据和 ...

  3. python串口通信_python 读取串口数据的示例

    python3 读取串口数据 demo 最近在写一个demo,zigbee串口连接树莓派,树莓派使用串口通信接受zigbee穿过来得值.其中我是用的树莓派是3代B+,zigbee每隔三秒钟从串口输出数 ...

  4. java串口发送16进制数据_MFC串口通信发送16进制数据的方法

    本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下 MFC串口通信会使用m_mscomm控件. 发送数据一般是在edit control 里输入自己想发送的内容,然 ...

  5. PyCharm pyqt5 python串口通信封装类SerialCommunication

    """ pyqt5串口通信文件SerialCommunication.py """ import binascii import os im ...

  6. PySerial:Python串口通信库的详细介绍、安装及使用方法攻略

    PySerial:Python串口通信库的详细介绍.安装及使用方法攻略 一.PySerial 简介 PySerial 是 Python 的一个串口通信库,支持不同平台下的串口操作.在 Python 应 ...

  7. 求android 中串口的发送接收数据代码

    RT,求高手帮忙! 就是 /dev/ttyS0 和/dev/ttyS1 两个设备的通信问题.. 同求~ 这个是不是需要串口驱动啊?最近正在搞这个串口通信的案子,头疼 同样也没有搞出来,老是报:不能扫描 ...

  8. delphi 串口通信发送_关于串口通信232、485、422和常见问题,就没见过能讲这么清楚的...

    先讲串口通信的一些基本概念,术语.如果对串口通信比较熟悉的,就当复习,如果哪里讲的不到位,欢迎及时指出. 这里并不对串口的编程作讲解,主要是从应用的角度去讲一讲.因为更多的时候,都是产品做好了,比如触 ...

  9. 51单片机串口通信发送以及接收代码详解1

    #include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...

最新文章

  1. 点击空白 键盘消失 (待续……)
  2. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用
  3. 人生致命的8个经典问题,你也常常犯傻
  4. ASP.NET Core 沉思录 - 环境的思考
  5. java实现人脸识别V3版本开发
  6. tableau三轴合并_举个栗子!Tableau技巧(34):同一张图表如何呈现多个度量
  7. 如何正确下载、安装Codeblocks?
  8. Hadoop 跨集群复制文件
  9. (转)CString工作原理和常见问题分析
  10. Kalibr 标定双目内外参数以及 IMU 外参数
  11. Intellij Idea下tomcat设置自动编译
  12. L298N芯片驱动电机
  13. 跨平台的音视频即时通讯SDK
  14. 董明珠接连直播背后:格力的线上焦虑
  15. 摄像头设计工程师面试技巧_系统设计面试准备的5个技巧
  16. Top100图神经网络论文大盘点
  17. 读《我的身体里早已落叶纷飞》
  18. Nuage:如何看待SD-WAN battle升级
  19. seaweedfs springboot 文件名乱码
  20. std::stable_sort 和 std::for_each 的用法!按结构中某一字段值大小排续!

热门文章

  1. C#服务端的微信小游戏——多人在线角色扮演(六)
  2. Flink 实时数仓伪分布虚拟机 (所有组件部署完成)
  3. Pygame详解(十一):Rect 对象
  4. uniapp引入支付宝原生扫码插件步骤详解
  5. Y430P拆机:安装固态硬盘+内存+重装系统梳理
  6. [附源码]Python计算机毕业设计Django的小区宠物管理系统
  7. “双月”数据集的生成
  8. tig git的好搭档
  9. 8583协议深入理解 1
  10. 科学计算法(机器学习)----决策树定义以相关概念