自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用 Lua 控制你的樹(shù)莓派

系統(tǒng) Linux 開(kāi)發(fā)
學(xué)習(xí)如何使用 Lua 編程語(yǔ)言為物聯(lián)網(wǎng)(IoT)設(shè)備編程,并與樹(shù)莓派上的通用輸入/輸出(GPIO)引腳互動(dòng)。

Lua 是一種有時(shí)會(huì)被誤解的語(yǔ)言。它與 Python 等其他語(yǔ)言不同,但它是一種通用的擴(kuò)展語(yǔ)言,廣泛用于游戲引擎、框架等。總的來(lái)說(shuō),我發(fā)現(xiàn) Lua 對(duì)開(kāi)發(fā)人員來(lái)說(shuō)是一個(gè)有價(jià)值的工具,可以讓他們以一些強(qiáng)大的方式增強(qiáng)和擴(kuò)展他們的項(xiàng)目。

你可以按照 Seth Kenlon 的文章《Lua 值得學(xué)習(xí)嗎?》的介紹下載并運(yùn)行常用的 Lua,該文章中還包括了簡(jiǎn)單的 Lua 代碼示例。但是,要充分利用 Lua,最好將它與采用該語(yǔ)言的框架一起使用。在本教程中,我演示了如何使用名為 Mako Server 的框架,該框架旨在使 Lua 程序員能夠輕松地編寫(xiě) IoT 和 Web 應(yīng)用代碼。我還向你展示了如何使用 API 擴(kuò)展此框架以使用樹(shù)莓派的 GPIO 引腳。

要求

在學(xué)習(xí)本教程之前,你需要一個(gè)可以登錄的正在運(yùn)行的樹(shù)莓派。雖然我將在本教程中編譯 C 代碼,但你不需要任何 C 代碼經(jīng)驗(yàn)。但是,你需要一些使用 POSIX 終端的經(jīng)驗(yàn)。

安裝

首先,在樹(shù)莓派上打開(kāi)一個(gè)終端窗口并安裝以下工具,以使用 Git 下載代碼和編譯 C 代碼:

$ sudo apt install git unzip gcc make

接下來(lái),通過(guò)運(yùn)行以下命令編譯開(kāi)源 Mako Server 代碼和 lua-periphery 庫(kù)(樹(shù)莓派的 GPIO 庫(kù)):

$ wget -O Mako-Server-Build.sh \
  https://raw.githubusercontent.com/RealTimeLogic/BAS/main/RaspberryPiBuild.sh

查看腳本以了解它的作用,并在你覺(jué)得沒(méi)問(wèn)題后運(yùn)行它:

$ sh ./Mako-Server-Build.sh

編譯過(guò)程可能需要一些時(shí)間,尤其是在較舊的樹(shù)莓派上。編譯完成后,腳本會(huì)要求你將 Mako Server 和 lua-periphery 模塊安裝到 /usr/local/bin/。我建議安裝它以簡(jiǎn)化軟件的使用。別擔(dān)心,如果你不再需要它,你可以卸載它:

$ cd /usr/local/bin/
$ sudo rm mako mako.zip periphery.so

要測(cè)試安裝,請(qǐng)?jiān)诮K端中輸入 mako。這將啟動(dòng) Mako 服務(wù)器,并在你的終端中看到一些輸出。你可以按 CTRL+C 停止服務(wù)器。

IoT 和 Lua

現(xiàn)在 Mako 服務(wù)器已在你的樹(shù)莓派上設(shè)置好,你可以開(kāi)始對(duì) IoT 和 Web 應(yīng)用進(jìn)行編程,并使用 Lua 操作樹(shù)莓派的 GPIO 引腳。Mako Server 框架為 Lua 開(kāi)發(fā)人員提供了一個(gè)強(qiáng)大而簡(jiǎn)單的 API 來(lái)創(chuàng)建物聯(lián)網(wǎng)應(yīng)用,而 lua-periphery 模塊讓 Lua 開(kāi)發(fā)人員可以與樹(shù)莓派的 GPIO 引腳和其他外圍設(shè)備進(jìn)行交互。

首先創(chuàng)建一個(gè)應(yīng)用目錄和一個(gè) .preload 腳本,其中插入用于測(cè)試 GPIO 的 Lua 代碼。.preload 腳本是一個(gè) Mako 服務(wù)器擴(kuò)展,在應(yīng)用啟動(dòng)時(shí)作為 Lua 腳本加載和運(yùn)行。

$ mkdir gpiotst
$ nano gpiotst/.preload

