0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在线串口工具(R-WebEmbedded)

Rice嵌入式开发技术分享 来源:Rice嵌入式 作者:Rice嵌入式 2023-12-15 14:15 次阅读

对于嵌入式工程师来说,串口工具在开发和调试过程中必不可少的利器。工具能帮助我们发送和接收串行数据,进行设备通信和调试。通过串口工具,工程师可以实时监控串口数据,查看设备是否正常工作,同时也可以通过发送特定的命令来测试设备的反应。

传统的电脑应用-串口助手,虽然也能满足这些需求,但它们在便捷性上往往受到限制。它需要去网上下载,有些还需要安装。

3c46c47e-9582-11ee-8850-92fbcf53809c.png3c658206-9582-11ee-8850-92fbcf53809c.png3c8d6faa-9582-11ee-8850-92fbcf53809c.png

相比之下,在线串口助手的出现为嵌入式工程师带来了福音。它无需安装、无需配置,只需通过浏览器即可使用。此外,在线串口助手通常提供更为直观的界面和易于操作的功能,帮助工程师更高效地进行工作。

博主最近看到网上有开发者--老大哥,开源了一个在线串口工具,其链接:https://gitee.com/itldg/web-serial-debug,其开源协议:Apache License 2.0。

通过上面的启发,博主想着也写一个网页(R-WebEmbedded),并集成该开源软件,方便大家使用。

3c9dd5f2-9582-11ee-8850-92fbcf53809c.jpg

在开发在线串口助手之前,就必须先了解什么是web serial api

R-WebEmbedded 说明

目前该网页主要有两个功能,开源软件的浏览和在线串口工具。

R-WebEmbedded主界面说明--主要包含:标题,风火轮官方链接博主的gitee,github链接,以及功能模块

3cacb20c-9582-11ee-8850-92fbcf53809c.jpg

R-WebEmbedded--开源软件包,该界面展示了博主提交给RT-Threead的软件包。

3cb66e00-9582-11ee-8850-92fbcf53809c.png

R-WebEmbedded - 在线串口助手,该功能集成了老大哥的开源的串口工具。界面分为:串口配置区,串口数据收发区,串口快捷方式区。

3cba4e4e-9582-11ee-8850-92fbcf53809c.png

什么是Web Serial API

串口是一个双向通信接口,允许字节发送和接收数据。

Web Serial API为网站提供了一种使用JavaScript对串行设备进行读写的方法。串行设备可以通过用户系统上的串行端口连接,也可以通过模拟串行端口的可移动USB蓝牙设备连接。换句话说,Web Serial API通过允许网站与串行设备(如微控制器和3D打印机)通信来连接网络和物理世界。

如何使用Web Serial API

浏览器支持检测

检查浏览器是否支持Web Serial API,有些浏览器可能不支持该功能,可以选择Edge或Chrome浏览器。

if(!('serial'innavigator)){
alert('当前浏览器不支持串口操作,请更换Edge或Chrome浏览器')
}

打开串口

Web Serial API在设计上是异步的。这可以防止网站UI在等待输入时阻塞,这一点很重要,因为串行数据可以在任何时候接收,需要一种方法来侦听它。要打开串口,首先访问一个SerialPort对象。为此,您可以通过调用navigator.serial.requestPort()来提示用户选择一个串行端口,或者从navigator.serial.getPorts()中选择一个,该方法返回一个先前授予该网站访问权限的串行端口列表。

//提示用户选择一个串口。
constserialPort=awaitnavigator.serial.requestPort();

//获取用户之前授予该网站访问权限的所有串口。
constserialPort=awaitnavigator.serial.getPorts();
document.getElementById('serial-select-port').addEventListener('click',async()=>{
try{
awaitnavigator.serial.requestPort().then(async(port)=>{
serialPort?.close()
awaitserialPort?.forget()
serialPort=port
serialStatuChange(true)
})
}catch(e){
console.error('获取串口权限出错'+e.toString())
}
})

3cd3d54e-9582-11ee-8850-92fbcf53809c.png

当我选择好了SerialPort对象之后,调用serialPort.open(),打开串口。其中打开串口可以指定其选项,选项是有默认值,并且是可选的。

dataBits:每帧的数据位数(7或8)。
stopBits:一帧结束时的停止位数(1或2)。
parity:校验模式,可以是none,偶数,奇数。
bufferSize:应该创建的读写缓冲区大小(必须小于16MB)。
flowControl:流控模式(none或hardware)。

