我有一个基于Arduino的设备,通过USB连接。
我想在我的Qt 4应用程序中使用QExtSerialPort
(或任何必要的)在插入时检测到它。
如果这是不可能的,我想我可以以某种方式得到系统的端口名称列表,并尝试所有它们来搜索我的Arduino(我会实现某种握手程序来检测它)正确)。我对这种方法的关注是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏。
所以,我真的不知道从哪里开始。哪种方法最好?我该如何实现它?
答案 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。
如果您在打开端口和通信时遇到任何问题,请不要犹豫! :)