Qt 列出机器';s串行端口

Qt 列出机器';s串行端口,qt,qt4,usb,serial-port,arduino,Qt,Qt4,Usb,Serial Port,Arduino,我有一个基于Arduino的设备,通过USB连接 我想在Qt4应用程序插入时,使用QExtSerialPort(或任何必要的工具)从Qt4应用程序中检测它 如果这是不可能的,我想我可以以某种方式得到一个系统端口名的列表,然后在搜索我的Arduino时尝试所有的端口名(在那里我会实现某种握手过程,让它正确地检测到它)。在这种方法中,我担心的是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏 所以,我真的不知道从哪里开始。哪种方法最好?如何实现它?我相信您可以通过查看 H

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

我想在Qt4应用程序插入时,使用
QExtSerialPort
(或任何必要的工具)从Qt4应用程序中检测它

如果这是不可能的,我想我可以以某种方式得到一个系统端口名的列表,然后在搜索我的Arduino时尝试所有的端口名(在那里我会实现某种握手过程,让它正确地检测到它)。在这种方法中,我担心的是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏


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

我相信您可以通过查看

HKEY\U本地\U机器\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系统上串行编程的更多详细信息

由于您的设备是USB,您的UART端口将由硬件中的某种conversor模拟。所以,首先您必须了解系统上使用的是什么驱动程序

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


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

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

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

您可以像使用文件一样使用QextSerialPort和QSerialDevice。打开它(而不是指定一个文件名,在Windows上指定设备名,即“COM1”,在Linux上指定“/dev/tty0”,具体取决于您的配置),然后像使用普通QFile、QBuffer或QoDevice继承的任何文件一样进行读写

如果您在打开端口和通信时遇到任何问题,请立即询问!:)