有用过 pyserial 的吗

2016-01-02 19:33:12 +08:00
 honmaple
请教如何 read 数据,inWaiting 总是返回 0,不知道数据是没有写进去还是没有读出来
from serial import Serial

ser = Serial('/dev/ttyUSB0',9600,timeout=1)
data = b'hello'
for i in range(1000):
n = ser.write(data)
print(ser.inWaiting())
read = ser.read(n)
data += data
print(read)
ser.inWaiting()输出一直是零, read 输出一直是 b''
只有在按下单片机开关的瞬间 read 输出为 b'\x00'
2324 次点击
所在节点    Python
15 条回复
izoabr
2016-01-02 19:47:12 +08:00
你是用串口跟单片机通讯是么?
波特率和奇偶校验设置对么?

还有要确认一下单片机的串口是不是 TTL 电平?如果是 TTL 电平的话你可能要用转换器转一下。

如果都确认没问题,那你就先别用 pyserial 了,用 minicom 之类的先测试一下。

甚至你可以试试用 cat /dev/ttyUSB0 ,看对端有没有数据过来。

如果 minimum 没问题,你再回来检查这个 pyserial 写入数据的时候是不是跟对方协商了结束符,就是对方在等待你输入结束的约定符号,只要没有这个符号,就会一直处于接受状态。比如很常见的用换行符作为结束开始收发切换。

缩进问题,没法判断你的 py 的执行逻辑, read 是在循环内还是循环外啊?
mrsatangel
2016-01-02 19:52:02 +08:00
如果你在搞串口设备,经常要和硬件打交道,建议某宝随便找个 USB 逻辑分析仪比如这个 http://b.mashort.cn/h.hwt56?sm=a9508f
,看看 UART 口有没有电平变化,一步步自下向上查问题。
honmaple
2016-01-02 19:58:18 +08:00
@izoabr read 是在循环内
honmaple
2016-01-02 20:02:07 +08:00
@izoabr for 到 print(read)是一个循环, cat /dev/ttyUSB0 这个没反应,后面加了 b'hello\n'也没有反应
izoabr
2016-01-02 20:03:55 +08:00
@honmaple 看来你对那个单片机不太了解,你用你能跟它通讯的方式先通讯一次,说说流程,是用特殊软件么?
linhua
2016-01-02 20:13:01 +08:00
@honmaple
这是 usb 口,还是串口?
如果用的 usb 转串口,确认一下是否安装驱动,安装驱动后生成的串口设备名是什么?
izoabr
2016-01-02 20:29:57 +08:00
@linhua 没驱动的话,不会创建这个 nod 的,这个 ttyUSB0 是驱动加载的时候创建的
honmaple
2016-01-02 20:30:13 +08:00
@izoabr 我对单片机的确不熟悉,以前只是写过流水灯(c 程序),生成 hex 文件,通过 gSTCISP 写进单片机里,这次需要进行串口通信,所以用 pyserial 模块,可是一直卡在第一步
linhua
2016-01-02 20:40:01 +08:00
@honmaple
把单片机上串口的 Tx 和 Rx 用杜邦线短接,边发边收,测试一下串口通讯是否正常。
izoabr
2016-01-02 20:45:04 +08:00
@honmaple 那你先用一个超级终端测试一下收发。

如果单片机是你写的,那就尽量给它简单化,先解决超级终端能读写交互通讯了再说。
honmaple
2016-01-02 21:04:05 +08:00
@izoabr 嗯,谢谢,我先去看一下用 minicom 能不能通信
dtysky
2016-01-02 21:23:56 +08:00
pyserial 或者说串口模块一般都有 buffer 的
用 while 替代 for 或者用 flush 方法清一下缓冲区就好
一般是
youngsterxyf
2016-01-03 09:14:27 +08:00
izoabr
2016-01-03 09:55:35 +08:00
@honmaple 如果你用 minicom 还是有困难你就用 windows 的超级终端哦,不丢人,怎么简单怎么来,简单地容易入门,容易理解。由简入深,学习都是慢慢来的,特别是自学。没必要非得去弄那高逼格的东西。目的是理解和掌握,最后把问题解决对吧。
honmaple
2016-01-03 10:14:34 +08:00
@izoabr 非常感谢,可能是文档没看懂,原来还要先把下位机程序烧写进去,然后就能 read 数据了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/247844

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX