【PythonDjango后台实例 第一章】Python3.6.1+Pyserial 实现读取STM32蓝牙串口

来源:互联网 发布:认字卡片软件 编辑:程序博客网 时间:2024/05/16 11:55

在Baidu,Google寻找了一大堆帖子,最后索性自己看文档自己研究。

最后发现实现非常容易,得益于Python强大的串口库Pyserial可以直接调用串口


下位机说明:

采用STM32F103ZET6主控+温湿度+光照的采集硬件,通过蓝牙与PC连接,实际上蓝牙也是串口连接

本环境下的PC蓝牙接收串口为COM7


第一步:下载pyserial

本人是windows环境,所以其他环境请自行切换

1,windows按 + R 打开搜索

2,输入CMD进入终端

3. 输入pip install pyserial 下载最新版


第二步:打开你的python开发环境,本人是pycharm

1,新建pyhon项目

2,键入代码

# coding=gb18030import serial # 导入serial包import time # 导入time包s = serial.Serial('com7', 9600, timeout=2) # 打开串口,后面是串口配置while True: # 无限循环读取数据    localtime = time.asctime(time.localtime(time.time())) # time包里面调用本地时间的用法    n = s.readline() # serial包的用法 读取串口的一行数据    data_pre = str(n) # 把读取的数据转换成字符串    data = data_pre[2:-3] # 取数据的一部分放进data变量    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), data) # 打印数据和时间
3,最后实现


说明: 我最后的输出是 年+月+日  小时+分钟+秒  设备名+第一数据+第二数据+第三数据

最后粘贴一个pyserial库调用说明:

1、导入pyserial模块import serial
2、打开串行口// 打开串口0, 9600,8N1,连接超时0.5秒import serialser=serial.Serial("/dev/ttyUSB0",9600,timeout=0.5) #使用USB连接串行口ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5) #使用树莓派的GPIO口连接串行口ser=serial.Serial(1,9600,timeout=0.5) #winsows系统使用com1口连接串行口ser=serial.Serial("com1",9600,timeout=0.5) #winsows系统使用com1口连接串行口ser=serial.Serial("/dev/ttyS1",9600,timeout=0.5) #Linux系统使用com1口连接串行口print ser.name #打印设备名称print ser.port #打印设备名ser.open () #打开端口s = ser.read(10) #从端口读10个字节ser.write("hello") #向端口些数据ser.close() #关闭端口data = ser.read(20) #是读20个字符data = ser.readline() #是读一行,以/n结束,要是没有/n就一直读,阻塞。data = ser.readlines()和ser.xreadlines() #都需要设置超时时间ser.baudrate = 9600 #设置波特率ser.isOpen() #看看这个串口是否已经被打开
3、获得串行口状态串行口的属性:name:设备名字portstr:已废弃,用name代替port:读或者写端口baudrate:波特率bytesize:字节大小parity:校验位stopbits:停止位timeout:读超时设置writeTimeout:写超时xonxoff:软件流控rtscts:硬件流控dsrdtr:硬件流控interCharTimeout:字符间隔超时属性的使用方法:ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5)ser.open()printser.nameprint ser.portprint ser.baudrate #波特率print ser.bytesize #字节大小print ser.parity #校验位N-无校验,E-偶校验,O-奇校验print ser.stopbits #停止位print ser.timeout #读超时设置print ser.writeTimeout #写超时print ser.xonxoff #软件流控print ser.rtscts #硬件流控print ser.dsrdtr #硬件流控print ser.interCharTimeout #字符间隔超时ser.close()
4、设置串行口状态需要用的常量bytesize:FIVE BITS、SIXBITS、SEVENBITS、EIGHTBITSparity: PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACEstopbits: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO异常:ValueError:参数错误SerialException:找不到设备或不能配置ser.baudrate=9600 #设置波特率ser.bytesize=8 #字节大小ser.bytesize=serial.EiGHTBITS #8位数据位ser.parity=serial.PARITY_EVEN #偶校验ser.parity=serial.PARITY_NONE #无校验ser.parity=serial.PARITY_ODD #奇校验ser.stopbits=1 #停止位ser.timeout=0.5 #读超时设置ser.writeTimeout=0.5 #写超时ser.xonxoff #软件流控ser.rtscts #硬件流控ser.dsrdtr #硬件流控ser.interCharTimeout #字符间隔超时
5、Readline方法的使用是读一行,以/n结束,要是没有/n就一直读,阻塞。使用readline()时应该注意:打开串口时应该指定超时,否则如果串口没有收到新行,则会一直等待。如果没有超时,readline会报异常。
6、serial.Serial类——原生端口class serial.Serial{__init__(port=None, baudrate=9600, bytesize=EIGHTBITS,parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, writeTimeout=None, dsrdtr=False, interCharTimeout=None)#其中:# bytesize:FIVEBITS、SIXBITS、SEVENBITS、EIGHTBITS# parity: PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE# stopbits: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO#异常:#ValueError:参数错误#SerialException:找不到设备或不能配置open():打开串口close():立即关闭串口__del__():析构函数read(size=1):从串口读size个字节。如果指定超时,则可能在超时后返回较少的字节;如果没有指定超时,则会一直等到收完指定的字节数。write(data):发送data,并返回发送字节数。如果bytes和bytearray可用(python 2.6以上),则接受其作为参数;否则接受str作为参数。#异常:SerialTimeoutException——配置了写超时并发生超时时发生此异常。inWaiting():返回接收缓存中的字节数flush():等待所有数据写出。flushInput():丢弃接收缓存中的所有数据flushOutput():终止当前写操作,并丢弃发送缓存中的数据。sendBreadk(duration=0.25):发送BREAK条件,并于duration时间之后返回IDLEsetBreak(level=True):根据level设置break条件。setRTS(level=True)setDTR(level=True)getCTS()getDSR()getRI()getCD()#只读属性:name:设备名字portstr:已废弃,用name代替port:读或者写端口baudrate:波特率bytesize:字节大小parity:校验位stopbits:停止位timeout:读超时设置writeTimeout:写超时xonxoff:软件流控rtscts:硬件流控dsrdtr:硬件流控interCharTimeout:字符间隔超时#端口设置可以被读入字典,也可从字典加载设置:getSettingDict():返回当前串口设置的字典applySettingDict(d):应用字典到串口设置#对提供io库的系统(python 2.6或以上),Serial从io.RawIOBase派生。对其它系统,从FileLike派生。#异常:exception serial.SerialExceptionexception serial.SerialTimeoutException#常量:serial.VERSION:pyserial版本#模块函数和属性:serial.device(number)serial.serial_for_url(url, *args, **kwargs)serial.protocol_handler_packages()serial.to_bytes(sequence):接收一个字符串或整数列表sequence,返回bytes实例}


有地方不懂的就在评论区问,有错误请指出,大家共同进步!

因本文不太严谨,所以严禁转载!



阅读全文
0 0
原创粉丝点击