【问题标题】:How can I use COM and USB ports within Cygwin?如何在 Cygwin 中使用 COM 和 USB 端口?
【发布时间】:2010-05-24 18:12:30
【问题描述】:

我想使用 Python 脚本从我的 Arduino 板发送/接收数据。我想用 Python 和它的 pySerial 模块来做这件事,这似乎符合我的需要。所以我在cygwin(windows XP后面)中安装了Python和pySerial。

Python 脚本相当简单:

$ cat example.py

#print "testing my COM26 port using python"

import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = 26
ser
ser.open()
ser.isOpen()

但是在运行时我收到以下错误。

$ python example.py
Traceback (most recent call last):
  File "example.py", line 9, in <module>
    ser.open()
  File "/usr/lib/python2.5/site-packages/serial/serialposix.py", line 276, in open
    raise SerialException("could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: could not open port 26: [Errno 2] No such file or directory: '/dev/com27'

无法打开端口 26:[Errno 2] 没有这样的文件或目录:'/dev/com27'

我如何知道我的 Arduino 已连接到端口 COM27?

嗯,很简单。 Arduino IDE 是这样说的,我可以使用该端口从 IDE 的串行端口监视器工具发送和接收数据。此外,我还设法让超级终端使用该端口工作。

但是,Cygwin 似乎不知道此类 USB 和 COM 端口:

$ ls -lah /dev
total 4,0K
.
..
fd -> /proc/self/fd
mqueue
shm
stderr -> /proc/self/fd/2
stdin -> /proc/self/fd/0
stdout -> /proc/self/fd/1

应该提到的是,我在没有经典串行 COM 端口,只有 USB 端口的戴尔笔记本电脑上运行它。 (所以我想这很正常,例如/dev/com1 不存在。)

我不知道我问的是否正确,但我的问题是:如何配置 Cygwin 以使其了解此 COM27 端口?

【问题讨论】:

  • 为什么选择 Cygwin? PySerial 原生支持 Win32。
  • 因为它很容易安装软件包,而且我还需要安装其他软件包。会尝试 python win32 native 然后我猜
  • 好的。尝试过(Windows上的本机python + pyserial本机Windows安装程序)并且相同的代码按预期工作......很奇怪。但我真的需要了解为什么在这里使用 cygwin 不起作用我觉得这是一个 cygwin 问题,我猜与 python 无关
  • 这是一个 cygwin 问题 - 它似乎没有将 COM 端口映射到“/dev”命名空间。我不确定它是否有能力做到这一点。

标签: usb cygwin serial-port arduino pyserial


【解决方案1】:

如果超级终端可以访问它,那么它被安装为“虚拟 COM 端口”。 Cygwin 将允许您以 /dev/ttyS26(Windows 称为 COM27)的方式访问它。在收到 CR 之前,您可能仍然会遇到输入阻塞问题——我愿意。 (试图解决那个,这就是我找到这个的方法。)

【讨论】:

  • 你解决了吗?我正要尝试使用 cygwin 的串行端口。最好使用某种终端软件...
  • 我从来没有解决过那个问题。我尝试了一些相当奇特的东西。大街上(Cygwin 相关论坛)上的说法似乎是不可能的。
  • 好的,我找到了一篇博文,几乎可以满足我的要求。我可以调整缺失的部分。通讯的东西很好用! plunk.org/~grantham/cgi-bin/blog.cgi?id=00015
  • @Kaos。感谢您的链接。我一直试图让screen 使用串口在cygwin 中工作,但没有成功。 serial 似乎工作得很好!
【解决方案2】:

windows中的串口映射到cygwin如下:

COM -> /dev/ttyS

例如 COM3 -> /dev/ttyS2

example.py 可以重写为打开 COM3 为:

import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = "/dev/ttyS2"
ser
ser.open()
ser.isOpen()

【讨论】:

    【解决方案3】:

    我最喜欢的是

    socat.exe `tty`,raw,echo=0 /dev/ttyS15,raw,echo=0,setsid,sane
    

    它是 COM16(Windows 已经设置为 115200,noparity,no-flow,8b)

    你需要:

    ttysocat


    socat.exe - /dev/ttyS15,raw,echo=0,setsid,sane
    

    可能也可以(没有 tty 包),或者只是简单地指定当前终端的 dev 节点(如果没有 tty 包可能会很棘手)

    tty - 打印连接到标准输入的终端的文件名

    我最喜欢的链接:

    1. Using socat for raw serial connection
    2. https://superuser.com/questions/123790/socat-and-rich-terminals-with-ctrlc-ctrlz-ctrld-propagation

    你有更好的选择吗?那么请细化。

    你可以使用:

    stty -F /dev/ttyS15 115200 cs8

    设置你的 COM

    TJ

    【讨论】:

      【解决方案4】:

      如果您使用的是没有 COM 端口的笔记本电脑,则无法打开此端口并开始 make 操作。

      在Windows中,有一个功能可以打开这个端口,改变一些线路的状态(RST),读取状态并进行传输。对于 LPT 端口,您无法在 Windows 中执行此操作,您必须使用一些库。 USB也有问题,你必须知道连接到USB的设备。

      【讨论】:

        【解决方案5】:

        我发现 Brad Grantham's tool 非常有用,并且一直在工作中广泛使用它。它非常易于构建和使用。

        我只是在这里发帖提到我修复了一个错误,如果你输入波浪号,其他文本,然后是一个点,它会退出。例如输入:

        vim ~/.tmux.conf会将您从串行会话中驱逐出去。

        您可以在这里找到它: https://github.com/lime45/serial

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-02
          • 2016-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多