列出机器的串行端口

时间:2009-12-30 13:46:17

标签: qt qt4 usb serial-port arduino

我有一个基于Arduino的设备,通过USB连接。

我想在我的Qt 4应用程序中使用QExtSerialPort(或任何必要的)在插入时检测到它。

如果这是不可能的,我想我可以以某种方式得到系统的端口名称列表,并尝试所有它们来搜索我的Arduino(我会实现某种握手程序来检测它)正确)。我对这种方法的关注是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏。

所以,我真的不知道从哪里开始。哪种方法最好?我该如何实现它?

3 个答案:

答案 0 :(得分:1)

我相信你可以通过查看

找到 Windows 上的串口列表
  

HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM

注册表项

UNIX 系统上的每个串行端口都有一个或多个与之关联的设备文件(/ dev目录中的文件):

System           Port 1           Port 2
IRIX®            /dev/ttyf1       /dev/ttyf2
HP-UX            /dev/tty1p0      /dev/tty2p0
Solaris®/SunOS®  /dev/ttya        /dev/ttyb
Linux®           /dev/ttyS0       /dev/ttyS1
Digital UNIX®    /dev/tty01       /dev/tty02

有关POSIX系统here

上串行编程的更多详细信息

答案 1 :(得分:1)

由于您的设备是USB,因此您的UART端口将通过其硬件中的某种转换模拟。首先,您必须了解系统上使用的驱动程序。

最常见的SERIAL-> USB转换器使用PL2303 / PL2301芯片,因此它会在/ dev上创建路径,如果它是第一个设备,它将显示为“/ dev / ttyUSB0”,但您也可能看到读取proc路径的列表(如“cat / proc / bus / usb / devices”)。 在Windows下,它通常会创建一个虚拟“COM”,只需转到设备管理器并检查端口。

当您确定硬件如何与系统通信时,您可以使用QExtSerialPort包装系统API并与设备通信。

答案 2 :(得分:1)

使用奇怪的Windows注册表项或依赖Linux上的硬连线设备节点,太难了,太平台特定了。

你是正确的方式。获取QextSerialPort或QSerialDevice(我在我的项目中加入,因为它已集成在Qt5中),查看示例并简单地使用它。在这两个库中,您可以获得某种端口枚举器类,它返回所有配置串行端口的列表。只需手动进行平台/设备特定设置(例如在我当前的嵌入式项目中以半双工模式获取RS485),但“标准”问题完全封装在QIODevice实现中。

您可以像文件一样使用QextSerialPort和QSerialDevice。打开它(而不是指定设备名称的文件名,即Windows上的“COM1”或Linux上的“/ dev / tty0”,具体取决于您的配置)然后读取或写入,就像使用普通的QFile,QBuffer一样,Qwhatever-inherits-from-QIODevice。

如果您在打开端口和通信时遇到任何问题,请不要犹豫! :)