AI智能
改变未来

轻应用介绍 – 用JavaScript进行嵌入式开发


简介

轻应用:可运行在轻量级嵌入式设备上的JavaScript应用(左图)

轻应用框架:封装了JavaScript引擎和API接口,用于支持轻应用开发的软件框架(右图)

特点

  • 轻巧:基于事件驱动的JavaScript轻应用短小精悍,免编译、免烧录

  • 快速:结合阿里云物联网平台,一键完成应用代码热更新

  • 简单:JavaScript API 简洁易懂,大幅降低IoT嵌入式设备应用开发门槛

  • 兼容:轻松移植JavaScript生态软件包,与各类云端业务浑然一体

运行原理

丰富的组件支持

基础组件

  • 文件系统 FS

  • 系统信息 SYS

  • 键值对存储 KV

  • 电源管理 LPM

  • 硬件I/O UART/GPIO/I2C/SPI

  • 模数/数模转换 ADC/DAC

  • 脉宽调制 PWM

  • 定时器 TIMER

  • 实时时钟 RTC

  • 看门狗 WDG

  • 网络协议 UDP/TCP/HTTP/MQTT

高级组件

  • 物联网平台连接组件

  • 支付组件

  • 语音组件

  • 传感器服务组件

  • 定位服务组件

  • 外设驱动库

  • 编码电机/步进电机/伺服电机/继电器

  • 麦克风/语音录放模块/扬声器

  • PS2摇杆/电容触摸/按键

  • TFT彩屏/数码管/三色灯

  • 加速度计/陀螺仪/电子罗盘/气压计/磁力计

  • 温湿度/颜色/光照强度

  • 更多

文件结构

一个最精简的轻应用包由最少两个文件组成,必须放在项目文件夹的根目录

app/├── app.js        # 业务逻辑入口└── app.json      # 全局配置

开发流程

  1. 编写轻应用代码

  2. 一键热更新

轻应用 vs Native C/C++应用

 

app.js – 轻应用入口文件

示例代码

