类: UART
约 1274 字大约 4 分钟
2024-05-04
构建固件和导入到JS
该类没有直接导出, 只能从 serial 模块导入该类的实例:
import { uart0 } from "serial"简介
UART 串口类
用于配置和管理 ESP32 的 UART 串口。UART 是一种异步串行通信协议, 常用于连接 GPS 模块、蓝牙模块、调试输出等。
ESP32 通常有 3 个 UART 端口(UART0、UART1、UART2),部分型号有更多。
- UART0 通常用于下载程序和调试输出
- UART1 和 UART2 可供用户自由使用
serial 模块会自动创建 UART 实例并通过 uart0, uart1, uart2 等导出。 用户直接通过 serial 模块访问这些实例,无需手动创建。
不同芯片型号导出的 UART 对象不同:
- ESP32/ESP32-S3/C6:uart0, uart1, uart2(3 个 UART)
- ESP32-S2/C2/C3/H2:uart0, uart1(2 个 UART,无 uart2)
- ESP32-P4:uart0-uart4(5 个 HP UART),另有 uartlp0(低功耗 UART)
示例:
import * as serial from "serial"
// 访问 UART2 实例(推荐)
const uart = serial.uart2
// 配置 UART
uart.setup({
tx: 17, // TX 引脚
rx: 16, // RX 引脚
baudrate: 9600 // 波特率
})
// 发送数据
uart.write("Hello UART!")
// 接收数据
const data = uart.read(100) // 读取最多 100 字节
console.log("Received:", data)
// 监听接收数据
uart.listen((data) => {
console.log("Received:", data)
})类方法
方法 setup
原型: setup (options:object)
配置并初始化 UART
初始化 UART 串口,配置引脚、波特率等参数。
示例:
import * as serial from "serial"
// 获取 UART2 实例
const uart = serial.uart2
// 基本配置
uart.setup({
tx: 17, // TX 引脚
rx: 16 // RX 引脚
})
// 完整配置
uart.setup({
tx: 17,
rx: 16,
baudrate: 9600, // 波特率(默认 115200)
stopbits: 1, // 停止位(默认 1)
parity: 0 // 校验位:0=无校验(默认),2=偶校验,3=奇校验
})options 格式:
{
tx:number, // TX 引脚 GPIO 编号(必需)
rx:number, // RX 引脚 GPIO 编号(必需)
baudrate:number=115200, // 波特率(可选,默认 115200)
stopbits:number=1, // 停止位(可选,默认 1)
parity:0|2|3=0, // 校验位(可选,默认 0=无校验,2=偶校验,3=奇校验)
}参数:
options
类型object (详见下方类型定义)
参数说明配置选项对象
options 类型定义:
{ tx: number, // TX 引脚 GPIO 编号 rx: number, // RX 引脚 GPIO 编号 baudrate?: number, // 波特率,默认 115200 stopbits?: number, // 停止位,默认 1 parity?: 0 | 2 | 3 // 校验位:0=无校验,2=偶校验,3=奇校验,默认 0 }
异常:
- UART 驱动已安装
- 配置失败
返回值:
类型undefined
方法 read
原型: read (len:number, timeout:number=20)
从 UART 读取数据
读取指定长度的数据,返回一个 ArrayBuffer 对象。如果没有数据可读,将返回一个空的 ArrayBuffer。
通常情况下接收方无法确定数据到达的时机,再加上 JS 引擎主循环的延迟,read() 有时无法满足通讯需求,推荐使用 listen()。
参数:
len
类型number
参数说明要读取的字节数
timeout
类型number
默认值20
参数说明读取超时时间(毫秒,默认 20)
异常:
- 内存分配失败
返回值:
类型ArrayBuffer
说明读取到的数据
方法 write
原型: write (data:ArrayBuffer|string|number[])
向 UART 写入数据
当参数 data 是一个整数数组时,等效于
new Uint8Array(data)
参数:
data
类型ArrayBuffer, string, number[]
参数说明要写入的数据
返回值:
类型number
说明实际写入的字节数
方法 listen
原型: listen (callback:function)
监听 UART 接收到的数据
回调函数的原型: callback(data: ArrayBuffer)
参数:
callback
类型function
参数说明数据接收回调函数,参数为 ArrayBuffer
异常:
- UART 驱动未安装
- 回调不是函数
返回值:
类型undefined
方法 unsetup
原型: unsetup ()
关闭 UART 并释放资源
返回值:
类型undefined
方法 isInstalled
原型: isInstalled ()
检查 UART 驱动是否已安装
是 ESP IDF uart_is_driver_installed 的封装,无论 c++ 还是 js 启用了 uart ,该函数都会返回 true。
返回值:
类型bool
说明是否已安装
