Luat API接口 (4G)¶
Important
本页面接口为CAT4模块(Air720x/Air720Sx)接口文档。本页面依据Github代码自动更新,最后更新时间:2020-07-30 14:06:27
Luat的API分为三种:第一种直接用Lua语言实现的,在lib目录下,对开发者可见,。第二种是在用C语言实现的,在blf里面,对开发者不可见。这儿称前者为API,后者为扩展API,前两个库为Luat专用。第三种是Lua标准库,也就是Lua语言自带的,Lua语言通用。
agps¶
模块功能:GPS辅助定位以及星历更新服务.
本功能模块只能配合Air800或者Air530使用;
require"agps"后,会自动开启本功能模块的任务;
开机后,仅获取一次基站对应的经纬度位置和当前时间,把经纬度位置和时间写到GPS芯片中,可以加速GPS定位
会定期更新GPS星历,星历更新算法如下:
从最后一次GPS定位成功的时间算起,每隔4小时连接星历服务器下载一次星历数据(大概4K字节),写入GPS芯片。
例如01:00分开机后,更新了一次星历文件,截止到05:00,“一直没有开启过GPS”或者“开启过GPS,但是GPS从来没有定位成功”,在05:00就会下载星历数据然后写入GPS芯片;
05:00更新星历数据后,在06:00打开了GPS,并且GPS定位成功,然后在07:00关闭了GPS,关闭前GPS仍然处于定位成功状态;
截止到11:00,“一直没有开启过GPS”或者“开启过GPS,但是GPS从来没有定位成功”,在11:00就会下载星历数据然后写入GPS芯片;
aLiYun¶
模块功能:阿里云物联网套件客户端功能.
目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密和“一型一密”
aLiYun.setup(productKey, productSecret, getDeviceNameFnc, getDeviceSecretFnc, setDeviceSecretFnc)¶
配置阿里云物联网套件的产品信息和设备信息
- 参数
传入值类型 | 释义 |
---|---|
string | productKey,产品标识 |
string | 可选参数,默认为nil ,productSecret,产品密钥一机一密认证方案时,此参数传入nil 一型一密认证方案时,此参数传入真实的产品密钥 |
function | getDeviceNameFnc,获取设备名称的函数 |
function | getDeviceSecretFnc,获取设备密钥的函数 |
function | 可选参数,默认为nil ,setDeviceSecretFnc,设置设备密钥的函数,一型一密认证方案才需要此参数 |
- 返回值
nil
- 例子
aLiYun.setup("b0FMK1Ga5cp",nil,getDeviceNameFnc,getDeviceSecretFnc)
aLiYun.setup("a1AoVqkCIbG","7eCdPyR6fYPntFcM",getDeviceNameFnc,getDeviceSecretFnc,setDeviceSecretFnc)
aLiYun.setMqtt(cleanSession, will, keepAlive)¶
设置MQTT数据通道的参数
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为1 ,cleanSession 1/0 |
table | 可选参数,默认为nil ,will 遗嘱参数,格式为{qos=, retain=, topic=, payload=} |
number | 可选参数,默认为240 ,keepAlive,单位秒 |
- 返回值
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(topic, qos)¶
订阅主题
- 参数
传入值类型 | 释义 |
---|---|
param | topic,string或者table类型,一个主题时为string类型,多个主题时为table类型,主题内容为UTF8编码 |
param | 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(topic, payload, qos, cbFnc, cbPara)¶
发布一条消息
- 参数
传入值类型 | 释义 |
---|---|
string | topic,UTF8编码的主题 |
string | payload,负载 |
number | 可选参数,默认为0 ,qos,质量等级,0/1/2,默认0 |
function | 可选参数,默认为nil ,cbFnc,消息发布结果的回调函数回调函数的调用形式为:cbFnc(result,cbPara)。result为true表示发布成功,false或者nil表示订阅失败;cbPara为本接口中的第5个参数 |
param | 可选参数,默认为nil ,cbPara,消息发布结果回调函数的回调参数 |
- 返回值
nil
- 例子
aLiYun.publish("/b0FMK1Ga5cp/862991234567890/update","test",0)
aLiYun.publish("/b0FMK1Ga5cp/862991234567890/update","test",1,cbFnc,"cbFncPara")
aLiYun.on(evt, cbFnc)¶
注册事件的处理函数
- 参数
传入值类型 | 释义 |
---|---|
string | evt,事件 "auth"表示鉴权服务器认证结果事件 "connect"表示接入服务器连接结果事件 "receive"表示接收到接入服务器的消息事件 |
function | cbFnc,事件的处理函数 当evt为"auth"时,cbFnc的调用形式为:cbFnc(result),result为true表示认证成功,false或者nil表示认证失败 当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)
aLiYun.setErrHandle(cbFnc, tmout)¶
设置阿里云task连续一段时间工作异常的处理程序
- 参数
传入值类型 | 释义 |
---|---|
function | cbFnc,异常处理函数,cbFnc的调用形式为:cbFnc() |
number | 可选参数,默认为150 ,tmout,连续工作异常的时间,当连续异常到达这个时间之后,会调用cbFnc() |
- 返回值
nil
- 例子
aLiYun.setErrHandle(function() sys.restart("ALIYUN_TASK_INACTIVE") end, 300)
aLiYunOta¶
模块功能:阿里云物联网套件客户端OTA功能.
目前固件签名算法仅支持MD5
aLiYunOta.setVer(version)¶
设置当前的固件版本号
- 参数
传入值类型 | 释义 |
---|---|
string | version,当前固件版本号 |
- 返回值
nil
- 例子
aLiYunOta.setVer("MCU_VERSION_1.0.0")
aLiYunOta.setName(name)¶
设置新固件保存的文件名
- 参数
传入值类型 | 释义 |
---|---|
string | name,新固件下载后保存的文件名;注意此文件名并不是保存的完整路径,完整路径通过setCb设置的回调函数去获取 |
- 返回值
nil
- 例子
aLiYunOta.setName("MCU_FIRMWARE.bin")
aLiYunOta.setCb(cbFnc)¶
设置新固件下载后的回调函数
- 参数
传入值类型 | 释义 |
---|---|
function | cbFnc,新固件下载后的回调函数 回调函数的调用形式为:cbFnc(result,filePath),result为下载结果,true表示成功,false或者nil表示失败;filePath为新固件文件保存的完整路径 |
- 返回值
nil
- 例子
aLiYunOta.setCb(cbFnc)
clib¶
模块功能:完善luat的c库接口
uart.on (id, event, callback)¶
注册串口事件的处理函数
- 参数
传入值类型 | 释义 |
---|---|
number | id 串口ID: 1表示串口1,2表示串口2,uart.ATC表示虚拟AT口 |
string | event 串口事件: "recieve"表示串口收到数据,注意:使用uart.setup配置串口时,第6个参数设置为nil或者0,收到数据时,才会产生"receive"事件 "sent"表示串口数据发送完成,注意:使用uart.setup配置串口时,第7个参数设置为1,调用uart.write接口发送数据之后,才会产生"sent"事件 |
function | 可选参数,默认为nil ,callback 串口事件的处理函数 |
- 返回值
nil
- 例子
uart.on(1,"receive",rcvFnc)
uart.on(1,"sent",sentFnc)
common¶
模块功能:通用库函数、编码格式转换、时区时间转换
common.ucs2ToAscii(inNum)¶
ascii字符串的unicode编码的16进制字符串 转化为 ascii字符串
- 参数
传入值类型 | 释义 |
---|---|
string | inNum,待转换字符串 |
- 返回值
string data,转换后的字符串
- 例子
local data = common.ucs2ToAscii("0031003200330034")
data is "1234"
common.nstrToUcs2Hex(inNum)¶
ascii字符串 转化为 ascii字符串的unicode编码的16进制字符串(仅支持数字和+)
- 参数
传入值类型 | 释义 |
---|---|
string | inNum:待转换字符串 |
- 返回值
string data,转换后的字符串
- 例子
local data = common.nstrToUcs2Hex("+1234")
data is "002B0031003200330034"
common.numToBcdNum(inStr, destLen)¶
ASCII字符串 转化为 BCD编码格式字符串(仅支持数字)
- 参数
传入值类型 | 释义 |
---|---|
string | inStr,待转换字符串 |
number | destLen,转换后的字符串期望长度,如果实际不足,则填充F |
- 返回值
string data,转换后的字符串
- 例子
local data = common.numToBcdNum("8618126324567")
data is "688121364265f7" (表示第1个字节是0x68,第2个字节为0x81,......)
common.bcdNumToNum(num)¶
BCD编码格式字符串 转化为 号码ASCII字符串(仅支持数字)
- 参数
无
- 返回值
string data,转换后的字符串
- 例子
local data = common.bcdNumToNum(common.fromHex("688121364265f7")) --表示第1个字节是0x68,第2个字节为0x81,......
data is "8618126324567"
common.ucs2ToGb2312(ucs2s)¶
unicode小端编码 转化为 gb2312编码
- 参数
传入值类型 | 释义 |
---|---|
string | ucs2s,unicode小端编码数据 |
- 返回值
string data,gb2312编码数据
- 例子
local data = common.ucs2ToGb2312(ucs2s)
common.gb2312ToUcs2(gb2312s)¶
gb2312编码 转化为 unicode小端编码
- 参数
传入值类型 | 释义 |
---|---|
string | gb2312s,gb2312编码数据 |
- 返回值
string data,unicode小端编码数据
- 例子
local data = common.gb2312ToUcs2(gb2312s)
common.ucs2beToGb2312(ucs2s)¶
unicode大端编码 转化为 gb2312编码
- 参数
传入值类型 | 释义 |
---|---|
string | ucs2s,unicode大端编码数据 |
- 返回值
string data,gb2312编码数据
- 例子
data = common.ucs2beToGb2312(ucs2s)
common.gb2312ToUcs2be(gb2312s)¶
gb2312编码 转化为 unicode大端编码
- 参数
传入值类型 | 释义 |
---|---|
string | gb2312s,gb2312编码数据 |
- 返回值
string data,unicode大端编码数据
- 例子
local data = common.gb2312ToUcs2be(gb2312s)
common.ucs2ToUtf8(ucs2s)¶
unicode小端编码 转化为 utf8编码
- 参数
传入值类型 | 释义 |
---|---|
string | ucs2s,unicode小端编码数据 |
- 返回值
string data,utf8编码数据
- 例子
data = common.ucs2ToUtf8(ucs2s)
common.utf8ToUcs2(utf8s)¶
utf8编码 转化为 unicode小端编码
- 参数
传入值类型 | 释义 |
---|---|
string | utf8s,utf8编码数据 |
- 返回值
string data,unicode小端编码数据
- 例子
local data = common.utf8ToUcs2(utf8s)
common.ucs2beToUtf8(ucs2s)¶
unicode大端编码 转化为 utf8编码
- 参数
传入值类型 | 释义 |
---|---|
string | ucs2s,unicode大端编码数据 |
- 返回值
string data,utf8编码数据
- 例子
data = common.ucs2beToUtf8(ucs2s)
common.utf8ToUcs2be(utf8s)¶
utf8编码 转化为 unicode大端编码
- 参数
传入值类型 | 释义 |
---|---|
string | utf8s,utf8编码数据 |
- 返回值
string data,unicode大端编码数据
- 例子
local data = common.utf8ToUcs2be(utf8s)
common.utf8ToGb2312(utf8s)¶
utf8编码 转化为 gb2312编码
- 参数
传入值类型 | 释义 |
---|---|
string | utf8s,utf8编码数据 |
- 返回值
string data,gb2312编码数据
- 例子
local data = common.utf8ToGb2312(utf8s)
common.gb2312ToUtf8(gb2312s)¶
gb2312编码 转化为 utf8编码
- 参数
传入值类型 | 释义 |
---|---|
string | gb2312s,gb2312编码数据 |
- 返回值
string data,utf8编码数据
- 例子
local data = common.gb2312ToUtf8(gb2312s)
common.timeZoneConvert(y, m, d, hh, mm, ss, srcTimeZone, dstTimeZone)¶
时区时间转换
- 参数
传入值类型 | 释义 |
---|---|
number | y,源时区年份 |
number | m,源时区月份 |
number | d,源时区天 |
number | hh,源时区小时 |
number | mm,源时区分 |
number | ss,源时区秒 |
number | srcTimeZone,源时区 |
number | dstTimeZone,目的时区 |
- 返回值
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控制台.
使用说明参考demo/console下的《console功能使用说明.docx》
console.setup(id, baudrate)¶
配置控制台使用的串口参数,创建控制台协程
- 参数
传入值类型 | 释义 |
---|---|
number | id 控制台使用的串口ID:1表示串口1,2表示串口2 |
number | 可选参数,默认为115200 ,baudrate 控制台使用的串口波特率支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 |
- 返回值
nil
- 例子
console.setup(1, 115200)
errDump¶
模块功能:系统错误日志管理(强烈建议用户开启此模块的“错误日志上报调试服务器”功能).
错误日志包括四种:
1、系统主任务运行时的错误日志
此类错误会导致软件重启,错误日志保存在/luaerrinfo.txt文件中
2、调用sys.taskInit创建的协程运行过程中的错误日志
此类错误会终止当前协程的运行,但是不会导致软件重启,错误日志保存在/lib_err.txt中
3、调用errDump.appendErr或者sys.restart接口保存的错误日志
此类错误日志保存在/lib_err.txt中
4、调用errDump.setNetworkLog接口打开网络异常日志功能后,会自动保存最近几种网络异常日志
错误日志保存在/lib_network_err.txt中
5、底层固件的死机信息
其中2和3保存的错误日志,最多支持5K字节
每次上报错误日志给调试服务器之后,会清空已保存的日志
errDump.appendErr(s)¶
追加错误信息到LIB_ERR_FILE文件中(文件最多允许存储5K字节的数据)
- 参数
传入值类型 | 释义 |
---|---|
string | s:用户自定义的错误信息,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.setNetworkLog(flag)¶
配置网络错误日志开关
- 参数
传入值类型 | 释义 |
---|---|
bool | 可选参数,默认为nil ,flag,是否打开网络错误日志开关,true为打开,false或者nil为关闭 |
- 返回值
无
- 例子
errDump.setNetworkLog(true)
errDump.request(addr, period)¶
配置调试服务器地址,启动错误信息上报给调试服务器的功能,上报成功后,会清除错误信息
- 参数
传入值类型 | 释义 |
---|---|
string | addr,调试服务器地址信息,支持http,udp,tcp 1、如果调试服务器使用http协议,终端将采用POST命令,把错误信息上报到addr指定的URL中,addr的格式如下 (除protocol和hostname外,其余字段可选;目前的实现不支持hash) |
number | 可选参数,默认为600000 ,period,单位毫秒,定时检查错误信息并上报的间隔 |
- 返回值
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.DEFAULT¶
常量值,GPS应用模式1.
打开GPS后,GPS定位成功时,如果有回调函数,会调用回调函数
使用此应用模式调用gps.open打开的“GPS应用”,必须主动调用gps.close或者gps.closeAll才能关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数
gps.TIMERORSUC¶
常量值,GPS应用模式2.
打开GPS后,如果在GPS开启最大时长到达时,没有定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用”
打开GPS后,如果在GPS开启最大时长内,定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用”
打开GPS后,在自动关闭此“GPS应用”前,可以调用gps.close或者gps.closeAll主动关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数
gps.TIMER¶
常量值,GPS应用模式3.
打开GPS后,在GPS开启最大时长时间到达时,无论是否定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用”
打开GPS后,在自动关闭此“GPS应用”前,可以调用gps.close或者gps.closeAll主动关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数
gps.open(mode, para)¶
打开一个“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(gps.TIMERORSUC,{tag="TEST",val=120,cb=testGpsCb})
gps.TIMERORSUC为GPS应用模式,"TEST"为GPS应用标记,120秒为GPS开启最大时长,testGpsCb为回调函数
- 参数
传入值类型 | 释义 |
---|---|
number | mode,GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种 |
param | 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})
--另见:DEFAULT,TIMERORSUC,TIMER
gps.close(mode, para)¶
关闭一个“GPS应用”
只是从逻辑上关闭一个GPS应用,并不一定真正关闭GPS,是有所有的GPS应用都处于关闭状态,才回去真正关闭GPS
- 参数
传入值类型 | 释义 |
---|---|
number | mode,GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种 |
param | 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"})
--另见:open,DEFAULT,TIMERORSUC,TIMER
gps.closeAll()¶
关闭所有“GPS应用”
- 参数
无
- 返回值
nil
- 例子
gps.closeAll()
--另见:open,DEFAULT,TIMERORSUC,TIMER
gps.isActive(mode, para)¶
判断一个“GPS应用”是否处于激活状态
- 参数
传入值类型 | 释义 |
---|---|
number | mode,GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种 |
param | 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"})
--另见:open,DEFAULT,TIMERORSUC,TIMER
gps.setPowerCbFnc(cbFnc)¶
设置GPS模块供电控制的回调函数
如果使用的是Air800,或者供电控制使用的是LDO_VCAM,则打开GPS应用前不需要调用此接口进行设置
否则在调用gps.open前,使用此接口,传入自定义的供电控制函数cbFnc,GPS开启时,gps.lua自动执行cbFnc(true),GPS关闭时,gps.lua自动执行cbFnc(false)
- 参数
传入值类型 | 释义 |
---|---|
param | cbFnc,function类型,用户自定义的GPS供电控制函数 |
- 返回值
nil
- 例子
gps.setPowerCbFnc(cbFnc)
gps.setUart(id, baudrate, databits, parity, stopbits)¶
设置GPS模块和GSM模块之间数据通信的串口参数
如果使用的是Air800,或者使用的UART2(波特率115200,数据位8,无检验位,停止位1),则打开GPS应用前不需要调用此接口进行设置
否则在调用gps.open前,使用此接口,传入UART参数
- 参数
传入值类型 | 释义 |
---|---|
number | id,UART ID,支持1和2,1表示UART1,2表示UART2 |
number | baudrate,波特率,支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 |
number | databits,数据位,支持7,8 |
number | parity,校验位,支持uart.PAR_NONE,uart.PAR_EVEN,uart.PAR_ODD |
number | stopbits,停止位,支持uart.STOP_1,uart.STOP_2 |
- 返回值
nil
- 例子
gps.setUart(2,115200,8,uart.PAR_NONE,uart.STOP_1)
gps.setAerialMode(gps, beidou, glonass, galieo)¶
设置GPS模块搜星模式.
如果使用的是Air800或者Air530,不调用此接口配置,则默认同时开启GPS和北斗定位
- 参数
传入值类型 | 释义 |
---|---|
number | gps,GPS定位系统,1是打开,0是关闭 |
number | beidou,中国北斗定位系统,1是打开,0是关闭 |
number | glonass,俄罗斯Glonass定位系统,1是打开,0是关闭 |
number | galieo,欧盟伽利略定位系统,1是打开,0是关闭 |
- 返回值
nil
- 例子
gps.setAeriaMode(1,1,0,0)
gps.setNmeaMode(mode, cbFnc)¶
设置NMEA数据处理模式.
如果不调用此接口配置,则默认仅gps.lua内部处理NMEA数据
- 参数
传入值类型 | 释义 |
---|---|
number | mode,NMEA数据处理模式,0表示仅gps.lua内部处理,1表示仅用户自己处理,2表示gps.lua和用户同时处理 |
param | cbFnc,function类型,用户处理一条NMEA数据的回调函数,mode为1和2时,此值才有意义 |
- 返回值
nil
- 例子
gps.setNmeaMode(0)
gps.setNmeaMode(1,cbFnc)
gps.setNmeaMode(2,cbFnc)
gps.setRunMode(mode, runTm, sleepTm)¶
设置GPS模块的运行模式.
如果不调用此接口配置,则默认为正常运行模式
- 参数
传入值类型 | 释义 |
---|---|
number | mode,运行模式 0:正常运行模式 1:周期超低功耗跟踪模式 2:周期低功耗模式 4:直接进入超低功耗跟踪模式 8:自动低功耗模式,可以通过串口唤醒 9:自动超低功耗跟踪模式,需要force on来唤醒 |
number | runTm,单位毫秒,mode为0时表示NEMA数据的上报间隔,mode为1或者2时表示运行时长,其余mode时此值无意义 |
number | sleepTm,单位毫秒,mode为1或者2时表示运行时长,其余mode时此值无意义 |
- 返回值
nil
- 例子
gps.setRunMode(0,1000)
gps.setRunMode(1,5000,2000)
gps.setNemaReportFreq(rmc, gga, gsa, gsv, vtg, gll)¶
设置NEMA语句的输出频率.
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为1 ,rmc,单位秒,RMC语句输出频率,取值范围0到10之间的整数,0表示不输出 |
number | 可选参数,默认为1 ,gga,单位秒,GGA语句输出频率,取值范围0到10之间的整数,0表示不输出 |
number | 可选参数,默认为1 ,gsa,单位秒,GSA语句输出频率,取值范围0到10之间的整数,0表示不输出 |
number | 可选参数,默认为1 ,gsv,单位秒,GSV语句输出频率,取值范围0到10之间的整数,0表示不输出 |
number | 可选参数,默认为1 ,vtg,单位秒,VTG语句输出频率,取值范围0到10之间的整数,0表示不输出 |
number | 可选参数,默认为0 ,gll,单位秒,GLL语句输出频率,取值范围0到10之间的整数,0表示不输出 |
- 返回值
nil
- 例子
gps.setNemaReportFreq(5,0,0,0,0,0)
gps.setLocationFilter(seconds)¶
设置GPS定位成功后经纬度的过滤时间.
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为0 ,seconds,单位秒,GPS定位成功后,丢弃前seconds秒的位置信息 |
- 返回值
nil
- 例子
gps.setLocationFilter(2)
gps.isOpen()¶
获取GPS模块是否处于开启状态
- 参数
无
- 返回值
bool result,true表示开启状态,false或者nil表示关闭状态
- 例子
gps.isOpen()
gps.isFix()¶
获取GPS模块是否定位成功
- 参数
无
- 返回值
bool result,true表示定位成功,false或者nil表示定位失败
- 例子
gps.isFix()
gps.getLocation(typ)¶
获取度格式的经纬度信息
- 参数
传入值类型 | 释义 |
---|---|
string | 可选参数,默认为nil ,typ,返回的经纬度格式,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.getLocation()
gps.getAltitude()¶
获取海拔
- 参数
无
- 返回值
number altitude,海拔,单位米
- 例子
gps.getAltitude()
gps.getSpeed()¶
获取速度
- 参数
无
- 返回值
number kmSpeed,第一个返回值为公里每小时的速度 number nmSpeed,第二个返回值为海里每小时的速度
- 例子
gps.getSpeed()
gps.getOrgSpeed()¶
获取原始速度,字符串带浮点
- 参数
无
- 返回值
number speed 海里每小时的速度
- 例子
gps.getOrgSpeed()
gps.getCourse()¶
获取方向角
- 参数
无
- 返回值
number course,方向角
- 例子
gps.getCourse()
gps.getViewedSateCnt()¶
获取可见卫星的个数
- 参数
无
- 返回值
number count,可见卫星的个数
- 例子
gps.getViewedSateCnt()
gps.getUsedSateCnt()¶
获取定位使用的卫星个数
- 参数
无
- 返回值
number count,定位使用的卫星个数
- 例子
gps.getUsedSateCnt()
gps.getGgaloc()¶
获取GGA语句中度分格式的经纬度信息
- 参数
无
- 返回值
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.getGgaloc()
gps.getUtcTime()¶
获取RMC语句中的UTC时间
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第一个参数设置为true
- 参数
无
- 返回值
table utcTime,UTC时间,nil表示无效,例如{year=2018,month=4,day=24,hour=11,min=52,sec=10}
- 例子
gps.getUtcTime()
gps.getSep()¶
获取定位使用的大地高
- 参数
无
- 返回值
number sep,大地高
- 例子
gps.getSep()
gps.getSateSn()¶
获取GSA语句中的可见卫星号
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第三个参数设置为true
- 参数
无
- 返回值
string viewedSateId,可用卫星号,""表示无效
- 例子
gps.getSateSn()
gps.getGsv()¶
获取GSV语句中的可见卫星的信噪比
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第二个参数设置为true
- 参数
无
- 返回值
string gsv,信噪比
- 例子
gps.getGsv()
gps.setParseItem(utcTime, gsv, gsaId)¶
设置是否需要解析的字段
- 参数
传入值类型 | 释义 |
---|---|
bool | 可选参数,默认为nil ,utcTime,是否解析RMC语句中的UTC时间,true表示解析,false或者nil不解析 |
bool | 可选参数,默认为nil ,gsv,是否解析GSV语句,true表示解析,false或者nil不解析 |
bool | 可选参数,默认为nil ,gsaId,是否解析GSA语句中的卫星ID,true表示解析,false或者nil不解析 |
- 返回值
无
- 例子
gps.setParseItem(true,true,true)
gpsv2¶
模块功能:GPS模块管理
gpsv2.open(id, baudrate, mode, sleepTm, fnc)¶
打开GPS模块
- 参数
传入值类型 | 释义 |
---|---|
number | id,UART ID,支持1和2,1表示UART1,2表示UART2 |
number | baudrate,波特率,支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 |
nunber | mode,功耗模式0正常功耗,2周期唤醒 |
number | sleepTm,间隔唤醒的时间 秒 |
param | fnc,外部模块使用的电源管理函数 |
- 返回值
无
- 例子
gpsv2.open()
gpsv2.open(2, 115200, 0, 1) -- 打开GPS,串口2,波特率115200,正常功耗模式,1秒1个点
gpsv2.open(2, 115200, 2, 5) -- 打开GPS,串口2,波特率115200,周期低功耗模式1秒输出,5秒睡眠
gpsv2.close(id, fnc)¶
关闭GPS模块
- 参数
传入值类型 | 释义 |
---|---|
param | fnc,外部模块使用的电源管理函数 |
- 返回值
无
- 例子
gpsv2.close()
gpsv2.restart(r)¶
重启GPS模块
- 参数
传入值类型 | 释义 |
---|---|
number | r,重启方式-0:外部电源重置; 1:热启动; 2:温启动; 3:冷启动 |
- 返回值
无
- 例子
gpsv2.restart()
gpsv2.setAerialMode(gps, beidou, glonass, galieo)¶
设置GPS模块搜星模式.
如果使用的是Air800或者Air530,不调用此接口配置,则默认同时开启GPS和北斗定位
- 参数
传入值类型 | 释义 |
---|---|
number | gps,GPS定位系统,1是打开,0是关闭 |
number | beidou,中国北斗定位系统,1是打开,0是关闭 |
number | glonass,俄罗斯Glonass定位系统,1是打开,0是关闭 |
number | galieo,欧盟伽利略定位系统,1是打开,0是关闭 |
- 返回值
nil
- 例子
gpsv2.setAeriaMode(1,1,0,0)
gpsv2.setRunMode(mode, runTm, sleepTm)¶
设置GPS模块的运行模式.
如果不调用此接口配置,则默认为正常运行模式
- 参数
传入值类型 | 释义 |
---|---|
number | mode,运行模式 0:正常运行模式 1:周期超低功耗跟踪模式 2:周期低功耗模式 4:直接进入超低功耗跟踪模式 8:自动低功耗模式,可以通过串口唤醒 9:自动超低功耗跟踪模式,需要force on来唤醒 |
number | runTm,单位毫秒,mode为1或者2时表示运行时长,其余mode时此值无意义 |
number | sleepTm,单位毫秒,mode为1或者2时表示睡眠时长,其余mode时此值无意义 |
- 返回值
nil
- 例子
gpsv2.setRunMode(0,1000)
gpsv2.setRunMode(1,5000,2000)
gpsv2.setReport(tm)¶
设置NMEA消息上报的间隔
- 参数
传入值类型 | 释义 |
---|---|
number | tm,上报消息的间隔时间 |
- 返回值
无
- 例子
gpsv2.setReport(tm)
gpsv2.isOpen()¶
获取GPS模块是否处于开启状态
- 参数
无
- 返回值
bool result,true表示开启状态,false或者nil表示关闭状态
- 例子
gpsv2.isOpen()
gpsv2.isFix()¶
获取GPS模块是否定位成功
- 参数
无
- 返回值
bool result,true表示定位成功,false或者nil表示定位失败
- 例子
gpsv2.isFix()
gpsv2.getIntLocation()¶
获取返回值为度的10&7方的整数值(度*10^7的值)
- 参数
无
- 返回值
number,number,INT32整数型,经度,维度,符号(正东负西,正北负南)
- 例子
gpsv2.getIntLocation()
gpsv2.getDegLocation()¶
获取度格式的经纬度信息dd.dddddd
- 参数
无
- 返回值
string,string,固件为非浮点时返回度格式的字符串经度,维度,符号(正东负西,正北负南) float,float,固件为浮点的时候,返回浮点类型
- 例子
gpsv2.getLocation()
gpsv2.getCentLocation()¶
获取度分格式的经纬度信息ddmm.mmmm
- 参数
无
- 返回值
string,string,返回度格式的字符串经度,维度,符号(正东负西,正北负南)
- 例子
gpsv2.getCentLocation()
gpsv2.getAltitude()¶
获取海拔
- 参数
无
- 返回值
number altitude,海拔,单位米
- 例子
gpsv2.getAltitude()
gpsv2.getSpeed()¶
获取速度
- 参数
无
- 返回值
number kmSpeed,第一个返回值为公里每小时的速度 number nmSpeed,第二个返回值为海里每小时的速度
- 例子
gpsv2.getSpeed()
gpsv2.getAzimuth()¶
获取方向角
- 参数
无
- 返回值
number Azimuth,方位角
- 例子
gpsv2.getAzimuth()
gpsv2.getViewedSateCnt()¶
获取可见卫星的个数
- 参数
无
- 返回值
number count,可见卫星的个数
- 例子
gpsv2.getViewedSateCnt()
gpsv2.getUsedSateCnt()¶
获取定位使用的卫星个数
- 参数
无
- 返回值
number count,定位使用的卫星个数
- 例子
gpsv2.getUsedSateCnt()
gpsv2.getUtcTime()¶
获取RMC语句中的UTC时间
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第一个参数设置为true
- 参数
无
- 返回值
table utcTime,UTC时间,nil表示无效,例如{year=2018,month=4,day=24,hour=11,min=52,sec=10}
- 例子
gpsv2.getUtcTime()
gpsv2.getSep()¶
获取定位使用的大地高
- 参数
无
- 返回值
number sep,大地高
- 例子
gpsv2.getSep()
gpsv2.getSateSn()¶
获取GSA语句中的可见卫星号
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第三个参数设置为true
- 参数
无
- 返回值
string viewedSateId,可用卫星号,""表示无效
- 例子
gpsv2.getSateSn()
gpsv2.getBDGsv()¶
获取BDGSV解析结果
- 参数
无
- 返回值
table, GSV解析后的数组
- 例子
gpsv2.getBDGsv()
gpsv2.getGPGsv()¶
获取GPGSV解析结果
- 参数
无
- 返回值
table, GSV解析后的数组
- 例子
gpsv2.getGPGsv()
http¶
模块功能:HTTP客户端
http.request(method, url, cert, head, body, timeout, cbFnc, rcvFileName)¶
发送HTTP请求
- 参数
传入值类型 | 释义 |
---|---|
string | method HTTP请求方法 支持"GET","HEAD","POST","OPTIONS","PUT","DELETE","TRACE","CONNECT" |
string | url HTTP请求url url格式(除hostname外,其余字段可选;目前的实现不支持hash) |
table | 可选参数,默认为nil ,cert,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", --客户端证书文件密码[可选] } |
table | 可选参数,默认为nil ,head,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 |
param | 可选参数,默认为nil ,body,nil、string或者table类型,请求实体如果body仅仅是一串数据,可以直接传入一个string类型的body即可 如果body的数据比较复杂,包括字符串数据和文件,则传入table类型的数据,格式如下: { [1] = "string1", [2] = {file="/ldata/test.jpg"}, [3] = "string2" } 例如上面的这个body,索引必须为连续的数字(从1开始),实际传输时,先发送字符串"string1",再发送文件/ldata/test.jpg的内容,最后发送字符串"string2" 如果传输的文件内容需要进行base64编码再上传,请把file改成file_base64,格式如下: { [1] = "string1", [2] = {file_base64="/ldata/test.jpg"}, [3] = "string2" } 例如上面的这个body,索引必须为连续的数字(从1开始),实际传输时,先发送字符串"string1",再发送文件/ldata/test.jpg经过base64编码后的内容,最后发送字符串"string2" |
number | 可选参数,默认为30000 ,timeout,请求发送成功后,接收服务器返回应答数据的超时时间,单位毫秒,默认为30秒 |
function | 可选参数,默认为nil ,cbFnc,执行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,此参数表示下载文件的完整路径;否则表示接收到的应答实体数据 |
string | 可选参数,默认为nil ,rcvFileName,保存“服务器应答实体数据”的文件名,可以传入完整的文件路径,也可以传入单独的文件名,如果是文件名,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"})
httpv2¶
模块功能:HTTP客户端
httpv2.request(method, url, timeout, params, data, ctype, basic, headers, cert, fnc)¶
HTTP客户端
- 参数
传入值类型 | 释义 |
---|---|
string | method,提交方式"GET" or "POST" |
string | url,HTTP请求超链接 |
number | timeout,超时时间 |
param | params,table类型,请求发送的查询字符串,通常为键值对表 |
param | data,table类型,正文提交的body,通常为键值对、json或文件对象类似的表 |
number | ctype,Content-Type的类型(可选1,2,3),默认1:"urlencode",2:"json",3:"octet-stream" |
string | basic,HTTP客户端的authorization basic验证的"username:password" |
param | headers,table类型,HTTP headers部分 |
param | 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", --客户端证书文件密码[可选] } |
- 返回值
string,table,string,正常返回response_code, response_header, response_body string,string,错误返回 response_code, error_message
- 例子
local c, h, b = httpv2.request(url, method, headers, body)
local r, e = httpv2.request("http://wrong.url/ ")
lbsLoc¶
模块功能:根据基站信息查询经纬度
lbsLoc.request(cbFnc, reqAddr, timeout, productKey, host, port, reqTime, reqWifi)¶
发送根据基站查询经纬度请求(仅支持中国区域的位置查询)
- 参数
传入值类型 | 释义 |
---|---|
function | cbFnc,用户回调函数,回调函数的调用形式为: cbFnc(result,lat,lng,addr) result:number类型 0表示成功 1表示网络环境尚未就绪 2表示连接服务器失败 3表示发送数据失败 4表示接收服务器应答超时 5表示服务器返回查询失败 6表示socket已满,创建socket失败 为0时,后面的3个参数才有意义 lat:string类型或者nil,纬度,整数部分3位,小数部分7位,例如"031.2425864" lng:string类型或者nil,经度,整数部分3位,小数部分7位,例如"121.4736522" |
bool | 可选参数,默认为nil ,reqAddr,此参数无意义,保留 |
number | 可选参数,默认为20000 ,timeout,请求超时时间,单位毫秒,默认20000毫秒 |
string | 可选参数,默认为nil ,productKey,IOT网站上的产品证书,此参数可选,用户如果在main.lua中定义了PRODUCT_KEY变量,就不需要传入此参数 |
string | 可选参数,默认为nil ,host,服务器域名,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数 |
string | 可选参数,默认为nil ,port,服务器端口,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数 |
bool | 可选参数,默认为nil ,reqTime,是否需要服务器返回时间信息,true返回,false或者nil不返回,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数 |
table | 可选参数,默认为nil ,reqWifi,搜索到的WIFI热点信息(MAC地址和信号强度),如果传入了此参数,后台会查询WIFI热点对应的经纬度,此参数格式如下:{ ["1a:fe:34:9e:a1:77"] = -63, ["8c:be:be:2d:cd:e9"] = -81, ["20:4e:7f:82:c2:c4"] = -70, } |
- 返回值
nil
- 例子
lbsLoc.request(cbFnc)
lbsLoc.request(cbFnc,true)
lbsLoc.request(cbFnc,nil,20000)
led¶
模块功能:LED闪灯模块
led.blinkPwm(ledPin, light, dark)¶
闪烁指示灯
- 参数
传入值类型 | 释义 |
---|---|
function | ledPin,ledPin(1)用pins.setup注册返回的方法 |
number | light, light-亮灯时间ms |
number | dark, dark-灭灯时间ms |
- 返回值
nil
- 例子
led.blinkPwm(lenPin,500,500)
-- 调用函数需要使用任务支持
led.levelLed(ledPin, bl, bd, cnt, gap)¶
等级指示灯
- 参数
传入值类型 | 释义 |
---|---|
function | ledPin, ledPin(1)用pins.setup注册返回的方法 |
number | bl,亮灯时间ms |
number | bd,灭灯时间ms |
number | cnt,重复次数 (等级的级别,亮灭1次算数字1) |
number | gap,间隔时间 (每次循环周期的间隔) |
- 返回值
nil
- 例子
led.leveled(ledPin,200,200,4,1000)
-- 调用函数需要使用任务支持
led.breateLed(ledPin)¶
呼吸灯
- 参数
传入值类型 | 释义 |
---|---|
function | ledPin, 呼吸灯的ledPin(1)用pins.setup注册返回的方法 |
- 返回值
nil
- 例子
led.breateLed(ledPin)
-- 调用函数需要使用任务支持
link¶
模块功能:数据链路激活(创建、连接、状态维护)
link.setAuthApn(prot, apn, user, pwd)¶
设置专网卡APN(注意:在main.lua中,尽可能靠前的位置调用此接口)
第一次设置成功之后,软件会自动重启,因为重启后才能生效
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为0 ,prot,加密方式, 0:不加密 1:PAP 2:CHAP |
string | 可选参数,默认为"" ,apn,apn名称 |
string | 可选参数,默认为"" ,user,apn用户名 |
string | 可选参数,默认为"" ,pwd,apn密码 |
- 返回值
nil
- 例子
c = link.setAuthApn(2,"MYAPN","MYNAME","MYPASSWORD")
log¶
模块功能:系统日志记录,分级别日志工具
_log(level, tag, ...) (local函数 无法被外部调用)¶
内部函数,支持不同级别的log打印及判断
- 参数
传入值类型 | 释义 |
---|---|
param | level ,日志级别,可选LOGLEVEL_TRACE,LOGLEVEL_DEBUG等 |
param | tag ,模块或功能名称(标签),作为日志前缀 |
param | ... ,日志内容,可变参数 |
- 返回值
nil
- 例子
_log(LOGLEVEL_TRACE,tag, 'log content')
_log(LOGLEVEL_DEBUG,tag, 'log content')
log.trace(tag, ...)¶
输出trace级别的日志
- 参数
传入值类型 | 释义 |
---|---|
param | tag ,模块或功能名称,作为日志前缀 |
param | ... ,日志内容,可变参数 |
- 返回值
nil
- 例子
trace('moduleA', 'log content')
log.debug(tag, ...)¶
输出debug级别的日志
- 参数
传入值类型 | 释义 |
---|---|
param | tag ,模块或功能名称,作为日志前缀 |
param | ... ,日志内容,可变参数 |
- 返回值
nil
- 例子
debug('moduleA', 'log content')
log.info(tag, ...)¶
输出info级别的日志
- 参数
传入值类型 | 释义 |
---|---|
param | tag ,模块或功能名称,作为日志前缀 |
param | ... ,日志内容,可变参数 |
- 返回值
nil
- 例子
info('moduleA', 'log content')
log.warn(tag, ...)¶
输出warn级别的日志
- 参数
传入值类型 | 释义 |
---|---|
param | tag ,模块或功能名称,作为日志前缀 |
param | ... ,日志内容,可变参数 |
- 返回值
nil
- 例子
warn('moduleA', 'log content')
log.error(tag, ...)¶
输出error级别的日志
- 参数
传入值类型 | 释义 |
---|---|
param | tag ,模块或功能名称,作为日志前缀 |
param | ... ,日志内容,可变参数 |
- 返回值
nil
- 例子
error('moduleA', 'log content')
log.fatal(tag, ...)¶
输出fatal级别的日志
- 参数
传入值类型 | 释义 |
---|---|
param | tag ,模块或功能名称,作为日志前缀 |
param | ... ,日志内容,可变参数 |
- 返回值
nil
- 例子
fatal('moduleA', 'log content')
log.openTrace(v, uartid, baudrate)¶
开启或者关闭print的打印输出功能
- 参数
传入值类型 | 释义 |
---|---|
bool | v:false或nil为关闭,其余为开启 |
param | uartid:输出Luatrace的端口:nil表示host口,1表示uart1,2表示uart2 |
number | baudrate:number类型,uartid不为nil时,此参数才有意义,表示波特率,默认115200 \ 支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 |
- 返回值
nil
- 例子
sys.openTrace(1,nil,921600)
misc¶
模块功能:配置管理-序列号、IMEI、底层软件版本号、时钟、是否校准、飞行模式、查询电池电量等功能
misc.setClock(t, cbFnc)¶
设置系统时间
- 参数
传入值类型 | 释义 |
---|---|
table | t,系统时间,格式参考:{year=2017,month=2,day=14,hour=14,min=2,sec=58} |
function | 可选参数,默认为nil ,cbFnc,设置结果回调函数,回调函数的调用形式为:cnFnc(time,result),result为true表示成功,false或者nil为失败;time表示设置之后的系统时间,table类型,例如{year=2017,month=2,day=14,hour=14,min=19,sec=23} |
- 返回值
nil
- 例子
misc.setClock({year=2017,month=2,day=14,hour=14,min=2,sec=58})
misc.getClock()¶
获取系统时间
- 参数
无
- 返回值
table time,{year=2017,month=2,day=14,hour=14,min=19,sec=23}
- 例子
time = getClock()
misc.getWeek()¶
获取星期
- 参数
无
- 返回值
number week,1-7分别对应周一到周日
- 例子
week = misc.getWeek()
misc.getCalib()¶
获取校准标志
- 参数
无
- 返回值
bool calib, true表示已校准,false或者nil表示未校准
- 例子
calib = misc.getCalib()
misc.setSn(s, cbFnc)¶
设置SN
- 参数
传入值类型 | 释义 |
---|---|
string | s,新sn的字符串 |
function | 可选参数,默认为nil ,cbFnc,设置结果回调函数,回调函数的调用形式为:cnFnc(result),result为true表示成功,false或者nil为失败 |
- 返回值
nil
- 例子
misc.setSn("1234567890")
misc.setSn("1234567890",cbFnc)
misc.getSn()¶
获取模块序列号
- 参数
无
- 返回值
string sn,序列号,如果未获取到返回""
注意:开机lua脚本运行之后,会发送at命令去查询sn,所以需要一定时间才能获取到sn。开机后立即调用此接口,基本上返回""
- 例子
sn = misc.getSn()
misc.setImei(s, cbFnc)¶
设置IMEI
- 参数
传入值类型 | 释义 |
---|---|
string | s,新IMEI字符串 |
function | 可选参数,默认为nil ,cbFnc,设置结果回调函数,回调函数的调用形式为:cnFnc(result),result为true表示成功,false或者nil为失败 |
- 返回值
nil
- 例子
misc.setImei(”359759002514931”)
misc.getImei()¶
获取模块IMEI
- 参数
无
- 返回值
string,IMEI号,如果未获取到返回""
注意:开机lua脚本运行之后,会发送at命令去查询imei,所以需要一定时间才能获取到imei。开机后立即调用此接口,基本上返回""
- 例子
imei = misc.getImei()
misc.getVbatt()¶
获取VBAT的电池电压
- 参数
无
- 返回值
number,电池电压,单位mv
- 例子
vb = getVbatt()
misc.getMuid()¶
获取模块MUID
- 参数
无
- 返回值
string,MUID号,如果未获取到返回""
注意:开机lua脚本运行之后,会发送at命令去查询muid,所以需要一定时间才能获取到muid。开机后立即调用此接口,基本上返回""
- 例子
muid = misc.getMuid()
misc.openPwm(id, period, level)¶
打开并且配置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越是接近正的整数,则输出波形越准确
- 参数
传入值类型 | 释义 |
---|---|
number | id,PWM输出通道,仅支持0和1,0用的是uart2 tx,1用的是uart2 rx |
number | period, 当id为0时,period表示频率,单位为Hz,取值范围为80-1625,仅支持整数 当id为1时,取值范围为0-7,仅支持整数,表示时钟周期,单位为毫秒,0-7分别对应125、250、500、1000、1500、2000、2500、3000毫秒 |
number | level, 当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毫秒 |
- 返回值
nil
- 例子
无
misc.closePwm(id)¶
关闭PWM
- 参数
传入值类型 | 释义 |
---|---|
number | id,PWM输出通道,仅支持0和1,0用的是uart2 tx,1用的是uart2 rx |
- 返回值
nil
- 例子
无
mqtt¶
模块功能:MQTT客户端
mqtt.client(clientId, keepAlive, username, password, cleanSession, will, version)¶
创建一个mqtt client实例
- 参数
传入值类型 | 释义 |
---|---|
string | clientId |
number | 可选参数,默认为300 ,keepAlive 心跳间隔(单位为秒),默认300秒 |
string | 可选参数,默认为"" ,username 用户名,用户名为空配置为""或者nil |
string | 可选参数,默认为"" ,password 密码,密码为空配置为""或者nil |
number | 可选参数,默认为1 ,cleanSession 1/0 |
table | 可选参数,默认为nil ,will 遗嘱参数,格式为{qos=, retain=, topic=, payload=} |
string | 可选参数,默认为"3.1.1" ,version MQTT版本号 |
- 返回值
table mqttc client实例
- 例子
mqttc = mqtt.client("clientid-123")
mqttc = mqtt.client("clientid-123",200)
mqttc = mqtt.client("clientid-123",nil,"user","password")
mqttc = mqtt.client("clientid-123",nil,"user","password",nil,nil,"3.1")
mqttc:connect(host, port, transport, cert, timeout)¶
连接mqtt服务器
- 参数
传入值类型 | 释义 |
---|---|
string | host 服务器地址 |
param | port string或者number类型,服务器端口 |
string | 可选参数,默认为"tcp" ,transport "tcp"或者"tcp_ssl" |
table | 可选参数,默认为nil ,cert,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", --客户端证书文件密码[可选] } |
number | timeout, 链接服务器最长超时时间 |
- 返回值
result true表示成功,false或者nil表示失败
- 例子
mqttc = mqtt.client("clientid-123", nil, nil, false); mqttc:connect("mqttserver.com", 1883, "tcp", 5)
mqttc:subscribe(topic, qos)¶
订阅主题
- 参数
传入值类型 | 释义 |
---|---|
param | topic,string或者table类型,一个主题时为string类型,多个主题时为table类型,主题内容为UTF8编码 |
param | 可选参数,默认为0 ,qos,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(topic)¶
取消订阅主题
- 参数
传入值类型 | 释义 |
---|---|
param | 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(topic, payload, qos, retain)¶
发布一条消息
- 参数
传入值类型 | 释义 |
---|---|
string | topic UTF8编码的字符串 |
string | payload 用户自己控制payload的编码,mqtt.lua不会对payload做任何编码转换 |
number | 可选参数,默认为0 ,qos 0/1/2, default 0 |
number | 可选参数,默认为0 ,retain 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(timeout, msg)¶
接收消息
- 参数
传入值类型 | 释义 |
---|---|
number | timeout 接收超时时间,单位毫秒 |
string | 可选参数,默认为nil ,msg 可选参数,控制socket所在的线程退出recv阻塞状态 |
- 返回值
result 数据接收结果,true表示成功,false表示失败 data 如果result为true,表示服务器发过来的包;如果result为false,表示错误信息,超时失败时为"timeout" param msg控制退出时,返回msg的字符串
- 例子
true, packet = mqttc:receive(2000)
false, error_message = mqttc:receive(2000)
false, msg, para = mqttc:receive(2000)
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(mode)¶
设置飞行模式
- 参数
传入值类型 | 释义 |
---|---|
bool | mode,true:飞行模式开,false:飞行模式关 |
- 返回值
nil
- 例子
net.switchFly(mode)
net.getNetMode()¶
获取netmode
- 参数
无
- 返回值
number netMode,注册的网络类型
0:未注册
1:2G GSM网络
2:2.5G EDGE数据网络
3:3G TD网络
4:4G LTE网络
5:3G WCDMA网络
- 例子
net.getNetMode()
net.getState()¶
获取GSM网络注册状态
- 参数
无
- 返回值
string state,GSM网络注册状态,
"INIT"表示正在初始化
"REGISTERED"表示已注册
"UNREGISTER"表示未注册
- 例子
net.getState()
net.getMcc()¶
获取当前小区的mcc
- 参数
无
- 返回值
string mcc,当前小区的mcc,如果还没有注册GSM网络,则返回sim卡的mcc
- 例子
net.getMcc()
net.getMnc()¶
获取当前小区的mnc
- 参数
无
- 返回值
string mcn,当前小区的mnc,如果还没有注册GSM网络,则返回sim卡的mnc
- 例子
net.getMnc()
net.getLac()¶
获取当前位置区ID
- 参数
无
- 返回值
string lac,当前位置区ID(16进制字符串,例如"18be"),如果还没有注册GSM网络,则返回""
- 例子
net.getLac()
net.getCi()¶
获取当前小区ID
- 参数
无
- 返回值
string ci,当前小区ID(16进制字符串,例如"93e1"),如果还没有注册GSM网络,则返回""
- 例子
net.getCi()
net.getRssi()¶
获取信号强度
- 参数
无
- 返回值
number rssi,当前信号强度(取值范围0-31)
- 例子
net.getRssi()
net.getCellInfo()¶
获取当前和临近位置区、小区以及信号强度的拼接字符串
- 参数
无
- 返回值
string cellInfo,当前和临近位置区、小区以及信号强度的拼接字符串,例如:"6311.49234.30;6311.49233.23;6322.49232.18;"
- 例子
net.getCellInfo()
net.getCellInfoExt()¶
获取当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串
- 参数
无
- 返回值
string cellInfo,当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串,例如:"460.01.6311.49234.30;460.01.6311.49233.23;460.02.6322.49232.18;"
- 例子
net.getCellInfoExt()
net.getTa()¶
获取TA值
- 参数
无
- 返回值
number ta,TA值
- 例子
net.getTa()
net.getMultiCell(cbFnc)¶
实时读取“当前和临近小区信息”
- 参数
传入值类型 | 释义 |
---|---|
function | cbFnc,回调函数,当读取到小区信息后,会调用此回调函数,回调函数的调用形式为: cbFnc(cells),其中cells为string类型,格式为:当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串,例如:"460.01.6311.49234.30;460.01.6311.49233.23;460.02.6322.49232.18;" |
- 返回值
nil
- 例子
无
net.cengQueryPoll(period)¶
发起查询基站信息(当前和临近小区信息)的请求
- 参数
传入值类型 | 释义 |
---|---|
number | period 查询间隔,单位毫秒 |
- 返回值
bool result, true:查询成功,false:查询失败
- 例子
net.cengQueryPoll() --查询1次
net.cengQueryPoll(60000) --每分钟查询1次
net.csqQueryPoll(period)¶
发起查询信号强度的请求
- 参数
传入值类型 | 释义 |
---|---|
number | period 查询间隔,单位毫秒 |
- 返回值
bool , true:查询成功,false:查询停止
- 例子
net.csqQueryPoll() --查询1次
net.csqQueryPoll(60000) --每分钟查询1次
net.startQueryAll(...)¶
设置查询信号强度和基站信息的间隔
- 参数
传入值类型 | 释义 |
---|---|
number | ... 查询周期,参数可变,参数为nil只查询1次,参数1是信号强度查询周期,参数2是基站查询周期 |
- 返回值
bool ,true:设置成功,false:设置失败
- 例子
net.startQueryAll()
net.startQueryAll(60000) -- 1分钟查询1次信号强度,只立即查询1次基站信息
net.startQueryAll(60000,600000) -- 1分钟查询1次信号强度,10分钟查询1次基站信息
net.stopQueryAll()¶
停止查询信号强度和基站信息
- 参数
无
- 返回值
无
- 例子
net.stopQueryAll()
net.setEngMode(mode)¶
设置工程模式
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为1 ,mode,工程模式,目前仅支持0和1mode为0时,不支持临近小区查询,休眠时功耗较低 mode为1时,支持临近小区查询,但是休眠时功耗较高 |
- 返回值
nil
- 例子
net.setEngMode(0)
netLed¶
模块功能:网络指示灯模块
netLed.setup(flag, ledPin, ltePin)¶
配置网络指示灯和LTE指示灯并且立即执行配置后的动作
- 参数
传入值类型 | 释义 |
---|---|
bool | flag,是否打开网络指示灯和LTE指示灯功能,true为打开,false为关闭 |
number | ledPin,控制网络指示灯闪烁的GPIO引脚,例如pio.P2_0表示GPIO64 |
number | ltePin,控制LTE指示灯闪烁的GPIO引脚,例如pio.P2_1表示GPIO65 |
- 返回值
nil
- 例子
setup(true,pio.P2_0,pio.P2_1)表示打开网络指示灯和LTE指示灯功能,GPIO64控制网络指示灯,GPIO65控制LTE指示灯
setup(false)表示关闭网络指示灯和LTE指示灯功能
netLed.updateBlinkTime(state, on, off)¶
配置某种工作状态下指示灯点亮和熄灭的时长(如果用户不配置,使用netLed.lua中ledBlinkTime配置的默认值)
- 参数
传入值类型 | 释义 |
---|---|
string | state,某种工作状态,仅支持"FLYMODE"、"SIMERR"、"IDLE"、"GSM"、"GPRS"、"SCK" |
number | on,指示灯点亮时长,单位毫秒,0xFFFF表示常亮,0表示常灭 |
number | off,指示灯熄灭时长,单位毫秒,0xFFFF表示常灭,0表示常亮 |
- 返回值
nil
- 例子
updateBlinkTime("FLYMODE",1000,500)表示飞行模式工作状态下,指示灯闪烁规律为:亮1秒,灭0.5秒
updateBlinkTime("SCK",0xFFFF,0)表示有socket连接上后台的工作状态下,指示灯闪烁规律为:常亮
updateBlinkTime("SIMERR",0,0xFFFF)表示SIM卡异常状态下,指示灯闪烁规律为:常灭
ntp¶
模块功能:网络授时.
重要提醒!!!!!!
本功能模块采用多个免费公共的NTP服务器来同步时间
并不能保证任何时间任何地点都能百分百同步到正确的时间
所以,如果用户项目中的业务逻辑严格依赖于时间同步功能
则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间
参考 http://ask.openluat.com/article/912 加深对授时功能的理解
ntp.getServers()¶
获取NTP服务器地址列表
- 参数
无
- 返回值
table,服务器地址列表
- 例子
local addtable = ntp.getServers()
ntp.setServers(st)¶
设置NTP服务器地址列表
- 参数
传入值类型 | 释义 |
---|---|
param | st,tab类型,服务器地址列表 |
- 返回值
无
- 例子
ntp.getServers({"1edu.ntp.org.cn","cn.ntp.org.cn"})
ntp.isEnd()¶
NTP同步标志
- 参数
无
- 返回值
boole,NTP的同步状态true为成功,fasle为失败
- 例子
local sta = ntp.isEnd()
ntp.ntpTime(ts, fnc, fun)¶
同步时间,每个NTP服务器尝试3次,超时8秒,适用于被任务函数调用
- 参数
传入值类型 | 释义 |
---|---|
param | ts,每隔ts小时同步1次 |
param | fnc,同步成功后回调函数 |
param | fun,同步成功前回调函数 |
- 返回值
无
- 例子
ntp.ntpTime() -- 只同步1次
ntp.ntpTime(1) -- 1小时同步1次
ntp.ntpTime(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.ntpTime(24,fnc) -- 24小时同步1次,同步成功后执行fnc()
ntp.timeSync(ts, fnc, fun)¶
自动同步时间任务适合独立执行.
重要提醒!!!!!!
本功能模块采用多个免费公共的NTP服务器来同步时间
并不能保证任何时间任何地点都能百分百同步到正确的时间
所以,如果用户项目中的业务逻辑严格依赖于时间同步功能
则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间
- 参数
传入值类型 | 释义 |
---|---|
param | ts,每隔ts小时同步1次 |
param | fnc,同步成功后回调函数 |
param | fun,同步成功前回调函数 |
- 返回值
无
- 例子
ntp.timeSync() -- 只同步1次
ntp.timeSync(1) -- 1小时同步1次
ntp.timeSync(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.timeSync(24,fnc) -- 24小时同步1次,同步成功后执行fnc()
nvm¶
模块功能:参数管理
nvm.init(defaultCfgFile)¶
初始化参数存储模块
- 参数
传入值类型 | 释义 |
---|---|
string | defaultCfgFile 默认配置文件名 |
- 返回值
nil
- 例子
nvm.init("config.lua")
nvm.set(k, v, r, s)¶
设置某个参数的值
- 参数
传入值类型 | 释义 |
---|---|
string | k 参数名 |
param | v,可以是任意类型,参数的新值 |
param | r,设置原因,如果传入了非nil的有效参数,并且v值和旧值相比发生了改变,会产生一个PARA_CHANGED_IND消息,携带 k,v,r 3个参数 |
param | 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(k, kk, v, r, s)¶
设置某个table类型参数的某一个索引的值
- 参数
传入值类型 | 释义 |
---|---|
string | k table类型的参数名 |
param | kk table类型参数的某一个索引名 |
param | v,table类型参数的某一个索引的新值 |
param | r,设置原因,如果传入了非nil的有效参数,并且v值和旧值相比发生了改变,会产生一个TPARA_CHANGED_IND消息,携带 k,kk,v,r 4个参数 |
param | s,是否立即写入到文件系统中,false不写入,其余的都写入 |
- 返回值
bool或者nil,成功返回true,失败返回nil
- 例子
nvm.sett("score","chinese",100),参数score["chinese"]赋值为100,立即写入文件系统
nvm.sett("score","chinese",100,"SVR"),参数score["chinese"]赋值为100,立即写入文件系统,
-- 如果旧值不是100,会产生一个TPARA_CHANGED_IND消息,携带 "score","chinese",100,"SVR" 4个参数
nvm.sett("score","chinese",100,nil,false),参数class赋值为Class2,不写入文件系统
nvm.flush()¶
所有参数立即写入文件系统
- 参数
无
- 返回值
nil
- 例子
nvm.flush()
nvm.get(k)¶
读取某个参数的值
- 参数
传入值类型 | 释义 |
---|---|
string | k 参数名 |
- 返回值
参数值
- 例子
nameValue = nvm.get("name")
nvm.gett(k, kk)¶
读取某个table类型参数的某一个索引的值
- 参数
传入值类型 | 释义 |
---|---|
string | k table类型的参数名 |
param | kk table类型参数的某一个索引名 |
- 返回值
无
- 例子
nvm.gett("score","chinese")
nvm.restore()¶
参数恢复出厂设置
- 参数
无
- 返回值
nil
- 例子
nvm.restore()
nvm.remove()¶
请求删除参数文件.
此接口一般用在远程升级时,需要用新的config.lua覆盖原来的参数文件的场景,在此场景下,远程升级包下载成功后,在确定要重启前调用此接口
下次开机执行nvm.init("config.lua")时,会用新的config.lua文件自动覆盖参数文件;以后再开机就不会自动覆盖了
也就是说"nvm.remove()->重启->nvm.init("config.lua")"是一个仅执行一次的完整操作
- 参数
无
- 返回值
nil
- 例子
nvm.remove()
patch¶
模块功能:Lua补丁
patch.safeJsonDecode(s) (local函数 无法被外部调用)¶
封装自定义的json.decode接口
- 参数
传入值类型 | 释义 |
---|---|
string | s,json格式的字符串 |
- 返回值
table,第一个返回值为解析json字符串后的table boole,第二个返回值为解析结果(true表示成功,false失败) string,第三个返回值可选(只有第二个返回值为false时,才有意义),表示出错信息
- 例子
无
pb¶
模块功能:电话簿管理
pb.setStorage(storage, cb)¶
设置电话本存储区域
- 参数
传入值类型 | 释义 |
---|---|
string | storage, 存储区域字符串,仅支持"SM" |
param | cb, 设置后的回调函数 回调方式为cb(result),result为true表示成功,false或者nil表示失败 |
- 返回值
无
- 例子
pb.setStorage(storage,cb)
pb.read(index, cb)¶
读取一条电话本记录
- 参数
传入值类型 | 释义 |
---|---|
number | index,电话本在存储区的位置 |
function | cb,function类型,读取后的回调函数 回调方式为cb(result,name,number):result为true表示成功,false或者nil表示失败;name为姓名;number为号码 |
- 返回值
无
- 例子
pb.read(1,cb)
pb.write(index, name, num, cb)¶
写入一条电话本记录
- 参数
传入值类型 | 释义 |
---|---|
number | index,电话本在存储区的位置 |
string | name,姓名 |
string | num,号码 |
function | cb, functionl类型,写入后的回调函数 回调方式为cb(result):result为true表示成功,false或者nil表示失败 |
- 返回值
无
- 例子
pb.write(1,"zhangsan","13233334444",cb)
pb.delete(index, cb)¶
删除一条电话本记录
- 参数
传入值类型 | 释义 |
---|---|
number | index, 电话本在存储区的位置 |
function | cb, function类型,删除后的回调函数 回调方式为cb(result):result为true表示成功,false或者nil表示失败 |
- 返回值
无
- 例子
pb.delete(1,cb)
pins¶
模块功能:GPIO 功能配置,包括输入输出IO和上升下降沿中断IO
pins.setup(pin, val, pull)¶
配置GPIO模式
- 参数
传入值类型 | 释义 |
---|---|
number | pin,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 GPIO 64到GPIO XX表示为pio.P2_0到pio.P2_(XX-64),例如GPIO65 表示为pio.P2_1 |
param | val,number、nil或者function类型 配置为输出模式时,为number类型,表示默认电平,0是低电平,1是高电平 配置为输入模式时,为nil 配置为中断模式时,为function类型,表示中断处理函数 |
param | pull, number, 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(pin)¶
关闭GPIO模式
- 参数
传入值类型 | 释义 |
---|---|
number | pin,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 |
- 返回值
无
- 例子
pins.close(pio.P1_1),关闭GPIO33
pm¶
模块功能:休眠管理
pm.wake(tag)¶
某个Lua应用唤醒系统
- 参数
传入值类型 | 释义 |
---|---|
param | tag,一般string类型,某个Lua应用的唤醒标记,用户自定义 |
- 返回值
无
- 例子
pm.wake(tag)
pm.sleep(tag)¶
某个Lua应用休眠系统
- 参数
传入值类型 | 释义 |
---|---|
param | tag,一般string类型,某个Lua应用的唤醒标记,用户自定义,跟wake中的标记保持一致 |
- 返回值
无
- 例子
pm.sleep(tag)
pm.isSleep(tag)¶
pm.isSleep([tag]) 读取某个Lua应用或者全局的休眠状态
- 参数
传入值类型 | 释义 |
---|---|
param | tag,可选参数,如果查询某个tag的休眠状态,则跟wake中的tag保持一致;如果查询全局休眠状态,则不需要这个参数 |
- 返回值
true休眠,其余没休眠
- 例子
pm.isSleep() -- 查询全局休眠状态
pm.isSleep('lcd') -- 查询lcd的休眠状态
powerKey¶
模块功能:开机键功能配置
powerKey.setup(longPrd, longCb, shortCb)¶
配置开机键长按弹起和短按弹起的功能.
如何定义长按键和短按键,例如长按键判断时长为3秒:
按下大于等于3秒再弹起判定为长按键;
按下后,在3秒内弹起,判定为短按键
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为3000 ,longPrd,长按键判断时长,单位毫秒 |
function | 可选参数,默认为nil ,longCb,长按弹起时的回调函数,如果为nil,使用默认的处理函数,会自动关机 |
function | 可选参数,默认为nil ,shortCb,短按弹起时的回调函数 |
- 返回值
nil
- 例子
powerKey.setup(nil,longCb,shortCb)
powerKey.setup(5000,longCb)
powerKey.setup()
ril¶
模块功能:虚拟串口AT命令交互管理
ril.regRsp(head, fnc, typ, formt)¶
注册某个AT命令应答的处理函数
- 参数
传入值类型 | 释义 |
---|---|
param | head 此应答对应的AT命令头,去掉了最前面的AT两个字符 |
param | fnc AT命令应答的处理函数 |
param | typ AT命令的应答类型,取值范围NORESULT,NUMBERIC,SLINE,MLINE,STRING,SPECIAL |
param | formt typ为STRING时,进一步定义STRING中的详细格式 |
- 返回值
bool ,成功返回true,失败false
- 例子
ril.regRsp("+CSQ", rsp)
ril.regUrc(prefix, handler)¶
注册某个urc的处理函数
- 参数
传入值类型 | 释义 |
---|---|
param | prefix urc前缀,最前面的连续字符串,包含+、大写字符、数字的组合 |
param | handler urc的处理函数 |
- 返回值
无
- 例子
ril.regUrc("+CREG", neturc)
ril.deRegUrc(prefix)¶
解注册某个urc的处理函数
- 参数
传入值类型 | 释义 |
---|---|
param | prefix urc前缀,最前面的连续字符串,包含+、大写字符、数字的组合 |
- 返回值
无
- 例子
deRegUrc("+CREG")
ril.request(cmd, arg, onrsp, delay)¶
发送AT命令到底层软件
- 参数
传入值类型 | 释义 |
---|---|
param | cmd AT命令内容 |
param | arg AT命令参数,例如AT+CMGS=12命令执行后,接下来会发送此参数;AT+CIPSEND=14命令执行后,接下来会发送此参数 |
param | onrsp AT命令应答的处理函数,只是当前发送的AT命令应答有效,处理之后就失效了 |
param | delay 延时delay毫秒后,才发送此AT命令 |
- 返回值
无
- 例子
ril.request("AT+CENG=1,1")
ril.request("AT+CRSM=214,28539,0,0,12,\"64f01064f03064f002fffff\"", nil, crsmResponse)
sim¶
模块功能:查询sim卡状态、iccid、imsi、mcc、mnc
sim.getIccid()¶
获取sim卡的iccid
- 参数
无
- 返回值
string ,返回iccid,如果还没有读取出来,则返回nil
- 例子
-- 注意:开机lua脚本运行之后,会发送at命令去查询iccid,所以需要一定时间才能获取到iccid。开机后立即调用此接口,基本上返回nil
sim.getIccid()
sim.getImsi()¶
获取sim卡的imsi
- 参数
无
- 返回值
string ,返回imsi,如果还没有读取出来,则返回nil
- 例子
-- 开机lua脚本运行之后,会发送at命令去查询imsi,所以需要一定时间才能获取到imsi。开机后立即调用此接口,基本上返回nil
sim.getImsi()
sim.getMcc()¶
获取sim卡的mcc
- 参数
无
- 返回值
string ,返回值:mcc,如果还没有读取出来,则返回""
- 例子
-- 注意:开机lua脚本运行之后,会发送at命令去查询imsi,所以需要一定时间才能获取到imsi。开机后立即调用此接口,基本上返回""
sim.getMcc()
sim.getMnc()¶
获取sim卡的getmnc
- 参数
无
- 返回值
string ,返回mnc,如果还没有读取出来,则返回""
- 例子
-- 注意:开机lua脚本运行之后,会发送at命令去查询imsi,所以需要一定时间才能获取到imsi。开机后立即调用此接口,基本上返回""
sim.getMnc()
sim.getStatus()¶
获取sim卡的状态
- 参数
无
- 返回值
bool ,true表示sim卡正常,false或者nil表示未检测到卡或者卡异常
- 例子
-- 开机lua脚本运行之后,会发送at命令去查询状态,所以需要一定时间才能获取到状态。开机后立即调用此接口,基本上返回nil
sim.getStatus()
sms¶
模块功能:短信功能
sms.send(num, data, cbFnc, idx)¶
发送短信
- 参数
传入值类型 | 释义 |
---|---|
string | num,短信接收方号码,ASCII码字符串格式 |
string | data,短信内容,GB2312编码的字符串 |
function | 可选参数,默认为nil ,cbFnc,短信发送结果异步返回时的用户回调函数,回调函数的调用形式为:cbFnc(result,num,data) num:短信接收方的号码,ASCII码字符串格式 data:短信内容,unicode大端编码的HEX字符串 |
number | 可选参数,默认为nil ,idx,插入短信发送缓冲表的位置,默认是插入末尾 |
- 返回值
result,true表示调用接口成功(并不是短信发送成功,短信发送结果,通过sendcnf返回,如果有cbFnc,会通知cbFnc函数);返回false,表示调用接口失败
- 例子
sms.send("10086","test",cbFnc)
sms.setNewSmsCb(cbFnc)¶
设置新短信的用户处理函数
- 参数
传入值类型 | 释义 |
---|---|
function | cbFnc,新短信的用户处理函数 |
- 返回值
nil
- 例子
sms.setNewSmsCb(cbFnc)
socket¶
模块功能:数据链路激活、SOCKET管理(创建、连接、数据收发、状态维护)
socket.isReady()¶
SOCKET 是否有可用
- 参数
无
- 返回值
可用true,不可用false
- 例子
无
socket.tcp(ssl, cert)¶
创建基于TCP的socket对象
- 参数
传入值类型 | 释义 |
---|---|
bool | 可选参数,默认为nil ,ssl,是否为ssl连接,true表示是,其余表示否 |
table | 可选参数,默认为nil ,cert,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", --客户端证书文件密码[可选] } |
- 返回值
client,创建成功返回socket客户端对象;创建失败返回nil
- 例子
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对象
- 参数
无
- 返回值
client,创建成功返回socket客户端对象;创建失败返回nil
- 例子
c = socket.udp()
mt:connect(address, port, timeout)¶
连接服务器
- 参数
传入值类型 | 释义 |
---|---|
string | address 服务器地址,支持ip和域名 |
param | port string或者number类型,服务器端口 |
number | 可选参数,默认为120 ,timeout 可选参数,连接超时时间,单位秒 |
- 返回值
bool result true - 成功,false - 失败 string ,id '0' -- '8' ,返回通道ID编号
- 例子
c = socket.tcp(); c:connect();
mt:asyncSelect(keepAlive, pingreq)¶
异步收发选择器
- 参数
传入值类型 | 释义 |
---|---|
number | keepAlive,服务器和客户端最大通信间隔时间,也叫心跳包最大时间,单位秒 |
string | pingreq,心跳包的字符串 |
- 返回值
boole,false 失败,true 表示成功
- 例子
无
mt:asyncSend(data, timeout)¶
异步发送数据
- 参数
传入值类型 | 释义 |
---|---|
string | data 数据 |
number | 可选参数,默认为nil ,timeout 可选参数,发送超时时间,单位秒;为nil时表示不支持timeout |
- 返回值
result true - 成功,false - 失败
- 例子
c = socket.tcp(); c:connect(); c:asyncSend("12345678");
mt:asyncRecv()¶
异步接收数据
- 参数
无
- 返回值
nil, 表示没有收到数据 data 如果是UDP协议,返回新的数据包,如果是TCP,返回所有收到的数据,没有数据返回长度为0的空串
- 例子
c = socket.tcp(); c:connect()
data = c:asyncRecv()
mt:send(data, timeout)¶
发送数据
- 参数
传入值类型 | 释义 |
---|---|
string | data 数据 |
number | 可选参数,默认为120 ,timeout 可选参数,发送超时时间,单位秒 |
- 返回值
result true - 成功,false - 失败
- 例子
c = socket.tcp(); c:connect(); c:send("12345678");
mt:recv(timeout, msg, msgNoResume)¶
接收数据
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为0 ,timeout 可选参数,接收超时时间,单位毫秒 |
string | 可选参数,默认为nil ,msg 可选参数,控制socket所在的线程退出recv阻塞状态 |
bool | 可选参数,默认为nil ,msgNoResume 可选参数,控制socket所在的线程退出recv阻塞状态,false或者nil表示“在recv阻塞状态,收到msg消息,可以退出阻塞状态”,true表示不退出 |
- 返回值
result 数据接收结果,true表示成功,false表示失败 data 如果成功的话,返回接收到的数据;超时时返回错误为"timeout";msg控制退出时返回msg的字符串 param 如果是msg返回的false,则data的值是msg,param的值是msg的参数
- 例子
c = socket.tcp(); c:connect()
result, data = c:recv()
false,msg,param = c:recv(60000,"publish_msg")
mt:close()¶
销毁一个socket
- 参数
无
- 返回值
nil
- 例子
c = socket.tcp(); c:connect(); c:send("123"); c:close()
socket.setTcpResendPara(retryCnt, retryMaxTimeout)¶
设置TCP层自动重传的参数
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为4 ,retryCnt,重传次数;取值范围0到12 |
number | 可选参数,默认为16 ,retryMaxTimeout,限制每次重传允许的最大超时时间(单位秒),取值范围1到16 |
- 返回值
nil
- 例子
setTcpResendPara(3,8)
setTcpResendPara(4,16)
socket.setDnsParsePara(retryCnt, retryTimeoutMulti)¶
设置域名解析参数
注意:0027以及之后的core版本才支持此功能
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为4 ,retryCnt,重传次数;取值范围1到8 |
number | 可选参数,默认为4 ,retryTimeoutMulti,重传超时时间倍数,取值范围1到5第n次重传超时时间的计算方式为:第n次的重传超时基数retryTimeoutMulti,单位为秒 重传超时基数表为{1, 1, 2, 4, 4, 4, 4, 4} 第1次重传超时时间为:1retryTimeoutMulti 秒 第2次重传超时时间为:1retryTimeoutMulti 秒 第3次重传超时时间为:2retryTimeoutMulti 秒 ........................................... 第8次重传超时时间为:8*retryTimeoutMulti 秒 |
- 返回值
nil
- 例子
socket.setDnsParsePara(8,5)
socket.printStatus()¶
打印所有socket的状态
- 参数
无
- 返回值
无
- 例子
socket.printStatus()
sys¶
模块功能:Luat协程调度框架
sys.restart(r)¶
软件重启
- 参数
传入值类型 | 释义 |
---|---|
string | r 重启原因,用户自定义,一般是string类型,重启后的trace中会打印出此重启原因 |
- 返回值
无
- 例子
sys.restart('程序超时软件重启')
sys.wait(ms)¶
Task任务延时函数,只能用于任务函数中
- 参数
传入值类型 | 释义 |
---|---|
number | ms 整数,最大等待126322567毫秒 |
- 返回值
定时结束返回nil,被其他线程唤起返回调用线程传入的参数
- 例子
sys.wait(30)
sys.waitUntil(id, ms)¶
Task任务的条件等待函数(包括事件消息和定时器消息等条件),只能用于任务函数中。
- 参数
传入值类型 | 释义 |
---|---|
param | id 消息ID |
number | ms 等待超时时间,单位ms,最大等待126322567毫秒 |
- 返回值
result 接收到消息返回true,超时返回false data 接收到消息返回消息参数
- 例子
result, data = sys.waitUntil("SIM_IND", 120000)
sys.waitUntilExt(id, ms)¶
Task任务的条件等待函数扩展(包括事件消息和定时器消息等条件),只能用于任务函数中。
- 参数
传入值类型 | 释义 |
---|---|
param | id 消息ID |
number | ms 等待超时时间,单位ms,最大等待126322567毫秒 |
- 返回值
message 接收到消息返回message,超时返回false data 接收到消息返回消息参数
- 例子
result, data = sys.waitUntilExt("SIM_IND", 120000)
sys.taskInit(fun, ...)¶
创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数,main.lua导入该模块即可
- 参数
传入值类型 | 释义 |
---|---|
param | fun 任务函数名,用于resume唤醒时调用 |
param | ... 任务函数fun的可变参数 |
- 返回值
co 返回该任务的线程号
- 例子
sys.taskInit(task1,'a','b')
sys.init(mode, lprfnc)¶
Luat平台初始化
- 参数
传入值类型 | 释义 |
---|---|
param | mode 充电开机是否启动GSM协议栈,1不启动,否则启动 |
param | lprfnc 用户应用脚本中定义的“低电关机处理函数”,如果有函数名,则低电时,本文件中的run接口不会执行任何动作,否则,会延时1分钟自动关机 |
- 返回值
无
- 例子
sys.init(1,0)
sys.timerStop(val, ...)¶
关闭定时器
- 参数
传入值类型 | 释义 |
---|---|
param | val 值为number时,识别为定时器ID,值为回调函数时,需要传参数 |
param | ... val值为函数时,函数的可变参数 |
- 返回值
无
- 例子
timerStop(1)
sys.timerStopAll(fnc)¶
关闭同一回调函数的所有定时器
- 参数
传入值类型 | 释义 |
---|---|
param | fnc 定时器回调函数 |
- 返回值
无
- 例子
timerStopAll(cbFnc)
sys.timerStart(fnc, ms, ...)¶
开启一个定时器
- 参数
传入值类型 | 释义 |
---|---|
param | fnc 定时器回调函数 |
number | ms 整数,最大定时126322567毫秒 |
param | ... 可变参数 fnc的参数 |
- 返回值
number 定时器ID,如果失败,返回nil
- 例子
无
sys.timerLoopStart(fnc, ms, ...)¶
开启一个循环定时器
- 参数
传入值类型 | 释义 |
---|---|
param | fnc 定时器回调函数 |
number | ms 整数,最大定时126322567毫秒 |
param | ... 可变参数 fnc的参数 |
- 返回值
number 定时器ID,如果失败,返回nil
- 例子
无
sys.timerIsActive(val, ...)¶
判断某个定时器是否处于开启状态
- 参数
传入值类型 | 释义 |
---|---|
param | val 有两种形式 一种是开启定时器时返回的定时器id,此形式时不需要再传入可变参数...就能唯一标记一个定时器 另一种是开启定时器时的回调函数,此形式时必须再传入可变参数...才能唯一标记一个定时器 |
param | ... 可变参数 |
- 返回值
number 开启状态返回true,否则nil
- 例子
无
sys.subscribe(id, callback)¶
订阅消息
- 参数
传入值类型 | 释义 |
---|---|
param | id 消息id |
param | callback 消息回调处理 |
- 返回值
无
- 例子
subscribe("NET_STATUS_IND", callback)
sys.unsubscribe(id, callback)¶
取消订阅消息
- 参数
传入值类型 | 释义 |
---|---|
param | id 消息id |
param | callback 消息回调处理 |
- 返回值
无
- 例子
unsubscribe("NET_STATUS_IND", callback)
sys.publish(...)¶
发布内部消息,存储在内部消息队列中
- 参数
传入值类型 | 释义 |
---|---|
param | ... 可变参数,用户自定义 |
- 返回值
无
- 例子
publish("NET_STATUS_IND")
rtos.on (id, handler)¶
注册rtos消息回调处理函数
- 参数
传入值类型 | 释义 |
---|---|
number | id 消息类型id |
param | handler 消息处理函数 |
- 返回值
无
- 例子
rtos.on(rtos.MSG_KEYPAD, function(param) handle keypad message end)
sys.run()¶
run()从底层获取core消息并及时处理相关消息,查询定时器并调度各注册成功的任务线程运行和挂起
- 参数
无
- 返回值
无
- 例子
sys.run()
update¶
模块功能:远程升级.
参考 http://ask.openluat.com/article/916 加深对远程升级功能的理解
update.request(cbFnc, url, period, redir)¶
启动远程升级功能
- 参数
传入值类型 | 释义 |
---|---|
function | 可选参数,默认为nil ,cbFnc,每次执行远程升级功能后的回调函数,回调函数的调用形式为:cbFnc(result),result为true表示升级包下载成功,其余表示下载失败 如果没有设置此参数,则升级包下载成功后,会自动重启 |
string | 可选参数,默认为nil ,url,使用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 如果redir设置为true,还会补充.."&need_oss_url=1" |
number | 可选参数,默认为nil ,period,单位毫秒,定时启动远程升级功能的间隔,如果没有设置此参数,仅执行一次远程升级功能 |
bool | 可选参数,默认为nil ,redir,是否访问重定向到阿里云的升级包,使用Luat提供的升级服务器时,此参数才有意义为了缓解Luat的升级服务器压力,从2018年7月11日起,在iot.openluat.com新增或者修改升级包的升级配置时,升级文件会备份一份到阿里云服务器 如果此参数设置为true,会从阿里云服务器下载升级包;如果此参数设置为false或者nil,仍然从Luat的升级服务器下载升级包 |
- 返回值
nil
- 例子
update.request()
update.request(cbFnc)
update.request(cbFnc,"www.userserver.com/update")
update.request(cbFnc,nil,4*3600*1000)
update.request(cbFnc,nil,4*3600*1000,true)
utils¶
模块功能:常用工具类接口
string.toHex(str, separator)¶
将Lua字符串转成HEX字符串,如"123abc"转为"313233616263"
- 参数
传入值类型 | 释义 |
---|---|
string | str 输入字符串 |
string | 可选参数,默认为"" ,separator 输出的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(hex)¶
将HEX字符串转成Lua字符串,如"313233616263"转为"123abc", 函数里加入了过滤分隔符,可以过滤掉大部分分隔符(可参见正则表达式中\s和\p的范围)。
- 参数
传入值类型 | 释义 |
---|---|
string | hex,16进制组成的串 |
- 返回值
charstring,字符组成的串 len,输出字符串的长度
- 例子
string.fromHex("010203") -> "\1\2\3"
string.fromHex("313233616263:) -> "123abc"
string.utf8Len(str)¶
返回utf8编码字符串的长度
- 参数
传入值类型 | 释义 |
---|---|
string | str,utf8编码的字符串,支持中文 |
- 返回值
number,返回字符串长度
- 例子
local cnt = string.utf8Len("中国a"),cnt == 3
string.utf8ToTable(str)¶
返回utf8编码字符串的单个utf8字符的table
- 参数
传入值类型 | 释义 |
---|---|
string | str,utf8编码的字符串,支持中文 |
- 返回值
table,utf8字符串的table
- 例子
local t = string.utf8ToTable("中国2018")
string.rawurlEncode(str)¶
返回字符串的 RFC3986 编码
- 参数
传入值类型 | 释义 |
---|---|
string | str,要转换编码的字符串,支持UTF8编码中文 |
- 返回值
str, RFC3986 编码的字符串
- 例子
local str = string.rawurlEncode("####133") ,str == "%23%23%23%23133"
local str = string.rawurlEncode("中国2018") , str == "%e4%b8%ad%e5%9b%bd2018"
string.urlEncode(str)¶
返回字符串的urlEncode编码
- 参数
传入值类型 | 释义 |
---|---|
string | str,要转换编码的字符串,支持UTF8编码中文 |
- 返回值
str,urlEncode编码的字符串
- 例子
local str = string.urlEncode("####133") ,str == "%23%23%23%23133"
local str = string.urlEncode("中国2018") , str == "%e4%b8%ad%e5%9b%bd2018"
table.gsort(t, f)¶
返回一个迭代器函数,每次调用函数都会返回hash表的排序后的键值对
- 参数
传入值类型 | 释义 |
---|---|
table | t, 要排序的hash表 |
param | f, 自定义排序函数 |
- 返回值
function.
- 例子
test = {a=1,f=9,d=2,c=8,b=5}
for name,line in pairsByKeys(test) do print(name,line) end
table.rconcat(l)¶
table.concat的增强版,支持嵌套字符串数组
- 参数
传入值类型 | 释义 |
---|---|
table | l,嵌套字符串数组 |
- 返回值
string
- 例子
print(table.rconcat({"a",{" nice "}," and ", {{" long "},{" list "}}}))
string.formatNumberThousands(num)¶
返回数字的千位符号格式
- 参数
传入值类型 | 释义 |
---|---|
number | num,数字 |
- 返回值
string,千位符号的数字字符串
- 例子
loca s = string.formatNumberThousands(1000) ,s = "1,000"
string.split(str, delimiter)¶
按照指定分隔符分割字符串
- 参数
传入值类型 | 释义 |
---|---|
string | str 输入字符串 |
string | delimiter 分隔符 |
- 返回值
分割后的字符串列表
- 例子
"123,456,789":split(',') -> {'123','456','789'}
io.exists(path)¶
判断文件是否存在
- 参数
传入值类型 | 释义 |
---|---|
string | path,文件全名例如:"/ldata/call.mp3" |
- 返回值
boole,存在为true,不存在为false
- 例子
local ex = io.exists("/ldata/call.mp3")
io.readFile(path)¶
读取文件并返回文件的内容
- 参数
传入值类型 | 释义 |
---|---|
string | path,文件全名例如:"/ldata/call.txt" |
- 返回值
string,文件的内容,文件不存在返回nil
- 例子
local c = io.readFile("/ldata/call.txt")
io.writeFile(path, content, mode)¶
写入文件指定的内容,默认为覆盖二进制模式
- 参数
传入值类型 | 释义 |
---|---|
string | path,文件全名例如:"/ldata/call.txt" |
string | content,文件内容 |
string | mode,文件写入模式默认"w+b" |
- 返回值
string,文件的内容
- 例子
local c = io.writeFile("/ldata/call.txt","test")
io.pathInfo(path)¶
将文件路径分解为table信息
- 参数
传入值类型 | 释义 |
---|---|
string | path,文件路径全名例如:"/ldata/call.txt" |
- 返回值
table,{dirname="/ldata/",filename="call.txt",basename="call",extname=".txt"}
- 例子
loca p = io.pathInfo("/ldata/call.txt")
io.fileSize(path)¶
返回文件大小
- 参数
传入值类型 | 释义 |
---|---|
string | path,文件路径全名例如:"/ldata/call.txt","test" |
- 返回值
number ,文件大小
- 例子
locan cnt = io.fileSize("/ldata/call.txt")
io.readStream(path, offset, len)¶
返回指定位置读取的字符串
- 参数
传入值类型 | 释义 |
---|---|
string | path,文件路径全名例如:"/ldata/call.txt" |
number | offset,要读取的指定位置 |
number | len,要读取的字节数 |
- 返回值
string,返回要读取的数据,读取失败返回nil
- 例子
无
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 | 密码 |
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,poly,initial,finally,inReverse,outReverse)
- 参数
参数 | 释义 |
---|---|
crcMethod | string类型, 校验方法 |
originstr | string类型,计算校验的字符串 |
poly | 可选,默认0 |
initial | 可选,默认0 |
finally | 可选,默认0 |
inReverse | 可选,默认0 |
outReverse | 可选,默认0 |
- 返回值
校验计算结果
- 例子
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)))
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
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) --不配置上下拉
pio.pin.setdebounce()¶
配置IO口消抖时间
- 语法
pio.pin.setdebounce(ms)
- 参数
参数 | 释义 |
---|---|
ms | 延时消抖时间,0为关闭消抖功能,开机后默认为20ms |
- 返回值
无
- 例子
pio.pin.setdebounce(20) --延时消抖设置为20ms
pio.pin.setdebounce(5) --延时消抖设置为5ms
pio.pin.setdebounce(0) --关闭延时消抖功能
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 控制
pmd.VLDO6
一旦设置了某一个电压域的电压等级,受该电压域控制的所有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 |
- 返回值
无
- 例子
--要求VLDO6输出3.3V,则调用
pmd.ldoset(7,pmd.VLDO6)
pmd.sleep()¶
省电控制
- 语法
pmd.sleep(value)
- 参数
参数 | 释义 |
---|---|
value | 1 - 进入睡眠,0 - 退出睡眠 |
- 返回值
无
rtos¶
嵌入式系统接口:接收消息,软件定时器
rtos.receive()¶
接收消息
- 语法
msg,msgpara = rtos.receive(timeout)
- 参数
参数 | 释义 |
---|---|
timeout | timeout 超时返回以毫秒为单位,可以用#rtos.INF_TIMEOUT#表示阻塞等待消息 |
- 返回值
如果 msg 为 table 类型,msg 根据不同的消息 msg.id 会有不同的数据:
如果 msg 为 number 类型,msg 根据不同的消息 msg 会有不同的数据
1.rtos.MSG_TIMER 定时器超时消息 msg.timer_id 或者 msgpara 为超时的定时器 id
2.rtos.MSG_UART_RXDATA 串口 ATC 数据提醒 msg.uart_id 或者msgpara为收到的数据的串口id或者atc,收到该消息后可以通过uart.read 接口读取数据
3.rtos.MSG_KEYPAD 键盘消息,必须初始化按键(#rtos.init_module#)后才会有键盘消息
msg.pressed 按键按下/弹起
msg.key_matrix_row 按键所在行值
msg.key_matrix_col 按键所在列值
4.rtos.WAIT_MSG_TIMEOUT 等待消息超时
5.rtos.MSG_INT 中断消息
msg.int_id 中断 id
msg.int_resnum 中断 pin 脚编号
6.rtos.MSG_PMD 电源管理消息
msg.present 电池在位状态
msg.level 百分比 0-100
msg.voltage 电池电压
msg.charger 充电器在位状态
msg.state 充电状态:0-不在充电 1-充电中 2-充电停止
rtos.timer_start()¶
启动定时器
- 语法
rtos.timer_start(timer_id, timeout)
- 参数
参数 | 释义 |
---|---|
timer_id | 定时器 id,可以是任意整数,定时器到时 msg.timer_id 值为启动时定时器 |
timeout | 定时器延时时间以毫秒为单位 |
- 返回值
无
rtos.timer_stop()¶
停止定时器
- 语法
rtos.timer_stop(timer_id)
- 参数
参数 | 释义 |
---|---|
timer_id | 输入与启动定时器时定义的 id 即可停止定时器 |
- 返回值
无
rtos.poweron_reason()¶
读取开机原因值
- 语法
reason=rtos.poweron_reason()
- 参数
无
- 返回值
rtos. POWERON_KEY(=0) | 按键开机 |
---|---|
rtos. POWERON_CHARGER(=1) | 充电开机 |
rtos. POWERON_ALARM(=2) | 闹钟开机 |
rtos. POWERON_RESTART(=3) | 软件重启开机 |
rtos. POWERON_EXCEPTION(=6) | 异常开机 |
rtos. POWERON_HOST(=7) | HOST 工具控制重启开机 |
rtos. POWERON_WATCHDOG(=8) | 其他原因 |
rtos.poweron()¶
是否启动 GSM 开机
- 语法
rtos.poweron(flag)
- 参数
参数 | 释义 |
---|---|
flag | 0 表示不启动系统;1 表示启动系统 |
- 返回值
无
rtos.poweroff()¶
软件关机
- 语法
rtos.poweroff()
- 参数
无
- 返回值
无
rtos.restart()¶
软件重启
- 语法
rtos.restart()
- 参数
无
- 返回值
无
rtos.tick()¶
获取系统开机运行时间总计数
- 语法
ticks=rtos.tick()
- 参数
无
- 返回值
ticks,时间计数,每 tick 时长5ms
rtos.sleep()¶
延时函数
- 语法
rtos.sleep(millisecond)
- 参数
参数 | 释义 |
---|---|
millisecond | 延时时间 ,以毫秒为单位 |
- 返回值
无
rtos.get_env_usage()¶
获取 lua 任务消息队列的使用百分比
- 语法
percentage=rtos.get_env_usage()
- 参数
无
- 返回值
percentage,百分比,例如使用了 80%,则 percentage 为 80
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
rtos.toint64()¶
将数字字符串转为int64类型数据
- 语法
rtos.toint64(str,typ)
- 参数
参数 | 释义 |
---|---|
str | 待转换的字符串 |
typ | "big" 或"little" ,表示大端还是小端 |
- 返回值
int64数据的二进制内容字符串
spi¶
spi 操作接口
spi.setup¶
- 语法
spi.setup(id,chpa,cpol,dataBits,clock,duplexMode)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1,Air720只有SPI1,固定传spi.SPI_1即可 |
chpa | 不支持第几个clk的跳变沿传输数据,仅支持0和1,0表示第1个,1表示第2个。 |
cpol | 不支持spi_clk idle的状态,仅支持0和1,0表示低电平,1表示高电平 |
dataBits | 数据位,仅支持8 |
clock | spi时钟频率,number数值,只能为6.5MHZ、13MHZ、26MHZ、52MHZ、3.25MHZ、1.625MHZ、812.5KHZ |
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.set_rs485_oe()¶
-
语法
uart.set_rs485_oe(id, io[, level])
-
参数
参数 释义 id 串口id io GPIO值 pio.Pxx level 输出使能电平有效值,默认1,配置为1时表示高电平发送,配置为0时表示低电平发送 -
返回值
无
-
例子
uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1,nil,1) --必须先使用setup,并且最后一个参数是1(打开发送完成后的通知功能)
uart.set_rs485_oe(UART_ID, pio.P2_0) --仅4G 0013版本之后支持
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