1.Python串口

1).serial

(1)串口发送16进制

    def data_send(self):if self.ser.isOpen():# 数据帧input_s = '68 AA AA AA AA AA AA 68 11 04 34 37 33 37 B6 16'# 简单的发送16进制字符# ser.write(b'\xFE\xFE\xFE')# 但是上面的方法不够优雅,需要自己添加\x,非常麻烦,于是使用下面这个方法input_s = bytes.fromhex(input_s)if input_s != "":# ascii发送# input_s = (input_s + b'FF')num = self.ser.write(input_s)self.data_num_send += numelse:pass
想要发送字符串就直接字符串发送就行

2).struct

用来将数据进行转换

按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;
按照指定格式将字节流转换为Python指定的数据类型;
处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件;
处理c语言中的结构体;

struct模块中的函数
函数  return返回的数据类型   explainpack(fmt,v1,v2…) string  按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回.pack_into(fmt,buffer,offset,v1,v2…)    None    按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块)unpack(fmt,v1,v2…..)  tuple   按照给定的格式(fmt)解析字节流,并返回解析结果pack_from(fmt,buffer,offset)   tuple   按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果calcsize(fmt)    size of fmt 计算给定的格式(fmt)占用多少字节的内存,注意对齐方式

当打包或者解包的时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类型,除此之外,还有用于控制字节顺序、大小和对齐方式的特殊字符.

发送字符串

mSerial.send_data(struct.pack('5s', 'hello'.encode('utf-8')))
#必须要转换成utf-8才能打包成二进制

(1)对齐方式

为了同c中的结构体交换数据,还要考虑c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统,故而struct根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下

(2)格式符

_Bool在C99中定义,如果没有这个类型,则将这个类型视为char,一个字节;
q和Q只适用于64位机器;
每个格式前可以有一个数字,表示这个类型的个数,如s格式表示一定长度的字符串,4s表示长度为4的字符串;4i表示四个int;
P用来转换一个指针,其长度和计算机相关;
f和d的长度和计算机相关;
进制转化:

获取用户输入十进制数

dec = int(input("输入数字:"))print("十进制数为:", dec)
print("转换为二进制为:", bin(dec))
print("转换为八进制为:", oct(dec))
print("转换为十六进制为:", hex(dec))
16进制转10进制: int('0x10', 16)  ==>  16

Python没有专门处理字节的数据类型。但由于b'str’可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用structunion来处理字节,以及字节和intfloat的转换。

好在Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换。

structpack函数把任意数据类型变成bytes

import struct
struct.pack('>I', 10240099)
b'\x00\x9c@c'
pack的第一个参数是处理指令,'>I'的意思是:
表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。

后面的参数个数要和处理指令一致。

unpack把bytes变成相应的数据类型:

struct.unpack('>IH', b'\xf0\xf0\xf0\xf0\x80\x80')
(4042322160, 32896)
根据>IH的说明,后面的bytes依次变为I:4字节无符号整数和H:2字节无符号整数。

所以,尽管Python不适合编写底层操作字节流的代码,但在对性能要求不高的地方,利用struct就方便多了。

log = 0class SerialPort:def __init__(self, port, buand):self.serial_port = serial.Serial(port,buand,bytesize=8)if not self.serial_port.isOpen():self.serial_port.open()print(self.serial_port.is_open)  # 检验串口是否打开def port_open(self):if not self.serial_port.isOpen():self.serial_port.open()def port_close(self):self.serial_port.close()def send_data(self, send_datas):self.serial_port.write(send_datas)def read_data(self, byte_num):data = self.serial_port.read(byte_num)return data#初始化串口类
serialPort = 'COM3'  # 串口
baudRate = 115200  # 波特率
mSerial = SerialPort(serialPort, baudRate)while (1):#读取数据s=mSerial.read_data(5)#转化为字符串s = struct.unpack('>ccccc', s)[4]# mSerial.send_data(struct.pack('5s', 'hello'.encode('utf-8')))log += 1  # 传输次数记录+1print(log, s)

