||
如果你對嵌入式開發充滿興趣,卻苦于找不到適合新手的入門路徑,那么這篇指南將為你打開LuatOS編程的大門。從環境搭建到基礎語法,再到實戰案例,本文將系統講解嵌入式開發的核心知識,助你快速從零基礎邁向實戰應用!
學習LuatOS的主要方法之一是“運行各個功能模塊的demo代碼”,本期特別分享——LuatOS編程起步相關內容。
注意:本文檔的讀者,默認都已經了解初步的Lua語法。
如果不懂Lua語法的話,可以參考下方鏈接:http://docs.openluat.com/air780epm/common/lua_lesson/
一、底層固件怎么啟動LuatOS腳本
簡單來說,底層固件首先就是要找到main.lua這個文件,然后啟動它。所有的其他功能,都需要在main.lua發起。
如下圖Air780EPM模組demo的Camera示例:
進一步詳細的說,LuatOS的底層固件啟動腳本的流程如下:
啟動底層core:系統上電或者復位后,底層固件(core)首先啟動,進行硬件初始化、內存分配、文件系統掛載等系統底層的基礎操作。
加載Lua虛擬機:底層固件加載Lua虛擬機,為執行 Lua腳本提供運行環境;
加載main.lua:自動查找并加載存儲在設備上的主腳本main.lua;
執行腳本代碼:按順序執行main.lua腳本中的代碼,通常包括任務創建(如 sys.taskInit)、功能初始化等。
進入任務調度:腳本最后通常調用sys.run(),進入事件循環和多任務調度,正式運行用戶邏輯。
1.3 怎么把固件和腳本燒錄到硬件:
使用官方LuatTools,將底層固件和用戶Lua腳本燒錄到合宙模組或者引擎硬件;上電后,底層固件自動完成上述啟動和腳本加載流程,無需手動干預。
Luatools下載及使用參見:https://docs.openluat.com/air780epm/common/Luatools/
在main.lua的文件開頭,需要聲明項目名和版本號,便于管理和調試。后續的遠程升級,也需要用到項目名和版本號。
例如:
在main.lua需要加載LuatOS的基礎庫和擴展庫(如zbuff、onewire等),用來實現具體的業務邏輯。
例如:
截止至當前發文,LuatOS已提供74個核心庫和55個擴展庫。
最新LuatOS庫函數開發手冊詳見:https://docs.openluat.com/osapi/
2.3 至少啟動一個任務
在main.lua里面,至少需要啟動一個任務,否則這個main就無所事事,是一個沒什么實際用處的主腳本了。
啟動一個任務的方法,分為2個步驟:
創建一個函數,把要做的事情,放在這個函數里面使用。這個函數必須是無限循環的,防止很快結束生命,不妨把這個函數命名為task1()。
調用sys.taskInit(task1),啟動這個函數,于是這個任務,就放在待運行的任務列表里面了。
sys.run() 是一個無限循環的函數。
main.lua的最后一行,只能是sys.run(),代表sys.run() 接管了LuatOS的所有的執行調度工作。
如下圖Air780EPM模組demo的LED示例:
sys.run()是LuatOS的運行中樞,后續會詳細介紹。
三、LuatOS腳本編程的核心要點
LuatOS腳本是利用了Lua的語法,以及基于LuatOS核心庫和擴展庫提供的API,進行簡便的編程,實現如下功能:
1)實現和云端服務器通信;
2)采集外設的數據,控制外設設備;
3)實現人機交互,包括圖形交互和語音交互。
3.2 LuatOS的學習要點
要想寫好LuatOS的軟件,實現上述三個功能,除了逐漸掌握Lua的基本語法之外,還需要熟悉LuatOS的核心庫和擴展庫,這樣才能開發出優質的基于LuatOS的物聯網設備軟件。
學習的主要方法有如下幾個:
1)運行各個功能模塊的demo代碼;
2)閱讀docs.openluat.com的教程文檔;
3)遇到不懂問AI;
4)在QQ大群和微信大群進行技術交流。
3.3 一個典型的LuatOS實現
一個典型的LuatOS實現,包含main.lua入口文件和若干個功能模塊文件。
這里以Air780EPM開發板的蜂鳴器示例代碼為例,有兩個腳本文件以及一個管腳描述json文件。
- Air780EPM蜂鳴器應用示例 -1)main.lua文件
作用是啟動一個任務,讓蜂鳴器響一秒鐘,再停頓一秒鐘,如此往復。
2)airbuzzer.lua
封裝了驅動蜂鳴器的功能實現。
3)pins_Air780EPM.json描述了本例使用到的管腳的功能,Air780EPM的26管腳,用作PWM4。
把上述幾個文件,連同Air780EPM最新的固件版本,用LuaTools建立一個工程,燒錄到Air780EPM開發板,就可以聽到蜂鳴器的播放聲音了。
在應用開發中,可根據實際需求靈活調整。
今天的內容就分享到這里了,歡迎感興趣的朋友加技術交流群一起探討。