V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
honmaple
V2EX  ›  Python

有用过 pyserial 的吗

  •  
  •   honmaple · 2016-01-02 19:33:12 +08:00 · 2406 次点击
    这是一个创建于 3259 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教如何 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'
    15 条回复    2016-01-03 10:14:34 +08:00
    izoabr
        1
    izoabr  
       2016-01-02 19:47:12 +08:00
    你是用串口跟单片机通讯是么?
    波特率和奇偶校验设置对么?

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

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

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

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

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

    如果单片机是你写的,那就尽量给它简单化,先解决超级终端能读写交互通讯了再说。
    honmaple
        11
    honmaple  
    OP
       2016-01-02 21:04:05 +08:00
    @izoabr 嗯,谢谢,我先去看一下用 minicom 能不能通信
    dtysky
        12
    dtysky  
       2016-01-02 21:23:56 +08:00
    pyserial 或者说串口模块一般都有 buffer 的
    用 while 替代 for 或者用 flush 方法清一下缓冲区就好
    一般是
    youngsterxyf
        13
    youngsterxyf  
       2016-01-03 09:14:27 +08:00
    izoabr
        14
    izoabr  
       2016-01-03 09:55:35 +08:00
    @honmaple 如果你用 minicom 还是有困难你就用 windows 的超级终端哦,不丢人,怎么简单怎么来,简单地容易入门,容易理解。由简入深,学习都是慢慢来的,特别是自学。没必要非得去弄那高逼格的东西。目的是理解和掌握,最后把问题解决对吧。
    honmaple
        15
    honmaple  
    OP
       2016-01-03 10:14:34 +08:00
    @izoabr 非常感谢,可能是文档没看懂,原来还要先把下位机程序烧写进去,然后就能 read 数据了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3257 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:26 · PVG 20:26 · LAX 04:26 · JFK 07:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.