SerialPort

以 Web 串口(navigator.serial)连接串口外设,提供收发与波特率切换的通信面板。

最后更新

说明

基于浏览器 Web Serial 规范封装的串口通信组件:点击“连接串口”后由 navigator.serial.requestPort 弹出系统端口选择框,可按 UsbVendorId / UsbProductId 过滤(如 CH340、CP210x、FTDI、Arduino),不设置则列出全部可选串口;选中端口后组件以 baudRate / dataBits / stopBits / parity 打开并启动持续读循环,收到的字节按到达实时上抛,日志同时给出十六进制与可打印文本预览。发送区支持文本与十六进制两种模式(十六进制会忽略空格 / 逗号 / 连字符 / 0x 前缀),文本模式可勾选换行在末尾追加回车换行;连接状态下可在面板内即时切换波特率(内部关闭并以新波特率重开)。对外经 OnConnected / OnDisconnected / OnData / OnError 事件驱动,或用 ConnectAsync / WriteAsync / WriteTextAsync / ChangeBaudAsync / CloseAsync 等公开方法编程式操作;端口标识 SerialPortInfo 来自 port.getInfo(),数据 SerialData 携带原始字节与十六进制 / UTF-8 表示及收发方向。平台限制:Web 串口仅 Chrome / Edge / WebView2 提供,且必须处于安全上下文(HTTPS 或 localhost)、由用户手势发起 requestPort;串口为无帧界的原始字节流,一次到达可能是半包或多条合并,需自行按分隔符 / 长度组帧;在 Blazor Server 中往返延迟通常使瞬时用户授权过期,因此推荐在 Blazor WASM 或桌面宿主里使用,真机联调需要一个系统已识别驱动的串口设备。

常见能力:

  • requestPort 弹出系统端口选择框,可按 USB 厂商 / 产品 ID 过滤
  • 打开后即启动持续读循环,收到的字节实时上抛并记入带方向的日志
  • 收发值同时给出十六进制与尽力而为的 UTF-8 文本预览
  • 发送支持文本 / 十六进制两种模式,文本可勾选换行追加回车换行
  • 连接中即时切换波特率(内部关闭后按新值重开)
  • OnConnected / OnDisconnected / OnData / OnError 事件 + 公开方法双驱动
  • 能力检测与安全上下文提示;不支持时给出明确原因

用法

<SerialPort Name="串口通信" BaudRate="115200" UsbVendorId="0x1A86"
            OnConnected="OnConnected" OnData="OnData" OnError="OnError" />

@code {
    // UsbVendorId / UsbProductId 用于收窄端口选择框;省略则列出全部可选串口。
    void OnConnected(SerialPortInfo p) => Console.WriteLine($"已连接 {p.Display}");
    void OnData(SerialData d) =>
        Console.WriteLine($"{(d.IsTx ? "TX" : "RX")} {d.Hex} | {d.Text}");
    void OnError(string m) => Console.WriteLine("错误:" + m);
}

@* 也可拿到实例编程式发送 / 改波特率 / 关闭 *@
<SerialPort @ref="_sp" />
<Button Text="发 HELLO" OnClick="@(() => _sp.WriteTextAsync("HELLO", true))" />

API 参数

参数 类型 默认值 说明
BaudRate int 115200 初始波特率(默认 115200);面板内可即时改。
BufferSize int 255 接收缓冲区字节数(默认 255)。
ConnectText string "连接串口" 连接按钮文案(内部已本地化,作为翻译键)。
DataBits int 8 数据位(默认 8)。
MaxLog int 200 日志最多保留行数,超出丢弃最旧。
Name string "串口设备" 面板标题。
OnConnected EventCallback<SerialPortInfo> — 事件 连接成功(含端口标识信息)。
OnData EventCallback<SerialData> — 事件 收到或被回显一段数据。
OnDisconnected EventCallback — 事件 连接断开(主动关闭或拔线)。
OnError EventCallback<string> — 事件 发生错误,参数为错误说明。
Parity string "none" 校验位:none / even / odd(默认 none)。
ShowLog bool true 是否显示收发日志。
StopBits int 1 停止位(默认 1)。
UsbProductId int 0 USB 产品 ID 过滤(配合 UsbVendorId;0 表示按厂商不限产品)。
UsbVendorId int 0 USB 厂商 ID 过滤(0 表示不过滤,弹出全部可选串口)。
Visible bool true 取得或设置组件是否可见,默认为false。
VisibleChanged EventCallback<bool> — 事件 取得或设置组件可见性变化时的回调事件。
Class string null 取得或设置组件的CSS类名,用于自定义样式。
Disabled bool false 取得或设置组件是否禁用,默认为false。
Style string null 取得或设置组件的内联样式,用于自定义样式。

所有组件均继承 BaseComponent,除上表参数外还支持 Class、Style、Disabled、Visible。

微信公众号二维码 扫码关注公众号
QQ 交流群二维码 扫码加入 QQ 群