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