开发者学堂课程【AliOS Things 物联网开发教程:JavaScript 轻应用开发】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/835/detail/13991
JavaScript 轻应用开发
内容介绍:
一、课前准备
二、JavaScript 轻应用简介
一、课前准备
课程包括 JavaScript 简介、JavaScript 引擎和教育样板间三部分,在实际讲解过程中有略微的差别。在课程开始之前,为了达到更好的效果,需要做如下三点准备:
1、安装 VSCode Haas Studio 插件
可以参考 Haas Studio 的技术文档,本文包括了 Haas Studio 工具的获取、开发模式以及整个开发流程的介绍,需要的同学可以进行参考。
2、下载 ALIOS Things 源码
可以到 Gitee 的 AliOS-Things 的代码仓库进行下载。
3、准备 Haas EDU K1 开发版
接下来进入本节课的正式内容,本节课主要将从 JavaScript 轻应用简介与JavaScript 轻应用实践两方面进行讲解。
二、JavaScript 轻应用简介
1、概念
轻应用是可运行在轻量级嵌入式设备上的 JavaScript 应用,轻应用框架则是开发轻运用的软件框架、工具及服务,简单概括为用 JavaScript 开发嵌入式。
2、特点
(1)轻巧
基于事件驱动的 JavaScript 轻应用短小精悍,免编译、免烧录。
(2)快速
结合阿里云物联网平台,一键完成应用代码热更新。
(3)简单
JavaScript API 简洁易懂,大幅降低 IoT 嵌入式设备应用开发门槛。
(4)兼容
轻松移植 JavaScript 生态软件包,与各类云端业务浑然一体。
以上特点将会在接下来的讲解中有所展现。
3、组件支持
(1) 基础组件
①文件系统 FS
②系统信息 SYS
③键值对存储 KV
④电源管理 LPM
⑥硬件 I/OUART/GPIO/I2C/SPI
⑦模数/数模转换 ADC/DAC
⑧脉宽调制 PWM
⑨定时器TIMER 实时时钟 RTC
⑩看门狗 WDG
⑪网络协议 UDP/TCP/HTTP/MQTT
(2)高级组件
①物联网平台连接组件
②支付组件
③语音组件
④传感器服务组件
⑤定位服务组件
⑥外设驱动库
a 编码电机/步进电机/伺服电机/继电器
b麦克风/语音录放模块/扬声器
c PS2摇杆/电容触摸/按键
d TFT彩屏/数码管/三色灯
e 加速度计/陀螺仪/电子罗盘/气压计/磁力计
f 温湿度/颜色/光照强度
g 更多
4、基本原理
轻应用的原理如下图所示:
首先将 JS 代码打包成二进制文件,即图中带引号的字符串推送到设备文件系统中,通过引擎调用底层的 Native C 的 API,从而实现对计算器的访问。
5、开发流程
开发轻应用流程需要以下两个步骤:
(1)编写轻应用代码
只需编写 app.js 和 app.json 两个文件,其中 app.js 包含了业务代码,app.json 定义了相关配置。
举个例子,如果在 app.js 中用到了串口的功能,在 app.json 中就要指定第几路串口以及串口的波特率等配置。
(2)一键热更新
通过轻应用工具 amp 将代码和配置推送至开发版即可。
6、与传统嵌入式的差异
通过前面的介绍,我们对轻应用已经有了一定的了解,接下来继续学习轻应用与传统嵌入式之间最直观的不同,如下图所示:
(1)开发链路
传统嵌入式的开发链路较长,而轻应用的开发链路相对较短;
(2)功能实现过程
①区别
传统嵌入式需要历经移植、编译、链接,烧写、生产五个步骤来量产产品,而轻应用依托庞大的JS生态库和持续丰富的底层驱动,仅用编写代码、推送代码两个步骤。
②联系
但是轻应用也不是凭空产生的,而是依托于传统嵌入式的基础,将最基础的驱动编写完毕后,以固件的形式烧进设备,没有驱动的增熵,就不用经过传统嵌入式的五个步骤,开发者也无需再去翻阅大量晦涩难懂的协议文档,计算器手册无需再编写更多门槛更高的 C 代码,简洁的几行 JS 代码就可以进行业务的开发。轻应用的“轻”得益于将繁杂的细节留在了底层,而把重要且简单的 API 抽象出来供开发者使用。
③代码演示
准备两份代码,一份是 Native C 代码,即轻应用的固件代码,另一份是轻应用的业务代码。通过这两份代码可以直观对比两者的编译、烧录过程。
轻应用代码:
app > JS app.js > …
console.log ('hello amp!');
setInterval(fuction () {
console.log ('Hello World,time:'+ new Date());
},1000);
分别运行两段代码,可以发现 Native C 代码与轻应用代码最大的不同在于后者大大缩短了运行时间。
7、轻应用在整个 Haas 生态中的位置
轻应用在整个 Haas 生态中的位置可以通过下图来观察到:
(1)在整个Haas 生态中架构中,最底层是Haas硬件,其中包括了的Haas Edu k1、Haas 600、Haas 200、Haas 100和 Haas 定制模组&芯片等等,其会持续根据不同行业、不同应用场景推出相对应的硬件方案;
(2)Haas 硬件上一层是 AliOS Things,是阿里针对物联网推出的 RTOS 操作系统,目前已经完全对外开源,可通过 github 和 gitee 平台下载;
(3)AliOS Things上一层是 Native C驱动,包含了 Haas 100和 Haas Edu K1的轻应用依赖的最新驱动特性,有拓展需要的同学可以参考前面的Haas智能硬件开发训练营中如何拓展传感器的课程;
(4)Native C驱动上一层是轻应用框架。这部分内容会在后面的课程中进行讲解。
(5)轻应用框架上一层是各类云端服务,其可以包括包括轻应用使用的热更新服务、日志服务、千里传音等等。值得一提的是,基于服务的一众 App 应用或者小程序,与 JavaScript 语言之间亲和度极高,其中有些甚至是直接基于 JavaScript 语言进行开发的。
整体来看整个架构,可以发现 Haas 生态是不断进行抽象的过程。从 Haas 硬件到AliOS Things、再到轻应用、再到服务、再到应用,每一次的抽象都在降低开发的门槛,节约开发者的成本。
8、轻应用的整体架构
如下图所示:
最下层是与 AliOS Things 的适配层,与底层 Native C 的 API 对接;其上方是 JS 引擎,把对接的 API 打成常见的 JS 库形式以供开发者使用,常见的是之前所说的各类基础组件和高级组件;再上层是各类工具,包括了 IDE 工具、命令行工具等等;再上一层基于组件开发的解决方案,有 CAT1 定位案例、播报音箱案例、设备驱动案例、数据采集案例、传感器驱动案例、支付案例还有 DTO 案例等等。