Luat的API分为两种:一种直接用Lua语言实现的,在lib目录下,对开发者可见。另一种是在用C语言实现的,在lod里面,对开发者不可见。这儿称前者为API,后者为扩展API。


目录

API列表

模块名 模块功能
sys Luat协程调度框架
audio 音频播放
cc 通话管理
common 通用库函数、编码格式转换、时区时间转换
gps GPS模块管理
socket 数据链路激活、SOCKET管理(创建、连接、数据收发、状态维护)
http HTTP客户端
log 系统日志记录,分级别日志工具
nvm 参数管理
ntp 网络授时
wdt 外部硬件看门狗
clib 完善luat的c库接口
pb 电话簿管理
console Luat控制台
mqtt MQTT客户端
errDump 系统错误日志管理(强烈建议用户开启此模块的“错误日志上报调试服务器”功能).
lbsLoc 根据基站信息查询经纬度
utils 常用工具类接口
pins GPIO 功能配置,包括输入输出IO和上升下降沿中断IO
update 远程升级
pm 休眠管理
record 录音处理
sms 短信功能
misc 配置管理-序列号、IMEI、底层软件版本号、时钟、是否校准、飞行模式、查询电池电量等功能
sim 查询sim卡状态、iccid、imsi、mcc、mnc
ril 虚拟串口AT命令交互管理

扩展API列表

模块名 模块功能
adc adc模块
apn apn 读取库
bit 位操作库
i2c i2c 操作接口
spi spi 操作接口
pack 字符转换
pio 管脚操作
pmd 电源管理接口
rtos 嵌入式系统接口
uart uart接口
crypto 常见加密,校验算法
json json编译解析
disp lcd显示

LuaTask

sys

Luat协程调度框架


sys.powerOn()

启动GSM协议栈。例如在充电开机未启动GSM协议栈状态下,如果用户长按键正常开机,此时调用此接口启动GSM协议栈即可

  • 语法

sys.powerOn()

  • 参数

  • 返回值


sys.restart()

软件重启

  • 语法

sys.restart(r)

  • 参数
参数 释义
r string, 重启原因,用户自定义,一般是string类型,重启后的trace中会打印出此重启原因
  • 返回值

  • 例子
sys.restart('程序超时软件重启')

sys.wait()

Task任务延时函数,只能用于任务函数中

  • 语法

sys.wait(ms)

  • 参数
参数 释义
ms number,整数,最大等待126322567毫秒
  • 返回值

number 正常返回1,失败返回nil


sys.waitUntil()

Task任务的条件等待函数(包括事件消息和定时器消息等条件),只能用于任务函数中。

  • 语法

sys.waitUntil(id, ms)

  • 参数
参数 释义
id 消息ID
ms 等待超时时间,单位ms,最大等待126322567毫秒 。ms可以为nil的,为nil的时候表示阻塞等待,也就是无限时间
  • 返回值

result 接收到消息返回true,超时返回false

data 接收到消息返回消息参数

  • 例子
result, data = sys.waitUntil("SIM_IND", 120000)

sys.taskInit()

创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数,main.lua导入该模块即可

  • 语法

sys.taskInit(fun, ...)

  • 参数
参数 释义
fun 任务函数名,用于resume唤醒时调用
... 任务函数fun的可变参数
  • 返回值

co 返回该任务的线程号

  • 例子
sys.taskInit(task1,'a','b')

sys.init()

Luat平台初始化

  • 语法

sys.init(mode, lprfnc)

  • 参数
参数 释义
mode 充电开机是否启动GSM协议栈,1不启动,否则启动
lprfnc 用户应用脚本中定义的“低电关机处理函数”,如果有函数名,则低电时,本文件中的run接口不会执行任何动作,否则,会延时1分钟自动关机
  • 返回值

  • 例子
sys.init(1,0)

sys.timerStop()

关闭计时器

  • 语法

sys.timerStop(val, ...)

  • 参数
参数 释义
val 值为number时,识别为定时器ID,值为回调函数时,需要传参数
... val值为函数时,函数的可变参数
  • 返回值


sys.timerStopAll()

关闭同一回调函数的所有定时器

  • 语法

sys.timerStopAll(fnc)

  • 参数
参数 释义
fnc 定时器回调函数
  • 返回值


sys.timerStart()

开启一个定时器

  • 语法

sys.timerStart(fnc, ms, ...)

  • 参数
参数 释义
fnc 定时器回调函数
ms number,整数,最大定时126322567毫秒
... 可变参数 fnc的参数
  • 返回值

number 定时器ID,如果失败,返回nil


sys.timerLoopStart()

开启一个循环定时器

  • 语法

sys.timerLoopStart(fnc, ms, ...)

  • 参数
参数 释义
fns 定时器回调函数
ms number 整数,最大定时126322567毫秒
... 可变参数 fnc的参数
  • 返回值

number 定时器ID,如果失败,返回nil


sys.timerIsActive()

判断某个定时器是否处于开启状态

  • 语法

sys.timerIsActive(val, ...)

  • 参数
参数 释义
val 有两种形式:
一种是开启定时器时返回的定时器id,此形式时不需要再传入可变参数...就能唯一标记一个定时器
另一种是开启定时器时的回调函数,此形式时必须再传入可变参数...才能唯一标记一个定时器
... 可变参数
  • 返回值

number 开启状态返回true,否则nil


sys.subscribe()

订阅消息

  • 语法

sys.subscribe(id, callback)

  • 参数
参数 释义
id 消息id
callback 消息回调处理
  • 返回值

  • 例子
sys.subscribe("NET_STATUS_IND", callback)

sys.unsubscribe()

取消订阅消息

  • 语法

sys.unsubscribe(id, callback)

  • 参数
参数 释义
id 消息id
callback 消息回调处理
  • 返回值

  • 例子
sys.unsubscribe("NET_STATUS_IND", callback)

sys.publish()

发布内部消息,存储在内部消息队列中

  • 语法

sys.publish(...)

  • 参数
参数 释义
... 可变参数,用户自定义
  • 返回值

  • 例子
sys.publish("NET_STATUS_IND")

rtos

注册rtos消息回调处理函数

  • 语法

rtos.on(id, handler)

  • 参数
参数 释义
id number,消息类型id
handler 消息处理函数
  • 返回值

  • 例子
rtos.on(rtos.MSG_KEYPAD, function(param) handle keypad message end)

audio

音频播放.

支持MP3、amr文件播放; 支持本地TTS播放、通话中TTS播放到对端(需要使用支持TTS功能的core软件)


audio.play()

播放音频

  • 语法

audio.play(priority, type, path[, vol=4][, cbFnc=nil][, dup=nil][, dupInterval=0])

  • 参数
参数 释义
priority number, 音频优先级,数值越大,优先级越高
type string,音频类型,目前仅支持"FILE"、"TTS"、"TTSCC","RECORD"
path string,音频文件路径,跟typ有关
typ为"FILE"时:表示音频文件路径
typ为"TTS"时:表示要播放的UTF8编码格式的数据
typ为"TTSCC"时:表示要播放给通话对端的UTF8编码格式的数据
vol number, 此参数可选,默认值为: 4 ,播放音量,取值范围0到7,0为静音
cbFnc function, 此参数可选,默认值为: nil,音频播放结束时的回调函数,回调函数的调用形式如下: cbFnc(result) result表示播放结果:
0-播放成功结束;
1-播放出错
2-播放优先级不够,没有播放
3-传入的参数出错,没有播放
4-被新的播放请求中止
dup bool , 此参数可选,默认值为: nil,是否循环播放,true循环,false或者nil不循环
dupInterval number,此参数可选,默认值为: 0,循环播放间隔(单位毫秒),dup为true时,此值才有意义
  • 返回值

result,bool或者nil类型,同步调用成功返回true,否则返回nil

  • 例子
audio.play(0,"FILE","/ldata/call.mp3")
audio.play(0,"FILE","/ldata/call.mp3",7)
audio.play(0,"FILE","/ldata/call.mp3",7,cbFnc)

audio.setVolume()

设置喇叭音量等级

  • 语法

audio.setVolume(vol)

  • 参数
参数 释义
vol number,音量值为0-7,0为静音
  • 返回值

bool result,设置成功返回true,失败返回false


audio.setMicVolume()

设置麦克音量等级

  • 语法

audio.setMicVolume(vol)

  • 参数
参数 释义
vol number, 音量值为0-15,0为静音
  • 返回值

bool result,设置成功返回true,失败返回false


audio.setStrategy()

设置优先级相同时的播放策略

  • 语法

audio.setStrategy(strategy)

  • 参数
参数 释义
strategy number,优先级相同时的播放策略;
0:表示继续播放正在播放的音频,忽略请求播放的新音频;
1:表示停止正在播放的音频,播放请求播放的新音频
  • 返回值

nil


cc

通话管理


cc.anyCallExist()

是否存在通话

  • 语法

cc.anyCallExist()

  • 参数

  • 返回值

bool result 存在通话返回true,否则返回false


cc.getState()

查询某个号码的通话状态

  • 语法

cc.getState(num)

  • 参数
参数 释义
num string,查询号码
  • 返回值

number state 通话状态,状态值参考本模块Fields定义

  • 例子
state = cc.getState('10086')

cc.dial()

呼出电话

  • 语法

cc.dial(num[, delay=0])

  • 参数
参数 释义
num string,呼出号码
delay number,此参数可选,默认值为: 0,延时delay毫秒后,才发起呼叫
  • 返回值

bool result,true表示允许发送at命令拨号并且发送at,false表示不允许at命令拨号


cc.hangUp()

挂断通话

  • 语法

cc.hangUp(num)

  • 参数
参数 释义
num string,号码,若指定号码通话状态不对 则直接退出 不会执行挂断,若挂断时会挂断所有电话
  • 返回值


cc.accept()

接听电话

  • 语法

cc.accept(num)

  • 参数
参数 释义
num string, 号码,若指定号码通话状态不对 则直接退出 不会接通
  • 返回值


cc.transVoice()

通话中发送声音到对端,必须是12.2K AMR格式

  • 语法

cc.transVoice(data[, loop=nil][, downLinkPlay=nil])

  • 参数
参数 释义
data string,12.2K AMR格式的数据
loop bool,此参数可选,默认值为: nil,是否循环发送,true为循环,其余为不循环
downLinkPlay bool,此参数可选,默认值为: nil,声音是否在本端播放,true为播放,其余为不播放
  • 返回值

bool result true为成功,false为失败

  • 例子
cc.transVoice("#!AMR\010\060*********")
cc.transVoice("#!AMR\010\060*********",true)
cc.transVoice("#!AMR\010\060*********",true,true)

cc.dtmfDetect()

设置dtmf检测是否使能以及灵敏度

  • 语法

cc.dtmfDetect([enable=nil][, sens=3])

  • 参数
参数 释义
enable bool ,此参数可选,默认值为: nil, true使能,false或者nil为不使能
sens number,此参数可选,默认值为: 3,灵敏度,最灵敏为1
  • 返回值

nil


cc.sendDtmf()

发送dtmf到对端

  • 语法

cc.sendDtmf(str[, playtime=100][, intvl=100])

  • 参数
参数 释义
str string,dtmf字符串,仅支持数字、ABCD*#
playtime number ,此参数可选,默认值为: 100,每个dtmf播放时间,单位毫秒
intvl number ,此参数可选,默认值为: 100,两个dtmf间隔,单位毫秒
  • 返回值

nil


Fields

状态 释义
CONNECTED 通话中
HOLD 通话保持中
DIALING 正在呼出
INCOMING 正在呼入
DISCONNECTING 正在挂断通话
DISCONNECTED 通话已挂断

common

通用库函数、编码格式转换、时区时间转换


common.ucs2ToAscii()

ascii字符串的unicode编码的16进制字符串 转化为 ascii字符串

  • 语法

common.ucs2ToAscii(inNum)

  • 参数
参数 释义
inNum string, 待转换字符串
  • 返回值

string data,转换后的字符串

  • 例子
local data = common.ucs2ToAscii("0031003200330034")
--data is "1234"

common.nstrToUcs2Hex()

ascii字符串 转化为 ascii字符串的unicode编码的16进制字符串(仅支持数字和+)

  • 语法

common.nstrToUcs2Hex(inNum)

  • 参数
参数 释义
inNum string, 待转换字符串
  • 返回值

string data,转换后的字符串

  • 例子
local data = common.nstrToUcs2Hex("+1234")
--data is "002B0031003200330034"

common.numToBcdNum()

ASCII字符串 转化为 BCD编码格式字符串(仅支持数字)

  • 语法

common.numToBcdNum(inStr, destLen)

  • 参数
参数 释义
inStr string, 待转换字符串
destLen number, 转换后的字符串期望长度,如果实际不足,则填充F
  • 返回值

string data,转换后的字符串

  • 例子
local data = common.numToBcdNum("8618126324567")
--data is "688121364265f7" (表示第1个字节是0x68,第2个字节为0x81,......)

common.bcdNumToNum()

BCD编码格式字符串 转化为 号码ASCII字符串(仅支持数字)

  • 语法

common.bcdNumToNum(num)

  • 参数
参数 释义
num string, 待转换字符串
  • 返回值

string data,转换后的字符串

  • 例子
local data = common.bcdNumToNum(common.fromHex("688121364265f7")) --表示第1个字节是0x68,第2个字节为0x81,......
--data is "8618126324567"

common.ucs2ToGb2312()

unicode小端编码 转化为 gb2312编码

  • 语法

common.ucs2ToGb2312(ucs2s)

  • 参数
参数 释义
ucs2s string, unicode小端编码数据
  • 返回值

string data,gb2312编码数据

  • 例子
local data = common.ucs2ToGb2312(ucs2s)

common.gb2312ToUcs2()

gb2312编码 转化为 unicode小端编码

  • 语法

common.gb2312ToUcs2(gb2312s)

  • 参数
参数 释义
gb2312s string, gb2312编码数据
  • 返回值

string data,unicode小端编码数据

  • 例子
local data = common.gb2312ToUcs2(gb2312s)

common.ucs2beToGb2312()

unicode大端编码 转化为 gb2312编码

  • 语法

common.ucs2beToGb2312(ucs2s)

  • 参数
参数 释义
ucs2s string, unicode大端编码数据
  • 返回值

string data,gb2312编码数据

  • 例子
local data = common.ucs2beToGb2312(ucs2s)

common.gb2312ToUcs2be()

gb2312编码 转化为 unicode大端编码

  • 语法

common.gb2312ToUcs2be(gb2312s)

  • 参数
参数 释义
gb2312s string, gb2312编码数据
  • 返回值

string data,unicode大端编码数据

  • 例子
local data = common.gb2312ToUcs2be(gb2312s)

common.ucs2ToUtf8()

unicode小端编码 转化为 utf8编码

  • 语法

common.ucs2ToUtf8(ucs2s)

  • 参数
参数 释义
ucs2s string, unicode小端编码数据
  • 返回值

string data,utf8编码数据


common.utf8ToUcs2()

utf8编码 转化为 unicode小端编码

  • 语法

common.utf8ToUcs2(utf8s)

  • 参数
参数 释义
utf8s string, utf8编码数据
  • 返回值

string data,unicode小端编码数据


common.ucs2beToUtf8()

unicode大端编码 转化为 utf8编码

  • 语法

common.ucs2beToUtf8(ucs2s)

  • 参数
参数 释义
ucs2s string, unicode大端编码数据
  • 返回值

string data,utf8编码数据


common.utf8ToUcs2be()

utf8编码 转化为 unicode大端编码

  • 语法

common.utf8ToUcs2be(utf8s)

  • 参数
参数 释义
utf8s string, utf8编码数据
  • 返回值

string data,unicode大端编码数据


common.utf8ToGb2312()

utf8编码 转化为 gb2312编码

  • 语法

