【问题标题】:WEBUSB getting serial data PL2303WEBUSB获取串口数据PL2303
【发布时间】:2019-01-07 09:47:06
【问题描述】:

我正在尝试从通过 RS-232 串行通信进行通信的称重秤读取读数,并将值输入使用 WebUsb API 的 Web 应用程序。我正在获取数据,但解码后它就像这样。我在串行终端中获得了正确的数据。 这是数据的代码。

`navigator.usb.requestDevice({ filters: []})
  .then((requestedDevice) => {
    device = requestedDevice;
  }).then(() => {
    console.log(device);
    return device.open();
  }).then(() => device.selectConfiguration(1)) // Select configuration #1 for the device.
  .then(() => {
    return device.reset();
  }).then(() => device.claimInterface(0))
  .then(() => {
    return device.transferIn(1, 16)
  })
  .then((data) => {
    console.log(data)
    console.log(new TextDecoder().decode(data.data));
  }).catch(err => {
    console.log(err);
  });  `

我是否遗漏了一些关于此的内容。是波特率设置吗,我知道波特率是9600,但是这里怎么设置。

请帮忙。

【问题讨论】:

标签: webusb


【解决方案1】:

您确定需要将数据解码为文本吗?您传递给 decode() 的 DataView 中的值是什么?

要设置波特率,您需要查找用于配置设备的 USB 控制传输的文档。我在 Prolific 的任何数据表中都找不到这个,但是这个芯片的 Linux 驱动程序可能是一个很好的参考:

https://github.com/torvalds/linux/blob/v4.16/drivers/usb/serial/pl2303.c

该文件中的pl2303_set_termios 函数构造发送到设备的命令,以配置波特率和奇偶校验等参数。

【讨论】:

  • 我最近发布了一个用于 NodeJS 的 PL2303 驱动程序(不幸的是使用的是 node-usb,而不是 webusb ;)所以它可能比 C 驱动程序代码更容易阅读:github.com/tidepool-org/pl2303/blob/master/index.js
  • @Gerrit 你的图书馆真的很管用……看看我用 webusb 写的图书馆……问题是波特率的设置。非常感谢。
【解决方案2】:

我已将Gerritpl2303 repository 移植到WebUSB:https://github.com/Folleon/pl2303-webusb

目前我只需要读取数据,因此我不确定写入是否也有效。但是,到目前为止,至少所有设置和批量读取都运行良好。

请注意,虽然设置波特率失败,输入状态为stall - 我无法解决这个问题。但是,假设波特率为 9600,它仍然可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2019-01-04
    相关资源
    最近更新 更多