輕應用介紹 - 用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 # 全域性配置
開發流程
-
編寫輕應用程式碼
-
一鍵熱更新
輕應用 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級別的日誌 |
| 顯示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開發板上進行實際開發操作了。謝謝大家
相關文章
- 嵌入式音訊應用開發介紹音訊
- JS輕應用熱更新 - 無需連線輕鬆進行嵌入式裝置開發除錯JS除錯
- Harmony 應用開發常用元件介紹元件
- ArkTS開發HarmonyOS應用目錄介紹
- 應用模型開發指南上新介紹模型
- 漸進式web應用開發---service worker 原理及介紹(一)Web
- JavaScript內建物件介紹(重點介紹Math(),Date(),Array()以及案例應用)JavaScript物件
- sqlite輕量型資料庫的介紹及應用SQLite資料庫
- 基於PostgreSQL進行Java應用開發SQLJava
- Sqlite 介紹及應用SQLite
- 嵌入式應用開發第一階段
- Android 應用程式元件介紹Android元件
- Redis HyperLogLog介紹及應用Redis
- Android應用開發進階Android
- Lucene介紹及簡單應用
- call、apply、bind應用的介紹APP
- Azure Container App(一)應用介紹AIAPP
- dotnet core使用開源元件FastHttpApi進行web應用開發元件ASTHTTPAPIWeb
- 10大開源的Web應用防火牆介紹Web防火牆
- [譯] 安卓應用和遊戲的無障礙開發介紹安卓遊戲
- Anaconda的開發環境介紹以及簡單爬蟲的應用開發環境爬蟲
- PyFlink 最新進展解讀及典型應用場景介紹
- 移動應用程式開發簡介!
- 使用SemanticKernel 進行智慧應用開發(2023-10更新)
- Android Jetpack 助推應用開發 | 中文字幕視訊介紹AndroidJetpack
- 經典資料分析應用介紹
- Disruptor的簡單介紹與應用
- Python 偏函式介紹及應用Python函式
- 正交多項式介紹及應用
- 原創:ServletContext應用介紹總結ServletContext
- Flume架構以及應用介紹[轉]架構
- 雲原生應用程式執行時 Kyma 的主要特性介紹
- 幾種實用型Ruby Web開發框架介紹Web框架
- 基於雲資料庫MongoDB版進行應用開發資料庫MongoDB
- python開發華為雲應用側進行裝置接入Python
- 【RAT】Oracle Real Application Testing(真用應用測試)介紹OracleAPP
- APP開發費用明細介紹,花最少的錢開發APPAPP
- Solon 1.6.25 釋出,輕量級應用開發框架框架