0%

Python之Serial连接硬件串口

万万没想到,我有一天会搞一搞Python,唯一对Python的印象就是爬虫,爬取数据,但是以前我写过的爬数据也是用的Webmagic,真是第一次接触Python语言,老大要求,那搞就完事了,一起看看吧。

环境什么的就懒得说了,就官网下载,我是用的python3.9,然后一路next完事,注意有个地方能自动配置环境变量可以点一下,当然大佬想自己配环境也没什么毛病,软件的话,我开始用的Vscode,发现还是不熟练(以前学过一段时间的Vue,所以用过Vscode),最后还是用回IDEA,需要注意的是无论是Vscode还是IDEA都需要安装Python的插件。

1,新建Python项目,别搞错了,依赖这些都先不管,一路Next,起个名字,Finsh,
image-20210329152511652
2.新建包和文件,注意要建Python的,
image-20210329153006972
3.新建一个conf.py来放置一些通用配置,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 串口地址,Windows下为 COMX, Linux下为 /dev/ttyS1
serial_port = "COM3"

# 串口波特率
serial_baudrate = 9600

# 数据位
serial_bytesize = 8

# 停止位
serial_stopbits = 1

# 校验位
serial_parity = 'N'

# 操作超时时间, 单位秒
serial_timeout = 1

4.新建一个py文件编写程序主体,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import logging

import chardet
import modbus_tk
import serial
import time
import binascii
import config


# 超声波测距模块,模式三,接电阻120k,向端口主动发送’\x55‘数据,端口返回超声波测距数据
logger = logging.getLogger()


def main(): # 定义函数
ser = serial.Serial(config.serial_port, config.serial_baudrate, bytesize=config.serial_bytesize,
parity=config.serial_parity, stopbits=config.serial_stopbits, timeout=config.serial_timeout) # 初始化串口
print("串口详情参数:", ser)
logger.info("串口详情参数:", ser)
try:
if ser.isOpen():
print('串口已打开')
except Exception as e:
print('---异常---', e)

try:
result = ser.write(b'\x55') # 用write函数向串口发送数据
time.sleep(1) # 单位是s
distance = ser.read(4) # 读四个字节
print(type(distance))
print(distance)
distanceStr = distance.hex() # 字节转十六进制字符串
print(type(distanceStr))
print('distanceStr:', distanceStr)
target = distanceStr[2:6] # 截取高八位和低八位
print(target)
final_distance = int(target, 16) # 测试距离,单位为毫秒
print('超声波测距最终距离:', final_distance, '毫米')
count = ser.inWaiting() # 端口数据长度
print(count)
ser.close()
print('串口已关闭')
except Exception as e:
print('数据长度为0,请调整设备角度,异常类型为:', e) # 当测试距离为0的时候,会抛出异常


if __name__ == "__main__": # main启动函数
main()
5,总结,

有一说一,我发现Python的语法不难,而且也没要那么多严格的要求,使用起来比较简单,除了这个Demo,还对接了一下47k电阻的超声波测距,语音合成模块,无线通信模块等等,熟悉一门其他的语言的话,Python入门比较快,但是难的我还是不会,很多函数很多库确实都不知道,还是很开心有机会入门一下Python的。

注:现在基本都是Py3,所以如果要安装一些东西的话,也需要使用pip3命令进行安装

----------本文结束感谢您的阅读----------