common.utf8ToGb2312(utf8s)

  • 参数
参数 释义
utf8s string, utf8编码数据
  • 返回值

string data,gb2312编码数据


common.gb2312ToUtf8()

gb2312编码 转化为 utf8编码

  • 语法

common.gb2312ToUtf8(gb2312s)

  • 参数
参数 释义
gb2312s string, gb2312编码数据
  • 返回值

string data,utf8编码数据


common.timeZoneConvert()

时区时间转换

  • 语法

common.timeZoneConvert(y, m, d, hh, mm, ss, srcTimeZone, dstTimeZone)

  • 参数
参数 释义
y number,源时区年份
m number,源时区月份
d number,源时区天
hh number,源时区小时
mm number,源时区分
ss number,源时区秒
srcTimeZone number,源时区
dstTimeZone number,目的时区
  • 返回值

table dstZoneTime,返回目的时区对应的时间,{year,month,day,hour,min,sec}

  • 例子
local dstZoneTime = common.timeZoneConvert(2018,1,1,18,00,00,0,8)
--dstZoneTime为{year=2018,month=1,day=2,hour=2,min=0,sec=0}

gps

GPS模块管理


gps.open()

打开一个“GPS应用”
“GPS应用”:指的是使用GPS功能的一个应用
例如,假设有如下3种需求,要打开GPS,则一共有3个“GPS应用”:
“GPS应用1”:每隔1分钟打开一次GPS
“GPS应用2”:设备发生震动时打开GPS
“GPS应用3”:收到一条特殊短信时打开GPS
只有所有“GPS应用”都关闭了,才会去真正关闭GPS
每个“GPS应用”打开或者关闭GPS时,最多有4个参数,其中 GPS应用模式和GPS应用标记 共同决定了一个唯一的“GPS应用”:
1、GPS应用模式(必选)
2、GPS应用标记(必选)
3、GPS开启最大时长[可选]
4、回调函数[可选]

  • 语法

gps.open(mode, para)

  • 参数
参数 释义
mode number, GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种
para table类型,GPS应用参数
para.tag:string类型,GPS应用标记
para.val:number类型,GPS应用开启最大时长,mode参数为gps.TIMERORSUC或者gps.TIMER时,此值才有意义
para.cb:GPS应用结束时的回调函数,回调函数的调用形式为para.cb(para.tag)
  • 返回值

nil

  • 例子
gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb})
gps.open(gps.TIMERORSUC,{tag="TEST2",val=60,cb=test2Cb})
gps.open(gps.TIMER,{tag="TEST3",val=120,cb=test3Cb})

gps.close()

关闭一个“GPS应用” 只是从逻辑上关闭一个GPS应用,并不一定真正关闭GPS,是有所有的GPS应用都处于关闭状态,才回去真正关闭GPS

  • 语法

gps.close(mode, para)

  • 参数
参数 释义
mode number, GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种
para table类型,GPS应用参数
para.tag:string类型,GPS应用标记
para.val:number类型,GPS应用开启最大时长,mode参数为gps.TIMERORSUC或者gps.TIMER时,此值才有意义;使用close接口时,不需要传入此参数
para.cb:GPS应用结束时的回调函数,回调函数的调用形式为para.cb(para.tag);使用close接口时,不需要传入此参数
  • 返回值

nil

  • 例子
--GPS应用模式和GPS应用标记唯一确定一个“GPS应用”,调用本接口关闭时,mode和para.tag要和gps.open打开一个“GPS应用”时传入的mode和para.tag保持一致

gps.close(gps.DEFAULT,{tag="TEST1"})
gps.close(gps.TIMERORSUC,{tag="TEST2"})
gps.close(gps.TIMER,{tag="TEST3"})

gps.closeAll()

关闭所有“GPS应用”

  • 语法

gps.closeAll()

  • 参数

  • 返回值


gps.isActive()

判断一个“GPS应用”是否处于激活状态

  • 语法

gps.isActive(mode, para)

  • 参数
参数 释义
mode number, GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种
para table类型,GPS应用参数
para.tag:string类型,GPS应用标记
para.val:number类型,GPS应用开启最大时长,mode参数为gps.TIMERORSUC或者gps.TIMER时,此值才有意义;使用isActive接口时,不需要传入此参数
para.cb:GPS应用结束时的回调函数,回调函数的调用形式为para.cb(para.tag);使用isActive接口时,不需要传入此参数
  • 返回值

bool result,处于激活状态返回true,否则返回nil

  • 例子
--GPS应用模式和GPS应用标记唯一确定一个“GPS应用”,调用本接口查询状态时,mode和para.tag要和gps.open打开一个“GPS应用”时传入的mode和para.tag保持一致
gps.isActive(gps.DEFAULT,{tag="TEST1"})
gps.isActive(gps.TIMERORSUC,{tag="TEST2"})
gps.isActive(gps.TIMER,{tag="TEST3"})

gps.setPowerCbFnc()

设置GPS模块供电控制的回调函数
如果使用的是Air800,或者供电控制使用的是LDO_VCAM,则打开GPS应用前不需要调用此接口进行设置
否则在调用gps.open前,使用此接口,传入自定义的供电控制函数cbFnc,GPS开启时,gps.lua自动执行cbFnc(true),GPS关闭时,gps.lua自动执行cbFnc(false)

  • 语法

gps.setPowerCbFnc(cbFnc)

  • 参数
参数 释义
cbFnc function类型,用户自定义的GPS供电控制函数
  • 返回值

nil


gps.setUart()

设置GPS模块和GSM模块之间数据通信的串口参数
如果使用的是Air800,或者使用的UART2(波特率115200,数据位8,无检验位,停止位1),则打开GPS应用前不需要调用此接口进行设置
否则在调用gps.open前,使用此接口,传入UART参数

  • 语法

gps.setUart(id, baudrate, databits, parity, stopbits)

  • 参数
参数 释义
id number, UART ID,支持1和2,1表示UART1,2表示UART2
baudrate number, 波特率,支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000
databits number, 数据位,支持7,8
parity number, 校验位,支持uart.PAR_NONE,uart.PAR_EVEN,uart.PAR_ODD
stopbits number, 停止位,支持uart.STOP_1,uart.STOP_2
  • 返回值

lua gps.setUart(2,115200,8,uart.PAR_NONE,uart.STOP_1)


gps.setAerialMode()

设置GPS模块搜星模式. 如果使用的是Air800或者Air530,不调用此接口配置,则默认同时开启GPS和北斗定位

  • 语法

gps.setAerialMode(gps, beidou, glonass, galieo)

  • 参数
参数 释义
gps number,GPS定位系统,1是打开,0是关闭
beidou number ,中国北斗定位系统,1是打开,0是关闭
glonass number ,俄罗斯Glonass定位系统,1是打开,0是关闭
galieo number ,欧盟伽利略定位系统,1是打开,0是关闭
  • 返回值

nil


gps.setNmeaMode()

设置NMEA数据处理模式. 如果不调用此接口配置,则默认仅gps.lua内部处理NMEA数据

  • 语法

gps.setNmeaMode(mode, cbFnc)

  • 参数
参数 释义
mode number,NMEA数据处理模式,0表示仅gps.lua内部处理,1表示仅用户自己处理,2表示gps.lua和用户同时处理
cbFnc function类型,用户处理一条NMEA数据的回调函数,mode为1和2时,此值才有意义
  • 返回值

nil


gps.setRunMode()

设置GPS模块的运行模式. 如果不调用此接口配置,则默认为正常运行模式

  • 语法

gps.setRunMode(mode, runTm, sleepTm)

  • 参数
参数 释义
mode number,运行模式。
0:正常运行模式
1:周期超低功耗跟踪模式
2:周期低功耗模式
4:直接进入超低功耗跟踪模式
8:自动低功耗模式,可以通过串口唤醒
9:自动超低功耗跟踪模式,需要force on来唤醒
runTm number,单位毫秒,mode为0时表示NEMA数据的上报间隔,mode为1或者2时表示运行时长,其余mode时此值无意义
sleepTm number,单位毫秒,mode为1或者2时表示运行时长,其余mode时此值无意义
  • 返回值

nil


gps.isOpen()

获取GPS模块是否处于开启状态

  • 语法

gps.isOpen()

  • 参数

  • 返回值

bool result,true表示开启状态,false或者nil表示关闭状态


gps.isFix()

获取GPS模块是否定位成功

  • 语法

gps.isFix()

  • 参数

  • 返回值

bool result,true表示定位成功,false或者nil表示定位失败


gps.getLocation()

获取度格式的经纬度信息

  • 语法

gps.getLocation()

  • 参数

  • 返回值

table location
{ lngType="E",lng="121.123456",latType="N",lat="31.123456" }
lngType:string类型,表示经度类型,取值"E","W"
lng:string类型,表示度格式的经度值,无效时为""
latType:string类型,表示纬度类型,取值"N","S"
lat:string类型,表示度格式的纬度值,无效时为""


gps.getAltitude()

获取海拔

  • 语法

gps.getAltitude()

  • 参数

  • 返回值

number altitude,海拔,单位米


gps.getSpeed()

获取速度

  • 语法

gps.getSpeed()

  • 参数

  • 返回值

number kmSpeed,第一个返回值为公里每小时的速度

number nmSpeed,第二个返回值为海里每小时的速度


gps.getCourse()

获取方向角

  • 语法

gps.getCourse()

  • 参数

  • 返回值

number course,方向角


gps.getViewedSateCnt()

获取可见卫星的个数

  • 语法

gps.getViewedSateCnt()

  • 参数

  • 返回值

number count,可见卫星的个数


gps.getUsedSateCnt()

获取定位使用的卫星个数

  • 语法

gps.getUsedSateCnt()

  • 参数

  • 返回值

number count,定位使用的卫星个数


gps.getGgaloc()

获取GGA语句中度分格式的经纬度信息

  • 语法

gps.getGgaloc()

  • 参数

  • 返回值

string lng,度分格式的经度值(dddmm.mmmm),西经会添加一个-前缀,无效时为"";例如"12112.3456"表示东经121度12.3456分,"-12112.3456"表示西经121度12.3456分

string lat,度分格式的纬度值(ddmm.mmmm),南纬会添加一个-前缀,无效时为"";例如"3112.3456"表示北纬31度12.3456分,"-3112.3456"表示南纬31度12.3456分


gps.getUtcTime()

获取RMC语句中的UTC时间
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第一个参数设置为true

  • 语法

gps.getUtcTime()

  • 参数

  • 返回值

table utcTime,UTC时间,nil表示无效,例如{year=2018,month=4,day=24,hour=11,min=52,sec=10}


gps.getSep()

获取定位使用的大地高

  • 语法

gps.getSep()

  • 参数

  • 返回值

number sep,大地高


gps.getSateSn()

获取GSA语句中的可见卫星号
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第三个参数设置为true

  • 语法

gps.getSateSn()

  • 参数

  • 返回值

string viewedSateId,可用卫星号,""表示无效


gps.getGsv()

获取GSV语句中的可见卫星的信噪比
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第二个参数设置为true

  • 语法

gps.getGsv()

  • 参数

  • 返回值

string gsv,信噪比


gps.setParseItem()

设置是否需要解析的字段

  • 语法

gps.setParseItem([utcTime=nil][, gsv=nil][, gsaId=nil])

  • 参数
参数 释义
utcTime bool,此参数可选,默认值为: nil,是否解析RMC语句中的UTC时间,true表示解析,false或者nil不解析
gsv bool,此参数可选,默认值为: nil,是否解析GSV语句,true表示解析,false或者nil不解析
gsaId bool,此参数可选,默认值为: nil,是否解析GSA语句中的卫星ID,true表示解析,false或者nil不解析
  • 返回值


Fields

参数 释义
DEFAULT GPS应用模式1。
打开GPS后,GPS定位成功时,如果有回调函数,会调用回调函数。使用此应用模式调用gps.open打开的“GPS应用”,必须主动调用gps.close或者gps.closeAll才能关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数
TIMERORSUC GPS应用模式2。
打开GPS后,如果在GPS开启最大时长到达时,没有定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用”。打开GPS后,如果在GPS开启最大时长内,定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用”。打开GPS后,在自动关闭此“GPS应用”前,可以调用gps.close或者gps.closeAll主动关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数。
TIMER GPS应用模式3。
打开GPS后,在GPS开启最大时长时间到达时,无论是否定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用” 。 打开GPS后,在自动关闭此“GPS应用”前,可以调用gps.close或者gps.closeAll主动关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数

socket

数据链路激活、SOCKET管理(创建、连接、数据收发、状态维护)


socket.tcp()

创建基于TCP的socket对象

  • 语法

socket.tcp([ssl=nil][, cert=nil])

  • 参数
参数 释义
ssl bool,此参数可选,默认值为: nil,是否为ssl连接,true表示是,其余表示否
cert table,此参数可选,默认值为: nil,ssl连接需要的证书配置,只有ssl参数为true时,才参数才有意义,cert格式如下:
{
caCert = "ca.crt", --CA证书文件(Base64编码 X.509格式),如果存在此参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = "client.crt", --客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = "client.key", --客户端私钥文件(Base64编码 X.509格式) clientPassword = "123456", --客户端证书文件密码[可选]
}
  • 返回值

tcp对象

  • 例子
c = socket.tcp()
c = socket.tcp(true)
c = socket.tcp(true, {caCert="ca.crt"})
c = socket.tcp(true, {caCert="ca.crt", clientCert="client.crt", clientKey="client.key"})
c = socket.tcp(true, {caCert="ca.crt",clientCert="client.crt",clientKey="client.key",clientPassword="123456"})

socket.udp()

创建基于UDP的socket对象

  • 语法

socket.udp()

  • 参数

  • 返回值

udp对象


mt.__index:connect()

连接服务器

  • 语法

mt.__index:connect (address, port)

  • 参数
参数 释义
address string,服务器地址,支持ip和域名
port string或者number类型,服务器端口
  • 返回值

bool result true - 成功,false - 失败

  • 例子
c = socket.tcp();
c:connect();

mt.__index:send()

发送数据

  • 语法

mt.__index:send(data)

  • 参数
参数 释义
data 数据
  • 返回值

result true - 成功,false - 失败

  • 例子
c = socket.tcp(); c:connect(); c:send("12345678");

mt.__index:recv()

接收数据

  • 语法

mt.__index:recv([timeout=0])

  • 参数
参数 释义
timeout number,此参数可选,默认值为: 0,可选参数,接收超时时间
  • 返回值

result true - 成功,false - 失败

data 如果成功的话,返回接收到的数据,超时时返回错误为"timeout"

  • 例子
c = socket.tcp(); c:connect(); result, data = c:recv()

mt.__index:close()

销毁一个socket

  • 语法

mt.__index:close()

  • 参数

  • 返回值

nil

  • 例子
c = socket.tcp(); c:connect(); c:send("123"); c:close()

socket.setTcpResendPara()

设置TCP层自动重传的参数

  • 语法

socket.setTcpResendPara([retryCnt=4][, retryMaxTimeout=16])

  • 参数
参数 释义
retryCnt number,[此参数可选,默认值为: 4],重传次数;取值范围0到12
retryMaxTimeout number,[此参数可选,默认值为: 16],限制每次重传允许的最大超时时间(单位秒),取值范围1到16
  • 返回值

nil

  • 例子
socket.setTcpResendPara(3,8)
socket.setTcpResendPara(4,16)

Fields

参数 释义
isReady SOCKET 是否有可用

http

HTTP客户端


http.request()

发送HTTP请求

  • 语法

http.request(method, url[, cert=nil][, head=nil][, body=nil][, timeout=30000][, cbFnc=nil][, rcvFileName=nil])

  • 参数
