简介
轻应用:可运行在轻量级嵌入式设备上的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      
      # 全局配置
     
    
开发流程
-  编写轻应用代码 
-  一键热更新 
轻应用 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配置项中有 typeport 等硬件描述概念,对于每一款硬件(通常是芯片/模组/开发板)该配置文件均可能不同。
语法描述格式定义如下:
  
   - 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
       
      "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"
     
    
- 
    
     
    
    
     
      }
     
    
解释:
-  D1I2C0:定义对象,后面大括号里面则描述了该对象的类型。 定义后可以在 JS 中直接使用。
-  type: 描述了该对象的类型,可以是IoT轻应用支持的硬件扩展类型,如 GPIO,I2C,ADC 等。
-  port:描述了该对象的端口,这里需要根据实际硬件连接及芯片的PIN 脚映射关系来填写。
-  dirpull: 是 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级别的日志 | 
| 
 | 显示info级别的日志 | 
| 
 | 显示warning级别的日志 | 
| 
 | 显示error级别的日志 | 
| 
 | 显示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开发板上进行实际开发操作了。谢谢大家
转载:https://blog.csdn.net/HaaSTech/article/details/110158362
 
					


