使用 Lua 控制你的 Raspberry Pi

学习如何使用 Lua 编程语言来编写物联网 (IoT) 设备程序,并与 Raspberry Pi 上的通用输入/输出 (GPIO) 引脚进行交互。
1 位读者喜欢这篇文章。
Raspberries with pi symbol overlay

Dwight Sipler 来自 Flickr

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 的函数,它执行以下操作:

  1. 通过从 periphery 库调用 LED 函数并传递字符串 led0,打开标识为 led0 的 Raspberry Pi 主 LED。
  2. 将消息 Turn LED on 打印到跟踪(控制台)。
  3. 通过调用 LED 对象上的 write 方法并传递布尔值 true 来激活 LED,这将 LED 设置为最大亮度。
  4. 通过调用 ba.sleep(3000) 等待 3 秒。
  5. 将消息 Turn LED off 打印到跟踪。
  6. 通过调用 LED 对象上的 write 方法并传递布尔值 false 来停用 LED,这将 LED 设置为零亮度。
  7. 通过调用 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。祝你编程愉快!

下载电子书

Lua 指南

Lua 是一种为简洁和性能而设计的编程语言,被视频游戏和多媒体公司用作前端脚本语言。无论你是否想要…

Avatar
我注重我的隐私。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.