Python学习之道-串口编程&TEMI880温箱控制
PS:自己学习Python已经断断续续有1年了,之前没有写博客的习惯,前段日子去图书馆借阅了《程序员的自我修养》,觉得应该养成写博客的习惯,将自己学习的过程记录下来,方便自己也方便大家,记录自己学习历程和思路,后面回顾也方便易上手。最主要的是方面自己查找 哈哈
从大一开始接触单片机开发,串口使用了8年了,之前做上位机开发时大多使用MFC/C#/LabVIEW等,比较杂。现在学习用Python进行串口编程,相信效率会高不少。
一、环境准备
参照网上的教程,消息吸收。
安装pyserial库
https://github.com/pyserial/pyserial
pip install pyserial
PS D:\python> pip install pyserial
Collecting pyserial
Downloading https://files.pythonhosted.org/packages/0d/e4/2a744dd9e3be04a0c0907414e2a01a7c88bb3915cbe3c8cc06e209f59c30/pyserial-3.4-py2.py3-none-any.whl (193kB)
100% |████████████████████████████████| 194kB 613kB/s
Installing collected packages: pyserial
Successfully installed pyserial-3.4
PS D:\python>
pyserial库常用函数介绍
serial.Serial(portx, bps, timeout = waitTime)
serial = serial.Serial(‘COM1’, 115200) 打开COM1并设置波特率为115200,COM1只适用于Windows
serial = serial.Serial(‘/dev/ttyS0’, 115200) 打开/dev/ttyS0并设置波特率为115200, 只适用于Linux
print serial .portstr 能看到第一个串口的标识
serial .write(“hello”) 往串口里面写数据
serial .close() 关闭serial 表示的串口
serial .open() 打开串口
data = serial .read(num) 读num个字符
data = serial .readline() 读一行数据,以/n结束,要是没有/n就一直读,阻塞。
serial .baudrate = 9600 设置波特率
print serial 可查看当前串口的状态信息
serial .isOpen() 当前串口是否已经打开
serial.inWaiting() 判断当前接收的数据
serial.flushInput() 清除输入缓冲区数据
serial.flushOutput() 中止当前输出并清除输出缓冲区数据
参考例程
#!/usr/bin/python
# coding=UTF-8
import serial
###################################################
#
# 功 能: 将接收到的数据已hex显示
# 参 数: 串口接受到的数据
# 返 回: 转换后的数据
#
###################################################
def hexshow(data):
hex_data = ''
hLen = len(data)
for i in xrange(hLen):
hvol = ord(data[i])
hhex = '%02x' % hvol
hex_data += hhex+' '
print 'hexshow:', hex_data
###################################################
#
# 功 能: 将需要发送的字符串以hex形式发送
# 参 数: 待发送的数据
# 返 回: 转换后的数据
#
###################################################
def hexsend(string_data=''):
hex_data = string_data.decode("hex")
return hex_data
if __name__ == '__main__':
serial = serial.Serial('/dev/ttyS0', 115200)
print serial
if serial.isOpen():
print("open success")
else:
print("open failed")
try:
while True:
count = serial.inWaiting()
if count > 0:
data = serial.read(count)
if data != b'&#