web 串口通讯navigator.serial

这篇博客介绍了如何在现代浏览器中利用navigator.serial API与电子秤进行串口通信。首先检查浏览器是否支持串口功能,然后获取已连接的串口或请求用户授权选择串口。接着,配置串口参数并打开串口,实现发送指令获取电子秤数据。如果电子秤支持连续返回数据,则无需发送指令即可持续读取。此外,还提供了去皮功能的实现。整个过程涉及到了串口连接、数据读写和错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  async serial() {
      // 浏览器支持serial
      if ('serial' in navigator) {
        // 获取用户之前授予该网站访问权限的所有串口
        const ports = await navigator.serial.getPorts()
        if (this.port === null) {
          if (ports.length > 0) {
          // 已经连接过
            this.port = ports[0]
            this.open()
            return
          }
          // 提示用户选择一个串口
          this.port = await navigator.serial.requestPort()
          this.open()
        }
      } else {
        alert('你的浏览器不支持串口连接')
      }
    },
    async open() { // 打开串口
      // 等待串口打开
      await this.port.open({
        baudRate: 9600, // 波特率
        dataBits: 8, // 每帧的数据位数(7或8)
        stopBits: 1, // 停止位数(1或2)
        parity: 'none', // 校验模式,可以是none,偶数,奇数
        flowControl: 'none' // 流控模式(none或hardware)。
      })
      console.log('串口打开成功', this.port)
      if (this.port) {
        await this.getWeight()
      }
    },
     // 获取重量
    async getWeight() {
      const _this = this
      this.keepReading = true
      if (this.port) {
        this.reader = this.port.readable.getReader()
        this.writer = this.port.writable.getWriter()
        this.writeInt = setInterval(async() => {
          const data = new Uint8Array([2, 111, 111, 111, 111, 111, 13])
          await this.writer.write(data)
        }, 200)
        while (_this.port.readable && this.keepReading) {
          try {
            while (true) {
              const { value, done } = await this.reader.read()
              if (done) {
                this.reader.releaseLock()
                break
              }
              console.log(weight)
              var weight = _this.Uint8ArrayToString(value.reverse())
               console.log(weight)
            }
          } catch (error) {
            console.error(error)
          } finally {
            // 允许稍后关闭串口。
            this.reader.releaseLock()
            this.writer.releaseLock()
            console.log('允许稍后关闭串口。')
          }
        }
        clearInterval(this.writeInt)
        await this.port.close()
      }
    },
     // 去皮 写入串口
    async peel() {
      if (this.port) {
        const data = new Uint8Array([2, 11, 11, 11, 136, 111, 13])
        await this.writer.write(data)
        console.log('去皮操作')
      } else {
        this.serial()
      }
    },
    ```
电子秤分两种获取,一种是连续返回,不需要发送指令获取。第二种是指令获取,发送一次指令返回一次数据。
上面是第二种电子秤的写法,如果是第一种,可以去掉发送指令的代码,直接用方法持续获取。
### 回答1: 要通过Web应用程序访问和读取串口列表,你可以采用以下步骤: 1. 首先,你可以使用JavaScript编写一个前端脚本,通过调用mscomm32对象的方法来实现读取串口列表的功能。在前端脚本中,你可以使用XMLHttpRequest对象或Fetch API与服务器进行通信。 2. 在服务器端,你可以使用编程语言,如Python或Node.js来处理前端请求。根据你选择的编程语言,你可以使用相应的库或模块来读取串口列表。 3. 在服务器端,你可以编写一个处理器函数,用于接收前端请求并执行读取串口列表的操作。根据你选择的编程语言,这个处理器函数可以使用不同的方法来读取串口列表。例如,在Python中,你可以使用pySerial库来读取串口列表;在Node.js中,你可以使用serialport模块来读取串口列表。 4. 在处理器函数中,你可以调用mscomm32对象的相应方法,如getPort()来读取串口列表。将读取到的串口列表返回给前端脚本。 5.前端脚本中,你可以通过XMLHttpRequest对象或Fetch API接收到服务器返回的串口列表,并进行相应的处理和展示。 通过以上步骤,你就可以实现一个Web应用程序来读取串口列表。需要注意的是,mscomm32对象可能只在Windows操作系统上可用,因此你需要在部署该应用程序时确认目标服务器的操作系统是否支持mscomm32对象。 ### 回答2: 为了在Web上读取串口列表,我们可以使用JavaScript来实现。由于Web浏览器的安全限制,我们无法直接访问用户计算机上的串口,但是我们可以通过与本地应用程序进行通信来实现。 首先,我们需要在本地创建一个能够读取串口列表的应用程序。可以使用C或C++等编程语言来实现。通过使用串口通讯库如mscomm32等,我们可以轻松获取到可用的串口列表。 接下来,在Web页面上使用JavaScript创建一个WebSocket连接,与本地应用程序进行通信。WebSocket是一种在Web浏览器和服务器之间进行双向通信的技术,我们可以使用它与本地应用程序进行数据交换。 当WebSocket连接建立后,我们可以向本地应用程序发送一个请求,请求获取串口列表的信息。本地应用程序接收到请求后,将串口列表信息通过WebSocket发送到Web页面。 在Web页面上,我们可以使用JavaScript接收到来自本地应用程序的串口列表信息,并将其显示在网页上。我们可以使用HTML和CSS来创建一个用户界面,以呈现串口列表。 需要注意的是,由于Web浏览器的安全策略,我们不能直接访问用户计算机上的串口。该方法只能在用户在Web页面上授权的情况下才能运行。 总结起来,要在Web上读取串口列表,我们需要使用本地应用程序作为中间人,并通过WebSocket与Web页面进行通信,从而获取到串口列表的信息,并在Web页面上进行展示。 ### 回答3: 在Web环境下,使用mscomm32读取串口列表是不可行的。mscomm32是一个ActiveX控件,只能在桌面应用程序中使用,无法在Web环境中使用。 在Web环境中,可以使用HTML5提供的Web Serial API来读取串口列表。Web Serial API允许Web应用程序与串口设备进行通信。 要使用Web Serial API读取串口列表,首先需要在页面中请求获取串口访问权限。可以使用以下代码来请求访问权限: ```javascript navigator.serial.requestPort().then(port => { // 获取到串口访问权限后的处理逻辑 console.log(port); }).catch(error => { // 请求串口访问权限失败的处理逻辑 console.error(error); }); ``` 当用户确认授权后,`requestPort()`方法将返回一个代表串口的`SerialPort`对象,其中包含了串口的详细信息。你可以在控制台中查看这些信息。 请注意,由于Web Serial API是HTML5的一部分,支持程度可能因浏览器而异。在某些浏览器中,可能需要在页面中启用开发者模式或设置特定的标志才能使用Web Serial API。 总之,在Web环境中,我们需要使用HTML5的Web Serial API而不是mscomm32来读取串口列表。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrHao_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值