使用python下的pyserial进行串口测试和设备调用

kelly的头像
kelly 发布于:周二, 09/27/2016 - 15:07 ,关键词:

硬件开发不可避免要与串口打交道,使用python下的pyserial可以使串口测试和设备调用的工作自动化。这里介绍pyserial的一些基础知识。

1、安装pyserial

linux上直接安装:

#python2
sudo pip install pyserial
#或者python3
sudo pip3 install pyserial

2、Bytes与string的转换

很多串口使用的数据是byte格式,需要进行转换。

使用str.decode()将ASCII转为String的Unicode。

使用bytes.encode(str,"ASCII")将Unicode转为ASCII的byte格式。

使用string.strip()去除后面的回车、换行等无效字符。

声明:s为字符串,rm为要删除的字符序列

s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符
s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符
s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

注意:

当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' ')

3、十六进制显示

十六进制显示的实质是把接收到的字符诸葛转换成其对应的ASCII码,然后将ASCII码值再转换成十六进制数显示出来,这样就可以显示特殊字符了。

在这里定义了一个函数,如hexShow(argv),代码如下:

import serial

def hexShow(argv):
result = ''
hLen = len(argv)
for i in xrange(hLen):
hvol = ord(argv[i])
hhex = '%02x'%hvol
result += hhex+' '
print 'hexShow:',result

t = serial.Serial('com12',9600)
print t.portstr
strInput = raw_input('enter some words:')
n = t.write(strInput)
print n
str = t.read(n)
print str
hexShow(str)

4、十六进制发送

十六进制发送实质是发送十六进制格式的字符串,如'\xaa','\x0b'。重点在于怎么样把一个字符串转换成十六进制的格式,有两个误区:

1)'\x'+'aa'是不可以,涉及到转义符反斜杠。

2)'\\x'+'aa'和r'\x'+'aa'也不可以,这样的打印结果虽然是\xaa,但赋给变量的值却是'\\xaa'。

这里用到decode函数:

list='aabbccddee'
hexer=list.decode("hex")
print hexer

需要注意一点,如果字符串list的长度为奇数,则decode会报错,可以按照实际情况,用字符串的切片操作,在字符串的开头或结尾加一个'0'。

假如在串口助手以十六进制发送字符串"abc",那么你在python中则这样操作“self.l_serial.write(”\x61\x62\x63") ”。

当然,还有另外一个方法:

strSerial = "abc"
strHex = binascii.b2a_hex(strSerial)
#print strHex
strhex = strHex.decode("hex")
#print strhex
self.l_serial.write(strhex);

同样可以达到相同目的。

文章来源:开源中国社区

围观 1430