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

简介: 轻应用:可运行在轻量级嵌入式设备上的JavaScript应用;轻应用框架:封装了JavaScript引擎和API接口,用于支持轻应用开发的软件框架。
来源 | HaaS技术社区

简介

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

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

image.png

特点

  • 轻巧:基于事件驱动的JavaScript轻应用短小精悍,免编译、免烧录
  • 快速:结合阿里云物联网平台,一键完成应用代码热更新
  • 简单:JavaScript API 简洁易懂,大幅降低IoT嵌入式设备应用开发门槛
  • 兼容:轻松移植JavaScript生态软件包,与各类云端业务浑然一体

运行原理

image.png

丰富的组件支持

基础组件

  • 文件系统 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. 一键热更新

image.png

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

image.png

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属性有:

image.png

生命周期

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"
}

完整配置如下:

image.png

在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

image.png

示例

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

UART

image.png

示例

{
  "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

image.png

示例

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

SPI

image.png

示例

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

ADC

image.png

示例

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

DAC

image.png

示例

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

PWM

image.png

示例

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

TIMER

image.png

示例

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

debugLevel

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

image.png

repl(交互式解析器)

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

image.png

示例

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

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

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

image.png

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

相关文章
|
1月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
322 2
|
4天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
20 1
|
1月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
661 1
|
5天前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
|
4天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
19 2
|
11天前
|
JavaScript 前端开发 测试技术
探索现代JavaScript开发的最佳实践
本文探讨了现代JavaScript开发中的最佳实践,涵盖ES6+特性、现代框架使用、模块化与代码分割、测试驱动开发、代码质量与性能优化、异步编程、SPA与MPA架构选择、服务端渲染和静态站点生成等内容,旨在帮助开发者提升代码质量和开发效率。
|
14天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
19天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第31天】本文将引导你进入Node.js的奇妙世界,探索其如何革新后端开发。通过浅显易懂的语言和实际代码示例,我们将一起学习Node.js的核心概念、搭建开发环境,以及实现一个简单但完整的Web应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇通往高效后端开发的大门。
|
16天前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
37 4
|
20天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第30天】本文将通过一个Node.js的简单示例,引导你进入Node.js的世界。我们将从基础概念讲起,然后一步步深入到代码实现,最后总结Node.js在后端开发中的优势和应用场景。无论你是前端开发者还是后端新手,这篇文章都将为你打开一扇了解Node.js的大门。
41 2
下一篇
无影云桌面