Luat API接口

Luat的API分为三种:第一种直接用Lua语言实现的,在lib目录下,对开发者可见,。第二种是在用C语言实现的,在lod里面,对开发者不可见。这儿称前者为API,后者为扩展API,前两个库为Luat专用。第三种是Lua标准库,也就是Lua语言自带的,Lua语言通用。

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


audio

音频播放.

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

注意:4G模块无该函数


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

audio.stop()

停止音频播放

  • 语法

audio.stop()

  • 参数

  • 返回值

nil


cc

通话管理

注意:4G模块无该函数


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


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}

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


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)

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)

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
  • 返回值
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([typ=nil])

  • 参数
参数 释义
typ string,此参数可选,默认值为: nil。返回的经纬度格式,typ为"DEGREE_MINUTE"时表示返回度分格式,其余表示返回度格式
  • 返回值

table location
例如typ为"DEGREE_MINUTE"时返回{lngType="E",lng="12128.44954",latType="N",lat="3114.50931"}
例如typ不是"DEGREE_MINUTE"时返回{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.getOrgSpeed()

获取原始速度,字符串带浮点

  • 语法

gps.getOrgSpeed()

  • 参数

  • 返回值

number speed 海里每小时的速度


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应用”,主动关闭时,即使有回调函数,也不会调用回调函数

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)

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"})

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)

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


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


misc

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


misc.getStatus()

获取sim卡的状态

  • 语法

misc.getStatus()

  • 参数

  • 返回值

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

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


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


misc.getMuid()

获取模块MUID

  • 语法

misc.getMuid()

  • 参数

  • 返回值

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


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:unsubscribe()

取消订阅主题

  • 语法

mqttc:unsubscribe (topic)

  • 参数
参数 释义
topic string或者table类型,一个主题时为string类型,多个主题时为table类型,主题内容为UTF8编码
  • 返回值

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

  • 例子
mqttc:unsubscribe("/abc") -- unsubscribe topic "/abc"
mqttc:unsubscribe({"/topic1", "/topic2", "/topic3"}) -- unsubscribe 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,msg)

  • 参数
参数 释义
timeout number, 超时间隔,单位毫秒
msg msg为消息参数,发布msg消息,可以唤醒recv等待的mqtt线程
  • 返回值

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

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

  • 参数

  • 返回值


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

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


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表示失败
  • 返回值


pins

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


pins.setup()

配置GPIO模式

  • 语法

pins.setup(pin,val,pull)

  • 参数
参数 释义
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类型,表示中断处理函数
pull 设置输入和中断模式的时候可以选择IO口状态:pio.PULLUP:上拉模式 。pio.PULLDOWN:下拉模式。pio.NOPULL:高阻态,默认上拉。
  • 返回值

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

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的休眠状态

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

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 - 空闲


rtos

注册rtos消息回调处理函数

  • 语法

rtos.on(id, handler)

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

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

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)

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


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。开机后立即调用此接口,基本上返回""



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)
消息 释义
SN_READY_IND 可以成功获取SN
IMEI_READY_IND 可以成功获取IMEI
TIME_UPDATE_IND 将当前时间设置为正确的时间
NET_STATE_REGISTERED GSM网络注册成功
GSM_SIGNAL_REPORT_IND 读取到了信号强度
NET_STATE_UNREGISTER GSM网络注册失败
NTP_SUCCEED NTP同步成功
IP_READY_IND IP数据阶段
TIME_CLK_IND 时钟整分上报通知

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 消息回调处理
  • 返回值

  • 例子
消息 释义
SN_READY_IND 可以成功获取SN
IMEI_READY_IND 可以成功获取IMEI
TIME_UPDATE_IND 将当前时间设置为正确的时间
NET_STATE_REGISTERED GSM网络注册成功
GSM_SIGNAL_REPORT_IND 读取到了信号强度
NET_STATE_UNREGISTER GSM网络注册失败
NTP_SUCCEED NTP同步成功
IP_READY_IND IP数据阶段
TIME_CLK_IND 时钟整分上报通知
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")

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],msg)

  • 参数
参数 释义
timeout number,此参数可选,默认值为: 0,可选参数,接收超时时间
msg msg 可选参数,等待消息退出recvice
  • 返回值

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 是否有可用

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

返回字符串tonumber的转义字符串(用来支持超过31位整数的转换)

  • 语法

string.toValue(str)

  • 参数
参数 释义
str 输入字符串
  • 返回值

str 转换后的lua 二进制字符串
str 转换后的lua 二进制字符串

  • 例子
string.toValue("123456") -> "\1\2\3\4\5\6"  6
string.toValue("123456") -> "\1\2\3\4\5\6"  6

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 ,文件大小


uiWin

UI窗口管理


uiWin.add()

新增一个窗口

  • 语法

uiWin.add(wnd)

  • 参数
