Luat API接口 (4G)

Important

本页面依据Github代码自动更新,最后更新时间:2019-11-29 10:42:17

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.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和1
mode为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:短信内容,GB2312编码的字符串
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.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)))

crc


crypto.xxtea_encrypt()

xxtea加密算法

  • 语法

crypto.xxtea_encrypt(text,key)

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

加密/解密数据

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

crypto.crc32()

CRC32校验算法

  • 语法

crypto.crc32(originstr,len)

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

校验计算结果

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

crypto.sha256()

sha256算法

  • 语法

crypto.sha256(originStr)

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

加密后的数据

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

crypto.sha1()

sha1算法

  • 语法

crypto.sha1(originstr,len)

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

加密后的数据

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

crypto.hmac_sha1()

hmac_sha1算法

  • 语法

hmac_sha1(originstr,len_str,signkey,len_key)

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

加密后的数据

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

crypto.flow_md5()

流式md5算法

  • 语法

crypto.flow_md5()

  • 参数

  • 返回值

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

crypto.md5()

md5算法,支持计算文件的md5值

  • 语法

crypto.md5(originstr,len)

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

加密后的数据

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

crypto.hmac_md5()

hmac_md5算法测试

  • 语法

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

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

加密后的数据

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

crypto.base64_encode()

base64加密

  • 语法

crypto.base64_encode(originstr,len)

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

加密后的数据

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

crypto.base64_decode()

base64解密

  • 语法

crypto.base64_decode(originstr,len)

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

解密后的数据

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

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