開發板原理圖
新建一個GpioOut.lua文件
控制GPIO2輸出高電平
module(...,package.seeall) --固定寫法,具體百度lua文件加載(初學者不需要考慮,直接寫上這句話即可),這些只是規定的語法而已 require"pins" --加載官方提供的pins文件 --調用pins文件里面的函數控制GPIO2輸出高電平 pins.setup(pio.P0_2,1)
提醒: pins.setup(pio.P0_2,1)
函數是調用的 pins文件里面的 setup函數
咱們具體看一下pins里面的函數
1.第一個參數解釋:
如果設置GPIO0 - GPIO31管腳,則第一個參數填寫 pio.P0_0 - pio.P0_31
如果要設置GPIO32以上的管腳,則變了下
假設設置GPIO32 則填寫 pio.P1_0
假設設置GPIO33 則填寫 pio.P1_1
.
.
.
依次類推
咱控制的引腳是GPIO2,所以填寫的是 pio.P0_2
2.第二個參數解釋:
如果設置輸出高低電平,則:填寫1(輸出高電平) ;填寫0(輸出低電平)
咱們設置輸出高電平所以填寫的 1
如果填寫的是nil (空),則認為是配置引腳為輸入
具體是上拉輸入/下拉輸入/高阻態,由第三個參數決定
如果填寫的是一個函數,則認為是配置為中斷
具體參考后面的教程
3.第三個參數解釋:
第三個參數是設置引腳是上拉輸入/下拉輸入/高阻態,
實際上當第二個參數設置為 nil (輸入模式)
或者第二個參數設置為 function (函數)
的時候,第三個參數可以設置一下默認的狀態
第三個參數可以不填!
具體看后面的教程!
4.返回值
首先要明確,返回的是一個函數
調用函數 XXXX();
假設程序是 Relay1 = pins.setup(pio.P0_2,1); (設置GPIO2輸出高電平)
后期設置輸出高低電平可以這樣:
Relay1(0); --設置GPIO2輸出低電平
注:這是官方說的...官方底層就是這樣做的,千萬別糾結於為啥可以這樣
你要是參與了合宙的模塊的開發,你自己就這樣規定的,你還會問為什么嘛??
底層就是這樣做的而已,不必糾結!
如果你糾結,說明你C語言的指針學的不咋地!!!!
C語言返回函數指針,然后調用而已!
如果你真的糾結這個,你就去自己嵌入lua開發吧
https://www.cnblogs.com/yangfengwu/p/9315841.html
知識都是相通的,如果你學習一門新語言感覺費勁,說明你沒有一門精通的語言!
新建一個main.lua文件
官方做的默認是加載main.lua 這樣文件
所以必須有這個文件
文件內容如下:
--必須在這個位置定義PROJECT和VERSION變量 --PROJECT:ascii string類型,可以隨便定義,只要不使用,就行 --VERSION:ascii string類型,如果使用Luat物聯雲平台固件升級的功能,必須按照"X.X.X"定義,X表示1位數字;否則可隨便定義 PROJECT = "GPIO_SINGLE" VERSION = "2.0.0" --加載日志功能模塊,並且設置日志輸出等級 --如果關閉調用log模塊接口輸出的日志,等級設置為log.LOG_SILENT即可 require "log" LOG_LEVEL = log.LOGLEVEL_TRACE --[[ 如果使用UART輸出日志,打開這行注釋的代碼"--log.openTrace(true,1,115200)"即可,根據自己的需求修改此接口的參數 如果要徹底關閉腳本中的輸出日志(包括調用log模塊接口和Lua標准print接口輸出的日志),執行log.openTrace(false,第二個參數跟調用openTrace接口打開日志的第二個參數相同),例如: 1、沒有調用過sys.opntrace配置日志輸出端口或者最后一次是調用log.openTrace(true,nil,921600)配置日志輸出端口,此時要關閉輸出日志,直接調用log.openTrace(false)即可 2、最后一次是調用log.openTrace(true,1,115200)配置日志輸出端口,此時要關閉輸出日志,直接調用log.openTrace(false,1)即可 ]] --log.openTrace(true,1,115200) require "sys" require "net" --每1分鍾查詢一次GSM信號強度 --每1分鍾查詢一次基站信息 net.startQueryAll(60000, 60000) --加載控制台調試功能模塊(此處代碼配置的是uart1,波特率115200) --此功能模塊不是必須的,根據項目需求決定是否加載 --使用時注意:控制台使用的uart不要和其他功能使用的uart沖突 --使用說明參考demo/console下的《console功能使用說明.docx》 --require "console" --console.setup(1, 115200) --加載硬件看門狗功能模塊 --根據自己的硬件配置決定:1、是否加載此功能模塊;2、配置Luat模塊復位單片機引腳和互相喂狗引腳 --合宙官方出售的Air201開發板上有硬件看門狗,所以使用官方Air201開發板時,必須加載此功能模塊 require "wdt" wdt.setup(pio.P0_30, pio.P0_31) --加載網絡指示燈功能模塊 --合宙官方出售的Air800和Air801開發板上的指示燈引腳為pio.P0_28,其他開發板上的指示燈引腳為pio.P1_1 require "netLed" netLed.setup(true,pio.P1_1) --網絡指示燈功能模塊中,默認配置了各種工作狀態下指示燈的閃爍規律,參考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 = "v32xEAKsGTIEQxtqgwCldp5aPlcnPs3K" --require "update" --update.request() --加載GpioOut文件 require "GpioOut" --啟動系統框架 sys.init(0, 0) sys.run()
這個main.lua你從官方隨便一個demo里面拷貝過來就可以,都是一樣的!
main.lua可以說是固定的.
由於我需要看門狗,網絡指示燈
所以打開了這兩個功能
再者程序默認調用這個main.lua
我需要讓模塊調用我寫的 GpioOut.lua
所以
然后就可以了
下載測試
1.首先選擇自己寫的main.lua 和 GpioOut.lua
2.常理來講需要添加官方的 lib
其實咱可以直接點擊下載
軟件會提示添加lib文件,咱用LuaTask版本(官方推薦)
然后就開始下載了
下載完成
提醒:如果大家用的低版本的下載工具,其實沒有上面這個提醒
大家需要手動添加lib
現象:繼電器2吸合
擴展:
--Relay_P02 = pins.setup(pio.P0_2,1) --以后控制可以使用 Relay_P02 函數控制GPIO輸出高低電平 --控制GPIO2輸出低電平: Relay_P02(0) --控制GPIO2輸出高電平: Relay_P02(1) --Relay_P04 = pins.setup(pio.P0_4,1) --以后控制可以使用 Relay_P04 函數控制GPIO輸出高低電平 --控制GPIO4輸出低電平: Relay_P04(0) --控制GPIO4輸出高電平: Relay_P04(1)