如何使用asio库打开usb端口并接收数据

how to open usb port and receive data of it using asio library?

本文关键字:数据 usb asio 何使用      更新时间:2023-10-16

我有一个设备,它与另一个应用程序(不是我写的)通信,我想使用我的应用程序获得它的价值。我在谷歌上找到了ansio库,我安装了它,并找到了这个入门教程。

问题:如何在端口名称中设置设备名称?使用lsusb,我得到:

Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 0ac8:305b Z-Star Microelectronics Corp. ZC0305 Webcam
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

我想处理网络摄像头设备:

Bus 001 Device 004: ID 0ac8:305b Z-Star Microelectronics Corp. ZC0305 Webcam

然后我写道:

try {
    SimpleSerial serial("/dev/ttyUSB4",115200); // get SimpleSerial class on link above
    cout<<serial.readLine()<<endl;
    return 0;
} catch(boost::system::system_error& e)
{
    cout<<"Error: "<<e.what()<<endl;
    return 1;
}

但它给出了一个:Error: open: No such file or directory如何解决这个问题?提前谢谢。

在shell中键入ls /dev/tty*,然后选择生成的端口之一。不幸的是,还不能确定哪一个会是正确的。否则,您可以尝试通过处理dmesg的输出来提取正确的端口。

通常,当设备连接到USB端口时,它会在内核环形缓冲区中记录一条消息。此日志将经常向您提供您正在查找的信息。要找到它,

  1. 连接您的设备
  2. 运行dmesgdmesg | tail -20以查看缓冲区的最后20行

dmesg命令的输出应该类似于以下内容。

.
.
.
[ 1562.334350] usb 2-1: USB disconnect, device number 2
[ 1566.526225] usb 1-1: new full-speed USB device number 7 using xhci_hcd
[ 1566.652880] usb 1-1: New USB device found, idVendor=067b, idProduct=2303, bcdDevice= 4.00
[ 1566.652885] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1566.652888] usb 1-1: Product: USB-Serial Controller D
[ 1566.652891] usb 1-1: Manufacturer: Prolific Technology Inc. 
[ 1566.655451] pl2303 1-1:1.0: pl2303 converter detected
[ 1566.656634] usb 1-1: pl2303 converter now attached to ttyUSB1

注:

  • 最后一行告诉您适当的ttyUSB设备编号。这是特定于驱动程序的。许多USB设备无法通过/dev/ttyUSB#访问