ch9141
2025-07-09
- CH9141是一款WCH(南京沁恒)蓝牙串口透传芯片,芯片支持广播模式、主机模式和从机模式。
- 芯片的串口接收缓存为 512 个字节,串口接收数据的同时会实时进行蓝牙传输。
- 建议主机发送时做一些速度方面的限制以降低丢包和缓冲区溢出。
- 由于蓝牙通信速率与其环境有关,所以在串口波特率超过 9600bit/s,且蓝牙平均 RSSI 小于70dBm 时,建议使用 CTS/RTS 流控防止缓存区溢出。
- 在串口助手 上使用, 步骤(协议->下拉->配置->上传->选中目标JS文件)
/**
* @param {string} str 编辑的字符串
* @return {Uint8Array} 序列化后的数组
*/
function serialize(str) {
// 检查是否为十六进制格式 [xx xx xx]
if (str.match(/^\[([\da-fA-F]{2}\s*)+\]$/)) {
// 移除[]并分割成数组
const hexValues = str.slice(1, -1).trim().split(/\s+/);
// 转换为Uint8Array
return new Uint8Array(hexValues.map(hex => parseInt(hex, 16)));
}
// 普通字符串处理
str = str.replace(/\\r/g, '\r')
.replace(/\\n/g, '\n')
.replace(/\\t/g, '\t')
.replace(/\\f/g, '\f')
.replace(/\\b/g, '\b')
.replace(/\\v/g, '\v');
// 使用TextEncoder编码字符串
const data = new TextEncoder('gbk').encode(str);
return data;
}
/**
* @param {Uint8Array} array 接收缓冲区数组
* @return {number} 缓冲区数组中,能正确解析完整一包的长度
*/
function deserialize(array) {
//检索协议\n的结束标识
let len = array.findIndex(item => item == 10);
len += len >= 0 ? 1 : 0;
return len > 0 ? len : array.length;
}
/**
* @param {Uint8Array} array 通过接收序列化的长度提取的完整一包数据
* @return {string} 解析后的字符串
*/
function log(array) {
let log = '';
console.log(array);
// 创建一个新的Uint8Array来存储数据
const data = new Uint8Array(array.slice(0, array.length + 1));
try {
// 使用TextDecoder解码Uint8Array
log = new TextDecoder().decode(data);
} catch (error) {
console.error('解码错误:', error);
log = '';
}
return log;
}
async function help(transfer) {
alert("自定义执行例子,发送一个'hello'")
}
function customJson() {
return [
{ name: "进入 AT 配置", str:"AT...\\r\\n" },
{ name: "退出 AT 配置", str:"AT+EXIT\\r\\n" },
{ name: "复位芯片", str:"AT+RESET\\r\\n" },
// { name: "查询开机语", str:"AT+HELLO?\\r\\n" },
// { name: "设置开机语", str:"AT+HELLO=\\r\\n", title: "设置开机语为空" },
{ name: "查询串口参数", str:"AT+UART?\\r\\n" },
{ name: "设置串口参数", str:"AT+UART=115200,8,1,0,50\\r\\n", title:"波特率:115200,数据位:8,校验位:n,停止位:1,超时时间:50ms" },
{ name: "本地MAC地址", str:"AT+MAC?\\r\\n" },
{ name: "查询发射功率", str:"AT+TPL?\\r\\n" },
{ name: "设置发射功率", str:"AT+TPL=0\\r\\n", title: "设置蓝牙发射功率,x 支持的参数:\n0:0DB\n1:1DB\n2:2DB\n3:3DB\n4:-3DB\n5:-8DB\n6:-14DB\n7:-20DB"},
{ name: "查询蓝牙工作模式", str:"AT+BLEMODE?\\r\\n", title: "查询蓝牙工作模式\n0:广播模式\n1:主机模式\n2:从机模式"},
{ name: "设置广播工作模式", str:"AT+BLEMODE=0\\r\\n", title: "复位芯片后生效" },
{ name: "设置主机工作模式", str:"AT+BLEMODE=1\\r\\n", title: "复位芯片后生效" },
{ name: "设置从机工作模式", str:"AT+BLEMODE=2\\r\\n", title: "复位芯片后生效" },
{ name: "查询蓝牙状态", str:"AT+BLESTA?\\r\\n", title: "[0]广播模式: 00 未初始化、 01 设备初始化完成、02 广播、07 错误\n[1]主机模式: 00 未初始化、01 扫描、02 连接中、03 连接成功、04 断开连接中\n[2]从机模式: 00 未初始化、01 设备初始化完成、02 广播、03 准备广播状态、04 连接超时、05 连接成功、07 错误"},
{ name: "主机扫描", str:"AT+SCAN=ON\\r\\n" },
{ name: "查询主机默认连接", str:"AT+CONADD?\\r\\n" },
{ name: "新增主机默认连接", str:"AT+CONADD=00:01:02:03:04:05\\r\\n" },
{ name: "清空主机默认连接", str:"AT+CLRCONADD\\r\\n" },
// { name: "查询从机密码", str:"AT+PASS?\\r\\n" },
// { name: "当前连接MAC地址", str:"AT+CCADD?\\r\\n" },
// { name: "重置所有参数", str:"AT+RELOAD\\r\\n" },
// { name: "显示芯片信息", str:"AT+SHOW\\r\\n" },
// { name: "保存当前参数", str:"AT+SAVE\\r\\n" },
// { name: "获取芯片版本号", str:"AT+VER\\r\\n" },
];
}