【2G模组Air202开发】使用LuatTools下载Luat底层Lod及编写第一个程序:流水灯

7 篇文章 3 订阅
7 篇文章 0 订阅

首先介绍一下Air202模组

https://i-blog.csdnimg.cn/blog_migrate/c2c6059ba10afb6e0a3945ab0fd58eec.png

平台:RDA8955

存储:32Mb Nor Flash

内存:32Mb SRAM

Air202模块是四频段GSM/GPRS模块,采用的是RDA8955平台。

Air202具有17.7mm × 14.8mm × 2.3mm的超小尺寸。

Air202内置32Mb Nor Flash + 32Mb SRAM,支持三种开发模式:Lua脚本开发模式,AT命令开发模式以及C语言SDK开发模式。

Air202有丰富的外围接口,支持UART,SPI,I2C等各种接口,可支持最多16个GPIO,并支持ADC,音频输入和输出功能,满足各种应用场景的使用要求。

Air202模块采用了省电技术,电流功耗在睡眠模式DRX=5下,低至1.14mA。

利用LuaTools给板子下载Lua版本的固件:

所用软件:LuaTools

固件:Luat_V0034_8955.lod

这些都可以在合宙官网可以找到的,这里就不贴上去了。

下载的时候需要使用质量较好的USB转串口模块,因为波特率相当的高。我这里使用的是自己用CH340芯片做的模块,还是挺好用的。

安装完LuaTools打开会自动在线更新。

下载固串口连接的是模组的host串口,这个需要注意,另外供电也是比较苛刻的,开始用那个个5V的充电器供电,不成。后来直接用开关电源5V供电。

点击下载LOD(core)选择上面提到的固件。

第一次失败了,因为串口模块接在了一个差劲的hub上面。。。

下载成功的界面

下完之后trace信息出来,这时候是没有lua脚本的。

LED流水灯的程序编写:

编程软件:Visual Studio Code

这个是合宙官网教程使用的软件,感觉挺好用的,其实之前使用sciTE、txt也可以。

在一个觉得合适的地方创建一个文件夹当作工程目录,然后右键这个文件夹使用vs打开,在里面创建两个lua文件,分别是main和ledtest。

先把代码贴上:

mian.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()

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

--设置led的GPIO口
local led1 = pins.setup(pio.P0_0,0,pio.PULLDOWN)--引脚ID    默认低电平  下拉模式
local led2 = pins.setup(pio.P0_1,0,pio.PULLDOWN)--引脚ID    默认低电平  下拉模式
local led3 = pins.setup(pio.P0_2,0,pio.PULLDOWN)--引脚ID    默认低电平  下拉模式
local led4 = pins.setup(pio.P0_3,0,pio.PULLDOWN)--引脚ID    默认低电平  下拉模式


local ledsta = 0

function LedRunning()
    
    if(ledsta==1) then led1(1)
    else led1(0)
    end
    
    if(ledsta==2) then led2(1)
    else led2(0)
    end

    if(ledsta==3) then led3(1)
    else led3(0)
    end

    if(ledsta==4) then led4(1)
    else led4(0)
    end

    ledsta = ledsta+1
    if(ledsta==5) then
        ledsta=1
    end
    sys.timerStart(LedRunning,200) --200ms定时执行此函数
end

LedRunning()    --运行

分析:

其中mian中引用了一个 ledtest

其他的代码也都是根据合宙的教程贴上的,因为懂得太少,没办法。

然后是ledtest

用到了模组的pin资源,所以引用了“pins”

接下来就是设置gpio了,就把它当作MCU学,先看看管脚分配及功能:

再就是看官网的pin部分的API

代码非常简单,但是毕竟是一门初学的语言,编写起来还是深深的收到C语法的影响,所以写起来不怎么顺畅,比如判断语句就没有switch,还有C中的自增函数等。另外最好在一个文件的结尾加上回车,可以免去很多问题。

编写完后打开LuaTools软件,点击下载Lua脚本,把上面两个文件添加进去,首先要做的就是就是检查这两个文件程序写的有没有错,可以点语法检查按钮进行进行检查,如果有错误就去改程序。

确保无误后点击下载后会弹出一个对话框,直接点确定就好了,这时候会自动补全一些lua脚本。

下载完成。

此时就可以看到流水灯了。

附上我的硬件图:

 

效果视频

By Urien 2019年6月25日 17:46:42

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值