首先介绍一下Air202模组

平台: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 thenpmd.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 = 0function LedRunning()if(ledsta==1) then led1(1)else led1(0)endif(ledsta==2) then led2(1)else led2(0)endif(ledsta==3) then led3(1)else led3(0)endif(ledsta==4) then led4(1)else led4(0)endledsta = ledsta+1if(ledsta==5) thenledsta=1endsys.timerStart(LedRunning,200) --200ms定时执行此函数
endLedRunning()    --运行

分析:

其中mian中引用了一个 ledtest

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

然后是ledtest

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

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

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

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

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

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

下载完成。

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

附上我的硬件图:

效果视频

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

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

  1. 【2G模组Air202开发】Lua脚本编程实现MQTT协议连接Tlink平台(三)

    [2G模组Air202开发]Lua脚本编程实现MQTT协议连接Tlink平台(三) 整体思路: 在TLINK平台上创建一个MQTT协议的设备 对Air202模组进行lua编程并烧录 使用串口向Air2 ...

  2. 【2G模组Air202开发】Lua脚本编程实现MQTT协议连接Tlink平台(五)

    [2G模组Air202开发]Lua脚本编程实现MQTT协议连接Tlink平台(五) 整体思路: 在TLINK平台上创建一个MQTT协议的设备 对Air202模组进行lua编程并烧录 使用串口向Air2 ...

  3. 芯片、模组、开发板的区别与联系-结合ESP32浅谈(转载)

    1.从外形说起: 1.1芯片 没错,这块黑色的小硅片就是"芯片"本体(通常比大拇指还小,内部集成了实现特定功能的硬件集成电路). 1.2模组 由上述芯片研发的模组是这样的: 从外形 ...

  4. 【BW16 应用篇】安信可BW16模组与开发板更新固件烧录说明

    目录 前言 1 硬件准备 1.1 硬件准备 1.2 接线说明 1.3 固件烧录说明 1.3.1 设置模组或开发板进入烧录模式 1.3.2 烧录固件 注意 2 固件烧录完成验证操作 联系我们 前言 本文 ...

  5. 智能温湿度计原型设计-BLE 模组 SDK 开发

    智能温湿度计原型设计-BLE 模组 SDK 开发 概况 温湿度传感器是一款常见的智能家居设备,通过温湿度传感器采集温度和湿度,用户可以通过 App 以温湿度为触发条件设置智能场景控制家电. 设想一下, ...

  6. 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)

    实现的功能: l  APP控制月球灯 l  本地月球灯控制 l  APP控制"大白"颜色,实现各种颜色变身 l  门状态传感器状态APP显示 l  网络状态指示灯,连接服务器长亮, ...

  7. 涂鸦智能模组SDK开发系列课程——涂鸦IoT平台介绍(二)

    使用涂鸦Wi-Fi模组和涂鸦Wi-Fi&Bluetooth LE双模模组进行产品开发主要有三种不同的方式进行开发: 零代码开发:涂鸦提供可视化功能配置界面,无需任何编程经验,只需在线配置好产品 ...

  8. 芯片、模组、开发板的区别与联系-结合ESP32浅谈

    1.从外形说起: 1.1芯片 没错,这块黑色的小硅片就是"芯片"本体(通常比大拇指还小,内部集成了实现特定功能的硬件集成电路). 1.2模组 由上述芯片研发的模组是这样的: 从外形 ...

  9. 涂鸦智能模组SDK开发系列课程——SoC开发环境搭建(一)

    SoC开发环境搭建 本章节主要介绍如何搭建涂鸦 Wi-Fi 和 Wi-Fi&Bluetooth LE 系列模组二次开发的编译环境.在 Windows 上使用 VirtualBox 虚拟机软件安 ...

  10. Ai-WB2系列模组linux开发环境搭建

    文章目录 一.Ubuntu安装 1.1 安装VMware Workstation Pro 1.2 安装Ubuntu 二.编译 三.烧录固件到设备 3.1 方式一:用命令行烧录 3.2 方式二:用可视化 ...

最新文章

  1. Linux 文件系统及 ext2 文件系统
  2. 检查单 2014-06-20-01
  3. RequestQueue
  4. 使用C#获取IP地址方法
  5. ECMAScript——基本数据类型之boolean
  6. 资源放送丨《Oracle中为什么没有Double Write?Oracle支持原子写吗?》PPT视频
  7. java编译sql存过_SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨
  8. 解决多个py模块调用同一个python的logging模块,打印日志冲突问题
  9. 在 Node.js 中设计一种 flexible 的模式(CQRS/ES/Onion) (译)
  10. 如何录制游戏视频 电脑屏幕录制的方法
  11. 数学建模四大模型、历年国赛题目以及优秀论文(备战2021年数模国赛)
  12. 关于FileOpen2插件安装apk时闪退的解决办法
  13. 预售┃让苹果CEO库克折服的程序员仅10岁!?
  14. YouTube上的版权保护
  15. c语言strlen转义字符,转义字符 sizeof strlen
  16. python微信抢红包神器_Python自动抢红包教程详解
  17. golang调用网易云API
  18. android7.0/8.0使用第三方软件battery monitor等软件读取电池电量,显示电池容量与实际容量不符修改
  19. JS [Web浏览器] “Uncaught RangeError: Maximum call stack size exceeded“ (32)
  20. 让Eclipse可以自动排版

热门文章

  1. 电力系统中的Kron简化,含MATLAB代码(全网唯一)
  2. 学习笔记(13):MATLAB基础入门课程-kron函数
  3. 数据库分库分表可扩展及数据倾斜/热点问题(二)
  4. php元换成万元,万元单位换算器(元换算成万元换算器)
  5. 二叉树的深度遍历和广度遍历
  6. AWS VPC(二)-----创建VPC Peering
  7. .Net NPOI Word模板关键内容替换
  8. html5版微博qq登录,QQ和新浪微博登陆第三方的简单实现
  9. 集合和数组区别_了解您的编码基础:集合和数组之间的主要区别
  10. 点击子元素却也触发父元素的点击事件