第一章 Lua - AIR202 控制LED小燈

我使用的是air202 s6模塊,其他模塊根據自己的需求做出修改,首先至少熟悉一款單片機接觸過編程,最好是c,lua的同學。大家都知道拿到一個單片機首先就是點燈大戰,各種點燈操作,學會了控制LED燈,就相當於學會了最基礎的GPIO操作。

進入------------------------------------------------------------------>

準備一各代碼編輯器,編輯器有很多,推薦使用notepad++、Sublime、text 、VSCode(我是用的就是這款),

VS Code下載鏈接https://code.visualstudio.com/ 安裝教程很簡單請移步下文。

1、雙擊打開安裝,下圖頁面勾選這幾個選項,點擊下一步到結束    --------- 其他頁面根據需求進行設置。

2、在合適的位置新建一個文件夾,命名可以隨意,推薦命名 LUAT_LED,使用VS Code打開文件夾,如下圖所示:

打開後,在編輯器左側文件夾中,右擊,新建文件,輸入 main.lua ,回車保存

然後在新建的main.lua內添加下面代碼,完成最重要的main.lua文件編寫。注意注意 在代碼最後一行,另外加入幾行換行。

--必須在這個位置定義PROJECT和VERSION變量
--PROJECT:ascii string類型,可以隨便定義,只要不使用,就行
--VERSION:ascii string類型,如果使用Luat物聯雲平臺固件升級的功能,必須按照"X.X.X"定義,X表示1位數字;否則可隨便定義
PROJECT = "LED-TEST"
VERSION = "0.0.1"
--根據固件判斷模塊類型
moduleType = string.find(rtos.get_version(),"8955") and 2 or 4
--加載日誌功能模塊,並且設置日誌輸出等級
--如果關閉調用log模塊接口輸出的日誌,等級設置爲log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
require "sys"
require "net"
--每1分鐘查詢一次GSM信號強度
--每1分鐘查詢一次基站信息
net.startQueryAll(60000, 60000)
--加載硬件看門狗功能模塊
--根據自己的硬件配置決定:1、是否加載此功能模塊;2、配置Luat模塊復位單片機引腳和互相喂狗引腳
--合宙官方出售的Air201開發板上有硬件看門狗,所以使用官方Air201開發板時,必須加載此功能模塊
--如果用的是720 4g模塊,請註釋掉這兩行
require "wdt"
wdt.setup(pio.P0_30, pio.P0_31)
--加載網絡指示燈功能模塊
--根據自己的項目需求和硬件配置決定:1、是否加載此功能模塊;2、配置指示燈引腳
--合宙官方出售的Air800和Air801開發板上的指示燈引腳爲pio.P0_28,其他開發板上的指示燈引腳爲pio.P1_1
require "netLed"
netLed.setup(true,moduleType == 2 and pio.P1_1 or pio.P2_0,moduleType == 2 and nil or pio.P2_1)--自動判斷2/4g默認網絡燈引腳配置
--網絡指示燈功能模塊中,默認配置了各種工作狀態下指示燈的閃爍規律,參考netLed.lua中ledBlinkTime配置的默認值
--如果默認值滿足不了需求,此處調用netLed.updateBlinkTime去配置閃爍時長
--加載錯誤日誌管理功能模塊【強烈建議打開此功能】
--如下2行代碼,只是簡單的演示如何使用errDump功能,詳情參考errDump的api
require "errDump"
errDump.request("udp://ota.airm2m.com:9072")
--加載遠程升級功能模塊【強烈建議打開此功能】
--如下3行代碼,只是簡單的演示如何使用update功能,詳情參考update的api以及demo/update
-- PRODUCT_KEY = "xxxxxx"
-- require "update"
-- update.request()

require "ledtest"    --新加上的代碼

--啓動系統框架
sys.init(0, 0)
sys.run()

 


然後進入下一步模塊化編程,lua編程中我們最好把相似功能的代碼放到同一個文件中,寫完後只需要在main.lua中添加

require

 語句即可,所以我們將在main.lua結尾添加新的代碼(其他的不變 只需要加入一行代碼既可),如下:

