来源 | HaaS技术社区
1、前言
关于JavaScript轻应用的文档请参考:轻应用总览
为了便于开发者使用底层硬件的功能,轻应用里以JSAPI的形式对底层硬件接口做了封装。主要包含uart、gpio、adc、dac、pwm、i2c、spi、timer、rtc、watch dog等。
2、UART - 串口
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明
-
{
-
"io": {
-
"serial1":{
-
"type": "UART",
-
"port": 2,
-
"dataWidth": 8,
-
"baudRate": 115200,
-
"stopBits": 0,
-
"flowControl": "disable",
-
"parity": "none"
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var uart = require( 'uart');
-
-
var msgbuf = 'this is amp uart test'
-
// uart open
-
var serial = uart.open({
-
id: 'serial1'
-
});
-
-
// uart write
-
serial.write(msgbuf);
-
-
// uart read
-
var value = serial.read();
-
-
console.log( 'sensor value is ' + value);
-
-
// uart data event
-
serial.on( 'data', function(data) {
-
console.log( 'uart receive data is ' + data);
-
});
-
-
// uart close
-
serial.close();
open(Object options)
打开串口,创建 UART 实例。
入参
Object类型,属性如下:
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
在app.json中定义的UART id名称 |
返回
- UART 串口实例,为空代表创建失败。
UART 实例
事件:'data'
当串口接收到新数据时,会触发
参数 |
类型 |
必填 |
描述 |
data |
ArrayBuffer |
是 |
串口接收到的数据 |
UART.write(String|ArrayBuffer data)
发送串口数据,该函数为阻塞函数,串口发送完成后才会返回。
入参
参数 |
类型 |
必填 |
描述 |
data |
String或ArrayBuffer |
是 |
需要发送到串口的数据 |
UART.read(Number bytes)
主动读取指定bytes的串口数据。
入参
参数 |
类型 |
必填 |
描述 |
bytes |
Number |
是 |
需要读取的字节个数 |
返回值
- 读取到的串口数据,ArrayBuffer类型,如果没有数据,则返回空数组。
UART.close()
关闭串口实例。
UART.on(String event, Function cb)
监听串口事件。
3、GPIO
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明
-
{
-
"io": {
-
"led": {
-
"type": "GPIO",
-
"port": 23,
-
"dir": "output",
-
"pull": "pullup"
-
},
-
"key": {
-
"type": "GPIO",
-
"port": 25,
-
"dir": "input",
-
"pull": "pullup",
-
"intMode": "rising"
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var gpio = require('gpio');
-
-
// led
-
var led = gpio.open({
-
id: 'led'
-
});
-
-
// set led gpio level
-
led.writeValue(1);
-
led.readValue();
-
led.writeValue(0);
-
led.readValue();
-
-
// led toggle
-
led.toggle();
-
-
// key
-
var key = gpio.open({
-
id: 'key'
-
});
-
-
//key trigger callback
-
key.onIRQ({
-
trigger: 'rising',
-
cb: function() {
-
console.log('key pressed\n');
-
}
-
});
-
-
// release led&key
-
led.close();
-
key.close();
open(Object options)
打开GPIO接口,创建 GPIO 实例。
入参
Object类型,属性如下:
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
在app.json中定义的GPIO id名称 |
返回
- GPIO 实例。
GPIO 实例
GPIO.writeValue(Number level)
设置GPIO电平值,GPIO引脚为输出模式时可用。
入参
属性 |
类型 |
必填 |
描述 |
level |
Number |
是 |
电平值,1(高电平) 或者 0(低电平) |
GPIO.toggle()
切换GPIO的电平,当前GPIO电平为低电平时设置为高电平,当前GPIO电平为高电平时设置为低电平。
GPIO.onIRQ(Function cb)
开启引脚中断触发,引脚为输入模式时可用。
入参
属性 |
类型 |
必填 |
描述 |
cb |
Function |
否 |
引脚中断触发回调函数 |
GPIO.readValue()
读取GPIO电平值,输入模式和输出模式时均可用。
返回值
- Number类型,电平值,1(高电平) 或者 0(低电平)。
GPIO.close()
关闭GPIO实例。
4、ADC
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明
-
{
-
"io": {
-
"battery": {
-
"type": "ADC",
-
"port": 1,
-
"sampling": 12000000
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var adc = require('adc');
-
-
// voltage
-
var vol = adc.open({
-
id: 'battery'
-
});
-
-
// read voltage
-
var value = vol.readValue();
-
-
console.log('voltage value is ' + value);
-
-
vol.close();
open(Object options)
打开ADC,创建 ADC 实例。
入参
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
在app.json中定义的ADC id名称。 |
返回
- ADC 实例。
ADC 实例
ADC.readValue()
读取ADC数据。
返回值
- Number类型,读取到的ADC数据。
ADC.close()
关闭ADC实例。
5、DAC
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明
-
{
-
"io": {
-
"voltage": {
-
"type": "DAC",
-
"port": 1
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var dac = require('dac');
-
-
// led
-
var voltage = dac.open({
-
id: 'voltage'
-
});
-
-
voltage.writeValue(65536 / 2);
-
-
var value = voltage.readValue();
-
-
console.log('voltage value is ' + value);
-
-
voltage.close();
open(Object options)
打开DAC,创建 DAC 实例,默认启动DAC电压输出。
入参
Object类型,属性如下:
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
在app.json中定义的DAC id名称。 |
返回
- DAC 实例。
DAC 实例
DAC.readValue()
读取DAC输出值。
返回值
- Number类型,DAC输出值。
DAC.writeValue(Number value)
设置DAC输出值。
入参
属性 |
类型 |
必填 |
描述 |
value |
Number |
是 |
需要设置的DAC值 |
DAC.close()
关闭DAC实例。关闭DAC实例后,也会停止DAC电压输出。
6、PWM
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明。
-
{
-
"io": {
-
"motor":{
-
"type":"PWM",
-
"port":4
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var pwm = require('pwm');
-
-
// motor start
-
var motor = pwm.open({
-
id: 'motor'
-
});
-
-
// get motor option
-
var freq = motor.get().freq;
-
var duty = motor.get().duty;
-
-
console.log('pwm config freq is ' + freq + ' duty is ' + duty);
-
-
// set motor option
-
motor.set(0.5, 500000);
-
-
// motor stop
-
motor.close();
open(Object options)
打开PWM,创建 PWM 实例。
入参
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
在app.json中定义的PWM id名称。 |
返回
- PWM 实例。
PWM 实例
PWM.set(Number duty, Number freq)
设置PWM参数,同时会启动PWM输出。
入参
属性 |
类型 |
描述 |
duty |
Number |
设置PWM占空比,范围在0~100,单位是百分比 |
freq |
Number |
设置PWM的频率,单位是HZ |
PWM.get()
获取PWM参数。
返回值
Object类型,详细的属性为:
属性 |
类型 |
描述 |
duty |
Number |
PWM占空比。 |
freq |
Number |
PWM的频率。 |
PWM.close()
关闭PWM实例,同时也会停止PWM输出。
7、I2C
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明
-
{
-
"io": {
-
"i2c1":{
-
"type":"I2C",
-
"port":0,
-
"mode":"slave",
-
"addrWidth":7,
-
"devAddr":27,
-
"freq":400000
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var i2c = require('i2c');
-
-
var memaddr = 0x18;
-
var msgbuf = [0x10, 0xee];
-
// sensor
-
var sensor = i2c.open({
-
id: 'i2c1'
-
});
-
-
// sensor write
-
sensor.write(msgbuf);
-
var value = sensor.read(2);
-
-
console.log('sensor value is ' + value);
-
-
// sensor write to memory address
-
sensor.writeMem(memaddr, msgbuf);
-
-
// sensor read from memory address
-
var vol = sensor.readMem(memaddr, 2);
-
console.log('sensor read mem vol is ' + vol);
-
-
sensor.close();
open(Object options)
打开I2C,创建 I2C 实例。
入参
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
指定要打开的I2C端口。 |
返回
- I2C 实例。
I2C 实例
I2C.write(String|ArrayBuffer data)
发送数据,该函数为阻塞函数,I2C发送完成后才会返回。
入参
属性 |
类型 |
必填 |
描述 |
data |
String或ArrayBuffer |
是 |
要发送的数据 |
I2C.writeMem(ArrayBuffer memaddr, String|ArrayBuffer data)
向寄存器地址
入参
属性 |
类型 |
必填 |
描述 |
memaddr |
Number |
是 |
寄存器地址memaddr |
data |
String或ArrayBuffer |
是 |
要发送的数据 |
I2C.read(Number bytes)
主动读取指定
入参
属性 |
类型 |
必填 |
描述 |
bytes |
Number |
是 |
需要读取的字节个数 |
返回值
- ArrayBuffer类型,读取到的I2C数据。
I2C.readMem(String|ArrayBuffer memaddr, Number bytes)
主动向寄存器地址
入参
属性 |
类型 |
必填 |
描述 |
memaddr |
Number |
是 |
寄存器地址memaddr |
bytes |
Number |
是 |
需要读取的字节个数 |
返回值
- 读取到的I2C数据,ArrayBuffer类型。
I2C.close()
关闭I2C实例。
8、SPI
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明
-
{
-
"io": {
-
"sensor1":{
-
"type":"SPI",
-
"port":1,
-
"mode":"slave",
-
"freq":3250000
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var spi = require('spi');
-
-
var msgbuf = [0x10, 0xee];
-
// spi sensor
-
var sensor = spi.open({
-
id: 'sensor1'
-
});
-
-
sensor.write(msgbuf);
-
var value = sensor.read(2);
-
-
console.log('sensor value is ' + value);
-
-
sensor.close();
open(Object options)
打开SPI,创建 SPI 实例。
入参
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
指定要打开的SPI端口 |
返回
- SPI 实例。
SPI 实例
SPI.write(String|ArrayBuffer data)
通过SPI发送数据,该函数为阻塞函数,SPI发送完成后才会返回。
入参
属性 |
类型 |
必填 |
描述 |
data |
String | ArrayBuffer |
是 |
需要发送的数据 |
SPI.read(Number bytes)
读取指定bytes的SPI数据,该函数为阻塞函数,读取到指定bytes的数据后才会返回。
入参
属性 |
类型 |
必填 |
描述 |
bytes |
Number |
是 |
指定需要读取的字节个数 |
返回值
- ArrayBuffer类型,读取到的SPI数据。
SPI.close()
关闭SPI实例。
9、timer
示例代码
板级配置
板级详细配置说明见:app.json - 全局配置文件说明
-
{
-
"io": {
-
"timer1": {
-
"type": "TIMER",
-
"port": 1
-
}
-
},
-
"debugLevel": "DEBUG"
-
}
业务脚本
-
var timer = require('timer');
-
-
var timer1 = timer.open({
-
id: 'timer1'
-
});
-
-
// set timer1 timeout
-
timer1.setTimeout(function() {
-
console.log('timer1 timeout');
-
}, 1000);
-
-
// timer1.clearTimeout();
-
-
// set timer1 interval
-
timer1.setInterval(function() {
-
console.log('timer1 interval');
-
}, 1000);
-
-
// timer1.clearInterval();
-
-
timer1.close();
open(Object options)
打开硬件TIMER,创建 TIMER 实例。
入参
Object类型,属性如下:
属性 |
类型 |
必填 |
描述 |
id |
String |
是 |
在app.json中定义的TIMER id名称 |
返回
- TIMER 实例。
TIMER 实例
硬件TIMER可以设置成超时(setTimeout())和周期(setInterval())2种状态,但是同一时刻只能有一个状态。
TIMER.setTimeout(Function cb, Number timeout)
在指定的毫秒数后调用回调函数。
入参
属性 |
类型 |
必填 |
描述 |
cb |
Function |
是 |
定时器超时回调函数 |
timeout |
Number |
是 |
设置timer的定时时间 |
TIMER.clearTimeout()
停止执行
TIMER.setInterval(Function cb, Number time)
按照指定的周期(以毫秒计)来调用回调函数。
入参
参数option为Object类型,详细的属性为:
属性 |
类型 |
必填 |
描述 |
cb |
Function |
是 |
定时器周期回调函数 |
time |
Number |
是 |
设置timer的周期时间 |
TIMER.clearInterval()
停止执行
TIMER.close()
关闭TIMER实例。
10、RTC
示例代码
-
var rtc = require('rtc');
-
-
// start rtc
-
rtc.start();
-
-
// set rtc time
-
rtc.setTime(new Date());
-
-
// get rtc time
-
var current_time = rtc.getTime();
-
console.log('current time is ' + current_time);
-
-
rtc.close();
方法
rtc.start()
启动RTC。
rtc.setTime(Date time)
设置RTC时间。
入参
- 需要设置的时间,Date 类型。
rtc.getTime()
获取RTC当前时间。
返回值
- 返回当前的RTC时间,Date 类型。
rtc.close()
关闭RTC。
11、watchdog
示例代码
业务脚本
-
var wdg = require('wdg');
-
-
//start wdg
-
wdg.start(2000);
-
-
// feed wdg
-
wdg.feed();
-
-
// stop wdg
-
wdg.stop();
方法
wdg.feed()
喂狗。
wdg.stop()
停止WDG定时器。
wdg.start(Number timeout)
启动WDG定时器。如果timeout之后没有进行喂狗操作,会导致系统重启。
入参
参数 |
类型 |
是否必须 |
说明 |
timeout |
Number |
是 |
WDG超时时间,单位毫秒 |
如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号
更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/