本文介绍UART-串口支持函数的参数说明及示例。
硬件平台
产品型号 | 是否支持 | 硬件类型 | 固件版本号 |
HaaS600Kit | 是 | 开发板 | 4.0.1 |
HaaS510 | 是 | DTU | 4.0.1 |
HaaS520 | 是 | DTU | 4.0.1 |
HaaS530 | 是 | DTU | 4.0.1 |
HaaS531 | 是 | DTU | 4.0.1 |
HaaS632-LT32V | 是 | 模组 | 4.0.1 |
HaaS600-EC600S | 是 | 模组 | 4.0.1 |
HaaS600-EC600N | 是 | 模组 | 4.0.1 |
HaaS600-EC600U | 是 | 模组 | 4.0.1 |
HaaS600-N715 | 是 | 模组 | 4.0.1 |
open(Object options)
打开串口,创建UART实例。
入参
Object类型,属性如下:
属性 | 类型 | 是否必填 | 描述 |
id | String | 是 | 在 |
mode | String | 是 |
|
返回
UART串口实例,为空代表创建失败。
write(Uint8Array|String data)
发送串口数据。该函数为阻塞函数,串口发送完成后才会返回。
入参
参数 | 类型 | 是否必填 | 描述 |
data | Uint8Array或String | 是 | 需要发送到串口的数据。 |
返回
无。
read(Uint8Array data, Number bytes, Number timeout)
轮询模式主动读取指定bytes
的串口数据,读取到的串口数据为Uint8Array
类型,仅串口配置为poll
模式时生效。
入参
参数 | 类型 | 是否必填 | 描述 |
data | Uint8Array | 是 | 保存从串口读取的数据。 |
bytes | Number | 是 | 单次读取数据的最大长度,超出长度范围的数据在下次读取时返回。 |
timeout | Number | 是 | 轮询读超时等待时间。 |
返回
读取到的串口数据,Uint8Array
类型,如果没有数据,则返回空数组。
on(String event, Function cb)
中断监听读取模式,串口配置为poll
模式该函数无效。当串口接收到新数据时,执行回调函数cb
。
入参
参数 | 类型 | 是否必填 | 描述 |
event | String | 是 | 目前支持 |
cb | Function | 是 | 回调函数 |
回调函数cb:
参数 | 类型 | 是否必填 | 描述 |
onData | ArrayBuffer | 是 | 单次最大接收数据长度为2048 Byte, 超出长度范围的数据分包返回。 |
返回
无。
close()
关闭串口实例。
入参
无。
返回
无。
示例代码
板级配置
板级详细配置说明,请参见app.json-全局配置文件。
{
"version": "1.0.0",
"io": {
"mainUART":{
"type":"UART",
"port":2,
"dataWidth":8,
"baudRate":115200,
"stopBits":1,
"flowControl":"disable",
"parity":"none"
}
},
"debugLevel": "DEBUG",
"repl": "disable"
}
应用脚本
/* 加载 uart 模块 */
import * as uart from "uart";
/* ArrayBuffer 转字符串 */
function ArrayBufferToString(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
}
/* Uint8Array 转字符串 */
function Uint8ArrayToString(arrayData) {
var dataString = "";
for (var i = 0; i < arrayData.length; i++) {
dataString += String.fromCharCode(arrayData[i]);
}
return dataString;
}
/* ArrayBuffer 转 Uint8Array */
function ArrayBufferToUint8Array(buf) {
return Array.prototype.slice.call(new Uint8Array(buf));
}
/* 创建串口实例 serial */
var serial = uart.open({
id: "mainUART",
mode: "poll",
});
/* msgArray ASC-II: ABCDabcd++ */
var msgArray = [0x41, 0x42, 0x43, 0x44, 0x61, 0x62, 0x63, 0x64, 0x2b, 0x2b];
var msgStr = "this is amp js app uart test\r\n";
/* 串口发送数据 */
for (let index = 0; index < 5; index++) {
sleepMs(1000);
serial.write(msgArray);
serial.write(msgStr);
}
/* 串口轮询读取串口数据,仅配置为 poll 模式时生效 */
setInterval(() => {
var data = [];
serial.read(data, 2048, 100);
if (data.length != 0) {
console.log(data.length);
console.log(Uint8ArrayToString(data));
}
}, 100);
/* 串口中断读取串口数据,配置为 poll 模式时无效 */
serial.on("data", function (onData) {
/* 打印出串口接收到的数据,数据类型为 ArrayBuffer,先转为字符串后再打印 */
console.log("uart on: " + ArrayBufferToString(onData));
/* 串口把接收到的数据直接回发出去 */
serial.write(ArrayBufferToUint8Array(onData));
/* 如果串口接收到 "exit" 字符串,测试结束 */
if (ArrayBufferToString(onData) === "exit") {
console.log("uart test finish");
/* 关闭串口实例 serial */
serial.close();
}
});