更新记录
1.0.0(2023-07-13)
android OTG USB串口通讯,无需root权限系统,支持多个串口收发数据,串口参数支持波特率、数据位、校验位、停止位、流控, 支持FTDI FT232R, FT232H, FT2232H, FT4232H, FT230X, FT231X, FT234XD,Prolific PL2303,Silabs CP2102, CP210x, Qinheng CH340, CH341A, CH9102
平台兼容性
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原生插件配置”->”云端插件“列表中删除该插件重新选择
前言
android OTG USB串口通讯,无需root权限系统,支持多个串口收发数据,串口参数支持波特率、数据位、校验位、停止位、流控, 支持FTDI FT232R, FT232H, FT2232H, FT4232H, FT230X, FT231X, FT234XD,Prolific PL2303,Silabs CP2102, CP210x, Qinheng CH340, CH341A, CH9102
支持定制,QQ252797991
var usbSerial = uni.requireNativePlugin("wrs-usbSerialMik");
方法
整体流程:监听USB设备的插拔-》获取USB设备列表-》选择其中一个设备(选择设备端口)-》请求设备权限-》打开设备-》设置波特率/数据位/停止位等 -》监听接收数据-》发送数据
- 注册监听
// 注册监听
usbSerial.registerReceiver((resp) => {
var action = resp.action;
switch (action) {
// USB授权结果
case "com.android.wrs.USB_PERMISSION":
var granted = resp.granted;
this.showMsg("USB授权结果:" + granted);
break;
case "android.hardware.usb.action.USB_DEVICE_ATTACHED":
this.showMsg("有USB设备连接");
break;
case "android.hardware.usb.action.USB_DEVICE_DETACHED":
this.showMsg("USB设备断开连接");
break;
default:
break;
}
});
- 获取所有USB串口
// 先获取所有的USB设备
usbSerial.findSerialPortDevice((resp) => {
var devices = resp.devices;
});
- 请求串口权限,权限结果通过registerReceiver接口回调
var key = devices[clickIndex].key;
var params = {};
params.key = key; // 设备key,从findSerialPortDevice接口获取
// 请求权限
usbSerial.requestPermission(params);
- 打开USB设备
var params = {};
params.key = this.deviceKey;
params.portIndex = parseInt(this.portIndex);
// 打开USB串口
usbSerial.open(params, (openResp) => {
this.showMsg(JSON.stringify(openResp));
this.deviceKey = key;
var flag = openResp.flag;
this.showMsg("打开结果:" + flag);
if (flag) {
// 监听接收的数据
this.listenRead();
}
});
- 监听接收数据
var params = {};
params.key = this.deviceKey;
params.portIndex = parseInt(this.portIndex);
usbSerial.read({
key: this.deviceKey
}, (resp) => {
this.showMsg("收到数据:" + JSON.stringify(resp));
var flag = resp.flag;
if (flag) { // 收到正常数据
} else { // 接收数据出错
}
});
- 写数据
var params = {};
params.key = this.deviceKey;
params.portIndex = parseInt(this.portIndex);
params.data = this.data;
usbSerial.write(params);
- 设置串口参数
var params = {};
params.key = this.deviceKey;
params.portIndex = parseInt(this.portIndex);
// 波特率
params.baudRate = parseInt(this.baudRate);
// 数据位
params.dataBits = parseInt(this.dataBits);
// 停止位
params.stopBits = parseInt(this.stopBits);
// 流控 0:none 1:odd 2:even 3:mark 4space
params.parity = parseInt(this.parity);
usbSerial.setParameters(params);
- 关闭USB串口
usbSerial.close({
key: this.deviceKey,
portIndex: parseInt(this.portIndex)
});