Lua 是一种有时会被误解的语言。它与 Python 等其他语言不同,但它是一种通用的扩展语言,广泛用于游戏引擎、框架等。总的来说,我发现 Lua 对于开发者来说是一个非常有价值的工具,可以让他们以强大的方式增强和扩展他们的项目。
你可以像 Seth Kenlon 在他的文章 Lua 值得学习吗 中解释的那样,下载并运行标准的 Lua,这篇文章包含了简单的 Lua 代码示例。然而,为了充分利用 Lua,最好将其与已经采用了该语言的框架一起使用。在本教程中,我将演示如何使用名为 Mako Server 的框架,该框架旨在使 Lua 程序员能够轻松地编写 IoT 和 Web 应用程序。我还将向你展示如何使用用于 Raspberry Pi 的 GPIO 引脚的 API 来扩展此框架。
要求
在学习本教程之前,你需要一台正在运行的 Raspberry Pi,并且你可以登录到它。虽然我将在本教程中编译 C 代码,但你不需要任何 C 代码的先验经验。但是,你确实需要一些 POSIX 终端的使用经验。
安装
首先,在你的 Raspberry Pi 上打开一个终端窗口,并安装以下工具,用于使用 Git 下载代码和编译 C 代码
$ sudo apt install git unzip gcc make
接下来,通过运行以下命令编译开源的 Mako Server 代码和 Lua-periphery 库(Raspberry Pi GPIO 库)
$ wget -O Mako-Server-Build.sh \
https://raw.githubusercontent.com/RealTimeLogic/BAS/main/RaspberryPiBuild.sh
查看脚本以了解它的作用,并在你熟悉它之后运行它
$ bash ./Mako-Server-Build.sh
编译过程可能需要一些时间,尤其是在较旧的 Raspberry Pi 上。编译完成后,脚本会要求你将 Mako Server 和 lua-periphery 模块安装到 /usr/local/bin/
。我建议安装它以简化软件的使用。不用担心,如果你不再需要它,你可以卸载它
$ cd /usr/local/bin/
$ sudo rm mako mako.zip periphery.so
要测试安装,请在你的终端中输入 mako
。这将启动 Mako Server,并在你的终端中看到一些输出。你可以通过按 CTRL+C 停止服务器。
IoT 和 Lua
既然 Mako Server 已经在你的 Raspberry Pi 上设置好了,你就可以开始使用 Lua 编程 IoT 和 Web 应用程序,并使用 Raspberry Pi 的 GPIO 引脚。Mako Server 框架为 Lua 开发者提供了一个强大且易于使用的 API 来创建 IoT 应用程序,而 lua-periphery 模块让 Lua 开发者可以与 Raspberry Pi 的 GPIO 引脚和其他外围设备进行交互。
首先创建一个应用程序目录和一个 .preload
脚本,该脚本插入用于测试 GPIO 的 Lua 代码。.preload
脚本是一个 Mako Server 扩展,当应用程序启动时,它会作为 Lua 脚本加载和运行。
$ mkdir gpiotst
$ nano gpiotst/.preload
将以下内容复制到 Nano 编辑器 并保存文件
-- Load periphery.so and access the LED interface
local LED = require('periphery').LED
local function doled()
local led = LED("led0") -- Open LED led0
trace"Turn LED on"
led:write(true) -- Turn on LED (set max brightness)
ba.sleep(3000) -- 3 seconds
trace"Turn LED off"
led:write(false) -- Turn off LED (set zero brightness)
led:close()
end
ba.thread.run(doled) -- Defer execution
-- to after Mako has started
上面的 Lua 代码使用你编译并包含在 Mako Server 中的 Lua-periphery 库来控制主 Raspberry Pi LED。该脚本定义了一个名为 doled
的函数来控制 LED。脚本首先使用 Lua 的 require
函数加载 periphery
库(共享库 periphery.so)。返回的数据是一个 Lua 表,其中包含所有 GPIO API 函数。但是,你只需要 LED API,你可以通过在调用 require
后附加 .LED
来直接访问它。接下来,代码定义了一个名为 doled
的函数,它执行以下操作:
- 通过从
periphery
库调用LED
函数并传递字符串led0
,打开标识为led0
的 Raspberry Pi 主 LED。 - 将消息
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 Server 启动之后。
要启动 gpiotst
应用程序,请按如下方式运行 Mako Server
$ mako -l::gpiotst
以下文本将打印在控制台中
Opening LED:
opening 'brightness': Permission denied.
访问 GPIO 需要 root 权限,因此通过按 CTRL+C 停止服务器,并按如下方式重启 Mako Server
$ sudo mako -l::gpiotst
现在 Raspberry Pi LED 将亮起 3 秒钟。成功!
Lua 解锁 IoT
在这篇入门文章中,你学习了如何编译 Mako Server,包括 GPIO Lua 模块,以及如何编写一个基本的 Lua 脚本来打开和关闭 Raspberry Pi LED。在未来的文章中,我将基于本文介绍更多的 IoT 功能。
在此期间,你可以通过阅读 Lua-periphery GPIO 库的 文档 来更深入地了解它的功能以及如何将其与不同的外围设备一起使用。为了充分利用本教程,请考虑学习 交互式 Mako Server Lua 教程,以更好地理解 Lua、Web 和 IoT。祝你编程愉快!
评论已关闭。