Python串口操作相关推荐

  1. Python串口操作纸币器1

    Python串口操作纸币器1 公司需要纸币器开发,参考纸币器文档和网上的一篇vb版本,代码如下: # -*- coding:utf-8 -*- # Author: Pete Yim<xpHook ...

  2. python串口操作_Python Serial串口基本操作(收发数据)

    1.需要模块以及测试工具 模块名:pyserial 使用命令下载:python -m pip install pyserial 串口调试工具:sscom5.13.1.exe 2.导入模块 import ...

  3. 神奇的python(六)之python的串口操作(pyserial)

    简介:最近项目突然要使用python串口操作,这不,查资料,翻文档,是时候写一份串口操作的简要用法,以后有时间可以使用pyqt再写个界面,弄个串口调试终端. (1) 安装pyserial库 pip i ...

  4. python 串口上位机_如何使用Python开发串口通讯上位机(二)

    黑色的dos窗口对于大部分来说,页面极为不友好,且操作不方便,因此本篇主要讲讲如何结合QtDesigner创建一个UI并初步与串口Api链接.1 QtDesigner进行上位机页面设计 Python下 ...

  5. android 串口一直打开_实例 | 使用Python串口实时显示数据并绘图

    今天为大家分享一篇使用Python串口实时显示数据并绘图的例子,具有很好的参考价值,希望对大家有所帮助. 一.安装pyserial以及基本用法 使用pyserial进行串口传输,在cmd下输入命令pi ...

  6. python串口数据绘图_使用Python串口实时显示数据并绘图的例子

    使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 "'E:\Anaconda3\Sc ...

  7. python串口控制8通道继电器方法笔记

    python串口控制8通道继电器方法笔记 保存当前文件为RelayControl.py,在其他py文件引用时,使用from RelayControl import relay 格式导入 调用时,使用 ...

  8. python中texttable库显示实时数据_用Python串口实时显示数据并绘图pyqtgraph

    用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...

  9. 用Python串口实时显示数据并绘图pyqtgraph(详细教程)

    用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...

最新文章

  1. python 如何获取当前系统的时间
  2. 微信小程序组件 日历
  3. Java多线程面试题通关手册!
  4. 现在的编译器还需要手动展开循环吗_一例 Go 编译器代码优化 bug 定位和修复解析...
  5. 关于Mysql DATE_FORMAT() 日期格式
  6. centos7 安装git_Centos7.4 Yapi 服务搭建
  7. 彻底理解内存泄漏,memory leak
  8. 狼人杀c语言,微赛狼人杀正式版C位出道
  9. 2020广西师范大学计算机学院调剂,2020广西师范大学计算机视觉与应用接收考研调剂...
  10. 150家通用经销商决定退出凯迪拉克品牌 因不愿投资于销售电动车
  11. 盐城有哪些中专计算机学校,盐城有什么中专学校
  12. Win7小工具“概念时钟”,v2.1.8.6
  13. 安装系统出现Winload.exe错误0xc000000e解决方法
  14. java面试题(仅供参考)
  15. ipad能不能装python_ipad能下载python么
  16. MDK Keil编译程序出现..\source\main.c(118): warning: #69-D: integer conversion resulted in truncation问题
  17. flutter packages get 慢 解决方案
  18. php 微信支付 回调处理,TP微信支付(回调处理)
  19. 漫画 | 打死我也不学编译了!
  20. MySQL_启动_Windows

热门文章

  1. 有没有一个可以录音的便签?说话可以变成文字形式的app
  2. 浅谈LCD、OLED、TFT取模及其程序开发的算法取舍
  3. 安卓程序如何控制闪光灯开关
  4. Linux C线程的创建和使用
  5. 【STM32】基于STM32CubeIDE SPI+DMA驱动WS2812
  6. 关于Tokens你需要知道的10件事
  7. 考取CISP-DSG证书的必要性!
  8. ClickOnce是什么?如何使用?
  9. pwnable.kr之Toddler‘s Bottle前八题知识点记录
  10. 圆方树学习记录及例题