更新记录
1.0.0(2023-05-16)
WCH 沁恒微电子串口通讯,USB转串口安卓免驱安装程序,支持CH340/CH341/CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104/CH9143的,用于Android操作系统4.4及以上版本的USB Host模式,无需加载Android内核驱动,无需root权限操作。 串口参数支持波特率、数据位、校验位、停止位、流控
流程:遍历当前连接的USB设备-》首先设置串口参数,包括波特率、数据位、停止位、奇偶校验位以及硬件流控等。之后设备就可以执行数据收发操作。
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
前言
WCH 沁恒微电子串口通讯,USB转串口安卓免驱安装程序,支持CH340/CH341/CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104/CH9143的,用于Android操作系统4.4及以上版本的USB Host模式,无需加载Android内核驱动,无需root权限操作。 串口参数支持波特率、数据位、校验位、停止位、流控
流程:遍历当前连接的USB设备-》首先设置串口参数,包括波特率、数据位、停止位、奇偶校验位以及硬件流控等。之后设备就可以执行数据收发操作。
支持定制,QQ252797991
var wchChSerial = uni.requireNativePlugin("wrs-wchChSerial");
方法
- 系统是否支持USB Host功能
wchChSerial.usbFeatureSupported((resp) => {
var usbFeatureSupported = resp.usbFeatureSupported;
if (usbFeatureSupported) {
this.showToast("支持USB Host功能");
} else {
this.showToast("不支持USB Host功能");
}
});
- 当前所有符合要求的设备,显示设备列表
wchChSerial.enumDevice((resp) => {
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if (code == 0) {
var devices = resp.devices;
} else {
this.showMsg(JSON.stringify(resp));
this.showToast("USB设备获取失败");
}
});
- 检查本库目前是否支持该硬件设备 GPIO 特性的配置,应当于操作 GPIO 前调用
var params = {};
params.deviceId = xxx;
wchChSerial.isSupportGPIOFeature(params, (resp) => {
var code = resp.code;
if (code == 0) {
var isSupportGPIOFeature = resp.isSupportGPIOFeature;
} else {
}
});
- 获取该 UsbDevice 的芯片类型
var params = {};
params.deviceId = xxx;
wchChSerial.getChipType(params, (resp) => {
var code = resp.code;
if (code == 0) {
var chipType = resp.chipType;
} else {
}
});
- 判断 USB 设备是否已经被打开
var params = {};
params.deviceId = xxx;
wchChSerial.getChipType(params, (resp) => {
var code = resp.code;
if (code == 0) {
var isConnected = resp.isConnected;
} else {
}
});
- 获取设备的串口数目
var params = {};
params.deviceId = xxx;
wchChSerial.getSerialCount(params, (resp) => {
var code = resp.code;
if (code == 0) {
// 串口总数
var serialNumber = resp.serialNumber;
} else {
}
});
- 打开 USB 设备
var params = {};
params.deviceId = this.deviceId;
// 打开USB设备
wchChSerial.openDevice(params, (resp) => {
var code = resp.code;
if (code == 0) {
var flag = resp.flag;
if (flag) {
// 打开成功
} else {
this.showMsg(JSON.stringify(resp));
this.showToast("打开USB设备失败");
}
} else {
if(code == -2) {
//没有权限打开该设备
//申请权限
wchChSerial.requestPermission({deviceId: this.deviceId});
} else {
this.showMsg(JSON.stringify(openResp));
this.showToast("打开USB设备失败");
}
}
});
- 注册串口数据回调
var params = {};
params.deviceId = this.deviceId;
wchChSerial.registerDataCallback(params, (resp) => {
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if (code == 0) {
var serialNumber = resp.serialNumber;
var data = resp.data;
this.showToast("收到数据");
}
});
- 取消注册串口数据回调
var params = {};
params.deviceId = xxx;
wchChSerial.unRegisterDataCallback(params, (resp) => {
var code = resp.code;
if (code == 0) {
// 成功
} else {
}
});
- 请求 USB 设备的打开权限 申请读写权限
var params = {};
params.deviceId = this.deviceId;
wchChSerial.requestPermission(wchChSerial, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if (code == 0) {
// 请求权限调用成功
// 权限结果通过monitorUSBState回调
} else {
// 请求权限调用失败
}
});
- 注册 Modem 输入信号状态的回调
var params = {};
params.deviceId = this.deviceId;
wchChSerial.registerModemStatusCallback(params, (resp) => {
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if (code == 0) {
var opt = resp.opt;
switch (opt) {
case "onStatusChanged":
break;
case "onOverrunError":
wchChSerial.querySerialErrorCount({
deviceId: this.deviceId,
serialErrorType: "overrun"
}, (resp) => {
});
break;
case "onParityError":
wchChSerial.querySerialErrorCount({
deviceId: this.deviceId,
serialErrorType: "parity"
}, (resp) => {
});
break;
case "onFrameError":
wchChSerial.querySerialErrorCount({
deviceId: this.deviceId,
serialErrorType: "frame"
}, (resp) => {
});
break;
default:
break;
}
} else {
this.showMsg("registerModemStatusCallback resp:" + JSON.stringify(resp));
}
});
- 查询串口错误状态
wchChSerial.querySerialErrorCount({
deviceId: this.deviceId,
serialErrorType: "parity" // frame、parity、overrun
}, (resp) => {
var code = resp.code;
if(code == 0) {
// 出现错误的次数
var count = resp.count;
}
});
- 监听设备的状态变化
// 监测USB的状态
wchChSerial.setUsbStateListener((resp) => {
this.showMsg(JSON.stringify(resp));
var opt = resp.opt;
switch (opt) {
case "usbDeviceDetach":
//设备拔出
this.showMsg("设备拔出");
break;
case "usbDeviceAttach":
//设备插入
this.showMsg("设备插入");
break;
case "usbDevicePermission":
//请求打开设备权限结果
var result = resp.result;
this.showMsg("请求打开设备权限结果:" + result);
break;
default:
break;
}
});
- 设置串口参数
var params = {};
params.deviceId = this.deviceId;
params.serialNumber = index; // 串口号,即串口数目的序号
params.baud = parseInt(this.serialCountArray[index].baud);// 波特率
params.dataBit = 8; // 数据位 5,6,7,8
params.stopBit = 1; // 停止位 1,2
params.parityBit = 0; // 0 NONE;1 ODD;2 EVEN;3 MARK;4 SPACE
params.flow = false; // 流控
wchChSerial.setSerialParameter(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var flag = resp.flag;
if(flag) {
// 发送成功
this.showToast("操作成功");
} else {
this.showToast("操作失败");
}
} else {
this.showToast("操作失败");
}
});
- 设置 DTR 信号
var params = {};
params.deviceId = this.deviceId;
params.serialNumber = index; // 串口号
params.valid = true; // 是否有效(低电平有效)
wchChSerial.setDTR(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var flag = resp.flag;
if(flag) {
// 发送成功
this.showToast("操作成功");
} else {
this.showToast("操作失败");
}
} else {
this.showToast("操作失败");
}
});
- 设置 RTS 信号
var params = {};
params.deviceId = this.deviceId;
params.serialNumber = index; // 串口号
params.valid = true; // 是否有效(低电平有效)
wchChSerial.setRTS(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var flag = resp.flag;
if(flag) {
// 发送成功
this.showToast("操作成功");
} else {
this.showToast("操作失败");
}
} else {
this.showToast("操作失败");
}
});
- 设置 Break 信号
var params = {};
params.deviceId = this.deviceId;
params.serialNumber = index; // 串口号
params.valid = true; // 是否有效(低电平有效)
wchChSerial.setBreak(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var flag = resp.flag;
if(flag) {
// 发送成功
this.showToast("操作成功");
} else {
this.showToast("操作失败");
}
} else {
this.showToast("操作失败");
}
});
- 发送串口数据
var params = {};
params.deviceId = this.deviceId;
params.serialNumber = index; // 串口号
params.data = "FAFB";
wchChSerial.writeData(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var flag = resp.flag;
if(flag) {
// 发送成功
this.showToast("操作成功");
} else {
this.showToast("操作失败");
}
} else {
this.showToast("操作失败");
}
});
- 断开 USB 设备连接
var params = {};
params.deviceId = this.deviceId;
wchChSerial.disconnect(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
// 成功
} else {
this.showToast("操作失败");
}
});
- 关闭所有设备
wchChSerial.closeAll((resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
// 成功
} else {
this.showToast("操作失败");
}
});
- 查询该 USB 设备的所有 GPIO 状态
var params = {};
params.deviceId = this.deviceId;
wchChSerial.queryAllGPIOStatus(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
// 成功
var statuses = resp.statuses;
} else {
this.showToast("操作失败");
}
});
- 查询该 USB 设备的某个 GPIO 状态
var params = {};
params.deviceId = this.deviceId;
params.gpioIndex = 0; // GPIO 序号
wchChSerial.queryGPIOStatus(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
// 成功
var status = resp.status;
} else {
this.showToast("操作失败");
}
});
- 使能该硬件设备的某个 GPIO 配置GPIO
var params = {};
params.deviceId = this.deviceId;
params.gpioIndex = 0; // GPIO 序号
params.enable = true;// true 打开;false 关闭
params.dir = 0; // 0: in 1: out
wchChSerial.enableGPIO(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var flag = resp.flag;
if(flag) {
// 成功
}
} else {
this.showToast("操作失败");
}
});
- 获取该硬件设备的某个 GPIO 的电平值
var params = {};
params.deviceId = this.deviceId;
params.gpioIndex = 0; // GPIO 序号
wchChSerial.getGPIOVal(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var value = resp.value;
} else {
this.showToast("操作失败");
}
});
- 设置该硬件设备的某个 GPIO 的电平值
var params = {};
params.deviceId = this.deviceId;
params.gpioIndex = 0; // GPIO 序号
params.value = 0; // 0: low 1: high
wchChSerial.setGPIOVal(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var flag = resp.flag;
if(flag) {
// 成功
}
} else {
this.showToast("操作失败");
}
});
- 查询该 USB 设备的 GPIO 数量
var params = {};
params.deviceId = this.deviceId;
wchChSerial.queryGPIOCount(params, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) {
var count = resp.count;
} else {
this.showToast("操作失败");
}
});