本帖最后由 春天一满屋 于 2021-12-23 22:33 编辑
1、补一些要准备的工作,就是驱动完装(设备管理器里会出现多个串口,这是正常的)及NDIS网口的禁用
2、使用官方GPIO例程,有两个文件:
main.lua 脚本
- --必须在这个位置定义PROJECT和VERSION变量
- --PROJECT:ascii string类型,可以随便定义,只要不使用,就行
- --VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
- PROJECT = "GPIO"
- VERSION = "1.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)
- --此处关闭RNDIS网卡功能
- --否则,模块通过USB连接电脑后,会在电脑的网络适配器中枚举一个RNDIS网卡,电脑默认使用此网卡上网,导致模块使用的sim卡流量流失
- --如果项目中需要打开此功能,把ril.request("AT+RNDISCALL=0,1")修改为ril.request("AT+RNDISCALL=1,1")即可
- --注意:core固件:V0030以及之后的版本、V3028以及之后的版本,才以稳定地支持此功能
- ril.request("AT+RNDISCALL=0,1")
- --加载控制台调试功能模块(此处代码配置的是uart2,波特率115200)
- --此功能模块不是必须的,根据项目需求决定是否加载
- --使用时注意:控制台使用的uart不要和其他功能使用的uart冲突
- --使用说明参考demo/console下的《console功能使用说明.docx》
- --require "console"
- --console.setup(2, 115200)
- --加载网络指示灯和LTE指示灯功能模块
- --根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚
- --合宙官方出售的Air720U开发板上的网络指示灯引脚为pio.P0_1,LTE指示灯引脚为pio.P0_4
- -- require "netLed"
- -- pmd.ldoset(2,pmd.LDO_VLCD)
- -- netLed.setup(true,pio.P0_1,pio.P0_4)
- --网络指示灯功能模块中,默认配置了各种工作状态下指示灯的闪烁规律,参考netLed.lua中ledBlinktime配置的默认值
- --如果默认值满足不了需求,此处调用netLed.updateBlinkTime去配置闪烁时长
- --LTE指示灯功能模块中,配置的是注册上4G网络,灯就常亮,其余任何状态灯都会熄灭
- --加载错误日志管理功能模块【强烈建议打开此功能】
- --如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api
- require "errDump"
- errDump.request("udp://ota.airm2m.com:9072")
- --加载远程升级功能模块【强烈建议打开此功能,如果使用了阿里云的OTA功能,可以不打开此功能】
- --如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update
- --PRODUCT_KEY = "v32xEAKsGTIEQxtqgwCldp5aPlcnPs3K"
- --require "update"
- --update.request()
- --加载GPIO功能测试模块
- require "testGpioSingle"
- --启动系统框架
- sys.init(0, 0)
- sys.run()
复制代码
testGpioSingle.lua 脚本
- --- 模块功能:GPIO功能测试.
- -- [url=home.php?mod=space&uid=40524]@author[/url] openLuat
- -- [url=home.php?mod=space&uid=2811445]@Module[/url] gpio.testGpioSingle
- -- [url=home.php?mod=space&uid=285243]@license[/url] MIT
- -- [url=home.php?mod=space&uid=855824]@copyright[/url] openLuat
- -- [url=home.php?mod=space&uid=1054466]@release[/url] 2018.03.27
- require"pins"
- module(...,package.seeall)
- --[[
- 有些GPIO需要打开对应的ldo电压域才能正常工作,电压域和对应的GPIO关系如下
- pmd.ldoset(x,pmd.LDO_VSIM1) -- GPIO 29、30、31
- pmd.ldoset(x,pmd.LDO_VLCD) -- GPIO 0、1、2、3、4
- pmd.ldoset(x,pmd.LDO_VMMC) -- GPIO 24、25、26、27、28
- x=0时:关闭LDO
- x=1时:LDO输出1.716V
- x=2时:LDO输出1.828V
- x=3时:LDO输出1.939V
- x=4时:LDO输出2.051V
- x=5时:LDO输出2.162V
- x=6时:LDO输出2.271V
- x=7时:LDO输出2.375V
- x=8时:LDO输出2.493V
- x=9时:LDO输出2.607V
- x=10时:LDO输出2.719V
- x=11时:LDO输出2.831V
- x=12时:LDO输出2.942V
- x=13时:LDO输出3.054V
- x=14时:LDO输出3.165V
- x=15时:LDO输出3.177V
- ]]
- local level = 0
- pmd.ldoset(2,pmd.LDO_VLCD)
- -- GPIO1配置为输出,默认输出低电平,可通过setGpio1Fnc(0或者1)设置输出电平
- local setGpio1Fnc = pins.setup(pio.P0_1,0)
- sys.timerLoopStart(function()
- level = level==0 and 1 or 0
- setGpio1Fnc(level)
- log.info("GPIO1的状态:",level)
- end,1000)
- -- GPIO19配置为输入,可通过getGpio19Fnc()获取输入电平
- local getGpio19Fnc = pins.setup(pio.P0_19)
- sys.timerLoopStart(function()
- log.info("GPIO19的状态",getGpio19Fnc())
- end,1000)
- -- GPIO18配置为中断,可通过getGpio18Fnc()获取输入电平,产生中断时,自动执行gpio18IntFnc函数
- -- 产生中断时自动调用intFnc(msg)函数:上升沿中断时:msg为cpu.INT_GPIO_POSEDGE;下降沿中断时:msg为cpu.INT_GPIO_NEGEDGE
- function gpio18IntFnc(msg)
- log.info("GPIO18中断回调",msg,getGpio18Fnc())
- if msg==cpu.INT_GPIO_POSEDGE then
- log.info("GPIO18中断回调", "上升沿中断")
- else
- log.info("GPIO18中断回调", "下降沿中断")
- end
- end
- getGpio18Fnc = pins.setup(pio.P0_18,gpio18IntFnc)
复制代码
3、其中 pmd.ldoset(level,id1,[id2],…[idn]) 用法花了不少时间去理解,记录一下
4、这个例程是可以 Visual Studio Code来烧录,但其它的例程就不行,所以还是建议全部用官方提供的 Luatools_v2.exe 来烧录脚本,这里也记录一下Visual Studio Code的烧录情况:
|
|
|
|