参数 释义
method string,HTTP请求方法 支持"GET","HEAD","POST","OPTIONS","PUT","DELETE","TRACE","CONNECT"
url string, HTTP请求url。url格式(除hostname外,其余字段可选;目前的实现不支持hash)
cert table,此参数可选,默认值为: nil,table或者nil类型,ssl证书,当url为https类型时,此参数才有意义。cert格式如下:
{
caCert = "ca.crt", --CA证书文件(Base64编码 X.509格式),如果存在此参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = "client.crt", --客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = "client.key", --客户端私钥文件(Base64编码 X.509格式) clientPassword = "123456", --客户端证书文件密码[可选]
}
head table,此参数可选,默认值为: nil,nil或者table类型,自定义请求头
http.lua会自动添加Host: XXX、Connection: short、Content-Length: XXX三个请求头
如果这三个请求头满足不了需求,head参数传入自定义请求头,如果自定义请求头中存在Host、Connection、Content-Length三个请求头,将覆盖http.lua中自动添加的同名请求头
head格式如下:
如果没有自定义请求头,传入nil或者{};否则传入{head1="value1", head2="value2", head3="value3"},value中不能有\r\n
body 此参数可选,默认值为: nil,nil、string或者table类型,请求实体。如果body仅仅是一串数据,可以直接传入一个string类型的body即可
如果body的数据比较复杂,包括字符串数据和文件,则传入table类型的数据,格式如下: {
[1] = "string1",
[2] = {file="/ldata/test.jpg"},
[3] = "string2"
}
例如上面的这个body,索引必须为连续的数字(从1开始),实际传输时,先发送字符串"string1",再发送文件/ldata/test.jpg的内容,最后发送字符串"string2"
timeout number,此参数可选,默认值为: 30000。请求发送成功后,接收服务器返回应答数据的超时时间,单位毫秒,默认为30秒
cbFnc function,此参数可选,默认值为: nil。
执行HTTP请求的回调函数(请求发送结果以及应答数据接收结果都通过此函数通知用户),回调函数的调用形式为:
cbFnc(result,prompt,head,body)
result:true或者false,true表示成功收到了服务器的应答,false表示请求发送失败或者接收服务器应答失败
prompt:string类型,result为true时,表示服务器的应答码;result为false时,表示错误信息
head:table或者nil类型,表示服务器的应答头;result为true时,此参数为{head1="value1", head2="value2", head3="value3"},value中不包含\r\n;result为false时,此参数为nil
body:string类型,如果调用request接口时传入了rcvFileName,此参数表示下载文件的完整路径;否则表示接收到的应答实体数据
recFileName string,此参数可选,默认值为: nil。
保存“服务器应答实体数据”的文件名,可以传入完整的文件路径,也可以传入单独的文件名,如果是文件名,http.lua会自动生成一个完整路径,通过cbFnc的参数body传出
  • 返回值

string rcvFilePath,如果传入了rcvFileName,则返回对应的完整路径;其余情况都返回nil

  • 例子
http.request("GET","www.lua.org",nil,nil,nil,30000,cbFnc)
http.request("GET","http://www.lua.org",nil,nil,nil,30000,cbFnc)
http.request("GET","http://www.lua.org:80",nil,nil,nil,30000,cbFnc,"download.bin")
http.request("GET","www.lua.org/about.html",nil,nil,nil,30000,cbFnc)
http.request("GET","www.lua.org:80/about.html",nil,nil,nil,30000,cbFnc)
http.request("GET","http://wiki.openluat.com/search.html?q=123",nil,nil,nil,30000,cbFnc)
http.request("POST","www.test.com/report.html",nil,{Head1="ValueData1"},"BodyData",30000,cbFnc)
http.request("POST","www.test.com/report.html",nil,{Head1="ValueData1",Head2="ValueData2"},{[1]="string1",[2] ={file="/ldata/test.jpg"},[3]="string2"},30000,cbFnc)
http.request("GET","https://www.baidu.com",{caCert="ca.crt"})
http.request("GET","https://www.baidu.com",{caCert="ca.crt",clientCert = "client.crt",clientKey = "client.key"})
http.request("GET","https://www.baidu.com",{caCert="ca.crt",clientCert = "client.crt",clientKey = "client.key",clientPassword = "123456"})

log

系统日志记录,分级别日志工具


log.trace()

输出trace级别的日志

  • 语法

log.trace(tag,...)

  • 参数
参数 释义
tag 模块或功能名称,作为日志前缀
... 日志内容,可变参数
  • 返回值

nil

  • 例子
log.trace('moduleA', 'log content')

log.debug()

输出debug级别的日志

  • 语法

log.debug(tag,...)

  • 参数
参数 释义
tag 模块或功能名称,作为日志前缀
... 日志内容,可变参数
  • 返回值

nil


log.info()

输出info级别的日志

  • 语法

log.info(tag,...)

  • 参数
参数 释义
tag 模块或功能名称,作为日志前缀
... 日志内容,可变参数
  • 返回值

nil


log.warn()

输出warn级别的日志

  • 语法

log.warn(tag,...)

  • 参数
参数 释义
tag 模块或功能名称,作为日志前缀
... 日志内容,可变参数
  • 返回值

nil


log.error()

输出error级别的日志

  • 语法

log.error(tag,...)

  • 参数
参数 释义
tag 模块或功能名称,作为日志前缀
... 日志内容,可变参数
  • 返回值

nil


log.fatal()

输出fatal级别的日志

  • 语法

log.fatal(tag,...)

  • 参数
参数 释义
tag 模块或功能名称,作为日志前缀
... 日志内容,可变参数
  • 返回值

nil


log.openTrace()

开启或者关闭print的打印输出功能

  • 语法

log.openTrace(v, uartid, baudrate)

  • 参数
参数 释义
v bool,false或nil为关闭,其余为开启
uartid 输出Luatrace的端口:nil表示host口,1表示uart1,2表示uart2
baudrate number,number类型,uartid不为nil时,此参数才有意义,表示波特率,默认115200 \ 支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000
  • 返回值

nil


nvm

参数管理


nvm.init()

初始化参数存储模块

  • 语法

nvm.init(defaultCfgFile)

  • 参数
参数 释义
defaultCfgFile string,默认配置文件名
  • 返回值

nil

  • 例子
nvm.init("config.lua")

nvm.set()

设置某个参数的值

  • 语法

nvm.set(k, v, r, s)

  • 参数
参数 释义
k string,参数名
v 可以是任意类型,参数的新值
r 设置原因,如果传入了非nil的有效参数,并且v值和旧值相比发生了改变,会产生一个PARA_CHANGED_IND消息,携带 k,v,r 3个参数
s 是否立即写入到文件系统中,false不写入,其余的都写入
  • 返回值

bool或者nil,成功返回true,失败返回nil

  • 例子
nvm.set("name","Luat")  --参数name赋值为Luat,立即写入文件系统
nvm.set("age",12,"SVR") --参数age赋值为12,立即写入文件系统,如果旧值不是12,会产生一个PARA_CHANGED_IND消息,携带 "age",12,"SVR" 3个参数
nvm.set("class","Class2",nil,false)  --参数class赋值为Class2,不写入文件系统
nvm.set("score",{chinese=100,math=99,english=98}) --参数score赋值为{chinese=100,math=99,english=98},立即写入文件系统

nvm.sett()

设置某个table类型参数的某一个索引的值

  • 语法

nvm.sett(k, kk, v, r, s)

  • 参数
参数 释义
k string,table类型的参数名
kk table类型参数的某一个索引名
v table类型参数的某一个索引的新值
r 设置原因,如果传入了非nil的有效参数,并且v值和旧值相比发生了改变,会产生一个TPARA_CHANGED_IND消息,携带 k,kk,v,r 4个参数
s 是否立即写入到文件系统中,false不写入,其余的都写入
  • 返回值

bool或者nil,成功返回true,失败返回nil

  • 例子
nvm.sett("score","chinese",100) --参数score["chinese"]赋值为100,立即写入文件系统
nvm.set("score","chinese",100,"SVR") --参数score["chinese"]赋值为100,立即写入文件系统,如果旧值不是100,会产生一个TPARA_CHANGED_IND消息,携带 "score","chinese",100,"SVR" 4个参数
nvm.set("score","chinese",100,nil,false) --参数class赋值为Class2,不写入文件系统

nvm.flush()

所有参数立即写入文件系统

  • 语法

nvm.flush()

  • 参数

  • 返回值

nil


nvm.get()

读取某个参数的值

  • 语法

nvm.get(k)

  • 参数
参数 释义
k string,参数名
  • 返回值

参数值


nvm.gett()

读取某个table类型参数的某一个索引的值

  • 语法

nvm.gett(k,kk)

  • 参数
参数 释义
k string,table类型的参数名
kk table类型参数的某一个索引名
  • 返回值

索引值


nvm.restore()

参数恢复出厂设置

  • 语法

nvm.restore()

  • 参数

  • 返回值

nil


ntp

网络授时


ntp.getServers()

获取NTP服务器地址列表

  • 语法

ntp.getServers()

  • 参数

  • 返回值

table,服务器地址列表


ntp.setServers()

设置NTP服务器地址列表

  • 语法

ntp.setServers(st)

  • 参数
参数 释义
st table类型,服务器地址列表
  • 返回值

  • 例子
ntp.getServers({"1edu.ntp.org.cn","cn.ntp.org.cn"})

ntp.isEnd()

NTP同步标志

  • 语法

ntp.isEnd()

  • 参数

  • 返回值

boole,NTP的同步状态true为成功,fasle为失败


ntp.ntpTime()

同步时间,每个NTP服务器尝试3次,超时8秒,适用于被任务函数调用

  • 语法

ntp.ntpTime(ts, fnc)

  • 参数
参数 释义
ts 每隔ts小时同步1次
fnc 同步成功后回调函数
  • 返回值

  • 例子
