python串口如何读取byte类型数据并访问

 更新时间:2023年09月08日 08:46:22   作者:千里飞刀客  
这篇文章主要介绍了python串口如何读取byte类型数据并访问方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python串口读取byte类型数据并访问

以读取SBT力传感器数据为例

#! usr/bin/env pyhton
# coding:utf-8
import serial
import time
import csv
import os
originaltime = 0.0
starttime = 0.0
endtime = 0.0
endtimebefore = 0.0
def savedis(force , csvfile):
    f = open(csvfile, 'a', encoding='utf-8', newline='')  # 'w'覆盖写 'a'追加写
    csv_writer = csv.writer(f)
    global endtime
    time_head = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(endtime))
    time_sec = (endtime - int(endtime)) * 1000
    timesample = "%s.%03d" % (time_head, time_sec)
    csv_writer.writerow([timesample, str(force)])
    # f.close()
def main():
    # 文件处理
    current_path = os.path.abspath(__file__)[:-len('sbt_test.py')]
    currenttime = time.localtime(time.time())
    csvfile = current_path + str(currenttime.tm_hour) + '-' + str(currenttime.tm_min) +'-'+ str(currenttime.tm_sec) + '.csv'
    f = open(csvfile, 'a', encoding='utf-8', newline='')  # 'w'覆盖写 'a'追加写
    csv_writer = csv.writer(f)
    csv_writer.writerow(['timestamp(ms)', 'display(N)'])
    f.close()
    # 串口声明
    port = 'COM7' #根据设备管理器的端口号更改
    baud = 115200
    timex = 0.02  # 超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
    global starttime
    global endtime
    global endtimebefore
    sbtforce = serial.Serial(port, baud, timeout=timex) #此行不能放在循环内,因为耗时长
    sendmessage = sbtforce.write(bytes.fromhex('FE010701000001CFFCCCFF'))
    offset = 20  # 收到的数据跟放大器上的示数不对应,需要减去一个偏差值,根据示数调整
    while True:
        endtime = time.time()
        startdata = sbtforce.read(1)
        if startdata == b'\xFE':
            buffer = sbtforce.read(10)
            if (buffer[9] == 255):
                print("buffer=",buffer)
                force = buffer[2:6]
                print('force = ',force)
                force = force[0] << 24 | force[1] << 16 | force[2] << 8 | force[3]
                if force > 100000000:
                    force = force - 2**32 - offset
                if force > 0:
                    force -= offset
                force = force / 100.0
                print('压力值:', force)
                savedis(force, csvfile)
if __name__ == '__main__':
    main()

声明串口对象:

sbtforce = serial.Serial(port, baud, timeout=timex)

然后从串口读取字节,比如一次读取10个字节:

data = sbtforce.read(10)

然后,假如要访问data的第一个字节,如果直接写

data[0]

那么返回的将是第一个字节对应的整形,也就是说type(data[0])=int

那么如何拿到byte类型呢,可以这样做:

data[0:1]

这样返回的将会是字节类型的第一个字节的数据。

python串口使用问题

python串口数据

python串口收发的都是bytes类型数据,即使是字符串,也会编码器后进行传输

设置串口,并打开

ser1 = serial.Serial(port='/dev/ttyUSB1', baudrate=115200, bytesize=8, parity='N', stopbits=1)

这样创建一个串口对象后,串口直接自动打开

python中发送数据使用write()函数

 s.write(data) #不指明编码方式,直接发送
 s.write(data.encode('utf-8'))  # utf-8 编码发送
 s.write(data.encode('hex'))  # 转成16进制后发送

python中接收数据使用read_all()和read(len)函数

  • read_all()会读取缓冲区内的数据
  • read(len)读取len长的数据

python2和python3之间的区别

bytes是Python 3中特有的,Python 2 里不区分bytes和str。bytes是byte的序列,而str是unicode的序列。

python2中:

str 使用encode()方法转化为

bytesbytes通过decode()转化为str

在python3中:常见容易忽略的错误

串口接收到数据很乱,更预计差别很大,首先检查波特率对不对

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • YOLOv5车牌识别实战教程(四)模型优化与部署

    YOLOv5车牌识别实战教程(四)模型优化与部署

    这篇文章主要介绍了YOLOv5车牌识别实战教程(四)模型优化与部署,在这个教程中,我们将一步步教你如何使用YOLOv5进行车牌识别,帮助你快速掌握YOLOv5车牌识别技能,需要的朋友可以参考下
    2023-04-04
  • python画图——实现在图上标注上具体数值的方法

    python画图——实现在图上标注上具体数值的方法

    今天小编就为大家分享一篇python画图——实现在图上标注上具体数值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 使用python无账号无限制获取企查查信息的实例代码

    使用python无账号无限制获取企查查信息的实例代码

    这篇文章主要介绍了使用python无账号无限制获取企查查信息的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 使用django-suit为django 1.7 admin后台添加模板

    使用django-suit为django 1.7 admin后台添加模板

    前面我们介绍了Django-grappelli给admin添加模板,可是使用中发现inline有点问题,所以就换了今天我们要谈的Django-suit,貌似要稍微好一些
    2014-11-11
  • python selenium 无界面浏览器的实现

    python selenium 无界面浏览器的实现

    有时我们不想让浏览器窗口跳出来,而是想在后台进行操作,这就需要用到无界面浏览器,本文主要介绍了python selenium 无界面浏览器的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • python利用线程生成不同尺寸的缩略图实例详解

    python利用线程生成不同尺寸的缩略图实例详解

    这篇文章主要介绍了python利用线程生成不同尺寸的缩略图,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • python判断列表字典字符串元组是否存在某个值或者空值(多种方法)

    python判断列表字典字符串元组是否存在某个值或者空值(多种方法)

    这篇文章主要介绍了python判断列表字典字符串元组是否存在某个值或者空值,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-02-02
  • python中的字典详细介绍

    python中的字典详细介绍

    这篇文章主要介绍了python中的字典详细介绍,字典是Python中最强大的数据类型之一,本文讲解了什么是字典、创建字典和给字典赋值 、字典的基本操作、映射类型操作符、映射相关的函数、字典的方法等内容,需要的朋友可以参考下
    2014-09-09
  • 使用pytorch和torchtext进行文本分类的实例

    使用pytorch和torchtext进行文本分类的实例

    今天小编就为大家分享一篇使用pytorch和torchtext进行文本分类的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Pycharm使用Conda激活环境失败的问题解决

    Pycharm使用Conda激活环境失败的问题解决

    本文主要介绍了Pycharm使用Conda激活环境失败的问题解决,文中主要介绍了两种问题的解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09

最新评论