参数 释义
wnd table,窗口的元素以及消息处理函数表
  • 返回值

number,窗口ID

  • 例子
uiWin.add({onUpdate=refresh})

uiWin.remove()

移除一个窗口

  • 语法

uiWin.remove(winId)

  • 参数
参数 释义
winId number,窗口ID
  • 返回值

nil


uiWin.isActive()

判断一个窗口是否处于最前显示

  • 语法

uiWin.isActive(winId)

  • 参数
参数 释义
winId number,窗口ID
  • 返回值

bool,true表示最前显示,其余表示非最前显示


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)

wdt

外部硬件看门狗


wdt.setup()

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

  • 语法

wdt.setup(rst,wd)

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


Luat 扩展库

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)

adc.colse()

关闭adc

  • 语法

adc.close(id)

  • 参数
参数 释义
id 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

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算法,支持计算文件的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

disp

lcd显示


disp.init()

初始化显示接口语法

  • disp.init(param)

  • 参数

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

参数 释义
width 分辨率宽度
height 分辨率高度
bpp 位深度,目前支持16位色彩屏(bpp=16)黑白屏(bpp=1)
xoffset x偏移,不设置该域则默认0
yoffset y偏移,不设置该域则默认0
freq spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000)
hwfillcolor 填充色
pinrst reset,复位引脚
pincs 命令/数据选择引脚
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
  • 返回值


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

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("testI2c.init",string.format("%02X",cmd[i]),string.toHex(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字节的数据,并且打印出来
    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])
        --从从设备的寄存器地址cmd[i]中读1字节的数据,并且打印出来
        print("testI2c.init1",string.format("%02X",cmd[i]),string.toHex(i2c.read(i2cid,cmd[i],1)))
    end

i2c.close()

关闭 I2C 接口

  • 语法

speed = i2c.close( id )

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


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 - 退出睡眠
  • 返回值


qrencode

二维码数据

qrencode.encode ()

创建二维码信息

  • 语法

qrencode.encode(string)

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

width 生成的二维码信息宽度

data 生成的二维码数据

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

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 时长1/16384秒


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


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类型,读取的数据内容


spi.send_recv()

读写数据

  • 语法

spi.send_recv(id,data)

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

string类型,读取的数据内容


spi.close()

关闭SPI

  • 语法

spi.close(id)

  • 参数
参数 释义
id SPI的ID,spi.SPI_1表示SPI1
  • 返回值

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


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
  • 返回值


Lua 标准库

io

io.open()

这个函数用字符串mode 指定的模式打开一个文件。

  • 语法

io.open(filename [, mode])

  • 参数
参数 释义
filename string,文件名
mode string,可选
"r":读模式(默认);
"w":写模式;
"a":追加模式
"r+":更新模式,所有之前的数据都保留
"w+": 更新模式,所有之前的数据都删除;
"a+": 追加更新模式,所有之前的数据都保留,只允许在文件尾部做写入。
  • 返回值

返回新的文件句柄。 当出错时,返回 nil加错误消息。

  • 例子
file = io.open("test.lua", "r")

file:close()

关闭文件句柄

  • 语法

file:close()

  • 参数

  • 返回值


file:flush()

向文件写入缓冲中的所有数据

  • 语法

file:flush()

  • 参数

  • 返回值


file:read()

读文件file, 指定的格式决定了要读什么。

  • 语法

file:read(...)

  • 参数
参数 释义
"*n" 读取一个数字,根据 Lua 的转换文法,可能返回浮点数或整数。 (数字可以有前置或后置的空格,以及符号。) 只要能构成合法的数字,这个格式总是去读尽量长的串; 如果读出来的前缀无法构成合法的数字 (比如空串,"0x" 或 "3.4e-"), 就中止函数运行,返回 nil。
"*a" 从当前位置开始读取整个文件。 如果已在文件末尾,返回空串。
"*l" 读取一行并忽略行结束标记。 当在文件末尾时,返回nil这是默认格式。
"number" 读取一个不超过这个数量字节数的字符串。 当在文件末尾时,返回nil。如果number为零, 它什么也不读,返回一个空串。 当在文件末尾时,返回nil。
  • 返回值

对于每种格式,函数返回读出的字符对应的字符串或数字。 若不能以该格式对应读出数据则返回nil

  • 例子
local file = io.open("test.txt", "r")
print(file:read("*l"))  --this is test 1
print(file:read("*n"))  --nil
print(file:read(2))  --th

file:seek()

设置和获取当前文件位置。

  • 语法

file:seek([whence][,offset])

  • 语法
参数 释义
whence 可选 。
"set": 从文件头开始
"cur": 从当前位置开始[默认]
"end": 从文件尾开始
offset offset
  • 返回值

成功则返回最终的文件位置(按字节),失败则返回nil加错误信息

  • 例子