ntp.ntpTime() -- 只同步1次
ntp.ntpTime(1) -- 1小时同步1次
ntp.ntpTime(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.ntpTime(24,fnc) -- 24小时同步1次,同步成功后执行fnc()

模块功能:数据链路激活(创建、连接、状态维护)

Fields

状态 释义
IP_READY_IND IP数据阶段

wdt

外部硬件看门狗


wdt.setup()

配置模块与看门狗通讯IO并启动任务

  • 语法

wdt.setup(rst,wd)

  • 参数
参数 释义
rst 模块复位单片机引脚(pio.P0_31)
wd 模块和单片机相互喂狗引脚(pio.P0_29)
  • 返回值


clib

完善luat的c库接口


uart.on()

注册串口事件的处理函数

  • 语法

uart.on(id, event[, callback=nil])

  • 参数
参数 释义
id number,串口ID: 1表示串口1,2表示串口2,uart.ATC表示虚拟AT口
event string。
串口事件: "recieve"表示串口收到数据
注意:使用uart.setup配置串口时,第6个参数设置为nil或者0,收到数据时,才会产生"receive"事件
"sent"表示串口数据发送完成,注意:使用uart.setup配置串口时,第7个参数设置为1,调用uart.write接口发送数据之后,才会产生"sent"事件
callback function,串口事件的处理函数
  • 返回值

nil

  • 例子
uart.on(1,"receive",rcvFnc)
uart.on(1,"sent",sentFnc)

pb

电话簿管理


pb.setStorage()

设置电话本存储区域

  • 语法

pb.setStorage(storage, cb)

  • 参数
参数 释义
storage string,存储区域字符串,仅支持"ME"和"SM"
cb 设置后的回调函数, 回调方式为cb(result),result为true表示成功,false或者nil表示失败
  • 返回值


pb.read()

读取一条电话本记录

  • 语法

pb.read(index, cb)

  • 参数
参数 释义
index number,电话本在存储区的位置
cb function,读取后的回调函数, 回调方式为cb(result,name,number):result为true表示成功,false或者nil表示失败;name为姓名;number为号码
  • 返回值


pb.write()

写入一条电话本记录

  • 语法

pb.write(index, name, num, cb)

  • 参数
参数 释义
index number,电话本在存储区的位置
name string,姓名
num string,号码
cb function,写入后的回调函数。 回调方式为cb(result):result为true表示成功,false或者nil表示失败
  • 返回值

  • 例子
pb.write(1,"zhangsan","13233334444",cb)

pb.delete()

删除一条电话本记录

  • 语法

pb.delete(index,cb)

  • 参数
参数 释义
index number,电话本在存储区的位置
cb function,删除后的回调函数。 回调方式为cb(result):result为true表示成功,false或者nil表示失败
  • 返回值


console

Luat控制台


console.setup()

配置控制台使用的串口参数,创建控制台协程

  • 语法

console.setup(id[, baudrate=115200])

  • 参数
参数 释义
id number,控制台使用的串口ID:1表示串口1,2表示串口2
baudrate number,此参数可选,默认值为: 115200。控制台使用的串口波特率 支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000
  • 返回值

nil


mqtt

MQTT客户端


mqtt.client()

创建一个mqtt client实例

  • 语法

mqtt.client(clientId[, keepAlive=300][, username=""][, password=""][, cleanSession=1][, will={flag=0])

  • 参数
参数 释义
clientId string,客户端号
keepAlive number,此参数可选,默认值为: 300。心跳间隔(单位为秒),默认300秒
username string,此参数可选,默认值为: ""。用户名,用户名为空配置为""或者nil
password string,此参数可选,默认值为: ""。密码,密码为空配置为""或者nil
cleanSession number,此参数可选,默认值为: 1。1/0
will table,此参数可选,默认值为: {flag=0}。遗嘱参数,格式为{qos=, retain=, topic=, payload=}
  • 返回值

table mqttc client实例

  • 例子
mqttc = mqtt.client("clientid-123")
mqttc = mqtt.client("clientid-123",200)
mqttc = mqtt.client("clientid-123",nil,"user","password")

mqttc:connect()

连接mqtt服务器

  • 语法

mqttc:connect(host, port[, transport="tcp"][, cert=nil])

  • 参数
参数 释义
host string, 服务器地址
port string或者number类型,服务器端口
transport string,此参数可选,默认值为: "tcp"。"tcp"或者"tcp_ssl"
cert table,此参数可选,默认值为: nil。table或者nil类型,ssl证书,当transport为"tcp_ssl"时,此参数才有意义。
cert格式如下:
{
caCert = "ca.crt", --CA证书文件(Base64编码 X.509格式),如果存在此参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = "client.crt", --客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = "client.key", --客户端私钥文件(Base64编码 X.509格式) clientPassword = "123456", --客户端证书文件密码[可选]
}
  • 返回值

result true表示成功,false或者nil表示失败

  • 例子
mqttc = mqtt.client("clientid-123", nil, nil, false); mqttc:connect("mqttserver.com", 1883, "tcp")

mqttc:subscribe()

订阅主题

  • 语法

mqttc:subscribe(topic[, qos=0])

  • 参数
参数 释义
topic string或者table类型,一个主题时为string类型,多个主题时为table类型,主题内容为UTF8编码
qos 此参数可选,默认值为: 0。number或者nil,topic为一个主题时,qos为number类型(0/1/2,默认0);topic为多个主题时,qos为nil
  • 返回值

bool true表示成功,false或者nil表示失败

  • 例子
mqttc:subscribe("/abc", 0) -- subscribe topic "/abc" with qos = 0
mqttc:subscribe({["/topic1"] = 0, ["/topic2"] = 1, ["/topic3"] = 2}) -- subscribe multi topic

mqttc:publish()

发布一条消息

  • 语法

mqttc:publish(topic, payload[, qos=0][, retain=0])

  • 参数
参数 释义
topic string,UTF8编码的字符串
payload string,用户自己控制payload的编码,mqtt.lua不会对payload做任何编码转换
qos number,此参数可选,默认值为: 0。0/1/2, default 0
retain number,此参数可选,默认值为: 0。0或者1
  • 返回值

bool 发布成功返回true,失败返回false

  • 例子
mqttc = mqtt.client("clientid-123", nil, nil, false)
mqttc:connect("mqttserver.com", 1883, "tcp")
mqttc:publish("/topic", "publish from luat mqtt client", 0)

mqttc:receive()

接收消息

  • 语法

mqttc:receive(timeout)

  • 参数
参数 释义
timeout number, 超时间隔,单位毫秒
  • 返回值

result 接收结果,true表示成功,false表示失败

data 如果成功返回的时候接收到的服务器发过来的包
如果失败返回的是错误信息,如果是超时失败,返回"timeout"


mqttc:disconnect ()

断开与服务器的连接

  • 语法

mqttc:disconnect()

  • 参数

  • 返回值

nil

  • 例子
mqttc = mqtt.client("clientid-123", nil, nil, false)
mqttc:connect("mqttserver.com", 1883, "tcp")
--process data
mqttc:disconnect()

errDump

系统错误日志管理(强烈建议用户开启此模块的“错误日志上报调试服务器”功能).

错误日志包括三种:
1、系统主任务运行时的错误日志
此类错误会导致软件重启,错误日志保存在/luaerrinfo.txt文件中
2、调用sys.taskInit创建的协程运行过程中的错误日志
此类错误会终止当前协程的运行,但是不会导致软件重启,错误日志保存在/lib_err.txt中
3、调用errDump.appendErr或者sys.restart接口保存的错误日志 此类错误日志保存在/lib_err.txt中

其中2和3保存的错误日志,最多支持5K字节
每次上报错误日志给调试服务器之后,会清空已保存的日志


errDump.appendErr()

追加错误信息到LIB_ERR_FILE文件中(文件最多允许存储5K字节的数据)

  • 语法

errDump.appendErr(s)

  • 参数
参数 释义
s string,用户自定义的错误信息,errDump功能模块会对此错误信息做如下处理:
1、重启后会通过Luat下载调试工具输出,在trace中搜索errDump.libErr,可以搜索到错误信息
2、如果用户调用errDump.request接口设置了错误信息要上报的调试服务器地址和端口,则每次重启会自动上报错误信息到调试服务器
3、如果用户调用errDump.request接口设置了定时上报,则定时上报时会上报错误信息到调试服务器 其中第2和第3种情况,上报成功后,会自动清除错误信息
  • 返回值

bool result,true表示成功,false或者nil表示失败

  • 例子
errDump.appendErr("net working timeout!")

errDump.request()

配置调试服务器地址,启动错误信息上报给调试服务器的功能,上报成功后,会清除错误信息

  • 语法

errDump.request(addr[, period=600000)

  • 参数
参数 释义
addr string。
1、如果调试服务器使用http协议,终端将采用POST命令,把错误信息上报到addr指定的URL中,addr的格式如下 (除protocol和hostname外,其余字段可选;目前的实现不支持hash)。
2、如果调试服务器使用udp协议,终端将错误信息,直接上报给调试服务器,调试服务器收到信息后,要回复大写的OK;
3、如果调试服务器使用tcp协议,终端将错误信息,直接上报给调试服务器;
period number,此参数可选,默认值为: 600000。单位毫秒,定时检查错误信息并上报的间隔
  • 返回值

bool result,成功返回true,失败返回nil

  • 例子
errDump.request("http://www.user_server.com/errdump")
errDump.request("udp://www.user_server.com:8081")
errDump.request("tcp://www.user_server.com:8082")
errDump.request("tcp://www.user_server.com:8082",6*3600*1000)

lbsLoc

根据基站信息查询经纬度


lbsLoc.request()

发送根据基站查询经纬度请求(仅支持中国区域的位置查询)

  • 语法

lbsLoc.request(cbFnc[, reqAddr=nil][, timeout=20000][, productKey=nil][, host=nil][, port=nil][, reqTime=nil])

  • 参数
参数 释义
cbFnc function,用户回调函数,回调函数的调用形式为:
cbFnc(result,lat,lng,addr)
result:number类型,0表示成功,1表示网络环境尚未就绪,2表示连接服务器失败,3表示发送数据失败,4表示接收服务器应答超时,5表示服务器返回查询失败;为0时,后面的3个参数才有意义
lat:string类型或者nil,纬度,整数部分3位,小数部分7位,例如"031.2425864"
lng:string类型或者nil,经度,整数部分3位,小数部分7位,例如"121.4736522"
addr:string类型,UCS2大端编码的位置字符串。调用lbsLoc.request时传入的第二个参数为true时,才返回本参数
reqAddr bool,此参数可选,默认值为: nil。是否需要服务器返回地址字符串信息,true返回,false或者nil不返回
timeout number,此参数可选,默认值为: 20000。请求超时时间,单位毫秒,默认20000毫秒
productKey string,此参数可选,默认值为: nil。IOT网站上的产品证书,此参数可选,用户如果在main.lua中定义了PRODUCT_KEY变量,就不需要传入此参数
host string,此参数可选,默认值为: nil。服务器域名,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数
port string,此参数可选,默认值为: nil。服务器端口,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数
reqTime bool,此参数可选,默认值为: nil。是否需要服务器返回时间信息,true返回,false或者nil不返回,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数
  • 返回值

nil

  • 例子
lbsLoc.request(cbFnc)
lbsLoc.request(cbFnc,true)
lbsLoc.request(cbFnc,nil,20000)

net

网络管理、信号查询、GSM网络状态查询、网络指示灯控制、临近小区信息查询


net.switchFly()

设置飞行模式

  • 语法

net.switchFly(mode)

  • 参数
参数 释义
mode bool值,true:飞行模式开,false:飞行模式关
  • 返回值

nil


net.getState()

获取GSM网络注册状态

  • 语法

net.getState()

  • 参数

  • 返回值

string state,GSM网络注册状态,
"INIT"表示正在初始化
"REGISTERED"表示已注册
"UNREGISTER"表示未注册


net.getMcc()

获取当前小区的mcc

  • 语法

net.getMcc()

  • 参数

  • 返回值

string mcc,当前小区的mcc,如果还没有注册GSM网络,则返回sim卡的mcc


net.getMnc()

获取当前小区的mnc

  • 语法

net.getMnc()

  • 参数

  • 返回值

string mcn,当前小区的mnc,如果还没有注册GSM网络,则返回sim卡的mnc


net.getLac()

获取当前位置区ID

  • 语法

net.getLac()

  • 参数

  • 返回值

string lac,当前位置区ID(16进制字符串,例如"18be"),如果还没有注册GSM网络,则返回""


net.getCi()

获取当前小区ID

  • 语法

net.getCi()

  • 参数

  • 返回值

string ci,当前小区ID(16进制字符串,例如"93e1"),如果还没有注册GSM网络,则返回""


net.getRssi()

获取信号强度

  • 语法

net.getRssi()

  • 参数

  • 返回值

number rssi,当前信号强度(取值范围0-31)


net.getCellInfo()

获取当前和临近位置区、小区以及信号强度的拼接字符串

  • 语法

net.getCellInfo()

  • 参数

  • 返回值

string cellInfo,当前和临近位置区、小区以及信号强度的拼接字符串,例如:"6311.49234.30;6311.49233.23;6322.49232.18;"


net.getCellInfoExt()

获取当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串

  • 语法

net.getCellInfoExt()

  • 参数

  • 返回值

string cellInfo,当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串,例如:"460.01.6311.49234.30;460.01.6311.49233.23;460.02.6322.49232.18;"


net.getTa()

获取TA值

  • 语法

net.getTa()

  • 参数

  • 返回值

number ta,TA值


net.getMultiCell()

实时读取“当前和临近小区信息”

  • 语法

net.getMultiCell(cbFnc)

  • 参数
参数 释义
cbFnc function,回调函数,当读取到小区信息后,会调用此回调函数,回调函数的调用形式为:
cbFnc(cells),其中cells为string类型,格式为:当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串,例如:"460.01.6311.49234.30;460.01.6311.49233.23;460.02.6322.49232.18;"
  • 返回值

nil


net.cengQueryPoll()

发起查询基站信息(当前和临近小区信息)的请求

  • 语法

net.cengQueryPoll(period)

  • 参数
参数 释义
period number,查询间隔,单位毫秒
  • 返回值

bool result, true:查询成功,false:查询失败


net.csqQueryPoll()

发起查询信号强度的请求

  • 语法

net.csqQueryPoll(period)

  • 参数
参数 释义
period number,查询间隔,单位毫秒
  • 返回值

bool , true:查询成功,false:查询停止


net.startQueryAll()

查询信号强度和基站信息(飞行模式,简单模式会返回查询失败)

  • 语法

net.startQueryAll(...)

  • 参数
参数 释义
... number,查询周期,参数可变,参数为nil只查询1次,参数1是信号强度查询周期,参数2是基站查询周期
  • 返回值

bool ,true:查询成功,false:查询失败

  • 例子
net.startQueryAll()
net.startQueryAll(60000) -- 6分钟查询1次信号强度和基站信息
net.startQueryAll(60000,600000) -- 1分钟查询1次信号强度,10分钟查询1次基站信息

net.stopQueryAll()

停止查询信号强度和基站信息

  • 语法

net.stopQueryAll()

  • 参数

  • 返回值

Fileds

状态 释义
NET_STATE_REGISTERED GSM网络注册成功
GSM_SIGNAL_REPORT_IND 读取到了信号强度
NET_STATE_UNREGISTER GSM网络注册失败

netLed

网络指示灯模块


netLed.setup()

配置网络指示灯并且立即执行配置后的动作

  • 语法

netLed.setup(flag,pin)

  • 参数
参数 释义
flag bool, 是否打开网络指示灯功能,true为打开,false为关闭
pin number,控制网络指示灯闪烁的GPIO引脚,例如pio.P1_1表示GPIO33
  • 返回值

nil

  • 例子
netLed.setup(true,pio.P1_1)  --表示打开网络指示灯功能,GPIO33控制指示灯
netLed.setup(false) --表示关闭网络指示灯功能

netLed.updateBlinkTime()

配置某种工作状态下指示灯点亮和熄灭的时长(如果用户不配置,使用netLed.lua中ledBlinkTime配置的默认值)

  • 语法

netLed.updateBlinkTime(state, on, off)

  • 参数
参数 释义
state String,某种工作状态,仅支持"FLYMODE"、"SIMERR"、"IDLE"、"GSM"、"GPRS"、"SCK"
on number,指示灯点亮时长,单位毫秒,0xFFFF表示常亮,0表示常灭
off number,指示灯熄灭时长,单位毫秒,0xFFFF表示常灭,0表示常亮
  • 返回值

nil

  • 例子
netLed.updateBlinkTime("FLYMODE",1000,500)  --表示飞行模式工作状态下,指示灯闪烁规律为:亮1秒,灭0.5秒
netLed.updateBlinkTime("SCK",0xFFFF,0)       --表示有socket连接上后台的工作状态下,指示灯闪烁规律为:常亮
netLed.updateBlinkTime("SIMERR",0,0xFFFF)   --表示SIM卡异常状态下,指示灯闪烁规律为:常灭

ntp

模块功能:网络授时

重要提醒!!!!!!
本功能模块采用多个免费公共的NTP服务器来同步时间
并不能保证任何时间任何地点都能百分百同步到正确的时间
所以,如果用户项目中的业务逻辑严格依赖于时间同步功能
则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间.


ntp.getServers()

获取NTP服务器地址列表

  • 语法

ntp.getServers()

  • 参数

  • 返回值

table,服务器地址列表


ntp.setServers()

设置NTP服务器地址列表

  • 语法

ntp.setServers(st)

  • 参数
参数 释义
st tab类型,服务器地址列表
  • 返回值

  • 例子
ntp.getServers({"1edu.ntp.org.cn","cn.ntp.org.cn"})

ntp.isEnd()

NTP同步标志

  • 语法

ntp.isEnd()

  • 参数

  • 返回值

boole,NTP的同步状态true为成功,fasle为失败


ntp.ntpTime()

同步时间,每个NTP服务器尝试3次,超时8秒,适用于被任务函数调用

  • 语法

ntp.ntpTime(ts, fnc)

  • 参数
参数 释义
ts 每隔ts小时同步1次
fnc 同步成功后回调函数
  • 返回值

  • 例子
ntp.ntpTime() -- 只同步1次
ntp.ntpTime(1) -- 1小时同步1次
ntp.ntpTime(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.ntpTime(24,fnc) -- 24小时同步1次,同步成功后执行fnc()

ntp.timeSync()

自动同步时间任务适合独立执行.
重要提醒!!!!!!
本功能模块采用多个免费公共的NTP服务器来同步时间
并不能保证任何时间任何地点都能百分百同步到正确的时间
所以,如果用户项目中的业务逻辑严格依赖于时间同步功能
则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间

  • 语法

ntp.timeSync(ts, fnc)

  • 参数
参数 释义
ts 每隔ts小时同步1次
fnc 同步成功后回调函数
  • 返回值

  • 例子
ntp.timeSync() -- 只同步1次
ntp.timeSync(1) -- 1小时同步1次
ntp.timeSync(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.timeSync(24,fnc) -- 24小时同步1次,同步成功后执行fnc()

Fileds

状态 释义
NTP_SUCCEED NTP同步成功

utils

常用工具类接口


string.toHex()

字符转16进制,如"123abc"转为"313233616263"

  • 语法

string.toHex(str[, separator=""])

  • 参数
参数 释义
str string,输入字符串。
separator string,此参数可选,默认值为: ""。输出的16进制字符串分隔符
  • 返回值

hexstring 16进制组成的串

len 输入的字符串长度

  • 例子
string.toHex("\1\2\3") -- "010203" 3
string.toHex("123abc") -- "313233616263" 6
string.toHex("123abc"," ") -- "31 32 33 61 62 63 " 6

string.fromHex()

16进制转字符,如"313233616263"转为"123abc", 函数里加入了过滤分隔符,可以过滤掉大部分分隔符(可参见正则表达式中\s和\p的范围)。

  • 语法

string.fromHex(hex)

  • 参数
参数 释义
hex string, 16进制组成的串
  • 返回值

charstring,字符组成的串

len,输出字符串的长度

  • 例子
string.fromHex("010203")       --  "\1\2\3"
string.fromHex("313233616263:) -- "123abc"

string.utf8Len()

返回utf8编码字符串的长度

  • 语法

string.utf8Len(str)

  • 参数
参数 释义
str string,utf8编码的字符串,支持中文
  • 返回值

number,返回字符串长度

  • 例子
local cnt = string.utf8Len("中国")  --str = 2

string.urlEncode()

返回字符串的urlEncode编码

  • 语法

string.urlEncode(str)

  • 参数
参数 释义
str string,要转换编码的字符串
  • 返回值

str,urlEncode编码的字符串

  • 例子
string.urlEncode("####133")

string.formatNumberThousands()

返回数字的千位符号格式

  • 语法

string.formatNumberThousands(num)

  • 参数
参数 释义
num number,数字
  • 返回值

string,千位符号的数字字符串

  • 例子
loca s = string.formatNumberThousands(1000)  --s = "1,000"

string.split()

按照指定分隔符分割字符串

  • 语法

string.split(str, delimiter)

  • 参数
参数 释义
str string,输入字符串
delimiter string,分隔符
  • 返回值

分割后的字符串列表

  • 例子
"123,456,789":split(',') -- {'123','456','789'}

io.exists()

判断文件是否存在

  • 语法

io.exists(path)

  • 参数
参数 释义
path string,文件全名例如:"/ldata/call.mp3"
  • 返回值

boole,存在为true,不存在为false

  • 例子
local ex = io.exists("/ldata/call.mp3")

io.readFile()

读取文件并返回文件的内容

  • 语法

io.readFile(path)

  • 参数
参数 释义
path string,文件全名例如:"/ldata/call.txt"
  • 返回值

string,文件的内容,文件不存在返回nil


io.writeFile()

写入文件指定的内容,默认为覆盖二进制模式

  • 语法

io.writeFile(path, content, mode)

  • 参数
参数 释义
path string,文件全名例如:"/ldata/call.txt"
content string,文件内容
mode string,文件写入模式默认"w+b"
  • 返回值

string,文件的内容

  • 例子
local c = io.writeFile("/ldata/call.txt","test")

io.pathInfo()

将文件路径分解为table信息

  • 语法

io.pathInfo(path)

  • 参数
按时 释义
path string,文件路径全名例如:"/ldata/call.txt"
  • 返回值

table,{dirname="/ldata/",filename="call.txt",basename="call",extname=".txt"}


io.fileSize()

返回文件大小

  • 语法

io.fileSize(path)

  • 参数
参数 释义
path string,文件路径全名例如:"/ldata/call.txt"
  • 返回值

number ,文件大小


pins

GPIO 功能配置,包括输入输出IO和上升下降沿中断IO


pins.setup()

配置GPIO模式

  • 语法

pins.setup(pin, val)

  • 参数
参数 释义
pin number,GPIO ID。
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
val number、nil或者function类型。
配置为输出模式时,为number类型,表示默认电平,0是低电平,1是高电平 。
配置为输入模式时,为nil 。
配置为中断模式时,为function类型,表示中断处理函数
  • 返回值

function

配置为输出模式时,返回的函数,可以设置IO的电平

配置为输入或者中断模式时,返回的函数,可以实时获取IO的电平

  • 例子
setOutputFnc = pins.setup(pio.P1_1,0) --[[配置GPIO 33,输出模式,默认输出低电平;
执行setOutputFnc(0)可输出低电平,执行setOutputFnc(1)可输出高电平 ]]--

getInputFnc = pins.setup(pio.P1_1,intFnc) --[[配置GPIO33,中断模式
产生中断时自动调用intFnc(msg)函数:上升沿中断时:msg为cpu.INT_GPIO_POSEDGE;下降沿中断时:msg为cpu.INT_GPIO_NEGEDGE
执行getInputFnc()即可获得当前电平;如果是低电平,getInputFnc()返回0;如果是高电平,getInputFnc()返回1]]--

getInputFnc = pins.setup(pio.P1_1)  --[[配置GPIO33,输入模式
执行getInputFnc()即可获得当前电平;如果是低电平,getInputFnc()返回0;如果是高电平,getInputFnc()返回1]]--

pins.close()

关闭GPIO模式

  • 语法

pins.close(pin)

  • 参数
参数 释义
pin number,GPIO ID
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
  • 返回值

nil

  • 例子
pins.close(pio.P1_1)  --关闭GPIO33

update

远程升级


update.request()

启动远程升级功能

  • 语法

update.request(cbFnc, url, period)

  • 参数
参数 释义
cbFnc function,可选,每次执行远程升级功能后的回调函数,回调函数的调用形式为:
cbFnc(result),result为true表示升级包下载成功,其余表示下载失败 如果没有设置此参数,则升级包下载成功后,会自动重启
url string,可选,使用http的get命令下载升级包的url,如果没有设置此参数,默认使用Luat iot平台的url 如果用户设置了url。
注意:仅传入完整url的前半部分(如果有参数,即传入?前一部分),http.lua会自动添加?以及后面的参数。
例如: 设置的url="www.userserver.com/api/site/firmware_upgrade",则http.lua会在此url后面补充下面的参数 "?project_key="..G.PRODUCT_KEY .."&imei="..misc.getimei() .."&device_key="..misc.getsn() .."&firmware_name=".._G.PROJECT..""..rtos.get_version().."&version=".._G.VERSION
period number, 可选,单位毫秒,定时启动远程升级功能的间隔,如果没有设置此参数,仅执行一次远程升级功能
  • 返回值

nil

  • 例子
update.request()
update.request(cbFnc)
update.request(cbFnc,"www.userserver.com/update")
update.request(cbFnc,nil,4*3600*1000)

pm

休眠管理


pm.wake()

某个Lua应用唤醒系统

  • 语法

pm.wake(tag)

  • 参数
参数 释义
tag string类型,某个Lua应用的唤醒标记,用户自定义
  • 返回值

nil


pm.sleep()

某个Lua应用休眠系统

  • 语法

pm.sleep(tag)

  • 参数
参数 释义
tag string类型,某个Lua应用的唤醒标记,用户自定义,跟wake中的标记保持一致
  • 返回值


pm.isSleep()

pm.isSleep([tag]) 读取某个Lua应用或者全局的休眠状态

  • 语法

pm.isSleep(tag)

  • 参数
参数 释义
tag 可选参数,如果查询某个tag的休眠状态,则跟wake中的tag保持一致;如果查询全局休眠状态,则不需要这个参数
  • 返回值

true休眠,其余没休眠

  • 例子
pm.isSleep() -- 查询全局休眠状态
pm.isSleep('lcd') -- 查询lcd的休眠状态

record

录音处理


record.start()

开始录音

  • 语法

record.start(seconds, cb)

  • 参数
参数 释义
seconds 录音时长,单位:秒
cb 录音结果回调
  • 返回值

result true - 开始录音 其他 - 失败


record.stop()

停止录音

  • 语法

record.stop()

  • 参数

  • 返回值


record.getFilePath()

读取录音文件的完整路径

  • 语法

record.getFilePath()

  • 参数

  • 返回值

string 录音文件的完整路径


record.getData()

读取录音数据

  • 语法

record.getData(offset, len)

  • 参数
参数 释义
offset 偏移位置
len 长度
  • 返回值

data 录音数据


record.getSize()

读取录音文件总长度,录音时长

  • 语法

record.getSize()

  • 参数

  • 返回值

fileSize 录音文件大小

duration 录音时长


record.exists ()

判断是否存在录音

  • 语法

record.exists()

  • 参数

  • 返回值

result true - 有录音 false - 无录音


record.isBusy()

是否正在处理录音

  • 语法

record.isBusy()

  • 参数

  • 返回值

result true - 正在处理 false - 空闲


sms

短信功能


sms.send()

发送短信

  • 语法

sms.send(num, data, cbFnc, idx)

  • 参数
参数 释义
num string,短信接收方号码,ASCII码字符串格式
data string,短信内容,GB2312编码的字符串
cbFnc function, 短信发送结果异步返回时使用的回调函数,可选
idx number,插入短信发送缓冲表的位置,可选,默认是插入末尾
  • 返回值

nil


sms.setNewSmsCb()

设置新短信的用户处理函数

  • 语法

sms.setNewSmsCb(cbFnc)

  • 参数
参数 释义
cbFnc function, 新短信的用户处理函数
  • 返回值

nil


misc

模块功能:配置管理-序列号、IMEI、底层软件版本号、时钟、是否校准、飞行模式、查询电池电量等功能


misc.setClock()

设置系统时间

  • 语法

misc.setClock(t)

  • 参数
参数 释义
t table,系统时间,格式参考:{year=2017,month=2,day=14,hour=14,min=2,sec=58}
  • 返回值

  • 例子
misc.setClock({year=2017,month=2,day=14,hour=14,min=2,sec=58})

misc.getClock()

获取系统时间

  • 语法

misc.getClock()

  • 参数

  • 返回值

table time,{year=2017,month=2,day=14,hour=14,min=19,sec=23}


misc.getWeek()

获取星期

  • 语法

misc.getWeek()

  • 参数

  • 返回值

number week,1-7分别对应周一到周日


misc.getCalib()

获取校准标志

  • 语法

misc.getCalib()

  • 参数

  • 返回值

bool calib, true表示已校准,false或者nil表示未校准


misc.setSn()

设置SN

  • 语法

misc.setSn(s,cbFnc)

  • 参数
参数 释义
s string, 新sn的字符串
cbFnc function ,此参数可选,默认值为: nil。设置结果回调函数,回调函数的调用形式为:cnFnc(result),result为true表示成功,false或者nil为失败
  • 返回值

nil


misc.getSn()

获取模块序列号

  • 语法

misc.getSn()

  • 参数

  • 返回值

string sn,序列号,如果未获取到返回""

注意:开机lua脚本运行之后,会发送at命令去查询sn,所以需要一定时间才能获取到sn。开机后立即调用此接口,基本上返回""


misc.setImei()

设置IMEI

  • 语法

misc.setImei(s[, cbFnc=nil])

  • 参数
参数 释义
s string,新IMEI字符串
cbFnc function,此参数可选,默认值为: nil。设置结果回调函数,回调函数的调用形式为:cnFnc(result),result为true表示成功,false或者nil为失败
  • 返回值


misc.getImei()

获取模块IMEI

  • 语法

misc.getImei()

  • 参数

  • 返回值

string,IMEI号,如果未获取到返回""

注意:开机lua脚本运行之后,会发送at命令去查询imei,所以需要一定时间才能获取到imei。开机后立即调用此接口,基本上返回""


misc.getVbatt()

获取VBAT的电池电压

  • 语法

misc.getVbatt()

  • 参数

  • 返回值

number,电池电压,单位mv


misc.openPwm()

打开并且配置PWM(支持2路PWM,仅支持输出)
说明:
当id为0时:period 取值在 80-1625 Hz范围内时,level 占空比取值范围为:1-100;
period 取值在 1626-65535 Hz范围时,设x=162500/period, y=x * level / 100, x 和 y越是接近正的整数,则输出波形越准确

  • 语法

misc.openPwm(id, period, level)

  • 参数
参数 释义
id number, PWM输出通道,仅支持0和1,0用的是uart2 tx,1用的是uart2 rx
period number,
当id为0时,period表示频率,单位为Hz,取值范围为80-1625,仅支持整数。
当id为1时,取值范围为0-7,仅支持整数,表示时钟周期,单位为毫秒,0-7分别对应125、250、500、1000、1500、2000、2500、3000毫秒
level number,
当id为0时,level表示占空比,单位为level%,取值范围为1-100,仅支持整数。
当id为1时,取值范围为1-15,仅支持整数,表示一个时钟周期内的高电平时间,单位为毫秒,1-15分别对应15.6、31.2、46.9、62.5、78.1、93.7、110、125、141、156、172、187、203、219、234毫秒
  • 返回值


misc.closePwm()

关闭PWM

  • 语法

misc.closePwm(id)

  • 参数
参数 释义
id number, PWM输出通道,仅支持0和1,0用的是uart2 tx,1用的是uart2 rx
  • 返回值

nil

Fileds

消息 释义
SN_READY_IND 可以成功获取SN
IMEI_READY_IND 可以成功获取IMEI
TIME_UPDATE_IND 将当前时间设置为正确的时间

sim

查询sim卡状态、iccid、imsi、mcc、mnc


sim.getIccid()

获取sim卡的iccid

  • 语法

sim.getIccid()

  • 参数

  • 返回值

string ,返回iccid,如果还没有读取出来,则返回nil

注意:开机lua脚本运行之后,会发送at命令去查询iccid,所以需要一定时间才能获取到iccid。开机后立即调用此接口,基本上返回nil


sim.getImsi()

获取sim卡的imsi

  • 语法

sim.getImsi()

  • 参数

  • 返回值

string ,返回imsi,如果还没有读取出来,则返回nil

开机lua脚本运行之后,会发送at命令去查询imsi,所以需要一定时间才能获取到imsi。开机后立即调用此接口,基本上返回nil


sim.getMcc()

获取sim卡的mcc

  • 语法

sim.getMcc()

  • 参数

  • 返回值

string ,返回值:mcc,如果还没有读取出来,则返回""

注意:开机lua脚本运行之后,会发送at命令去查询mcc,所以需要一定时间才能获取到mcc。开机后立即调用此接口,基本上返回""


sim.getMnc()

获取sim卡的getmnc

  • 语法

sim.getMnc()

  • 参数

  • 返回值

string ,返回mnc,如果还没有读取出来,则返回""

注意:开机lua脚本运行之后,会发送at命令去查询mnc,所以需要一定时间才能获取到mnc。开机后立即调用此接口,基本上返回""


misc.getStatus()

获取sim卡的状态

  • 语法

misc.getStatus()

  • 参数

  • 返回值

bool ,true表示sim卡正常,false或者nil表示未检测到卡或者卡异常

开机lua脚本运行之后,会发送at命令去查询状态,所以需要一定时间才能获取到状态。开机后立即调用此接口,基本上返回nil


ril

虚拟串口AT命令交互管理


ril.regRsp()

注册某个AT命令应答的处理函数

  • 语法

ril.regRsp(head, fnc, typ, formt)

  • 参数
参数 释义
head 此应答对应的AT命令头,去掉了最前面的AT两个字符
fnc AT命令应答的处理函数
typ AT命令的应答类型,取值范围NORESULT,NUMBERIC,SLINE,MLINE,STRING,SPECIAL
formt typ为STRING时,进一步定义STRING中的详细格式
  • 返回值

bool ,成功返回true,失败false

  • 例子
ril.regRsp("+CSQ", rsp)

ril.regUrc()

注册某个urc的处理函数

  • 语法

ril.regUrc(prefix, handler)

  • 参数
参数 释义
prefix urc前缀,最前面的连续字符串,包含+、大写字符、数字的组合
handler urc的处理函数
  • 返回值

  • 例子
ril.regUrc("+CREG", neturc)

ril.deRegUrc()

解注册某个urc的处理函数

  • 语法

ril.deRegUrc(prefix)

  • 参数
参数 释义
prefix urc前缀,最前面的连续字符串,包含+、大写字符、数字的组合
  • 返回值


ril.request()

发送AT命令到底层软件

  • 语法

ril.request(cmd, arg, onrsp, delay)

  • 参数
参数 释义
cmd AT命令内容
arg AT命令参数,例如AT+CMGS=12命令执行后,接下来会发送此参数;AT+CIPSEND=14命令执行后,接下来会发送此参数
onrsp AT命令应答的处理函数,只是当前发送的AT命令应答有效,处理之后就失效了
delay 延时delay毫秒后,才发送此AT命令
  • 返回值

  • 例子
ril.request("AT+CENG=1,1")
ril.request("AT+CRSM=214,28539,0,0,12,\"64f01064f03064f002fffff\"", nil, crsmResponse)

aLiYun

目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密和“一型一密”

aLiYun.setup()

配置阿里云物联网套件的产品信息和设备信息

  • 语法

aLiYun.setup(productKey[, productSecret=nil], getDeviceNameFnc, getDeviceSecretFnc[, setDeviceSecretFnc=nil])

  • 参数
参数 释义
productKey String,产品标识
productSecret String,此参数可选,默认值为: nil。
产品密钥
一机一密认证方案时,此参数传入nil
一型一密认证方案时,此参数传入真实的产品密钥
getDeviceNameFnc function,获取设备名称的函数
getDeviceSecretFnc function,获取设备密钥的函数
setDeviceSecretFnc function,此参数可选,默认值为: nil。设置设备密钥的函数,一型一密认证方案才需要此参数
  • 返回值

  • 例子
aLiYun.setup("b0FMK1Ga5cp",nil,getDeviceNameFnc,getDeviceSecretFnc)
aLiYun.setup("a1AoVqkCIbG","7eCdPyR6fYPntFcM",getDeviceNameFnc,getDeviceSecretFnc,setDeviceSecretFnc)


aLiYun.setMqtt()

设置MQTT数据通道的参数

  • 语法

aLiYun.setMqtt([cleanSession=1][, will=nil][, keepAlive=240])

  • 参数
参数 释义
cleanSession number,此参数可选,默认值为: 1。 1/0
will table,此参数可选,默认值为: 240。
keepAlive number,此参数可选,默认值为: 240。
  • 返回值

nil

  • 例子
aLiYun.setMqtt(0)
aLiYun.setMqtt(1,{qos=0,retain=1,topic="/willTopic",payload="will payload"})
aLiYun.setMqtt(1,{qos=0,retain=1,topic="/willTopic",payload="will payload"},120)

aLiYun.subscribe()

订阅主题

  • 语法

aLiYun.subscribe(topic, qos)

  • 参数
参数 释义
topic string或者table类型,一个主题时为string类型,多个主题时为table类型,主题内容为UTF8编码
qos number或者nil,topic为一个主题时,qos为number类型(0/1/2,默认0);topic为多个主题时,qos为nil
  • 返回值

nil

  • 例子
aLiYun.subscribe("/b0FMK1Ga5cp/862991234567890/get", 0)
aLiYun.subscribe({["/b0FMK1Ga5cp/862991234567890/get"] = 0, ["/b0FMK1Ga5cp/862991234567890/get"] = 1})

aLiYun.publish()

发布一条消息

  • 语法

aLiYun.publish(topic, payload[, qos=0][, cbFnc=nil][, cbPara=nil])

  • 参数
参数 释义
topic String,UTF8编码的主题
payload String,数据包
qos number,此参数可选,默认值为: 0。质量等级,0/1/2。
cbFnc function,此参数可选,默认值为: nil。
消息发布结果的回调函数,回调函数的调用形式为:cbFnc(result,cbPara)。result为true表示发布成功,false或者nil表示订阅失败;cbPara为本接口中的第5个参数。
cbPara 此参数可选,默认值为: nil。消息发布结果回调函数的回调参数。
  • 返回值

nil

  • 例子
aLiYun.publish("/b0FMK1Ga5cp/862991234567890/update","test",0)
aLiYun.publish("/b0FMK1Ga5cp/862991234567890/update","test",1,cbFnc,"cbFncPara")

aLiYun.on()

注册事件的处理函数

  • 语法

aLiYun.on(evt, cbFnc)

  • 参数
参数 释义
evt String,事件
"connect"表示连接结果事件
"receive"表示接收到消息事件
cbFnc function,事件的处理函数
当evt为"connect"时,cbFnc的调用形式为:cbFnc(result),result为true表示连接成功,false或者nil表示连接失败
当evt为"receive"时,cbFnc的调用形式为:cbFnc(topic,qos,payload),topic为UTF8编码的主题(string类型),qos为质量等级(number类型),payload为原始编码的负载(string类型)
  • 返回值

nil

  • 例子
aLiYun.on("b0FMK1Ga5cp",nil,getDeviceNameFnc,getDeviceSecretFnc)

aLiYunOta

阿里云物联网套件客户端OTA功能 ,目前固件签名算法仅支持MD5

aLiYun.setVer()

设置当前的固件版本号

  • 语法

aLiYun.setVer(version)

  • 参数
参数 释义
version String,当前固件版本号
  • 返回值

nil

  • 例子
aLiYunOta.setVer("MCU_VERSION_1.0.0")

aLiYun.setName()

设置新固件保存的文件名

  • 语法

aLiYun.setName(name)

  • 语法
参数 释义
name String,新固件下载后保存的文件名;注意此文件名并不是保存的完整路径,完整路径通过setCb设置的回调函数去获取
  • 返回值

nil

  • 例子
aLiYunOta.setName("MCU_FIRMWARE.bin")

aLiYun.setCb()

设置新固件下载后的回调函数

  • 语法

aLiYun.setCb(cbFnc)

  • 参数
参数 释义
cbFnc function,新固件下载后的回调函数,回调函数的调用形式为:cbFnc(result,filePath),result为下载结果,true表示成功,false或者nil表示失败;filePath为新固件文件保存的完整路径
  • 返回值

nil

powerKey

开机键功能配置


powerKey.setup()

配置开机键长按弹起和短按弹起的功能.
如何定义长按键和短按键,例如长按键判断时长为3秒:
按下大于等于3秒再弹起判定为长按键;
按下后,在3秒内弹起,判定为短按键

  • 语法

powerKey.setup([longPrd=3000][, longCb=nil][, shortCb=nil])

  • 参数
参数 释义
longPrd number [此参数可选,默认值为: 3000],长按键判断时长,单位毫秒
longCb function [此参数可选,默认值为: nil],长按弹起时的回调函数,如果为nil,使用默认的处理函数,会自动关机
shortCb function [此参数可选,默认值为: nil],短按弹起时的回调函数
  • 返回值

nil

  • 例子
powerKey.setup(nil,longCb,shortCb)
powerKey.setup(5000,longCb)
powerKey.setup()

gizwits

机智云物联网套件客户端功能


gizwits.setup()

初始化机智云注册所需要的数据

  • 语法

gizwits.setup(PRODUCT_KEY, PRODUCT_SECRET, getDeviceName, getDeviceSecret)

  • 参数
参数 释义
PRODUCT_KEY string,机智云应用列表中的Product Key
PRODUCT_SECRET string, 机智云应用列表中的Product Secret
getDeviceName function,获取设备mac地址的函数
getDeviceSecret function,获取设备passcode的函数
  • 返回值

nil

  • 例子
gizwits.setup("PRODUCT_KEY","PRODUCT_SECRET",getDeviceName,getDeviceSecret)

gizwits.publish()

发布一条消息 手动编写并发送一条mqtt消息

  • 语法

gizwits.publish(topic, payload[, qos=0][, cbFnc=nil], cbPara)

  • 参数
参数 释义
topic string,UTF8编码的主题
payload string,负载
qos number,[此参数可选,默认值为: 0],质量等级,0/1/2,默认0
cbFnc function,[此参数可选,默认值为: nil],消息发布结果的回调函数
cbPara string,标志
  • 返回值

nil

  • 例子
gizwits.publish(topic,msg,0)
gizwits.publish(topic,msgbody,0,{cb=cbFnc,para=cbPara})

gizwits.transmissionSend()

发布一条透传消息 按照机智云带ack的格式发送一条消息

  • 参数

gizwits.transmissionSend(flag, ccmd, sn, cmd, topic)

  • 参数
参数 释义
flag number,通讯协议手册中的flag
ccmd string,命令字,ack返回为0094
sn string, 包序号
cmd string, 业务指令
topic string, UTF8编码的主题
  • 返回值

nil

  • 例子
gizwits.transmissionSend(0,string.fromHex("0094"),string.fromHex("000000001"),"cmd","dev2app/12345/67890"))  --回复ack

on()

注册事件的处理函数

  • 语法

on(evt,cbFnc)

  • 参数
参数 释义
evt string,事件 "connect"表示连接结果事件 "receive"表示接收到消息事件
cbFnc function,事件的处理函数
当evt为"connect"时,cbFnc的调用形式为:cbFnc(result),result为true表示连接成功,false或者nil表示连接失败
当evt为"receive"时,cbFnc的调用形式为:cbFnc(topic,qos,payload),topic为UTF8编码的主题(string类型),qos为质量等级(number类型),payload为原始编码的负载(string类型)
当evt为"transmissionRev"时,cbFnc的调用形式为:cbFnc(flag,ccmd,sn,cmd,topic),flag为数值型的量,ccmd为命令字,sn为包序号,cmd为透传消息内容,topic为UTF8编码的主题(string类型)
  • 返回值

nil

  • 例子
gizwits.on("transmissionRev",rcvTransCbFnc)

扩展API

adc


adc.open()

打开对应ID的ADC通道

  • 语法

result = adc.open( id )

  • 参数
参数 释义
id adc通道id
  • 返回值

1:成功打开adc通道

0:其他

  • 例子
--adc id
local ADC_ID = 0
--打开adc
adc.open(ADC_ID)

adc.read()

读取原始测量数据和电压值,电压值单位为mv

  • 语法

adcValue,voltValue = adc.read( id )

  • 参数
参数 释义
id adc通道id
  • 返回值
adcValue 原始数据ad值,无效值为0xFFFF
voltValue 电压值,单位为mv,无效值为0xFFFF
  • 例子
--adcval为number类型,表示adc的原始值,无效值为0xFFFF
--voltval为number类型,表示转换后的电压值,单位为毫伏,无效值为0xFFFF;adc.read接口返回的voltval放大了3倍,所以需要除以3还原成原始电压
local adcval,voltval = adc.read(ADC_ID)

apn

apn 读取库


apn.get_default_apn()

通过mcc和mnc获取到默认apn

  • 语法

apn,user,password = apn.get_default_apn( mcc,mnc )

  • 参数
参数 释义
mcc 手机国家编码
mnc 手机网络编码
  • 返回值
apn apn名字
user 用户名
password 密码

audiocore

音频操作接口


audiocore.play()

播放音乐

  • 语法

ret = audiocore.play( filename )

  • 参数
参数 释义
filename 音频文件名
  • 返回值

true:播放成功

false:播放失败


audiocore.stop()

停掉正在播放的音频

  • 语法

audiocore.stop()

  • 参数

  • 返回值


audiocore.setchannel()

设置音频播放通道

  • 语法

result = audiocore.setchannel( channel )

  • 参数
channel 音频播放通道(可选参数见下列表)
audiocore.HANDSET 、 audiocore.EARPIECE 、 audiocore.LOUDSPEAKER 、audiocore.BLUETOOTH 、 audiocore.FM 、 audiocore.FM_LP 、 audiocore.TV 、audiocore.AUX_HANSET 、 audiocore.AUX_LOUDSPEAKER 、audiocore.AUX_EARPIECE 、 audiocore.DUMMY_HANDSET 、audiocore.DUMMY_AUX_HANDSET 、 audiocore.DUMMY_LOUDSPEAKER 、audiocore.DUMMY_AUX_LOUDSPEAKER

audiocore.setvol()

设置音频播放音量大小

  • 语法

result = audiocore.setvol( vol )

  • 参数
vol 音频播放器音量(可选参数见下列表)
audiocore. VOL0、 audiocore. VOL1、 audiocore. VOL2、 audiocore. VOL3、 audiocore. VOL4、audiocore. VOL5、 audiocore. VOL6、 audiocore. VOL7
  • 返回值

1:成功

0:其他

audiocore.setmicvol()

设置麦克风音量

  • 语法

result = audiocore.setmicvol( vol )

  • 参数
参数 释义
vol 麦克风音量(可选参数见下列表)
audiocore.MIC_VOL0、audiocore. MIC_VOL1、audiocore. MIC_VOL2、audiocore.MIC_VOL3、audiocore. MIC_VOL4、audiocore. MIC_VOL5、audiocore. MIC_VOL6、audiocore. MIC_VOL7 、 audiocore.MIC_VOL8 、 audiocore.MIC_VOL9 、audiocore.MIC_VOL10 、 audiocore.MIC_VOL11 、 audiocore.MIC_VOL12 、audiocore.MIC_VOL13、audiocore.MIC_VOL14、audiocore.MIC_VOL15
  • 返回值

1:成功

0:其他


audiocore.setloopback()

设置通道指定的环回测试

  • 语法

result = audiocore.setloopback( status,channel )

  • 参数
参数 释义
status 1开启回环测试,0关闭回环测试
channel 音频通道(可选参数见下列表)
audiocore. LOOPBACK_HANDSET 、 audiocore. LOOPBACK_EARPIECE 、 audiocore.LOOPBACK_LOUDSPEAKER 、 audiocore. LOOPBACK_AUX_HANDSET 、 audiocore.LOOPBACK_AUX_LOUDSPEAKER
  • 返回值

1:成功

0:其他


bit

位操作库


bit.bit()

左移运算,等价于C语言中的1 << position

  • 语法

number = bit.bit( position )

  • 参数
参数 释义
position 需要移位的位置
  • 返回值

移位运算后的值

  • 例子
print(bit.bit(2))--参数是位数,作用是1向左移动两位,打印出4

bit.isset()

测试位数是否被置1

  • 语法

flag = bit.isset( value, position )

  • 参数
参数 释义
value 被测试的值
position 被测试的位置
  • 返回值

true:该位被置1

false:其他

  • 例子
print(bit.isset(5,0))--第一个参数是是测试数字,第二个是测试位置。从右向左数0到7。是1返回true,否则返回false,该返回true
print(bit.isset(5,1))--打印false
print(bit.isset(5,2))--打印true
print(bit.isset(5,3))--返回返回false

bit.isclear()

测试位数是否被置0

  • 语法

flag = bit.isclear( value, position )

  • 参数
参数 释义
value 被测试的值
position 被测试的位置
  • 返回值

true:该位被置0

false:其他

  • 例子
print(bit.isclear(5,0))--与上面的相反
print(bit.isclear(5,1))
print(bit.isclear(5,2))
print(bit.isclear(5,3))

bit.set()

置1

  • 语法

number = bit.set( value, pos1, pos2, ..., posn )

  • 参数
参数 释义
value 基数(需要改变的值)
pos1 第一位置
pos2 第二位置
posn 第n位置
  • 返回值

置1之后的值

  • 例子
print(bit.set(0,0,1,2,3))--在相应的位数置1,打印15

bit.clear()

置0

  • 语法

number = bit.clear( value, pos1, pos2, ..., posn )

  • 参数
参数 释义
value 基数(需要改变的值)
pos1 第一位置
pos2 第二位置
posn 第n位置
  • 返回值

置0之后的值

  • 例子
print(bit.clear(5,0,2)) --在相应的位置置0,打印0

bit.bnot()

取反,等价于C语言中的~

  • 语法

number = bit.bnot( value )

  • 参数
参数 释义
value 需要取反的值
  • 返回值

取反之后的值

  • 例子
print(bit.bnot(5))--按位取反,输出-6

bit.band()

与运算,等价于C语言中的val1 & val2 & ... & valn

  • 语法

number = bit.band( val1, val2, ... valn )

  • 参数
参数 释义
val1 第一个参数
val2 第二个参数
valn 第n个参数
  • 返回值

与运算之后的结果

  • 例子
print(bit.band(1,1))--与,--输出1

bit.bor()

或运算,等价于C里面的val1 | val2 | ... | valn

  • 语法

number = bit.bor( val1, val2, ... valn )

  • 参数
参数 释义
val1 第一个参数
val2 第二个参数
valn 第n个参数
  • 返回值

或运算之后的结果

  • 例子
print(bit.bor(1,2))--或,--输出3

bit.bxor()

异或运算,等价于C语言中的val1 ^ val2 ^ ... ^ valn

  • 语法

number = bit.bxor( val1, val2, ... valn )

  • 参数
参数 释义
val1 第一个参数
val2 第二个参数
valn 第n个参数
  • 返回值

异或运算之后的结果

  • 例子
print(bit.bxor(1,2))--异或,相同为0,不同为1

bit.lshift()

逻辑左移,等价于C语言中的value << shift

  • 语法

number = bit.lshift( value, shift )

  • 参数
参数 释义
value 移位的值
shift 移位的位置
  • 返回值

逻辑左移之后的结果

  • 例子
print(bit.lshift(1,2))--逻辑左移,“100”,输出为4

bit.rshift()

逻辑右移,等价于C语言中的value >> shift

  • 语法

number = bit.rshift( value, shift )

  • 参数
参数 释义
value 移位的值
shift 移位的位置
  • 返回值

逻辑右移之后的结果

  • 例子
print(bit.rshift(4,2))--逻辑右移,“001”,输出为1

bit.arshift()

算数右移

  • 语法

number = bit.arshift( value, shift )

  • 参数
参数 释义
value 移位的值
shift 移位的位置
  • 返回值

算术右移之后的结果

  • 例子
print(bit.arshift(2,2))--算数右移,左边添加的数与符号有关,输出为0

i2c

i2c 操作接口

i2c.setup()

打开i2c接口

  • 语法

speed = i2c.setup( id, speed [,slaveaddr] )

  • 参数
参数 释义
id i2c 接口 id,目前支持 i2c id=2 即模块的 I2C3
speed i2c.FAST (400KHz), i2c.SLOW (100KHz)
slaveaddr 可选,i2c 外设地址 0x00-0x7f
  • 返回值

可以根据返回的频率值判断是否成功打开 i2c

  • 例子
--使用i2c.send和i2c.recv的setup
if i2c.setup(i2cid,i2c.SLOW) ~= i2c.SLOW then
  print("init fail")
  return
end

--使用i2c.write和i2c.read的setup
if i2c.setup(i2cid,i2c.SLOW,i2cslaveaddr) ~= i2c.SLOW then
  print("init1 fail")
  return
end

i2c.send()

向从设备写数据

  • 语法

wrote = i2c.send( id,slave, data )

  • 参数
参数 释义
id i2c接口id,目前支持 i2c id=2 即模块的i2c3
slave i2c 外设地址 0x00-0x7f
data number / string / table,自动根据参数类型写数据,num 只写 1 个字节,string/table
  • 返回值

传输成功的字节数

  • 例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
  --向从设备i2cslaveaddr发送寄存器地址cmd[i]
  i2c.send(i2cid,i2cslaveaddr,cmd[i])
  --向从设备i2cslaveaddr发送要写入从设备寄存器内的数据cmd[i+1]
  i2c.send(i2cid,i2cslaveaddr,cmd[i+1])
end

i2c.recv()

向从设备读取数据

  • 语法

i2c.recv( id, slave,size )

  • 参数
参数 释义
id i2c接口id,目前支持 i2c id=2 即模块的i2c3
slave i2c 外设地址 0x00-0x7f
size 读取数据字节数
  • 返回值

返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流

  • 例子
--向从设备i2cslaveaddr发送寄存器地址cmd[i]
i2c.send(i2cid,i2cslaveaddr,cmd[i])
--读取从设备i2cslaveaddr寄存器内的1个字节的数据,并且打印出来
print("init",string.format("%02X",cmd[i]),common.binstohexs(i2c.recv(i2cid,i2cslaveaddr,1)))

i2c.write()

往指定的寄存器地址 reg 传输数据

  • 语法

wrote = i2c.write( id, reg, data )

  • 参数
参数 释义
id i2c接口id,目前支持 i2c id=2 即模块的i2c3
reg 写入 i2c 从设备的寄存器起始地址
data number / string / table,自动根据参数类型写数据,num 只写 1 个字节,string/table
  • 返回值

传输成功的字节数

  • 例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
  --向从设备的寄存器地址cmd[i]中写1字节的数据cmd[i+1]
  i2c.write(i2cid,cmd[i],cmd[i+1])
end

i2c.read()

读取指定寄存器地址 reg 的数据内容

  • 语法

data = i2c.read( id, reg, num )

  • 参数
参数 释义
id i2c接口id,目前支持 i2c id=2 即模块的i2c3
reg 读取 i2c 从设备的寄存器起始地址
num 读取数据字节数
  • 返回值

返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流

  • 例子
--从从设备的寄存器地址cmd[i]中读1字节的数据,并且打印出来
print("init1",string.format("%02X",cmd[i]),common.binstohexs(i2c.read(i2cid,cmd[i],1)))

i2c.close()

关闭 I2C 接口

  • 语法

speed = i2c.close( id )

  • 参数
参数 释义
id i2c接口id,目前支持 i2c id=2 即模块的i2c3
  • 返回值


spi

spi 操作接口


spi.setup

  • 语法

spi.setup(id,chpa,cpol,dataBits,clock,duplexMode)

  • 参数
参数 释义
id SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可
chpa 第几个clk的跳变沿传输数据,仅支持0和1,0表示第1个,1表示第2个。
cpol spi_clk idle的状态,仅支持0和1,0表示低电平,1表示高电平
dataBits 数据位,仅支持8
clock spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000)
duplex 是否全双工,仅支持0和1,0表示半双工(仅支持输出),1表示全双工。此参数可选,默认半双工
  • 返回值

number类型,1表示成功,0表示失败


spi.send()

写数据

  • 语法

spi.send(id,data)

  • 参数
参数 释义
id SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可
data string类型,要发送的数据
  • 返回值

number类型,写成功的数据长度


spi.recv()

读数据

  • 语法

spi.recv(id,length)

  • 参数
参数 释义
id SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可
length 要读取的数据的长度
  • 返回值

string类型,读取的数据内容

pack

pack 库支持将一系列数据按照格式字符转化为 lua 字符串或者将 lua 字符串按照格式字符转化成 一系列值

格式字符串格式如下:

[endianness]< format specifier >[count]

endianness:字节序

  • '<' 小字节序,最低有效字节优先,更低的字节有效位占据着更低地址的内存空间。
  • '>' 大字节序,最高有效字节优先,更高的字节有效位占据着更低地址的内存空间。
  • '=' 自然字节序,默认。

format specifier:参照下面格式化符号

count:取字节个数

格式化符号 变量类型
'z' 以'\0'结尾的字符串
'p' 在string数据前面加一个字节的string长度数据
'P' 在string数据前面加2个字节的string长度数据
'a' 在string数据前面加4个字节的string长度数据
'A' 字符串(string)
'f' 浮点数(float)
'd' 双精度浮点数(double)
'n' Lua数字(Lua number)
'c' 字符(char)
'b' 字节(byte = unsigned char)
'h' 短整型(short,两字节)
'H' 无符号短整型(unsigned short,两字节)
'i' 整型(int,四字节)
'I' 无符号整型(unsigned int,四字节)
'l' 长整型(long,八字节)
'L' 无符号长整型(unsigned long,八字节)

pack.pack()

打包字符串的值,在pack的时候有符号 无符号的输出结果都是一样的 unpack时有符号跟无符号才有区别

  • 语法

packed = pack.pack( format, val1, val2, ..., valn )

  • 参数
参数 释义
format 格式化符号
val1 第一个需打包的值
val2 第二个需打包的值
valn 第n个需打包的值
  • 返回值

一个包含所有格式化变量的字符串

  • 例子
print("pcak.pack test:")
print(pack.pack("A",10))--当"10"以字符串形式包装时,会打印出“10”
print(common.binstohexs(pack.pack("b",0x10)))--将0x01以十六进制打包为字符串,然后用十六进制输出0x10
print(pack.pack("A","LUAT"))

pack.unpack()

解包字符串

  • 语法

nextpos, val1, val2, ..., valn = pack.unpack( string, format,[ init ] )

  • 参数
参数 释义
string 需解包的字符串
format 格式化符号
init(可选) 默认值为1,标记解包开始的位置
  • 返回值
nextpos 字符串标记的位置
val1 第一个解包的值
val2 第二个解包的值
valn 第n个解包的值
  • 例子
print("pack.unpack test:")
nextpox1,val1,val2,val3,val4=pack.unpack("luat100","c4")--"nextpos"下个待解析的位置 ,取4个字符(char)
print(nextpox1,val1,val2,val3,val4)        --分别对应的是"5",l","u","a","t"的ascii码数据
print(string.char(val1,val2,val3,val4))    --将ascii码数据转化为字符输出
nextpox2,string1=pack.unpack("luat100","A4")--输出“luat”
print(nextpox2,string1)--输出5 luat
nextpox3,number1,number2=pack.unpack(common.hexstobins("006400000064"),">H>i")--[[输出无符号短型和整形,因为无符号短型是2个字节,整形是4个字节,输出为100,100--]]
print(nextpox3,number1,number2)--输出7 100 100
nextpox3,number1=pack.unpack(common.hexstobins("0064"),">h")--输出为100,因为短型是2个字节
print(nextpox3,number1)--输出3 100

pio

管脚操作

pio.pin.setdir()

设置管脚的描述

  • 语法

pio.pin.setdir( direction,pin1,pin2,...,pinn)

  • 参数
参数 释义
direction 管脚描述,可选pio.INPUT , pio.OUTPUT, pio.INT
pin1 第一个管脚
pin2(可选) 第二个管脚
pinn(可选) 第n个管脚
  • 返回值


pio.pin.setval()

设置管脚的值

  • 语法

pio.pin.setval(value,pin1,pin2,...,pinn)

  • 参数
参数 释义
value 管脚值,可选0或1
pin1 第一个管脚
pin2(可选) 第二个管脚
pinn(可选) 第n个管脚
  • 返回值


pio.pin.getval()

读取管脚的值

  • 语法

val1, val2, ..., valn = pio.pin.getval( pin1, pin2, ..., pinn )

  • 参数
参数 释义
pin1 第一个管脚
pin2(可选) 第二个管脚
pinn(可选) 第n个管脚
  • 返回值

number类型,0表示低电平,1表示高电平


pio.pin.sethigh()

设置管脚为高电平(1)

  • 语法

pio.pin.sethigh(pin1,pin2,...,pinn)

  • 参数
参数 释义
pin1 第一个管脚
pin2(可选) 第二个管脚
pinn(可选) 第n个管脚
  • 返回值


pio.pin.setlow()

设置管脚为低电平(0)

  • 语法

pio.pin.setlow(pin1,pin2,...,pinn)

  • 参数
参数 释义
pin1 第一个管脚
pin2(可选) 第二个管脚
pinn(可选) 第n个管脚
  • 返回值


pio.pin.setpull()

配置IO口默认状态

  • 语法

pio.pin.setpull(method,pin)

  • 参数
参数 释义
method pio.PULLUP:上拉模式 。pio.PULLDOWN:下拉模式。pio.NOPULL:高阻态
pin 配置管脚
  • 返回值

  • 例子
pio.pin.setpull(pio.PULLUP,pio.P0_5)  --配置为上拉
--pio.pin.setpull(pio.PULLDOWN,pio.P0_5)  --配置为下拉
--pio.pin.setpull(pio.NOPULL,pio.P0_5)  --不配置上下拉

pmd

电源管理接口:ldo 控制,省电管理


pmd.init()

设置电源管理参数
电池充电控制,3 阶段电流充电:
一阶段:电压低于 battlevelFirst 充电电流为 currentFirst
二阶段:电压高于 battlevelFirst 低于 battlevelSecond 充电电流为 currentSecond
三阶段:电压高于 battlevelSecond 至充满 4.25v 充电电流为 currentThird

  • 语法

result = pmd.init( param )

  • 参数
参数 释义
param 参数表,电流有效值:50,100,150,200,300,400,500,600,700,800 电压值以mV为单位,可选值为下
param.currentFirst - 电池电压小于一阶段电压值时的充电电流
param.battlevelFirst - 一阶段电压值节点
param.currentSecond - 电池电压大于一阶段电压值小于二阶段电压值时的充电电流
param.battlevelSecond - 二阶段电压值节点
param.currentThird - 电池电压大于二阶段电压值时的充电电流
  • 返回值

1:成功

0:失败


pmd.ldoset()

ldo 控制

电压域与控制的GPIO的对应关系如下:

pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13
pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18
pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24

一旦设置了某一个电压域的电压等级,受该电压域控制的所有GPIO的高电平都与设置的电压等级一致

  • 语法

pmd.ldoset(level,id1,[id2],...,[idn])

  • 参数
参数 释义
level ldo 亮度 0 - 7 级 0 级关闭
0--关闭
1--1.8V
2--1.9V
3--2.0V
4--2.6V
5--2.8V
6--3.0V
7--3.3V
id1 要设置的第一个 ldo
id2(可选) 要设置的第 二 个 ldo
idn(可选) 要设置的第 n 个 ldo
  • 返回值

  • 例子
--GPIO8输出电平时,要求输出2.8V,则调用
pmd.ldoset(5,pmd.LDO_VMMC)

pmd.sleep()

省电控制

  • 语法

pmd.sleep(value)

  • 参数
参数 释义
value 1 - 进入睡眠,0 - 退出睡眠
  • 返回值


rtos

嵌入式系统接口:接收消息,软件定时器


rtos.receive()

接收消息

  • 语法

msg,msgpara = rtos.receive(timeout)

  • 参数
参数 释义
timeout timeout 超时返回以毫秒为单位,可以用#rtos.INF_TIMEOUT#表示阻塞等待消息
  • 返回值

如果 msg 为 table 类型,msg 根据不同的消息 msg.id 会有不同的数据:

如果 msg 为 number 类型,msg 根据不同的消息 msg 会有不同的数据

1.rtos.MSG_TIMER 定时器超时消息 msg.timer_id 或者 msgpara 为超时的定时器 id

2.rtos.MSG_UART_RXDATA 串口 ATC 数据提醒 msg.uart_id 或者msgpara为收到的数据的串口id或者atc,收到该消息后可以通过uart.read 接口读取数据

3.rtos.MSG_KEYPAD 键盘消息,必须初始化按键(#rtos.init_module#)后才会有键盘消息

msg.pressed 按键按下/弹起

msg.key_matrix_row 按键所在行值

msg.key_matrix_col 按键所在列值

4.rtos.WAIT_MSG_TIMEOUT 等待消息超时

5.rtos.MSG_INT 中断消息

msg.int_id 中断 id

msg.int_resnum 中断 pin 脚编号

6.rtos.MSG_PMD 电源管理消息

msg.present 电池在位状态

msg.level 百分比 0-100

msg.voltage 电池电压

msg.charger 充电器在位状态

msg.state 充电状态:0-不在充电 1-充电中 2-充电停止


rtos.timer_start()

启动定时器

  • 语法

rtos.timer_start(timer_id, timeout)

  • 参数
参数 释义
timer_id 定时器 id,可以是任意整数,定时器到时 msg.timer_id 值为启动时定时器
timeout 定时器延时时间以毫秒为单位
  • 返回值


rtos.timer_stop()

停止定时器

  • 语法

rtos.timer_stop(timer_id)

  • 参数
参数 释义
timer_id 输入与启动定时器时定义的 id 即可停止定时器
  • 返回值


rtos.poweron_reason()

读取开机原因值

  • 语法

reason=rtos.poweron_reason()

  • 参数

  • 返回值
rtos. POWERON_KEY(=0) 按键开机
rtos. POWERON_CHARGER(=1) 充电开机
rtos. POWERON_ALARM(=2) 闹钟开机
rtos. POWERON_RESTART(=3) 软件重启开机
rtos. POWERON_EXCEPTION(=6) 异常开机
rtos. POWERON_HOST(=7) HOST 工具控制重启开机
rtos. POWERON_WATCHDOG(=8) 其他原因

rtos.poweron()

是否启动 GSM 开机

  • 语法

rtos.poweron(flag)

  • 参数
参数 释义
flag 0 表示不启动系统;1 表示启动系统
  • 返回值


rtos.poweroff()

软件关机

  • 语法

rtos.poweroff()

  • 参数

  • 返回值


rtos.restart()

软件重启

  • 语法

rtos.restart()

  • 参数

  • 返回值


rtos.tick()

获取系统开机运行时间总计数

  • 语法

ticks=rtos.tick()

  • 参数

  • 返回值

ticks,时间计数,每 tick 时长:Air200 或 Air202 是 1/16384 秒,Air810 是 4.615 毫 秒。


rtos.sleep()

延时函数

  • 语法

rtos.sleep(millisecond)

  • 参数
参数 释义
millisecond 延时时间 ,以毫秒为单位
  • 返回值


rtos.get_env_usage()

获取 lua 任务消息队列的使用百分比

  • 语法

percentage=rtos.get_env_usage()

  • 参数

  • 返回值

percentage,百分比,例如使用了 80%,则 percentage 为 80


rtos.set_alarm()

设置闹钟,在设置之前必须注册闹钟模块和注册消息回调函数

  • 语法

rtos.set_alarm(mode,year,month,day,hour,min,sec)

  • 参数
参数 释义
mode 1:设置闹铃 ,0:清除闹铃
year number类型,年
month number类型,月
day number类型,日
hour number类型,时
min number类型,分
sec number类型,秒
  • 返回值

  • 例子
rtos.init_module(rtos.MOD_ALARM) --注册闹铃模块
sys.regmsg(rtos.MSG_ALARM,alarmmsg) --注册消息回调函数
rtos.set_alarm(1, 2017, 12, 7, 10, 52, 0) --设置闹铃
--闹钟时间 2017-17-7 10:52:0
rtos.set_alarm(0, 0, 0, 0, 0, 0, 0)  --关闭闹铃

--闹钟开机
local reason = rtos.poweron_reason()
if reason == rtos.POWERON_ALARM then
    rtos.restart()-- 闹钟开机以后重启不然注册不上GSM协议栈
end


rtos.make_dir()

创建目录

  • 语法

rtos.make_dir(path)

  • 参数
参数 释义
path 文件夹路径
  • 返回值

布尔值

true表示创建成功,false表示失败


rtos.remove_dir()

删除文件夹

  • 语法

rtos.remove_dir(path)

  • 参数
参数 释义
path 文件夹路径
  • 返回值

true表示删除成功,false表示失败


rtos.get_fs_free_size()

获取文件系统剩余空间

  • 语法

rtos.get_fs_free_size()

  • 参数

  • 返回值

文件系统剩余空间,单位Bytes


uart

uart 与虚拟 AT 交互接口


uart.setup()

uart通讯

  • 语法

baud = uart.setup( id, baud, databits, parity, stopbits,[msgmode,txDoneReport] )

  • 参数
参数 释义
id 串口号,可选0,1,2
baud 波特率,可选1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,115200,230400,460800,921600
databits 数据位,7或8
parity 校验位,可选uart.PAR_EVEN, uart.PAR_ODD或uart.PAR_NONE
stopbits 停止位,可选uart.STOP_1,uart.STOP_2
msgmode 0 或者默认 - 消息通知,1 - 无消息上报需要用户主动轮询
txDoneReport txdone消息上报开关。0:关闭,1:打开
  • 返回值

串口的真实波特率


uart.write()

向串口写字符串或者整型数据

  • 语法

uart.write( id, data1, [data2], ..., [datan] )

  • 参数
参数 释义
id 串口号,可选0,1,2
data1 第一个字符串或8位整型数据
data2 第二个字符串或8位整型数据
datan(可选) 第n个字符串或8位整型数据
  • 返回值


uart.getchar()

从串口读取单字符

  • 语法

str = uart.getchar( id )

  • 参数
参数 释义
id 串口号,可选0,1,2
  • 返回值

串口读出来的字符


uart.read()

从串口读取字符串

  • 语法

str = uart.read( id, format)

  • 参数
参数 释义
id 串口号
格式化 *l:读取到结束字符\n或者阻塞发送
*n:读取整型数据
*s:读取到空格字符
数字,number类型:只读取number长度的数据
  • 返回值

串口读出到的数据


uart.close()

关闭 uart 接口

  • 语法

uart.close(id)

  • 参数
参数 释义
id 串口号,可选0,1,2
  • 返回值


crypto

常见加密,校验算法


crypto.aes_encrypt()

aes算法(参考http://tool.chacuo.net/cryptaes)

  • 语法

crypto.aes_encrypt(mode,padding,originStr,password)

  • 参数
参数 释义
mode 加密模式
padding 填充方式
originStr 加密字符串
password 密钥
  • 返回值

已加密的字符串

  • 例子
--下面示例为LuaTask的,如果需要LuaScript的,请参考LuaScript crypto demo
local originStr = "AES128 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
originStr = "AES128 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
originStr = "AES128 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"1234567890123456"))
originStr = "AES192 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"123456789012345678901234"))
originStr = "AES192 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"123456789012345678901234"))
originStr = "AES192 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"123456789012345678901234"))
originStr = "AES256 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"12345678901234567890123456789012"))
originStr = "AES256 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"12345678901234567890123456789012"))
originStr = "AES256 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"12345678901234567890123456789012"))
originStr = "AES128 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES192 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES256 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES128 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES192 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES256 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))

originStr = "AES256 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))

originStr = "AES256 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"12345678901234567890123456789012","1234567890666666"))

crypto.crc16()

CRC16校验算法

  • 语法

crypto.crc16(crcMethod,originstr)

  • 参数
参数 释义
crcMethod string类型, 校验方法
originstr string类型,计算校验的字符串
  • 返回值

校验计算结果

  • 例子
local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("testCrypto.crc16_MODBUS",string.format("%04X",crypto.crc16("MODBUS",originStr)))
print("testCrypto.crc16_IBM",string.format("%04X",crypto.crc16("IBM",originStr)))
print("testCrypto.crc16_X25",string.format("%04X",crypto.crc16("X25",originStr)))
print("testCrypto.crc16_MAXIM",string.format("%04X",crypto.crc16("MAXIM",originStr)))
print("testCrypto.crc16_USB",string.format("%04X",crypto.crc16("USB",originStr)))
print("testCrypto.crc16_CCITT",string.format("%04X",crypto.crc16("CCITT",originStr)))
print("testCrypto.crc16_CCITT-FALSE",string.format("%04X",crypto.crc16("CCITT-FALSE",originStr)))
print("testCrypto.crc16_XMODEM",string.format("%04X",crypto.crc16("XMODEM",originStr)))
print("testCrypto.crc16_DNP",string.format("%04X",crypto.crc16("DNP",originStr)))

crc


crypto.xxtea_encrypt()

xxtea加密算法

  • 语法

crypto.xxtea_encrypt(text,key)

  • 参数
参数 释义
text string类型,待加密字符串
key string类型,密钥
  • 返回值

加密/解密数据

  • 例子
local text = "Hello World!";
local key = "07946";
local encrypt_data = crypto.xxtea_encrypt(text, key);
print("testCrypto.xxteaTest","xxtea_encrypt:"..encrypt_data)
local decrypt_data = crypto.xxtea_decrypt(encrypt_data, key);
print("testCrypto.xxteaTest","decrypt_data:"..decrypt_data)

crypto.crc32()

CRC32校验算法

  • 语法

crypto.crc32(originstr,len)

  • 参数
参数 释义
originstr string类型, 需要校验的字符串
len number类型,字符串长度
  • 返回值

校验计算结果

  • 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("crc32",string.format("%08X",crypto.crc32(originstr,slen(originstr))))
--crc32 2FC153F9

crypto.sha256()

sha256算法

  • 语法

crypto.sha256(originStr)

  • 参数
参数 释义
originStr string类型, 需要加密的字符串
  • 返回值

加密后的数据

  • 例子
local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("testCrypto.sha256",crypto.sha256(originStr))

crypto.sha1()

sha1算法

  • 语法

crypto.sha1(originstr,len)

  • 参数
参数 释义
originstr string类型, 需要加密的字符串
len number类型,字符串长度
  • 返回值

加密后的数据

  • 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("sha1",crypto.sha1(originstr,slen(originstr)))
-- sha1 16EBE919119B9B54C8AF6B4F2A09C18B6B6D8218

crypto.hmac_sha1()

hmac_sha1算法

  • 语法

hmac_sha1(originstr,len_str,signkey,len_key)

  • 参数
参数 释义
originstr string类型, 需要加密的数据
len_str number类型,字符串长度
signkey string类型, 密钥
len_key number类型, 密钥长度
  • 返回值

加密后的数据

  • 例子
local originstr = "asdasdsadasweqcdsjghjvcb"
local signkey = "12345689012345"
print("hmac_sha1",crypto.hmac_sha1(originstr,slen(originstr),signkey,slen(signkey)))
--hmac_sha1 E3BB109BA59AF6A1F677157E8EC6B21349B9220F

crypto.flow_md5()

流式md5算法

  • 语法

crypto.flow_md5()

  • 参数

  • 返回值

  • 例子
local fmd5Obj=crypto.flow_md5()
local testTable={"lqlq666lqlq946","07946lq94607946","lq54075407540707946"}
for i=1, #(testTable) do
    fmd5Obj:update(testTable[i])
end
print("testCrypto.flowMd5Test",fmd5Obj:hexdigest())

crypto.md5()

md5算法

  • 语法

crypto.md5(originstr,len)

  • 参数
参数 释义
originstr string类型, 需要加密的字符串
len number类型,字符串长度
  • 返回值

加密后的数据

  • 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("md5",crypto.md5(originstr,slen(originstr)))
--md5   235B69FBC9E75C4FD5E8C59F9CB16500

crypto.hmac_md5()

hmac_md5算法测试

  • 语法

crypto.hmac_md5(originstr,len_str,signkey,len_key)

  • 参数
参数 释义
originstr string类型, 需要加密的字符串
len_str number类型,字符串长度
signkey string类型, 密钥
len_key number类型, 密钥长度
  • 返回值

加密后的数据

  • 例子
local originstr = "asdasdsadas"
local signkey = "123456"
print("hmac_md5",crypto.hmac_md5(originstr,slen(originstr),signkey,slen(signkey)))
-- hmac_md5 38A7B18DC5F6543849DC49F06FADE3CC

crypto.base64_encode()

base64加密

  • 语法

crypto.base64_encode(originstr,len)

  • 参数
参数 释义
originstr string类型, 需要加密的字符串
len number类型,字符串长度
  • 返回值

加密后的数据

  • 例子
local originstr = "123456"
local encodestr = crypto.base64_encode(originstr,slen(originstr))
print("base64_encode",encodestr)
--base64_encode MTIzNDU2

crypto.base64_decode()

base64解密

  • 语法

crypto.base64_decode(originstr,len)

  • 参数
参数 释义
originstr string类型, 需要加密的字符串
len number类型,字符串长度
  • 返回值

解密后的数据

  • 例子
print("base64_decode",crypto.base64_decode(encodestr,slen(encodestr)))
-- base64_decode    123456

json

json编译解析


json.encode()

json编译

  • 语法

json.encode(torigin)

  • 参数
参数 释义
torigin table类型,待编译的源字符
  • 返回值

json格式字符串

  • 例子
local torigin =
{
    KEY1 = "VALUE1",
    KEY2 = "VALUE2",
    KEY3 = "VALUE3",
    KEY4 = "VALUE4",
    KEY5 = {KEY5_1="VALU5_1",KEY5_2="VALU5_2"},
    KEY6 = {1,2,3},
}

local jsondata = json.encode(torigin)
--[[
{"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}},"KEY6":[1,2,3]}
]]

json.decode()

json解析

  • 语法

json.decode(origin)

  • 参数
参数 释义
origin 待解析的json字符串
  • 返回值

解析内容,table类型

解析结果,true为成功,false为失败

错误信息

  • 例子
-- 正确json字符串
local wrongOrigin = "{\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"
local origin = "{\"KEY3\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"
local tjsondata,result,errinfo = json.decode(origin)
if result then
    print(tjsondata["KEY1"])
    print(tjsondata["KEY2"])
    print(tjsondata["KEY3"])
    print(tjsondata["KEY4"])
    print(tjsondata["KEY5"]["KEY5_1"],tjsondata["KEY5"]["KEY5_2"])
    print(tjsondata["KEY6"][1],tjsondata["KEY6"][2],tjsondata["KEY6"][3])
else
    print("json.decode error",errinfo)
end
--origin:正确输出
--wrongOrigin:json.decode error Expected colon but found invalid token at character 5

disp

lcd显示


disp.init()

初始化显示接口语法

  • disp.init(param)

  • 参数

param:显示参数,table类型,包含:

参数 释义
width lcd宽度
height lcd高
bpp 色深,目前支持16位色彩屏(bpp=16)黑白屏(bpp=1)
xoffset x偏移,不设置该域则默认0
yoffset y偏移,不设置该域则默认0
bus 4线spi:disp.BUS_SPI4LINE。并口:disp.BUS_PARALLEL
pinrst LCD_RST lcd reset 管脚根据实际硬件填写
pincs LCD_CS lcd cs管脚不填写则使用默认CS管脚
initcmd 初始化指令表
  • 返回值


disp.puttext()

显示字符串

  • 语法

disp.puttext(str,x,y)

  • 参数
参数 释义
str string类型,显示的字符串
x number类型,x轴坐标
y number类型,y轴坐标
  • 返回值

  • 例子
disp.puttext("欢迎使用Luat",16,0) --从坐标16,0位置开始显示"欢迎使用Luat"

disp.clear()

清除缓冲区内容,注意不会刷新到屏幕上,只有在update时才会执行刷屏动作

  • 语法

disp.clear()

  • 参数

  • 返回值


disp.update()

将缓冲区内容刷新到屏幕上

  • 语法

disp.update()

  • 参数

  • 返回值


disp.putimage()

在坐标(x,y)处显示图片,目前仅支持bmp和png格式,这个接口只会将显示数据写到缓冲区,只有在执行了update了以后才会真正的刷屏。最后面的四个参数是规定了从file中截取某一部分区域

  • 语法

disp.putimage(file,x,y,transcolor,left,top,right,bottom)

  • 参数
参数 释义
file 图片路径
x 显示起始横坐标x(此参数可选,默认为0)
y 显示起始横坐标y(此参数可选,默认为0)
transcolor 透明色(此参数可选,默认为-1,表示没有透明色)
left 截取区域左上角横坐标(此参数可选,默认为0)
top 截取区域左上角纵坐标(此参数可选,默认为0)
right 截取区域右下角横坐标(此参数可选,默认为0)
bottom 截取区域右下角纵坐标(此参数可选,默认为0)
  • 返回值


disp.drawrect()

绘制矩形,并且填充颜色。填充色可以自行设置也可不填充颜色值格式RGB565。

  • 语法

disp.drawrect(left,top,right,bottom,color)

  • 参数
参数 释义
left 矩形框左上角横坐标
top 矩形框左上角纵坐标
right 矩形框右下角横坐标
bottom 矩形框右下角纵坐标
color 矩形框填充色(此参数可选,默认为-1,不填充颜色。需要填充颜色自行设置颜色值)
  • 返回值


disp.setcolor()

设置前景色

  • 语法

disp.setcolor(color)

  • 参数
参数 释义
color 颜色值,以rgb565填充红绿蓝为0xF800 0x07E0 0x001F
  • 返回值


disp.setbkcolor()

设置背景色

  • 语法

disp.setbkcolor(color)

  • 参数
参数 释义
color 颜色值,以rgb565填充红绿蓝为0xF800 0x07E0 0x001F
  • 返回值


disp.loadfont()

加载字体

  • 语法

fontid=disp.loadfont(path)

  • 参数
参数 释义
path 字体文件路径
  • 返回值

fontid-返回加载后的字体id 用于setfont设置字体


disp.setfont()

设置字体

  • 语法

oldfontid=disp.setfont(fontid)

  • 参数
参数 释义
fontid 字体id
  • 返回值

oldfontid-返回旧的字体id


disp.sleep()

休眠显示模块

  • 语法

disp.sleep()

  • 参数

  • 语法


disp.getlcdinfo()

获取LCD分辨率的宽度和高度(单位是像素)

  • 语法

disp.getlcdinfo()

  • 参数

  • 返回值

WIDTH :宽度

HEIGHT : 高度


disp.putqrcode()

显示二维码

  • 语法

disp.putqrcode(data, width, display_width, x, y)

  • 参数
参数 释义
data 从qrencode.encode返回的二维码数据
width 二维码数据的实际宽度
display_width 二维码实际显示宽度
x 二维码显示起始坐标x
y 二维码显示起始坐标y
  • 返回值


qrencode

二维码数据

qrencode.encode ()

创建二维码信息

  • 语法

qrencode.encode(string)

  • 参数
参数 释义
string 二维码字符串
  • 返回值

width 生成的二维码信息宽度

data 生成的二维码数据

  • 例子
 local width, data = qrencode.encode("http://www.openluat.com")