lua 是一種有時會被誤解的語言。不同于 python 和其他一些編程語言,該語言是通用的擴展語言,并被廣泛應用于游戲引擎、框架等領域??偟膩碚f,我發現 lua 對開發人員來說是一個有價值的工具,可以讓他們以一些強大的方式增強和擴展他們的項目。
你可以按照 Seth Kenlon 的文章《Lua 值得學習嗎?》的介紹下載并運行常用的 Lua,該文章中還包括了簡單的 Lua 代碼示例。但是,要充分利用 Lua,最好將它與采用該語言的框架一起使用。在本教程中,我演示了如何使用名為 Mako Server 的框架,該框架旨在使 Lua 程序員能夠輕松地編寫 iot 和 Web 應用代碼。我還向你展示了如何使用 API 擴展此框架以使用樹莓派的 GPIO 引腳。
要求
在學習本教程之前,你需要一個可以登錄的正在運行的樹莓派。雖然我將在本教程中編譯 C 代碼,但你不需要任何 C 代碼經驗。但是,你需要一些使用?Lua 值得學習嗎??終端的經驗。
安裝
首先,在樹莓派上打開一個終端窗口并安裝以下工具,以使用 git 下載代碼和編譯 C 代碼:
$ sudo apt install git unzip gcc make
接下來,通過運行以下命令編譯開源 Mako Server 代碼和 lua-periphery 庫(樹莓派的 GPIO 庫):
$ wget -O Mako-Server-Build.sh https://raw.githubusercontent.com/RealTimeLogic/BAS/main/RaspberryPiBuild.sh
查看腳本以了解它的作用,并在你覺得沒問題后運行它:
$ sh ./Mako-Server-Build.sh
編譯過程可能需要一些時間,尤其是在較舊的樹莓派上。編譯完成后,腳本會要求你將 Mako Server 和 lua-periphery 模塊安裝到?/usr/local/bin/。我建議安裝它以簡化軟件的使用。別擔心,如果你不再需要它,你可以卸載它:
$ cd /usr/local/bin/$ sudo rm mako mako.zip periphery.so
要測試安裝,請在終端中輸入?mako。這將啟動 Mako 服務器,并在你的終端中看到一些輸出。你可以按?CTRL+C?停止服務器。
IoT 和 Lua
現在 Mako 服務器已在你的樹莓派上設置好,你可以開始對 IoT 和 Web 應用進行編程,并使用 Lua 操作樹莓派的 GPIO 引腳。Mako Server 框架為 Lua 開發人員提供了一個強大而簡單的 API 來創建物聯網應用,而 lua-periphery 模塊讓 Lua 開發人員可以與樹莓派的 GPIO 引腳和其他外圍設備進行交互。
首先創建一個應用目錄和一個?.preload?腳本,其中插入用于測試 GPIO 的 Lua 代碼。.preload?腳本是一個 Mako 服務器擴展,在應用啟動時作為 Lua 腳本加載和運行。
$ mkdir gpiotst$ nano gpiotst/.preload
將以下內容復制到?Lua 值得學習嗎??中并保存文件:
-- Load periphery.so and access the LED interfacelocal LED = require('periphery').LEDlocal function doled()local led = LED("led0") -- Open LED led0trace"Turn LED on"led:write(true) -- Turn on LED (set max brightness)ba.sleep(3000)-- 3 secondstrace"Turn LED off"led:write(false)-- Turn off LED (set zero brightness)led:close()endba.Thread.run(doled) -- Defer execution -- to after Mako has started
上面的 Lua 代碼使用你編譯并包含在 Mako 服務器中的 Lua-periphery 庫控制樹莓派 LED。該腳本定義了一個名為?doled?的函數來控制 LED。該腳本首先使用 Lua?require?函數加載?periphery?庫(共享庫?Lua 值得學習嗎?)。返回的數據是一個包含所有 GPIO API 函數的?Lua 值得學習嗎?。但是,你只需要 LED API,你可以通過在調用?require?后附加?.LED?來直接訪問它。接下來,代碼定義了一個名為?doled?的函數,它執行以下操作:
- 通過調用?periphery?庫中的?LED?函數,并將字符串?led0?傳給它,打開樹莓派主 LED,識別為?led0。
- 將消息?Turn LED on?打印到跟蹤(控制臺)。
- 通過調用 LED 對象上的?write?方法并將布爾值?true?傳遞給它來激活 LED,該值設置 LED 的最大亮度。
- 通過調用?ba.sleep(3000)?等待 3 秒。
- 將消息?Turn LED off?打印到跟蹤。
- 通過調用 LED 對象上的?write?方法并將布爾值?false?傳遞給它來停用 LED,這會將 LED 的亮度設置為零。
- 通過調用 LED 對象上的?close?函數關閉?LED。
在?.preload?腳本的末尾,doled?函數作為參數傳遞給?ba.thread.run?函數。這允許將?doled?函數的執行推遲到 Mako 服務器啟動之后。
要啟動?gpiotst?應用,請按如下方式運行 Mako 服務器:
$ mako -l::gpiotst
控制臺中打印以下文本:
Opening LED:opening 'brightness': Permission denied.
訪問 GPIO 需要 root 訪問權限,因此按?CTRL+C?停止服務器并重新啟動 Mako 服務器,如下所示:
$ sudo mako -l::gpiotst
現在樹莓派 LED 亮起 3 秒。成功!
Lua 解鎖 IoT
在本入門教程中,你學習了如何編譯 Mako 服務器,包括 GPIO Lua 模塊,以及如何編寫用于打開和關閉樹莓派 LED 的基本 Lua 腳本。在以后的文章中,我將在本文的基礎上進一步介紹 IoT 功能。
同時,你可以通過閱讀它的?Lua 值得學習嗎??來更深入地研究 Lua-periphery GPIO 庫,以了解有關功能以及如何將其與不同外設一起使用的更多信息。要充分利用本教程,請考慮關注?Lua 值得學習嗎??以更好地了解 Lua、Web 和 IoT。編碼愉快!