local file = io.open("test.txt", "r+")
print(file:seek("end"))     --30
print(file:seek("set"))     --0
print(file:seek())          --0
print(file:seek("cur", 10))     --10
print(file:seek("cur"))     --10
print(file:read(1))         --s
print(file:seek("cur"))     --11
file:close()

file:write ()

将参数的值逐个写入file。

  • 语法

file:write (...)

  • 参数
参数 释义
... 参数必须是字符串或数字, 要输出其它值,则需通过tostring或string.format进行转换
  • 返回值

成功时,函数返回 file。 否则返回nil加错误描述字符串。


math

基本的数学函数,注意!只有带FLOAT的LOD有数学库,其他LOD不能使用数学库


math.abs()

计算绝对值

  • 语法

math.abs(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回x的绝对值。


math.acos()

计算反余弦值

  • 语法

math.acos(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回x的反余弦值(用弧度表示)。


math.asin()

计算反正弦值

  • 语法

math.asin(X)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回x的反正弦值(用弧度表示)。


math.atan()

计算反正切值

  • 语法

math.atan(y[,x])

  • 参数
参数 释义
y integer/float类型
x 默认x为1
  • 返回值

返回 y/x 的反正切值(用弧度表示)。


math.ceil()

计算最小整数值

  • 语法

math.ceil(x)

  • 参数
参数 释义
x integer
  • 返回值

返回不小于 x 的最小整数值。


math.cos()

计算余弦值

  • 语法

math.cos(x)

  • 参数
参数 释义
x 弧度值
  • 返回值

返回 x 的余弦


math.deg()

弧度转换为角度

  • 语法

math.deg(x)

  • 参数
参数 释义
x 弧度值
  • 返回值

返回转换后的角度值


math.exp()

计算 ex (e为自然对数的底 )的值

  • 语法

math.exp(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

ex (e 为自然对数的底 )的值


math.floor()

计算不大于 x 的最大整数值。

  • 语法

math.floor(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回不大于 x 的最大整数值。


math.fmod()

计算 x 除以 y,将商向零圆整后的余数

  • 语法

math.fmod(x,y)

  • 参数
参数 释义
x integer/float类型,除数
y integer/float类型,被除数
  • 返回值

返回 x 除以 y,将商向零圆整后的余数。


math.huge

浮点数 HUGE_VAL, 这个数比任何数字值都大。

  • 语法

math.huge

  • 参数

  • 返回值


math.log()

计算指定底的 x 的对数。 默认的 base 是 e (因此此函数返回 x 的自然对数)。

  • 语法

math.log(x[,base])

  • 参数
参数 释义
x 指数
base 底数,默认为e
  • 返回值

返回以指定底的 x 的对数


math.max()

计算参数中最大的值, 大小由 Lua 操作 < 决定。

  • 语法

math.max(x,...)

  • 参数
参数 释义
x integer/float类型
... integer/float类型,不定参数,多个数值
  • 返回值

返回参数中最大的值


math.min()

返回参数中最小的值, 大小由 Lua 操作 < 决定。

  • 语法

math.min(x,...)

  • 参数
参数 释义
x integer/float类型
... integer/float类型,不定参数,多个数值
  • 返回值

返回参数中最小的值。


math.maxinteger

最大值的整数。

  • 语法

math.maxinteger

  • 参数

  • 返回值


math.mininteger

最小值的整数。

  • 语法

math.mininteger

  • 参数

  • 返回值


math.modf()

计算 x 的整数部分和小数部分。

  • 语法

math.modf(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回 x 的整数部分和小数部分。 第二个结果一定是浮点数。


math.pi

π 的值。

  • 语法

math.pi

  • 参数

  • 返回值


math.rad()

将角 x 从角度转换为弧度。

  • 语法

math.rad(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

角 x 从角度转换为弧度值


math.random()

随机数

  • 语法

math.random([m[,n]])

  • 参数
参数 释义
m 随机数的左边界值
n 随机数的右边界值
  • 返回值

当不带参数调用时, 返回一个 [0,1) 区间内一致分布的浮点伪随机数。
当以两个整数 m 与 n调用时, math.random返回一个 [m, n]区间 内一致分布的整数伪随机数。 (值 m-n 不能是负数,且必须在 Lua 整数的表示范围内。)
调用 math.random(n) 等价于 math.random(1,n)。


math.randomseed()

把 x设为伪随机数发生器的“种子”: 相同的种子产生相同的随机数列。

  • 语法

math.randomseed(x)

  • 参数
参数 释义
x 随机数种子
  • 返回值


math.sin()

计算x正弦值(假定参数是弧度)

  • 语法

math.sin(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回 x 的正弦值


math.sqrt()

计算x平方根

  • 语法

math.sqrt(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回 x 的平方根。


math.tan()

计算 x 的正切值,(假定参数是弧度)

  • 语法

math.tan(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

返回 x 的正切值


math.tointeger()

将参数转换为整数

  • 语法

math.tointeger(x)

  • 参数
参数 释义
x float类型
  • 返回值

如果 x可以转换为一个整数, 返回该整数。 否则返回 nil。


math.type()

判断数字类型

  • 语法

math.type(x)

  • 参数
参数 释义
x integer/float类型
  • 返回值

如果 x 是整数,返回 "integer", 如果它是浮点数,返回 "float", 如果 x 不是数字,返回 nil。


math.ult()

数值比较

  • 语法

math.ult(m,n)

  • 参数
参数 释义
m integer/float类型
n integer/float类型
  • 返回值

整数 m 和 n 以无符号整数形式比较, m 在 n 之下,返回布尔真否则返回假。


string

字符串操作库


string.upper()

字符串全部转为大写字母

  • 语法

string.upper(s)

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

大写字母字符串


string.lower()

字符串全部转为小写字母

  • 语法

string.lower(s)

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

小写字母字符串


string.gsub()

字符串替换

  • 语法

string.gsub(s,pattern,repl[,n])

  • 参数
参数 释义
s 替换的字符串
pattern

string.find()

查找第一个字符串 s 中匹配到的 pattern

  • 语法

string.find(s,pattern[,init[,plain]])

  • 参数
参数 释义
s 目标字符串
pattern 匹配字符
init 可选,搜索初始位置
plain 可选,当参数为 true时, 关闭模式匹配机制。 此时函数仅做直接的 “查找子串”的操作
  • 返回值

返回匹配字符具体位置。不存在则返回 nil

  • 例子
string.find("Hello Lua user", "Lua", 1)   --7   9

string.reverse()

字符串反转

  • 语法

string.reverse(s)

  • 参数
参数 释义
s strng,待反转字符串
  • 返回值

反转后的字符串

  • 例子
string.reverse("Luat")  --tauL

string.format()

格式化字符串

  • 语法

sting.format(formatString,...)

  • 参数
参数 释义
formatString 格式化字符串
... 类似与C语言的printf中的占位符
  • 返回值

字符串

  • 例子
string.format("the value is:%d",4)   --the value is:4

string.char()

接收ASCII码,返回对应的控制字符

  • 语法

string.char(...)

  • 参数
参数 释义
... 多个ASCII码值
  • 返回值

字符

  • 例子
string.char(97,98,99,100)   --abcd

string.byte()

接收控制字符,返回ASCII码

  • 语法

string.byte(s[,int])

  • 参数
参数 释义
s 控制字符
int 可选,字符下标,默认为1
  • 返回值

ASCII码

  • 例子
string.byte("ABCD")  --65
string.byte("ABCD",4) --68

string.len()

计算字符串长度

  • 语法

string.len(s)

  • 参数
参数 释义
s 字符串
  • 返回值

字符串长度

  • 例子
string.len("abc")  --3

string.rep()

字符串拷贝

  • 语法

string.rep(s,n)

  • 参数
参数 释义
s 字符串
n 拷贝次数
  • 返回值

字符串

  • 例子
string.rep("abcd",2)   --abcdabcd

table

表处理的通用函数


table.concat()

表连接

  • 语法

table.concat(table [, sep [, start [, end]]])

  • 参数
参数 释义
table 指定表
sep 分隔符
start table开始位置
end table结束位置
  • 返回值

字符串

  • 例子
fruits = {"banana","orange","apple"}
-- 返回 table 连接后的字符串
print("连接后的字符串 ",table.concat(fruits))
--连接后的字符串     bananaorangeapple

-- 指定连接字符
print("连接后的字符串 ",table.concat(fruits,", "))
--连接后的字符串     banana, orange, apple

-- 指定索引来连接 table
print("连接后的字符串 ",table.concat(fruits,", ", 2,3))
--连接后的字符串     orange, apple

table.insert()

添加table参数

  • 语法

table.insert(table, [pos,] value)

  • 参数
参数 释义
table 指定表
pos 可选,指定位置,默认为表尾
value 插入值
  • 返回值

table

  • 例子
fruits = {"banana","orange","apple"}

-- 在末尾插入
table.insert(fruits,"mango")
print("索引为 4 的元素为 ",fruits[4])
--索引为 4 的元素为     mango

-- 在索引为 2 的键处插入
table.insert(fruits,2,"grapes")
print("索引为 2 的元素为 ",fruits[2])
--索引为 2 的元素为     grapes

print("最后一个元素为 ",fruits[5])
--最后一个元素为     mango

table.remove()

移除table参数

  • 语法

table.remove(table[,pos])

  • 参数
参数 释义
table 指定表
pos 可选,table下标,默认从最后一个元素删起
  • 返回值

table