將以下內(nèi)容復(fù)制到 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 服務(wù)器中的 Lua-periphery 庫(kù)控制樹(shù)莓派 LED。該腳本定義了一個(gè)名為 doled 的函數(shù)來(lái)控制 LED。該腳本首先使用 Lua require 函數(shù)加載 periphery 庫(kù)(共享庫(kù) periphery.so)。返回的數(shù)據(jù)是一個(gè)包含所有 GPIO API 函數(shù)的 Lua 表。但是,你只需要 LED API,你可以通過(guò)在調(diào)用 require 后附加 .LED 來(lái)直接訪問(wèn)它。接下來(lái),代碼定義了一個(gè)名為 doled 的函數(shù),它執(zhí)行以下操作:

  • 通過(guò)調(diào)用 periphery 庫(kù)中的 LED 函數(shù),并將字符串 led0 傳給它,打開(kāi)樹(shù)莓派主 LED,識(shí)別為 led0。
  • 將消息 Turn LED on 打印到跟蹤(控制臺(tái))。
  • 通過(guò)調(diào)用 LED 對(duì)象上的 write 方法并將布爾值 true 傳遞給它來(lái)激活 LED,該值設(shè)置 LED 的最大亮度。
  • 通過(guò)調(diào)用 ba.sleep(3000) 等待 3 秒。
  • 將消息 Turn LED off 打印到跟蹤。
  • 通過(guò)調(diào)用 LED 對(duì)象上的 write 方法并將布爾值 false 傳遞給它來(lái)停用 LED,這會(huì)將 LED 的亮度設(shè)置為零。
  • 通過(guò)調(diào)用 LED 對(duì)象上的 close 函數(shù)關(guān)閉 LED。

在 .preload 腳本的末尾,doled 函數(shù)作為參數(shù)傳遞給 ba.thread.run 函數(shù)。這允許將 doled 函數(shù)的執(zhí)行推遲到 Mako 服務(wù)器啟動(dòng)之后。

要啟動(dòng) gpiotst 應(yīng)用,請(qǐng)按如下方式運(yùn)行 Mako 服務(wù)器:

$ mako -l::gpiotst

控制臺(tái)中打印以下文本:

Opening LED:
opening 'brightness': Permission denied.

訪問(wèn) GPIO 需要 root 訪問(wèn)權(quán)限,因此按 CTRL+C 停止服務(wù)器并重新啟動(dòng) Mako 服務(wù)器,如下所示:

$ sudo mako -l::gpiotst

現(xiàn)在樹(shù)莓派 LED 亮起 3 秒。成功!

Lua 解鎖 IoT

在本入門(mén)教程中,你學(xué)習(xí)了如何編譯 Mako 服務(wù)器,包括 GPIO Lua 模塊,以及如何編寫(xiě)用于打開(kāi)和關(guān)閉樹(shù)莓派 LED 的基本 Lua 腳本。在以后的文章中,我將在本文的基礎(chǔ)上進(jìn)一步介紹 IoT 功能。

同時(shí),你可以通過(guò)閱讀它的 文檔 來(lái)更深入地研究 Lua-periphery GPIO 庫(kù),以了解有關(guān)功能以及如何將其與不同外設(shè)一起使用的更多信息。要充分利用本教程,請(qǐng)考慮關(guān)注 交互式 Mako Server Lua 教程 以更好地了解 Lua、Web 和 IoT。編碼愉快!

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2022-03-29 12:40:35

Linux樹(shù)莓派

2019-03-24 20:30:18

樹(shù)莓派Linux

2019-03-12 18:33:57

樹(shù)莓派Linux

2020-07-16 21:00:05

樹(shù)莓派Kubernetes集Linux

2017-10-30 16:12:30

DockerServerless樹(shù)莓派

2019-03-31 08:00:02

樹(shù)莓派更新樹(shù)莓派 Linux

2019-03-26 09:00:43

樹(shù)莓派編程Linux

2017-10-09 09:33:55

2021-03-29 21:24:40

樹(shù)莓派Linux

2019-03-23 19:33:14

樹(shù)莓派Linux操作系統(tǒng)

2022-02-11 09:24:05

樹(shù)莓派OpenWrt固定IP服務(wù)

2019-03-28 18:51:52

樹(shù)莓派Linux編程語(yǔ)言

2021-03-17 10:16:39

樹(shù)莓派音樂(lè)系統(tǒng)Linux

2021-06-15 15:00:08

Cockpit樹(shù)莓派Linux

2023-07-05 18:50:01

樹(shù)莓派Linux

2018-10-12 11:20:20

樹(shù)莓派NAS Linux

2023-03-09 11:35:40

2024-03-22 15:28:36

樹(shù)莓派Linux

2019-05-24 13:30:57

PiShrink樹(shù)莓派Linux

2021-07-25 10:30:04

樹(shù)莓派Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)