--加載遠程升級功能模塊【強烈建議打開此功能】
--如下3行代碼,只是簡單的演示如何使用update功能,詳情參考update的api以及demo/update
-- PRODUCT_KEY = "xxxxxx"
-- require "update"
-- update.request()
require "ledtest"    --新加上的代碼
--啓動系統框架
sys.init(0, 0)
sys.run()

添加完後 ,按照剛纔新建main.lua的方式,再新建一個新的文件  ledtest.lua,我們在ledtest.lua的第一行可以先加上如下一句話:

module(..., package.seeall)  --使得文件中的函數在何處都可調用

然後就可以看一下管腳的複用功能了,不過現在我們將作爲普通GPIO口使用:

這時候我們就明白這個應該如何點亮了,我們將在 ledtest.lua中 添加如下代碼:

module(..., package.seeall)    --注意此處 剛纔添加過了,這裏不要在重複添加



require"pins"  --用到了pin庫,該庫爲luatask專用庫,需要進行引用
-- GPIO 0到GPIO 31表示爲pio.P0_0到pio.P0_31 。 
-- GPIO 32到GPIO XX表示爲pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示爲pio.P1_1
if moduleType == 2 then
    pmd.ldoset(5,pmd.LDO_VMMC)  --使用某些GPIO時,必須在腳本中寫代碼打開GPIO所屬的電壓域,配置電壓輸出輸入等級,這些GPIO才能正常工作
end
--注意!!!4G模塊無需設置電壓域!
--設置led的GPIO口
local led1 = pins.setup(pio.P0_8,0)--如果你用的是4G模塊,請更改這個gpio編號
local led2 = pins.setup(pio.P0_11,0)--如果你用的是4G模塊,請更改這個gpio編號
local led3 = pins.setup(pio.P0_12,0)--如果你用的是4G模塊,請更改這個gpio編號
local led4 = pins.setup(pio.P0_3,0)--如果你用的是4G模塊,請更改這個gpio編號
local led5 = pins.setup(pio.P0_2,0)--如果你用的是4G模塊,請更改這個gpio編號
--將gpio口都置爲高電平
led1(1)
led2(1)
led3(1)
led4(1)
led5(1)

然後保存好,我們將文件全部燒到模塊中沒查看效果,此時就能看到五個燈都會被點亮,如果將led(1)改成led(0)即可熄滅第一個燈,其他類似。

讓LED燈閃爍起來

開啓一個定時器函數爲sys.timerStart(fnc, ms, ...),那麼我們可以將代碼改成如下樣式:

module(..., package.seeall)
require"pins"  --用到了pin庫,該庫爲luatask專用庫,需要進行引用
-- GPIO 0到GPIO 31表示爲pio.P0_0到pio.P0_31 。 
-- GPIO 32到GPIO XX表示爲pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示爲pio.P1_1
if moduleType == 2 then
    pmd.ldoset(5,pmd.LDO_VMMC)  --使用某些GPIO時,必須在腳本中寫代碼打開GPIO所屬的電壓域,配置電壓輸出輸入等級,這些GPIO才能正常工作
end
--注意!!!4G模塊無需設置電壓域!
--設置led的GPIO口
local led1 = pins.setup(pio.P0_8,0)--如果你用的是4G模塊,請更改這個gpio編號
local led2 = pins.setup(pio.P0_11,0)--如果你用的是4G模塊,請更改這個gpio編號
local led3 = pins.setup(pio.P0_12,0)--如果你用的是4G模塊,請更改這個gpio編號
local led4 = pins.setup(pio.P0_3,0)--如果你用的是4G模塊,請更改這個gpio編號
local led5 = pins.setup(pio.P0_2,0)--如果你用的是4G模塊,請更改這個gpio編號
local ledon = false --led是否開啓
function changeLED()
    if ledon then
        led1(1)
        led2(1)
        led3(1)
        led4(1)
        led5(1)
    else
        led1(0)
        led2(0)
        led3(0)
        led4(0)
        led5(0)
    end
    ledon = not ledon
    sys.timerStart(changeLED,1000)--一秒後執行指定函數
end
changeLED() --開機後立刻運行該函數

保存後燒入程序即可,五個LED燈就應該一秒亮一秒滅了,關注持續輸入教程

下載調試工具  使用LuaTools

源代碼 https://download.csdn.net/download/weixin_37180087/11255550

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章