我有一个通过 USB 连接的基于 Arduino 的设备。
我想QExtSerialPort
在插入时使用(或任何必要的)从我的 Qt 4 应用程序中检测它。
如果这不可能,我想我可以以某种方式获取系统端口名称的列表,然后尝试所有这些名称以搜索我的 Arduino(我将在其中实施某种握手程序以使其正确检测到它)。我对这种方法的担忧是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏。
所以,我真的不知道从哪里开始。哪个是最好的方法?我将如何实施它?
我有一个通过 USB 连接的基于 Arduino 的设备。
我想QExtSerialPort
在插入时使用(或任何必要的)从我的 Qt 4 应用程序中检测它。
如果这不可能,我想我可以以某种方式获取系统端口名称的列表,然后尝试所有这些名称以搜索我的 Arduino(我将在其中实施某种握手程序以使其正确检测到它)。我对这种方法的担忧是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏。
所以,我真的不知道从哪里开始。哪个是最好的方法?我将如何实施它?
我相信您可以通过查看在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 系统上的串行编程的更多详细信息,请点击此处
由于您的设备是 USB,因此您的 UART 端口将由他的硬件中的某种转换器模拟。因此,首先您必须了解您的系统上使用的是什么驱动程序。
最常见的 SERIAL->USB 转换器使用 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 一样读取或写入, Qwhatever-inherits-from-QIODevice。
如果您在打开端口和通信时遇到任何问题,请不要犹豫!:)