python读取网口数据_用Python串行库处理从串行口读取的原始数据?

我不是一个Python程序员,而是一个电子电路设计师,但是这次我必须处理一些由微控制器通过RS232端口发送到Python脚本(由PHP脚本调用)的原始数据。

我花了好几个小时试图确定使用Python从串行(RS232)端口读取原始字节的最佳方法,我确实得到了结果——但我想请某人澄清我在研究过程中注意到的某些不一致之处,它们如下:

1:

我可以看到很多问类似问题的人被问到他们是在使用serial模块还是pySerial模块,以及他们是如何安装串行库的。我只能说我不知道我用的是哪个模块,因为这个模块是现成的。在我读过的某个地方serial和pySerial是同一件事,但我找不到是否是真的。我所知道的只是我正在使用带有Raspbian操作系统的Python 2.7.9。

2:

我读过从串行端口读取数据的方法有read()和readline(),但是在pySerial API docs中没有提到readline()方法。此外,我发现“要读取的字节数”参数可以传递给readline()方法和read()方法(工作方式相同,限制要读取的字节数),但我找不到要记录的参数。

3:

在搜索如何确定是否已读取RS232缓冲区中的所有数据时,我发现了以下代码:read_byte = ser.read()

while read_byte is not None:

read_byte = ser.read()

print '%x' % ord(read_byte)

但结果是:Traceback (most recent call last):

File "./testread.py", line 53, in

read_all()

File "./testread.py", line 32, in read_all

print '%x' % ord(read_byte)

TypeError: ord() expected a character, but string of length 0 found

从缓冲区读取最后一个字节时,我只能使用以下代码检测空缓冲区:while True:

c = rs232.read()

if len(c) == 0:

break

print int(c.encode("hex"), 16), " ",

所以我不确定那些对我不起作用的代码是不是针对某个序列库而不是我的。我的openinig端口代码是BTW:rs232 = serial.Serial(

port = '/dev/ttyUSB0',

baudrate = 2400,

parity = serial.PARITY_NONE,

stopbits = serial.STOPBITS_ONE,

bytesize = serial.EIGHTBITS,

timeout = 1

)

4:

我从μC接收的数据格式如下:0x16 0x02 0x0b 0xc9 ... 0x0d 0x0a

那就是some raw bytes + \r\n。由于“raw bytes”可以包含0x00,有人能确认在将字节读入Python字符串变量时这不是问题吗?据我所知,这应该很有效,但不是百分之百确定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值