GPRS(Air202) Lua開發: GPIO輸出高低電平


 

 

 

開發板原理圖

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

新建一個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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM