摘要:能让JavaScript应用运行在haas100开发板上,这实在是太酷了,这种方式被阿里云称之为“轻应用”。本文带各位从零开始,先了解啥是轻应用,然后搭建环境,再一步步将一个最简单的“轻应用”运行在haas100开发板上。实现的效果就是将js代码下载到开发板之后,指定的小灯闪烁。
目录
阿里云haas100开发板源代码适配python3.7版本的方法
阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来
硬件:HaaS100物联网开发板
软件:amp-win(命令行版),a0s-cube(命令行版),win7 x64系统
实验目的
使用“轻应用”方式编程实现一个单独的LED灯闪烁。
1 操作步骤
1.1 搭建编程环境
详细步骤请参考下面连接,如果已经成功编译并下载过helloworld_demo,证明您已经掌握了基本操作,请忽略搭建编程环境这一步。
初学者入门阿里云Haas100开发板基本步骤
1.2 了解一下轻应用运行模式
为什么把运行模式知识作为一个步骤来写?
是因为这个知识太重要了,不了解真的影响后面步骤的操作。
在阿里云的帮助文档中,用下图描述了一下轻应用的运行原理。对于基础知识略弱的同学理解起来可能有些吃力。
我用下图来描述一下轻应用。轻应用实质上就是在开发板中烧录一个java script运行环境。这个环境对上可以承接js程序,对下可以直接操作硬件。从而用简单的代码实现复杂的功能。
1.3 编译轻应用运行固件
固件的名字叫做amp_app,amp这三字字母是那几个单词的缩写还不太确定,我猜是什么什么运行环境,或者支持固件之类的。
2020年11月12日,从C:\Users\Administrator\AliOS-Things\components\amp文件夹下的readme文件查到了什么是amp
AliOS Things Mini Program (AMP)是一套运行在资源受限设备上的轻量级应用软件框架。
位于C:\Users\Administrator\AliOS-Things\application\example\amp_app文件夹下。
像编译helloworld程序一样编译这个程序。这个程序烧写进入开发板之后,并不是直接开始执行硬件操作了,而是开始解析js程序。也就是说,js让它干啥,它才开始有动作。
首先打开命令行。
然后通过cd 命令到alios-things目录下
cd alios-things
然后运行配置命令
aos make amp-app@haas100 -c config
然后编译
aos make
界面是下图这样的,如果编译不成功,请参考初学者入门阿里云Haas100开发板基本步骤
1.4 烧录
首先确保开发板供电,并连接Micro USB线缆到电脑,并保证USB驱动安装成功。
进入目录C:\Users\Administrator\AliOS-Things\platform\mcu\haas1000\release\write_flash_gui
找到烧录工具
双击打开
设置串口号
选择烧录
可以按下复位键(短键柄那个)之后开始烧录。烧录成功之后就完成了轻应用固件的准备工作。
1.5 准备编写轻应用程序的环境
其实就是一个运行在windows命令行的工具。
请点击下方蓝色字体下载。或者通过阿里云官方文档点击下载。
解压之后的文件夹内容是
这个工具叫做“命令行”工具,它是运行在命令行下的,如果双击绿色图标的amp,会有命令行窗口弹出一下,然后闪退
使用之前,建议将这个目录复制到我的文档目录下,也就是cmd命令行打开后直接进入的目录。
例如我复制的位置是C:\Users\Administrator\amp-win
通过cd命令进入amp-win目录之后,输入下面的指令。
amp device list
注意,不是阿里云帮助文档中的带点和斜杠的命令,也不用带exe后缀。
运行的结果是下面的这样。这时开发板只连接了调试信息USB线,并没有连接USB 串口模块。尽管提示红色信息,但是起码证明这个工具运行起来了。
1.6 连接USB串口模块
我使用的模块是下图这样的。向外连接了两根数据线:TXD和RXD,分别提供发送和接收功能。其他的不用连接,因为串口信息线已经于电脑连接了,GND已经处于同一个电平。
按照USB串口收发和HAAS100开发板收发对调连接的方式进行连接。并且将GPIO47通过杜邦线连接到3.3V上。
连接实物图如下图所示。上拉到3.3V是为了让开发板准备好接收电脑发送过来的js程序。使用USB串口模块的目的,是为了不与信息串口冲突。
按下复位键,如果红色标识的LED间歇性双闪,证明固件运行成功。
1.7 准备js程序
打开amp-win目录下的app文件夹
分别修改app.js和app.json文件
app.js代码如下
var gpio = require('gpio');
var led3 = gpio.open({
id: 'LED3',
success: function() {
console.log('gpio: open led success')
},
fail: function() {
console.log('gpio: open led failed')
}
});
var vol = 0;
setInterval(function() {
vol = 1 - vol;
led3.writeValue(vol);
console.log('led set value ' + vol);
}, 1000);
app.json代码如下
{
"version": "1.0.0",
"io": {
"LED3": {
"type": "GPIO",
"port": 36,
"dir": "output",
"pull": "pulldown"
}
},
"debugLevel": "DEBUG"
}
修改完毕后,一定点击保存。
1.8 使用amp命令行工具传输程序到开发板
用到的两条指令分别是:
第一条指令是显示当前的串口号
amp seriallist
第二条指令是用USB串口对应的串口号进行烧录
amp serialput app com14
当出现如下的界面时,就证明烧录成功了。
2.编程效果
如下图所示,红框选中的LED闪烁。
3.结论
采用轻应用的方式开发haas100,具有多个优势:第一,不用反复对底层代码进行修改,直接修改js程序即可;第二,代码非常简单;第三,一次烧录硬件固件即可;第四,具有在线热更新功能,为成熟产品研制奠定了基础。掌握了基本环境搭建和轻应用操作基本步骤之后,采用这种开发方式将大大提高开发效率。
4.扩展阅读:嵌入式设备的javascript引擎
为什么选择javascript搞IOT开发?
一个比较好的解释是:IOT缺少一个关键的系统---应用。
IoT(Internet of Things)是大家公认的未来。但让人尴尬的是,这些代表未来的炫酷产品似乎只存在于业内人士的 PPT 中。真正走进普通人生活的,大多只是一些“带有 Wi-Fi 的普通硬件”。和大多数生态普及过程中遇到的问题相同,IoT 缺少一个关键的系统——应用。应用缺失,自然难以营造用户生态。然而这并不完全是开发者的责任,大多数情况下,开发者都处在臣妾做不到的状态,因为涉及硬件的“嵌入式开发”需要非常多的底层硬件代码基础,这让广大的软件程序猿望而却步。(参见链接https://www.sohu.com/a/71527621_114877)。
以前嵌入式处理器的性能比较弱,不足以支持javascript引擎的运行,毕竟JavaScript(简称“JS”) 是一种解释型或即时编译型的高级编程语言,这种边解释边执行的特性对CPU要求较高。
现在的CPU已经越来越强,所以javascript便捷的开发特性肯定会越来越流行(开发工具的图形化会加速这个过程)。
从网络上搜索javascript引擎,发现有不少。比如下图这个
还有下面这个,duktape在gitee上是开源的,有兴趣的同学可以下载研究一下。
链接是https://gitee.com/mirrors/duktape/tree/66287cfb4f6afc1db0e647bc423e64f79c4b90f4
其他辅助文档请参阅
初学者入门阿里云Haas100开发板基本步骤
阿里云haas100开发板源代码适配python3.7版本的方法
阿里云HaaS100物联网开发板学习笔记(一)硬件资源介绍
阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来