关闭串口

当我们不再使用串口时,我们需要将串口对象关闭,调用serialPort.close()。如果串行端口的readable和writable被解锁,则关闭该串行端口,这意味着已经为其各自的读写成员调用了releaseLock()。但是,当使用循环从串行设备连续读取数据时,端口Readable将一直被锁定,直到遇到错误。在这种情况下,调用reader.cancel()将强制reader.read()立即解析为{value: undefined, done: true},从而允许循环调用reader.releaseLock()。

asyncfunctioncloseSerial(){
if(serialOpen){
serialOpen=false
reader?.cancel()
serialToggle.innerHTML='打开串口'
disabledOptions(false)
}
}

asyncfunctionreadData(){
while(serialOpen&&serialPort.readable){
reader=serialPort.readable.getReader()
try{
while(true){
const{value,done}=awaitreader.read()
if(done){
break
}
dataReceived(value)
}
}catch(error){
}finally{
reader.releaseLock()
}
}
awaitserialPort.close()
}

串口读数据

Web Serial API中的输入流由streams API处理。

串口连接建立之后,SerialPort对象的readable属性返回ReadableStream。这些将用于从串行设备接收数据, 其使用Uint8Array实例进行数据传输。

当新数据从串行设备到达时,port.readable.getReader().read()异步返回两个属性:value和一个done的布尔值。如果done为真,则串行端口已经关闭,或者没有更多的数据输入。调用port.readable.getReader()创建一个读取器并将其锁定为readable。当可读被锁定时,串口不能被关闭。

asyncfunctionreadData(){
while(serialOpen&&serialPort.readable){
reader=serialPort.readable.getReader()
try{
while(true){
const{value,done}=awaitreader.read()
if(done){
break
}
dataReceived(value)
}
}catch(error){
}finally{
reader.releaseLock()
}
}
awaitserialPort.close()
}

串口写数据

Web Serial API中的输出流由streams API处理。

串口连接建立之后,SerialPort对象的writable属性返回WritableStream。这些将数据发送到串行设备, 其使用Uint8Array实例进行数据传输。

要将数据发送到串行设备,请将数据传递到port.writable.getWriter().write()。在port.writable. getwriter()上调用releaseLock()是为了稍后关闭串口。

串口工具提供了hex和字符串发送格式。

asyncfunctionsendHex(hex){
constvalue=hex.replace(/s+/g,'')
if(/^[0-9A-Fa-f]+$/.test(value)&&value.length%2===0){
letdata=[]
for(leti=0;i< value.length; i = i + 2) {
            data.push(parseInt(value.substring(i, i + 2), 16))
        }
        await writeData(Uint8Array.from(data))
    } else {
        addLogErr('HEX格式错误:' + hex)
    }
}

async function sendText(text) {
    const encoder = new TextEncoder()
    writeData(encoder.encode(text))
}

async function writeData(data) {
    if (!serialPort || !serialPort.writable) {
        addLogErr('请先打开串口再发送数据')
        return
    }
    const writer = serialPort.writable.getWriter()
    if (toolOptions.addCRLF) {
        data = new Uint8Array([...data, 0x0d, 0x0a])
    }
    await writer.write(data)
    writer.releaseLock()
    addLog(data, false)
}

总结

在线串口助手提供了更佳便捷的开发模式,无需下载安装串口助手。

R-WebEmbedded - 在线嵌入式工具,其登录网站https://ricechen0.gitee.io/r-web-embedded/

R-WebEmbedded - 在线嵌入式工具开源代码链接https://gitee.com/RiceChen0/r-web-embedded

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5017

    文章

    18501

    浏览量

    293405
  • 串口工具
    +关注

    关注

    1

    文章

    9

    浏览量

    7798
