如何在Cygwin中使用COM和USB端口?

时间:2010-05-24 18:12:31

标签: usb cygwin serial-port arduino pyserial

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

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端口?

5 个答案:

答案 0 :(得分:9)

如果Hyperterminal可以访问它,那么它将作为“虚拟COM端口”安装。 Cygwin将允许您以 / dev / ttyS26 (由Windows称为COM27)访问它。您可能仍然遇到输入阻止问题,直到收到CR - 我这样做。 (试图解决那个,就是我找到这个的方式。)

答案 1 :(得分:3)

我的青睐

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

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

你需要:

tty socat

stty -F /dev/ttyS15 115200 cs8

也许也可以工作(那时没有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
  3. 你有更好的选择吗?那么请完善。

    你可以使用:

    MediaStore.EXTRA_OUTPUT

    设置你的COM

    TJ

答案 2 :(得分:2)

Windows中的串行端口映射到cygwin:

COM - &gt;的/ dev / TTYS

例如COM3 - &gt;的/ dev / ttyS2

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

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

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