Python——串口通信0A0D出现换行问题

上一篇提到,最近在用PC通过串口从蓝牙模块读取Android端发来的数据

又遇到一个问题

先上代码

	while True:
		return_str = self.ser.readline()
        if return_str:
        	if return_str == b'connected':
                print("设备已经连接")
            elif return_str == b'disconnected':
                print('设备主动断开连接')
            else:
                var = str(binascii.b2a_hex(return_str))[2:-1].upper()
                print('接收到数据:%s' % var)

遇到的问题呢

手机端发送过来的是 AA0002000A00BB
结果这边读取了两行数据

	接收到数据:AA0002000A
	接收到数据:00BB

这就尴尬了,我需要用AABB识别指令,分两行肯定有问题

后来想起来 0A 0D 一个回车一个换行,这两个遇到了肯定会换行

我使用的readline局限性就来了,

后来经过查询应该使用

	while True:
		count = self.ser.inWaiting()
        if count > 0:
            return_str = self.ser.read(count)
        	if return_str == b'connected':
                print("设备已经连接")
            elif return_str == b'disconnected':
                print('设备主动断开连接')
            else:
                var = str(binascii.b2a_hex(return_str))[2:-1].upper()
                print('接收到数据:%s' % var)

这样的话inWaiting()获取了发过来的字符个数,再通过read读取,肯定就没有问题了吧。

结果还是分包,和刚才readline结果一样

查询了,原来inWaiting() 经常和 time.sleep() 在一起用

于是最后这样写:

	while True:
		time.sleep(0.1)
		count = self.ser.inWaiting()
        if count > 0:
            return_str = self.ser.read(count)
        	if return_str == b'connected':
                print("设备已经连接")
            elif return_str == b'disconnected':
                print('设备主动断开连接')
            else:
                var = str(binascii.b2a_hex(return_str))[2:-1].upper()
                print('接收到数据:%s' % var)

终于解决了问题,目前还在测试中,未出现什么换行的问题。

希望能帮助到遇到此类问题的开发者们。

你可能感兴趣的:(python)