收藏 人收藏

    评论

    相关推荐

    请问ESP32是否支持串口在线升级?

    请问ESP32是否支持串口在线升级。对OTA升级例程进行修改,将http传输改为串口传输,是否可行。
    发表于 06-18 06:30

    免费好用的在线仿真工具Wokwi

    给大家分享一个不错的在线仿真工具(Wokwi),支持多种平台,支持市面上主流的开发板,比如:STM32、ESP32、Arduino、树莓派等。还支持常见的传感器、显示器件(LCD、LED屏幕)等
    的头像 发表于 06-15 08:10 226次阅读
    免费好用的<b class='flag-5'>在线</b>仿真<b class='flag-5'>工具</b>Wokwi

    stmf32f334r8在MDK中没有支持,不能在线调试怎么解决?

    stmf32f334r8 在MDK中没有支持,不能在线调试
    发表于 05-15 07:36

    一款适合嵌入式工程师使用的在线工具

    一款适合嵌入式工程师使用的在线工具工具有如下功能,如下图所示: 1. 报文校验功能,如下图所示 2. UDP服务端测试工具:该UDP服务端
    发表于 04-09 22:20

    蓝牙多串口配置工具

    工具是一种多串口配置工具,基于MCF开发,可以将配置信息同时下发到多个串口,支持配置文件信息下发、文本下发和十六进制下发,一般用于芯片等配置工装,提高生产效率。 多
    发表于 03-25 19:22

    安森美推出一款基于PLECS的具有独特功能的领先在线仿真工具

    Elite Power仿真工具是安森美(onsemi)推出的一款基于PLECS的具有独特功能的领先在线仿真工具,适用于软/硬开关应用,使工程师在开发周期的早期阶段,
    的头像 发表于 03-20 09:58 337次阅读

    全志R128 DSP开发工具安装教程

    的 Cadence 授权相关证明 可以通过客服,或者前往 全志在线开发者论坛 发帖询问,有相关的专人对接。 Linux 环境搭建XCC 安装把 XCC 工具链压缩包放在目录下: code"
    发表于 12-28 17:21

    在线设计和仿真工具入门指南

    电子发烧友网站提供《在线设计和仿真工具入门指南.pdf》资料免费下载
    发表于 09-20 09:45 0次下载
    <b class='flag-5'>在线</b>设计和仿真<b class='flag-5'>工具</b>入门指南

    T900串口测试工具的使用教程

    T900原厂提供了“串口测试工具”,以便更好地评估T900的相关性能。下面就简单谈下该工具如何使用。
    的头像 发表于 09-13 11:04 1541次阅读
    T900<b class='flag-5'>串口</b>测试<b class='flag-5'>工具</b>的使用教程

    品英Pickering发布了一款全新的免费在线使用的微波开关设计工具

    品英Pickering作为用于电子测试和验证的模块化信号开关和仿真解决方案的全球供应商,于近日发布了一款全新的免费在线使用的微波开关设计工具Microwave Switch Design Tool
    的头像 发表于 08-31 14:19 424次阅读

    Elxflash在线工具

    电子发烧友网站提供《Elxflash在线工具.zip》资料免费下载
    发表于 07-24 15:07 0次下载
    Elxflash<b class='flag-5'>在线</b><b class='flag-5'>工具</b>

    简述串口通信原理 stm32串口发送数据 如何通过串口发送数据

    串口通信经常作为开发调试的工具,所以先介绍下串口通信。
    发表于 07-21 17:02 3019次阅读
    简述<b class='flag-5'>串口</b>通信原理 stm32<b class='flag-5'>串口</b>发送数据 如何通过<b class='flag-5'>串口</b>发送数据

    Elite Power仿真工具和 PLECS模型自助生成工具的技术优势

    本文旨在介绍 安森美 (onsemi) 的在线 Elite Power 仿真工具和 PLECS 模型自助生成工具 (SSPMG) 所具有的技术优势,提供有关如何使用在线
    的头像 发表于 07-10 10:32 648次阅读
    Elite Power仿真<b class='flag-5'>工具</b>和 PLECS模型自助生成<b class='flag-5'>工具</b>的技术优势

    Renesas R-IN32M3-CL 开发工具启动手册 Rev.2.01

    Renesas R-IN32M3-CL 开发工具启动手册 Rev.2.01
    发表于 07-06 18:42 0次下载
    Renesas <b class='flag-5'>R</b>-IN32M3-CL 开发<b class='flag-5'>工具</b>启动手册 Rev.2.01

    Renesas R-IN32M4-CL2开发工具启动手册 Rev.2.02

    Renesas R-IN32M4-CL2 开发工具启动手册 Rev.2.02
    发表于 07-06 18:42 2次下载
    Renesas <b class='flag-5'>R</b>-IN32M4-CL2开发<b class='flag-5'>工具</b>启动手册 Rev.2.02