App({onLaunch: function() {// 第一次打开console.log('app onLaunch');},onError: function() {// 出现错误console.log('app onError');},onExit: function() {// 退出轻应用console.log('app onExit');}});

 

轻应用入口

App(Object options)

App()

 用于注册轻应用,接受一个 Object 作为属性,用来配置轻应用的生命周期等。 

App()

 必须在 app.js 中调用,必须调用且只能调用一次。

 

其中options属性有:

属性 类型 描述 触发时机
onLaunch() Function 生命周期回调:监听轻应用初始化 当轻应用初始化后触发,全局只触发一次
onError() Function 监听轻应用错误 当轻应用发生js错误时触发
onExit() Function 生命周期回调:监听轻应用退出 当轻应用退出后触发,全局只触发一次

 

生命周期

onLaunch()

轻应用启动时的hook函数。

onError()

轻应用出现错误的hook函数。

onExit()

轻应用退出时的hook函数。

 

app.json – 全局配置文件

app.json

 用于对轻应用进行全局配置,设置页面文件的路径、硬件I/O口的配置等。

以下是一个基本配置示例:

{"version": "0.0.1","io": {"D1": {"type": "GPIO","port": 31,"dir": "output","pull": "pullup"},"D2": {"type": "GPIO","port": 32,"dir": "output","pull": "pullup"},"D3": {"type": "GPIO","port": 33,"dir": "output","pull": "pullup"}},"debugLevel": "DEBUG","repl": "enable"}

完整配置如下:

配置项

类型

是否必填

描述

version

String

IoT轻应用版本号

io

Object

硬件接口配置

debugLevel

String

设置日志等级,默认为ERROR

repl

String

设置repl开关,默认打开设置为enable,关闭设置为disable

在JS应用代码中,通过 

appConfig

 可以获取到 

app.json

 中的内容。

version 配置项

轻应用版本号。

io 配置项

不同的模组/芯片,各个端口和管脚的功能映射可能是不一样的。

IoT轻应用的配置文件 

app.json

 中,可将硬件(芯片)的物理端口映射成为统一的应用层逻辑端口。

这样映射的好处是在替换不同的硬件或者芯片时,只需要替换 

app.json

 而不用修改应用程序或设备程序,从而便于应用的跨平台运行。

IO配置项中有 

type
port

 等硬件描述概念,对于每一款硬件(通常是芯片/模组/开发板)该配置文件均可能不同。

 

语法描述格式定义如下:

{"io": {"D1":{"type":"GPIO","port":12,"dir":"output","pull":"pullup"},"I2C0":{"type":"I2C","port":0,"mode":"master","addrWidth":7,"devAddr":270,"freq":100000}},"debugLevel": "DEBUG"}

解释:

  • D1
    I2C0

    :定义对象,后面大括号里面则描述了该对象的类型。 定义后可以在 JS 中直接使用。

  • type

    : 描述了该对象的类型,可以是IoT轻应用支持的硬件扩展类型,如 GPIO,I2C,ADC 等。

  • port

    :描述了该对象的端口,这里需要根据实际硬件连接及芯片的PIN 脚映射关系来填写。

  • dir
    pull

    : 是 GPIO 类型特有的,用于描述 GPIO 输出输出及上拉下拉,其他如 ADC 类型则有 

    sampling

     采样频率这种类型描述。

     

 

外设 type 说明

io配置项的 

type

 用于描述该对象是什么硬件端口类型,而每一种

type

也拥有不同的属性字段,如 GPIO 与 ADC 的属性字段是不一样的。

 

GPIO

属性字段

数据类型

属性值

是否必须

字段说明

port

Number

1

配置端口值,端口值跟硬件接口有一一对应关系

dir

String

output

配置引脚方向,设置为输出模式(默认)

input

配置引脚方向,设置为输入模式

irq

配置引脚方向,设置为为中断模式

analog

配置引脚方向,设置为模拟 IO 模式

pull

String

pulldown

配置引脚电阻,设置为上拉模式(默认)

pullup

配置引脚电阻,设置为下拉模式

opendrain

配置引脚电阻,设置为开漏模式

intMode

String

rising

配置引脚中断模式,设置为上升沿触发

falling

配置引脚中断模式,设置为下降沿触发

both

配置引脚中断模式,设置为边沿触发(默认)

 

示例

{"io": {"D3": {"type": "GPIO","port": 22,"dir": "output","pull": "pullup"},"D4": {"type": "GPIO","port": 23,"dir": "irq","pull": "pullup","intMode": "rising"}},"debugLevel": "DEBUG"}

UART

属性字段

数据类型

属性值

是否必须

字段说明

port

 

Number

1

配置端口值,这里跟芯片 datasheet上 的端口对应

dataWidth

Number

5/6/7/8

串口数据宽度值,默认为 8(bits)

baudRate

Number

9600、115200等

串口波特率,默认为 115200

stopBits

Number

1/2

串口停止位,默认为 1

flowControl

String

disable

流控设置,默认 disable

cts

rts

rtscts

parity

String

none

奇偶校验设置,默认 none

odd

even

 

示例

{"io": {"UART1":{"type":"UART","port":1,"dataWidth":3,"baudRate":9600,"stopBits":1,"flowControl":"disable","parity":"none"},"UART2":{"type":"UART","port":2,"dataWidth":3,"baudRate":115200,"stopBits":1,"flowControl":"disable","parity":"none"}},"debugLevel": "DEBUG"}

I2C

属性字段

数据类型

属性值

是否必须

字段说明

port

Number

1

配置端口值,这里跟芯片 datasheet 上的端口对应

addrWidth

Number

7 或 10

配置 I2C 总线地址宽度,默认 7

freq

Number

100000、400000等

配置 I2C 总线频率,默认 300000

mode

String

master 或 slave

配置 I2C 总线主从模式,默认 master

devAddr

Number

224等

 

配置 I2C 从设备地址,默认 224

 

示例

{"io": {"I2C0":{"type":"I2C","port":0,"mode":"master","addrWidth":7,"devAddr":27,"freq":100000}},"debugLevel": "DEBUG"}

SPI

属性字段

数据类型

属性值

是否必须

字段说明

port

 

Number

1

配置端口值,这里跟芯片 datasheet 上的端口对应

mode

String

master 或 slave

配置 SPI 总线模式,默认 master

freq

Number

3250000、6500000等

配置 SPI 总线频率

 

示例

{"io": {"SPI1":{"type":"SPI","port":1,"mode":"master","freq":3250000}},"debugLevel": "DEBUG"}

ADC

属性字段

数据类型

属性值

是否必须

字段说明

port

Number

1

配置端口值,这里跟芯片 datasheet 上的端口对应

sampling

Number

12000000

配置 ADC 采样率

 

示例

{"io": {"voltage": {"type": "ADC","port": 1,"sampling": 12000000}},"debugLevel": "DEBUG"}

DAC

属性字段

数据类型

属性值

是否必须

字段说明

port

Number

1

配置端口值,这里跟芯片 datasheet 上的端口对应

 

示例

{"io": {"DAC1": {"type": "DAC","port": 1}},"debugLevel": "DEBUG"}

PWM

属性字段

数据类型

属性值

是否必须

字段说明

port

Number

1

配置端口值,这里跟芯片 datasheet 上的端口对应

 

示例

{"io": {"PWM1": {"type": "PWM","port": 1}},"debugLevel": "DEBUG"}

TIMER

属性字段

数据类型

属性值

是否必须

字段说明

port

Number

1

配置端口值,这里跟芯片 datasheet 上的端口对应

 

示例

{"io": {"TIMER1": {"type": "TIMER","port": 1}},"debugLevel": "DEBUG"}

debugLevel

配置调试日志等级,分为如下几个等级,默认为ERROR

 

等级

说明

DEBUG

显示debug级别的日志

INFO

显示info级别的日志

WARN

显示warning级别的日志

ERROR

显示error级别的日志

FATAL

显示fatal级别的日志

 

repl(交互式解析器)

配置交互式解析器开关,默认打开。

说明

enable

打开repl功能

disable

关闭repl功能

 

示例

{"version": "1.0.0","io": {"D1": {"type": "GPIO","port": 31,"dir": "output","pull": "pullup"}},"debugLevel": "DEBUG","repl": "disable"}

至此,轻应用概览、运行周期,详细配置与操作就介绍完了。各位开发者们可以在HaaS开发板上进行实际开发操作了。谢谢大家

如需更多技术支持,可加入钉钉开发者群

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 轻应用介绍 – 用JavaScript进行嵌入式开发