Luat API接口 (2G)¶
Important
本页面依据Github代码自动更新,最后更新时间:2020-07-30 13:25:57
Luat的API分为三种:第一种直接用Lua语言实现的,在lib目录下,对开发者可见,。第二种是在用C语言实现的,在lod里面,对开发者不可见。这儿称前者为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芯片;
aLiPay¶
模块功能:蚂蚁金服支付宝功能.
aLiPay.close(cbFnc)¶
关闭aLiPay(注意:关闭aLiPay之后,只能重启才能再次自动开启)
- 参数
传入值类型 | 释义 |
---|---|
function | 可选参数,默认为nil ,cbFnc,关闭结果的回调函数回调函数的调用形式为:cbFnc(result)。result为true表示关闭成功,false或者nil表示关闭失败 |
- 返回值
nil
- 例子
aLiPay.close(cbFnc)
aLiPay.setup(deviceSupplier, merchantUser, itemId, productKey, getTerminalIdFnc)¶
配置支付宝产品参数
- 参数
传入值类型 | 释义 |
---|---|
string | deviceSupplier,设备供应商编号 |
string | merchantUser,设备运营商编号 |
string | itemId,产品身份识别号 |
string | productKey,设备行业和设备形态的精简描述 |
function | getTerminalIdFnc,获取设备的序列号的函数 |
- 返回值
nil
- 例子
aLiPay.setup("201903131900940927","201903131900940927","2019031301993185","SMART_RETAIL_MODULE",getTerminalId)
aLiPay.sendTransactionData(businessNo, qrcode, amount, timeConsuming, tradeResult, cbFnc)¶
缓存交易信息数据(注意:缓存成功后,并不是立即上报,而是缓存到一定条数之后才会上报)
- 参数
传入值类型 | 释义 |
---|---|
string | 可选参数,默认为"" ,businessNo,交易产生的流水号 |
string | 可选参数,默认为"" ,qrcode,用户付款码 |
number | 可选参数,默认为-1 ,amount,交易金额,单位为分 |
number | 可选参数,默认为-1 ,timeConsuming,交易时间耗费,单位为秒 |
number | 可选参数,默认为0 ,tradeResult,交易结果 |
function | 可选参数,默认为nil ,cbFnc,数据缓存结果的回调函数回调函数的调用形式为:cbFnc(result)。result为true表示缓存成功,false或者nil表示缓存失败 |
- 返回值
nil
- 例子
aLiPay.sendTransactionData("88899998888","98765",1234,4,5,0,cbFnc)
aLiPay.sendProductInfoData(humanVerify, cbFnc)¶
缓存产品规格信息数据(注意:缓存成功后,并不是立即上报,而是缓存到一定条数之后才会上报)
- 参数
传入值类型 | 释义 |
---|---|
number | humanVerify,设备核查消费者身份的方式,可以是如下列表中的一种或者多种之和 0x01 二维码识别 0x02 人脸识别 0x04 手机号码识别(SMS/CALL) 0x08 声纹识别 0x10 NFC识别 0x20 指纹识别 0x40 邮箱识别 |
function | 可选参数,默认为nil ,cbFnc,数据缓存结果的回调函数回调函数的调用形式为:cbFnc(result)。result为true表示缓存成功,false或者nil表示缓存失败 |
- 返回值
nil
- 例子
aLiPay.sendProductInfoData(0x01,cbFnc)
aLiPay.sendProductInfoData(0x01+0x02+0x04,cbFnc)
aLiPay.sendActData(broadcastCnt, scanCnt, cbFnc)¶
缓存行为数据(注意:缓存成功后,并不是立即上报,而是缓存到一定条数之后才会上报)
- 参数
传入值类型 | 释义 |
---|---|
number | broadcastCnt,语音播报次数增量 |
number | scanCnt,扫码次数增量 |
function | 可选参数,默认为nil ,cbFnc,数据缓存结果的回调函数回调函数的调用形式为:cbFnc(result)。result为true表示缓存成功,false或者nil表示缓存失败 |
- 返回值
nil
- 例子
aLiPay.sendActData(1,2,cbFnc)
aLiPay.on(evt, cbFnc)¶
注册事件的处理函数
- 参数
传入值类型 | 释义 |
---|---|
string | evt,事件 "connect"表示接入服务器连接结果事件 |
function | cbFnc,事件的处理函数 当evt为"connect"时,cbFnc的调用形式为:cbFnc(result),result为true表示连接成功,false或者nil表示连接失败 |
- 返回值
nil
- 例子
aLiPay.on("connect",connectCbFnc)
aLiPay.getBiztid()¶
获取设备的biztid(注意,必须在connectCb之后才能获取成功)
- 参数
无
- 返回值
string
- 例子
aLiPay.getBiztid()
aLiPay.sign(mode, data, amount, cbFnc)¶
对待交易数据进行加签
- 参数
传入值类型 | 释义 |
---|---|
number | mode,交易数据类型 1 用户被扫 2 用户人脸 3 用户主扫 4 第三方代扣 |
string | data,需要加签的数据,最大长度为 128 字节 |
string | 可选参数,默认为nil ,amount,需要加签的数据,单位为元,最大长度为 32 字节,例如"0.01"表示1分钱 |
function | 可选参数,默认为nil ,cbFnc,加签结果的回调函数回调函数的调用形式为:cbFnc(result,signedData)。result为true表示加签成功,false或者nil表示加签失败;signedData为加签后的数据 |
- 返回值
nil
- 例子
aLiPay.sign(1,"sign_data","100",cbFnc)
aLiYun¶
模块功能:阿里云物联网套件客户端功能.
目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密和“一型一密”
aLiYun.sleep()¶
断开阿里云物联网套件的连接,并且不再重连
- 参数
无
- 返回值
nil
- 例子
aLiYun.sleep()
aLiYun.wakeup()¶
重新打开阿里云物联网套件的连接
- 参数
无
- 返回值
nil
- 例子
aLiYun.wakeup()
aLiYun.sleepStatus()¶
查看打开阿里云物联网套件的是否允许连接状态
- 参数
无
- 返回值
bool 是否允许连接阿里云
- 例子
local ar = aLiYun.sleepStatus()
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)
audio¶
模块功能:音频播放.
支持MP3、amr文件播放;
支持本地TTS播放、通话中TTS播放到对端(需要使用支持TTS功能的core软件)
audio.play(priority, type, path, vol, cbFnc, dup, dupInterval)¶
播放音频
- 参数
传入值类型 | 释义 |
---|---|
number | priority,音频优先级,数值越大,优先级越高 |
string | type,音频类型,目前仅支持"FILE"、"TTS"、"TTSCC","RECORD" |
string | path,音频文件路径,跟typ有关 typ为"FILE"时:表示音频文件路径 typ为"TTS"时:表示要播放的UTF8编码格式的数据 typ为"TTSCC"时:表示要播放给通话对端的UTF8编码格式的数据 typ为"RECORD"时:表示要播放的录音id |
number | 可选参数,默认为4 ,vol,播放音量,取值范围0到7,0为静音 |
function | 可选参数,默认为nil ,cbFnc,音频播放结束时的回调函数,回调函数的调用形式如下:cbFnc(result) result表示播放结果: 0-播放成功结束; 1-播放出错 2-播放优先级不够,没有播放 3-传入的参数出错,没有播放 4-被新的播放请求中止 5-调用audio.stop接口主动停止 |
bool | 可选参数,默认为nil ,dup,是否循环播放,true循环,false或者nil不循环 |
number | 可选参数,默认为0 ,dupInterval,循环播放间隔(单位毫秒),dup为true时,此值才有意义 |
- 返回值
result,bool或者nil类型,同步调用成功返回true,否则返回false
- 例子
audio.play(0,"FILE","/ldata/call.mp3")
audio.play(0,"FILE","/ldata/call.mp3",7)
audio.play(0,"FILE","/ldata/call.mp3",7,cbFnc)
-- 更多用法参考demo/audio/testAudio.lua
audio.stop(cbFnc)¶
停止音频播放
- 参数
传入值类型 | 释义 |
---|---|
function | 可选参数,默认为nil ,cbFnc,停止音频播放的回调函数(停止结果通过此函数通知用户),回调函数的调用形式为:cbFnc(result) result:number类型 0表示停止成功 |
- 返回值
nil
- 例子
audio.stop()
audio.setVolume(vol)¶
设置喇叭音量等级
- 参数
传入值类型 | 释义 |
---|---|
number | vol,音量值为0-7,0为静音 |
- 返回值
bool result,设置成功返回true,失败返回false
- 例子
audio.setVolume(7)
audio.setMicVolume(vol)¶
设置麦克音量等级
- 参数
传入值类型 | 释义 |
---|---|
number | vol,音量值为0-15,0为静音 |
- 返回值
bool result,设置成功返回true,失败返回false
- 例子
audio.setMicVolume(14)
audio.getVolume()¶
获取喇叭音量等级
- 参数
无
- 返回值
number vol,喇叭音量等级
- 例子
audio.getVolume()
audio.getMicVolume(vol)¶
获取麦克音量等级
- 参数
无
- 返回值
number vol,麦克音量等级
- 例子
audio.getMicVolume()
audio.setStrategy(strategy)¶
设置优先级相同时的播放策略
- 参数
传入值类型 | 释义 |
---|---|
number | strategy,优先级相同时的播放策略;0:表示继续播放正在播放的音频,忽略请求播放的新音频;1:表示停止正在播放的音频,播放请求播放的新音频 |
- 返回值
nil
- 例子
audio.setStrategy(0)
audio.setStrategy(1)
audio.setTTSSpeed(speed)¶
设置TTS朗读速度
- 参数
传入值类型 | 释义 |
---|---|
number | speed,速度范围为0-100,默认50 |
- 返回值
bool result,设置成功返回true,失败返回false
- 例子
audio.setTTSSpeed(70)
cc¶
模块功能:通话管理
cc.anyCallExist()¶
是否存在通话
- 参数
无
- 返回值
bool result 存在通话返回true,否则返回false
- 例子
result = cc.anyCallExist()
cc.getState(num)¶
查询某个号码的通话状态
- 参数
传入值类型 | 释义 |
---|---|
string | num 查询号码 |
- 返回值
number state 通话状态,状态值参考本模块Fields定义
- 例子
state = cc.getState('10086')
cc.dial(num, delay)¶
呼出电话
- 参数
传入值类型 | 释义 |
---|---|
string | num 呼出号码 |
number | 可选参数,默认为0 ,delay 延时delay毫秒后,才发起呼叫 |
- 返回值
bool result,true表示允许发送at命令拨号并且发送at,false表示不允许at命令拨号
- 例子
cc.dial('10086')
cc.hangUp(num)¶
挂断通话
- 参数
传入值类型 | 释义 |
---|---|
string | num 号码,若指定号码通话状态不对 则直接退出 不会执行挂断,若挂断时会挂断所有电话 |
- 返回值
nil
- 例子
cc.hangUp('10086')
cc.accept(num)¶
接听电话
- 参数
传入值类型 | 释义 |
---|---|
string | num 号码,若指定号码通话状态不对 则直接退出 不会接通 |
- 返回值
nil
- 例子
cc.accept('10086')
cc.transVoice(data, loop, downLinkPlay)¶
通话中发送声音到对端,必须是12.2K AMR格式
- 参数
传入值类型 | 释义 |
---|---|
string | data 12.2K AMR格式的数据 |
bool | 可选参数,默认为nil ,loop 是否循环发送,true为循环,其余为不循环 |
bool | 可选参数,默认为nil ,downLinkPlay 声音是否在本端播放,true为播放,其余为不播放 |
- 返回值
bool result true为成功,false为失败
- 例子
cc.transVoice("#!AMR\010\060*********")
cc.transVoice("#!AMR\010\060*********",true)
cc.transVoice("#!AMR\010\060*********",true,true)
cc.dtmfDetect(enable, sens)¶
设置dtmf检测是否使能以及灵敏度
- 参数
传入值类型 | 释义 |
---|---|
bool | 可选参数,默认为nil ,enable true使能,false或者nil为不使能 |
number | 可选参数,默认为3 ,sens 灵敏度,最灵敏为1 |
- 返回值
nil
- 例子
cc.dtmfDetect(true)
cc.sendDtmf(str, playtime, intvl)¶
发送dtmf到对端
- 参数
传入值类型 | 释义 |
---|---|
string | str dtmf字符串,仅支持数字、ABCD*# |
number | 可选参数,默认为100 ,playtime 每个dtmf播放时间,单位毫秒 |
number | 可选参数,默认为100 ,intvl 两个dtmf间隔,单位毫秒 |
- 返回值
nil
- 例子
cc.sendDtmf("123")
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)
gizwits¶
模块功能:机智云物联网套件客户端功能
gizwits.publish(topic, payload, qos, cbFnc, cbPara)¶
发布一条消息
手动编写并发送一条mqtt消息
- 参数
传入值类型 | 释义 |
---|---|
string | topic,UTF8编码的主题 |
string | payload,负载 |
number | 可选参数,默认为0 ,qos,质量等级,0/1/2,默认0 |
function | 可选参数,默认为nil ,cbFnc,消息发布结果的回调函数 |
string | cbPara,标志 |
- 返回值
nil
- 例子
publish(topic,msg,0)
publish(topic,msgbody,0,{cb=cbFnc,para=cbPara})
gizwits.transmissionSend(flag, ccmd, sn, cmd, topic)¶
发布一条透传消息
按照机智云带ack的格式发送一条消息
- 参数
传入值类型 | 释义 |
---|---|
number | flag,通讯协议手册中的flag |
string | ccmd,命令字,ack返回为0094 |
string | sn,包序号 |
string | cmd,业务指令 |
string | topic,UTF8编码的主题 |
- 返回值
nil
- 例子
gizwits.transmissionSend(0,string.fromHex("0094"),string.fromHex("00000001"),"cmd","dev2app/12345/67890")) --回复ack
gizwits.checkUpdate(hard_version, soft_version)¶
手动检查更新
- 参数
传入值类型 | 释义 |
---|---|
string | hard_version,硬件版本 |
string | soft_version,软件版本 |
- 返回值
string,结果
- 例子
checkUpdate("00000001","00000001")
gizwits.setup(PRODUCT_KEY, PRODUCT_SECRET, getDeviceName, getDeviceSecret, getDeviceId, setDeviceId, getAuthKey, m2mHT, extra, server, port)¶
初始化机智云注册所需要的数据
- 参数
传入值类型 | 释义 |
---|---|
string | PRODUCT_KEY,机智云应用列表中的Product Key |
string | PRODUCT_SECRET,机智云应用列表中的Product Secret |
function | getDeviceName,获取设备mac地址的函数 |
function | getDeviceSecret,获取设备passcode的函数 |
function | getDeviceId,保存获取到的DeviceId |
function | setDeviceId,获取保存的DeviceId |
function | 可选参数,默认为nil ,getAuthKey,专用透传设备需要的auth_key的函数 |
number | 可选参数,默认为120 ,m2mHT,mqtt心跳时间 |
string | 可选参数,默认为nil ,extra,设备类型 |
string | 可选参数,默认为"api.gizwits.com" ,server,服务器 |
number | 可选参数,默认为80 ,port,端口 |
- 返回值
nil
- 例子
gizwits.setup("PRODUCT_KEY","PRODUCT_SECRET",getDeviceName,getDeviceSecret)
gizwits.on(evt, cbFnc)¶
注册事件的处理函数
- 参数
传入值类型 | 释义 |
---|---|
string | evt,事件 "connect"表示连接结果事件 "receive"表示接收到消息事件 |
function | cbFnc,事件的处理函数 当evt为"connect"时,cbFnc的调用形式为:cbFnc(result),result为true表示连接成功,false或者nil表示连接失败 当evt为"receive"时,cbFnc的调用形式为:cbFnc(topic,qos,payload),topic为UTF8编码的主题(string类型),qos为质量等级(number类型),payload为原始编码的负载(string类型) 当evt为"transmissionRev"时,cbFnc的调用形式为:cbFnc(flag,ccmd,sn,cmd,topic),flag为数值型的量,ccmd为命令字,sn为包序号,cmd为透传消息内容,topic为UTF8编码的主题(string类型) |
- 返回值
nil
- 例子
gizwits.on("transmissionRev",rcvTransCbFnc)
gps¶
模块功能:GPS模块管理
gps.writeCmd(cmd, isFull)¶
GPS串口写命令操作
- 参数
传入值类型 | 释义 |
---|---|
string | cmd,GPS指令(cmd格式:"$PGKC149,1,115200"或者"$PGKC149,1,115200XX\r\n") |
bool | isFull,cmd是否为完整的指令格式,包括校验和以及\r\n;true表示完整,false或者nil为不完整 |
- 返回值
nil
- 例子
gps.writeCmd(cmd)
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.getUtcStamp()¶
获取gps的UTC时间戳
- 参数
传入值类型 | 释义 |
---|---|
retrun | number,时间戳 |
- 返回值
无
- 例子
gpsv2.getUtcStamp()
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,dateTime,locType) result:number类型 0表示成功 1表示网络环境尚未就绪 2表示连接服务器失败 3表示发送数据失败 4表示接收服务器应答超时 5表示服务器返回查询失败 6表示socket已满,创建socket失败 为0时,后面的5个参数才有意义 lat:string类型或者nil,纬度,整数部分3位,小数部分7位,例如"031.2425864" lng:string类型或者nil,经度,整数部分3位,小数部分7位,例如"121.4736522" addr:无意义,保留使用 dateTime:无意义,保留使用 locType:string类型,位置类型,"LBS"表示基站定位位置,"WIFI"表示WIFI定位位置 |
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¶
模块功能:数据链路激活(创建、连接、状态维护)
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.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(dbm)¶
获取当前和临近位置区、小区、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()
netLed¶
模块功能:网络指示灯模块
netLed.setup(flag, pin)¶
配置网络指示灯并且立即执行配置后的动作
- 参数
传入值类型 | 释义 |
---|---|
bool | flag,是否打开网络指示灯功能,true为打开,false为关闭 |
param | pin,number或者function类型 为number类型时,表示控制网络指示灯闪烁的GPIO引脚,例如pio.P1_1表示GPIO33 为function类型时,表示控制网络指示灯闪烁的回调函数,回调函数的调用形式为: pin(value) value:number类型,1表示点亮,0表示熄灭 |
- 返回值
nil
- 例子
setup(true,pio.P1_1)表示打开网络指示灯功能,GPIO33控制指示灯
setup(false)表示关闭网络指示灯功能
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, 存储区域字符串,仅支持"ME"和"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 |
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()
record¶
模块功能:录音处理
record.start(seconds, cb)¶
开始录音
- 参数
传入值类型 | 释义 |
---|---|
param | seconds 录音时长,单位:秒 |
param | cb 录音结果回调 |
- 返回值
result true - 开始录音 其他 - 失败
- 例子
result = record.start()
record.stop(cbFnc)¶
停止录音
- 参数
传入值类型 | 释义 |
---|---|
function | 可选参数,默认为nil ,cbFnc,停止录音的回调函数(停止结果通过此函数通知用户),回调函数的调用形式为:cbFnc(result) result:number类型 0表示停止成功 1表示之前已经发送了停止动作,请耐心等待停止结果的回调 |
- 返回值
无
- 例子
record.stop(cb)
record.getFilePath()¶
读取录音文件的完整路径
- 参数
无
- 返回值
string 录音文件的完整路径
- 例子
filePath = record.getFilePath()
record.getData(offset, len)¶
读取录音数据
- 参数
传入值类型 | 释义 |
---|---|
param | offset 偏移位置 |
param | len 长度 |
- 返回值
data 录音数据
- 例子
data = record.getData(0, 1024)
record.getSize()¶
读取录音文件总长度,录音时长
- 参数
无
- 返回值
fileSize 录音文件大小 duration 录音时长
- 例子
fileSize, duration = record.getSize()
record.delete()¶
删除录音
- 参数
无
- 返回值
无
- 例子
record.delete()
record.exists()¶
判断是否存在录音
- 参数
无
- 返回值
result true - 有录音 false - 无录音
- 例子
result = record.exists()
record.isBusy()¶
是否正在处理录音
- 参数
无
- 返回值
result true - 正在处理 false - 空闲
- 例子
result = record.isBusy()
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)
scanCode¶
模块功能:扫码.
支持二维码、条形码扫描
scanCode.request(cbFnc, timeout)¶
设置扫码请求
- 参数
传入值类型 | 释义 |
---|---|
function | cbFnc,扫码返回或者超时未返回的回调函数,回调函数的调用形式为: cbFnc(result,type,str) result:true或者false,true表示扫码成功,false表示超时失败 type:string或者nil类型,result为true时,表示扫码类型;result为false时,为nil;支持QR-Code和CODE-128 str:string或者nil类型,result为true时,表示扫码结果的字符串;result为false时,为nil |
number | 可选参数,默认为10000 ,timeout,设置请求后,等待扫码结果返回的超时时间,单位毫秒,默认为10秒 |
- 返回值
无
- 例子
scanCode.request(cbFnc)
scanCode.request(cbFnc,5000)
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()
sim.getType()¶
获取sim卡类型
- 参数
无
- 返回值
string ,"UNSUPPORT"表示core软件不支持此功能,"NO_RDY_SIM"表示SIM卡未就绪;"VSIM"表示虚拟SIM卡,"REAL_SIM"表示实体SIM卡
- 例子
sim.getType()
sim.setQueryNumber(flag)¶
设置“是否打开查询本机号码”的功能
- 参数
传入值类型 | 释义 |
---|---|
bool | flag,开启或者关闭查询功能的标志,false或者nil为关闭,其余为开启 |
- 返回值
nil
- 例子
sim.setQueryNumber(true)
sim.getNumber()¶
获取sim卡的本机号码
- 参数
无
- 返回值
string ,返回值:sNumber,如果还没有读取出来或者读取失败,则返回""
- 例子
-- 注意:开机lua脚本运行之后,会发送at命令去查询本机号码,所以需要一定时间才能获取到本机号码。开机后立即调用此接口,基本上返回""
-- 注意:此功能需要卡商支持,卡商必须把卡写到sim卡中,模块才能从卡中读出号码;目前市场上的很多卡,没有写入号码,是无法读取得
sim.getMcc()
sms¶
模块功能:短信功能
sms.send(num, data, cbFnc, idx)¶
发送短信
- 参数
传入值类型 | 释义 |
---|---|
string | num,短信接收方号码,ASCII码字符串格式 |
string | data,短信内容,GB2312编码的字符串 |
function | 可选参数,默认为nil ,cbFnc,短信发送结果异步返回时的用户回调函数,回调函数的调用形式为:cbFnc(result,num,data) num:短信接收方的号码,ASCII码字符串格式 data:短信内容,unicode大端编码的HEX字符串 |
number | 可选参数,默认为nil ,idx,插入短信发送缓冲表的位置,默认是插入末尾 |
- 返回值
result,true表示调用接口成功(并不是短信发送成功,短信发送结果,通过sendcnf返回,如果有cbFnc,会通知cbFnc函数);返回false,表示调用接口失败
- 例子
sms.send("10086","test",cbFnc)
sms.setNewSmsCb(cbFnc)¶
设置新短信的用户处理函数
- 参数
传入值类型 | 释义 |
---|---|
function | cbFnc,新短信的用户处理函数 |
- 返回值
nil
- 例子
sms.setNewSmsCb(cbFnc)
socket¶
模块功能:数据链路激活、SOCKET管理(创建、连接、数据收发、状态维护)
socket.isReady()¶
SOCKET 是否有可用
- 参数
无
- 返回值
可用true,不可用false
- 例子
无
socket.tcp(ssl, cert)¶
创建基于TCP的socket对象
- 参数
传入值类型 | 释义 |
---|---|
bool | 可选参数,默认为nil ,ssl,是否为ssl连接,true表示是,其余表示否 |
table | 可选参数,默认为nil ,cert,ssl连接需要的证书配置,只有ssl参数为true时,才参数才有意义,cert格式如下:{ caCert = "ca.crt", --CA证书文件(Base64编码 X.509格式),如果存在此参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = "client.crt", --客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = "client.key", --客户端私钥文件(Base64编码 X.509格式) clientPassword = "123456", --客户端证书文件密码[可选] } |
- 返回值
client,创建成功返回socket客户端对象;创建失败返回nil
- 例子
c = socket.tcp()
c = socket.tcp(true)
c = socket.tcp(true, {caCert="ca.crt"})
c = socket.tcp(true, {caCert="ca.crt", clientCert="client.crt", clientKey="client.key"})
c = socket.tcp(true, {caCert="ca.crt", clientCert="client.crt", clientKey="client.key", clientPassword="123456"})
socket.udp()¶
创建基于UDP的socket对象
- 参数
无
- 返回值
client,创建成功返回socket客户端对象;创建失败返回nil
- 例子
c = socket.udp()
mt:connect(address, port, timeout)¶
连接服务器
- 参数
传入值类型 | 释义 |
---|---|
string | address 服务器地址,支持ip和域名 |
param | port string或者number类型,服务器端口 |
- 返回值
bool result true - 成功,false - 失败
@number timeout, 链接服务器最长超时时间
- 例子
c = socket.tcp(); c:connect("www.baidu.com",80,5);
mt:asyncSelect(keepAlive, pingreq)¶
异步收发选择器
- 参数
传入值类型 | 释义 |
---|---|
number | keepAlive,服务器和客户端最大通信间隔时间,也叫心跳包最大时间,单位秒 |
string | pingreq,心跳包的字符串 |
- 返回值
boole,false 失败,true 表示成功
- 例子
无
mt:asyncSend(data)¶
异步发送数据
- 参数
传入值类型 | 释义 |
---|---|
string | data 数据 |
- 返回值
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)¶
发送数据
- 参数
传入值类型 | 释义 |
---|---|
string | data 数据 |
- 返回值
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(slow)¶
销毁一个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.setDnsParser(parserFnc)¶
设置用户自定义的DNS解析器.
通过域名连接服务器时,DNS解析的过程如下:
1、使用core中提供的方式,连接运营商DNS服务器解析,如果解析成功,则结束;如果解析失败,走第2步
2、使用脚本lib中提供的免费腾讯云HttpDns解析,如果解析成功,则结束;如果解析失败,走第3步
3、如果存在用户自定义的DNS解析器,则使用此处用户自定义的DNS解析器去解析
- 参数
传入值类型 | 释义 |
---|---|
function | 可选参数,默认为nil ,parserFnc,用户自定义的DNS解析器函数,函数的调用形式为:parserFnc(domainName,token),调用接口后会等待解析结果的消息通知或者40秒超时失败 domainName:string类型,表示域名,例如"www.baidu.com" token:string类型,此次DNS解析请求的token,例如"1" 解析结束后,要publish一个消息来通知解析结果,消息参数中的ip地址最多返回一个,sys.publish("USER_DNS_PARSE_RESULT_"..token,ip),例如: sys.publish("USER_DNS_PARSE_RESULT_1","115.239.211.112") 表示解析成功,解析到1个IP地址115.239.211.112 sys.publish("USER_DNS_PARSE_RESULT_1") 表示解析失败 |
- 返回值
nil
- 例子
socket.setDnsParser(parserFnc)
socket.setSendMode(mode)¶
设置数据发送模式(在网络准备就绪之前调用此接口设置).
如果设置为快发模式,注意如下两点:
1、通过send接口发送的数据,如果成功发送到服务器,设备端无法获取到这个成功状态
2、通过send接口发送的数据,如果发送失败,设备端可以获取到这个失败状态
慢发模式可以获取到send接口发送的成功或者失败
- 参数
传入值类型 | 释义 |
---|---|
number | 可选参数,默认为0 ,mode,数据发送模式,0表示慢发,1表示快发 |
- 返回值
nil
- 例子
socket.setSendMode(1)
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()
sys.setRollBack(flag, secs)¶
设置“lua脚本运行出错时,是否回退原始烧写版本”的功能开关。如果没有调用此接口设置,默认回滚
设置不允许回滚功能时,要同时设置一个开机时间阀值,超过这个时间,才不允许回滚
- 参数
传入值类型 | 释义 |
---|---|
bool | flag,“lua脚本运行出错时,是否回退原始烧写版本”的标志,true表示允许回滚,false表示不允许回滚 |
number | 可选参数,默认为300 ,secs,当配置不允许回滚时,此参数才有意义【注意:Luat_V0036_XXXX以及以后的core版本才支持此功能,此参数限制的是脚本程序无法捕获的core中lua虚拟机异常】;表示一个开机时间阀值,超过这个时间,才不允许回滚;取值范围如下: 1到72*3600:单位为秒;表示“开机后,在此时间范围内发生异常,允许回滚”;例如300秒,表示开机运行5分钟内的错误允许回滚,5分钟后的错误不允许回滚 |
- 返回值
nil
- 例子
sys.setRollBack(true)
sys.setRollBack(false)
uiWin¶
模块功能:UI窗口管理
uiWin.add(wnd)¶
新增一个窗口
- 参数
传入值类型 | 释义 |
---|---|
table | wnd,窗口的元素以及消息处理函数表 |
- 返回值
number,窗口ID
- 例子
uiWin.add({onUpdate = refresh})
uiWin.remove(winId)¶
移除一个窗口
- 参数
传入值类型 | 释义 |
---|---|
number | winId,窗口ID |
- 返回值
nil
- 例子
uiWin.remove(winId)
uiWin.isActive(winId)¶
判断一个窗口是否处于最前显示
- 参数
传入值类型 | 释义 |
---|---|
number | winId,窗口ID |
- 返回值
bool,true表示最前显示,其余表示非最前显示
- 例子
uiWin.isActive(winId)
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.toValue(str)¶
返回字符串tonumber的转义字符串(用来支持超过31位整数的转换)
- 参数
传入值类型 | 释义 |
---|---|
string | str 输入字符串 |
- 返回值
str 转换后的lua 二进制字符串 len 转换了多少个字符
- 例子
string.toValue("123456") -> "\1\2\3\4\5\6" 6
string.toValue("123abc") -> "\1\2\3\a\b\c" 6
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
- 例子
无
wdt¶
模块功能:外部硬件看门狗
wdt.setup(rst, wd)¶
配置模块与看门狗通讯IO并启动任务
- 参数
传入值类型 | 释义 |
---|---|
param | rst -- 模块复位单片机引脚(pio.P0_31) |
param | wd -- 模块和单片机相互喂狗引脚(pio.P0_29) |
- 返回值
无
- 例子
setup(pio.P0_31,pio.P0_29)
wdt.restart(rst, wd)¶
硬件看门狗立即重启模块
调用此接口前,必须保证wdt.setup已经被执行过
- 参数
传入值类型 | 释义 |
---|---|
param | rst -- 模块复位单片机引脚(pio.P0_31) |
param | wd -- 模块和单片机相互喂狗引脚(pio.P0_29) |
- 返回值
nil
- 例子
wdt.restart()
Luat 扩展库¶
adc¶
adc.open()¶
打开对应ID的ADC通道
- 语法
result = adc.open( id )
- 参数
参数 | 释义 |
---|---|
id | adc通道id |
- 返回值
1:成功打开adc通道
0:其他
- 例子
--adc id
local ADC_ID = 0
--打开adc
adc.open(ADC_ID)
adc.read()¶
读取原始测量数据和电压值,电压值单位为mv
- 语法
adcValue,voltValue = adc.read( id )
- 参数
参数 | 释义 |
---|---|
id | adc通道id |
- 返回值
adcValue,原始数据ad值,无效值为0xFFFF。voltValue,电压值,单位为mv,无效值为0xFFFF
- 例子
--adcval为number类型,表示adc的原始值,无效值为0xFFFF
--voltval为number类型,表示转换后的电压值,单位为毫伏,无效值为0xFFFF;adc.read接口返回的voltval放大了3倍,所以需要除以3还原成原始电压
local adcval,voltval = adc.read(ADC_ID)
adc.colse()¶
关闭adc
- 语法
adc.close(id)
- 参数
参数 | 释义 |
---|---|
id | adc id号 |
- 返回值
无
apn¶
apn 读取库
apn.get_default_apn()¶
通过mcc和mnc获取到默认apn
- 语法
apn,user,password = apn.get_default_apn( mcc,mnc )
- 参数
参数 | 释义 |
---|---|
mcc | 手机国家编码 |
mnc | 手机网络编码 |
- 返回值
apn,apn名字
user,用户名
password,密码
audiocore¶
音频操作接口
audiocore.play()¶
播放音乐
- 语法
ret = audiocore.play( filename )
- 参数
参数 | 释义 |
---|---|
filename | 音频文件名 |
- 返回值
true:播放成功
false:播放失败
audiocore.stop()¶
停掉正在播放的音频
- 语法
audiocore.stop()
- 参数
无
- 返回值
无
audiocore.setchannel()¶
设置音频播放通道
- 语法
result = audiocore.setchannel( channel )
- 参数
channel | 音频播放通道(可选参数见下列表) |
---|---|
audiocore.HANDSET 、 audiocore.EARPIECE 、 audiocore.LOUDSPEAKER 、audiocore.BLUETOOTH 、 audiocore.FM 、 audiocore.FM_LP 、 audiocore.TV 、audiocore.AUX_HANSET 、 audiocore.AUX_LOUDSPEAKER 、audiocore.AUX_EARPIECE 、 audiocore.DUMMY_HANDSET 、audiocore.DUMMY_AUX_HANDSET 、 audiocore.DUMMY_LOUDSPEAKER 、audiocore.DUMMY_AUX_LOUDSPEAKER | |
audiocore.setvol()¶
设置音频播放音量大小
- 语法
result = audiocore.setvol( vol )
- 参数
vol | 音频播放器音量(可选参数见下列表) |
---|---|
audiocore. VOL0、 audiocore. VOL1、 audiocore. VOL2、 audiocore. VOL3、 audiocore. VOL4、audiocore. VOL5、 audiocore. VOL6、 audiocore. VOL7 |
- 返回值
1:成功
0:其他
audiocore.setmicvol()¶
设置麦克风音量
- 语法
result = audiocore.setmicvol( vol )
- 参数
参数 | 释义 |
---|---|
vol | 麦克风音量(可选参数见下列表) |
audiocore.MIC_VOL0、audiocore. MIC_VOL1、audiocore. MIC_VOL2、audiocore.MIC_VOL3、audiocore. MIC_VOL4、audiocore. MIC_VOL5、audiocore. MIC_VOL6、audiocore. MIC_VOL7 、 audiocore.MIC_VOL8 、 audiocore.MIC_VOL9 、audiocore.MIC_VOL10 、 audiocore.MIC_VOL11 、 audiocore.MIC_VOL12 、audiocore.MIC_VOL13、audiocore.MIC_VOL14、audiocore.MIC_VOL15 |
- 返回值
1:成功
0:其他
audiocore.setloopback()¶
设置通道指定的环回测试
- 语法
result = audiocore.setloopback( status,channel )
- 参数
参数 | 释义 |
---|---|
status | 1开启回环测试,0关闭回环测试 |
channel | 音频通道(可选参数见下列表) |
audiocore. LOOPBACK_HANDSET 、 audiocore. LOOPBACK_EARPIECE 、 audiocore.LOOPBACK_LOUDSPEAKER 、 audiocore. LOOPBACK_AUX_HANDSET 、 audiocore.LOOPBACK_AUX_LOUDSPEAKER |
- 返回值
1:成功
0:其他
bit¶
位操作库
bit.bit()¶
左移运算,等价于C语言中的1 << position
- 语法
number = bit.bit( position )
- 参数
参数 | 释义 |
---|---|
position | 需要移位的位置 |
- 返回值
移位运算后的值
- 例子
print(bit.bit(2))--参数是位数,作用是1向左移动两位,打印出4
bit.isset()¶
测试位数是否被置1
- 语法
flag = bit.isset( value, position )
- 参数
参数 | 释义 |
---|---|
value | 被测试的值 |
position | 被测试的位置 |
- 返回值
true:该位被置1
false:其他
- 例子
print(bit.isset(5,0))--第一个参数是是测试数字,第二个是测试位置。从右向左数0到7。是1返回true,否则返回false,该返回true
print(bit.isset(5,1))--打印false
print(bit.isset(5,2))--打印true
print(bit.isset(5,3))--返回返回false
bit.isclear()¶
测试位数是否被置0
- 语法
flag = bit.isclear( value, position )
- 参数
参数 | 释义 |
---|---|
value | 被测试的值 |
position | 被测试的位置 |
- 返回值
true:该位被置0
false:其他
- 例子
print(bit.isclear(5,0))--与上面的相反
print(bit.isclear(5,1))
print(bit.isclear(5,2))
print(bit.isclear(5,3))
bit.set()¶
置1
- 语法
number = bit.set( value, pos1, pos2, ..., posn )
- 参数
参数 | 释义 |
---|---|
value | 基数(需要改变的值) |
pos1 | 第一位置 |
pos2 | 第二位置 |
posn | 第n位置 |
- 返回值
置1之后的值
- 例子
print(bit.set(0,0,1,2,3))--在相应的位数置1,打印15
bit.clear()¶
置0
- 语法
number = bit.clear( value, pos1, pos2, ..., posn )
- 参数
参数 | 释义 |
---|---|
value | 基数(需要改变的值) |
pos1 | 第一位置 |
pos2 | 第二位置 |
posn | 第n位置 |
- 返回值
置0之后的值
- 例子
print(bit.clear(5,0,2)) --在相应的位置置0,打印0
bit.bnot()¶
取反,等价于C语言中的~
- 语法
number = bit.bnot( value )
- 参数
参数 | 释义 |
---|---|
value | 需要取反的值 |
- 返回值
取反之后的值
- 例子
print(bit.bnot(5))--按位取反,输出-6
bit.band()¶
与运算,等价于C语言中的val1 & val2 & ... & valn
- 语法
number = bit.band( val1, val2, ... valn )
- 参数
参数 | 释义 |
---|---|
val1 | 第一个参数 |
val2 | 第二个参数 |
valn | 第n个参数 |
- 返回值
与运算之后的结果
- 例子
print(bit.band(1,1))--与,--输出1
bit.bor()¶
或运算,等价于C里面的val1 | val2 | ... | valn
- 语法
number = bit.bor( val1, val2, ... valn )
- 参数
参数 | 释义 |
---|---|
val1 | 第一个参数 |
val2 | 第二个参数 |
valn | 第n个参数 |
- 返回值
或运算之后的结果
- 例子
print(bit.bor(1,2))--或,--输出3
bit.bxor()¶
异或运算,等价于C语言中的val1 ^ val2 ^ ... ^ valn
- 语法
number = bit.bxor( val1, val2, ... valn )
- 参数
参数 | 释义 |
---|---|
val1 | 第一个参数 |
val2 | 第二个参数 |
valn | 第n个参数 |
- 返回值
异或运算之后的结果
- 例子
print(bit.bxor(1,2))--异或,相同为0,不同为1
bit.lshift()¶
逻辑左移,等价于C语言中的value << shift
- 语法
number = bit.lshift( value, shift )
- 参数
参数 | 释义 |
---|---|
value | 移位的值 |
shift | 移位的位置 |
- 返回值
逻辑左移之后的结果
- 例子
print(bit.lshift(1,2))--逻辑左移,“100”,输出为4
bit.rshift()¶
逻辑右移,等价于C语言中的value >> shift
- 语法
number = bit.rshift( value, shift )
- 参数
参数 | 释义 |
---|---|
value | 移位的值 |
shift | 移位的位置 |
- 返回值
逻辑右移之后的结果
- 例子
print(bit.rshift(4,2))--逻辑右移,“001”,输出为1
bit.arshift()¶
算数右移
- 语法
number = bit.arshift( value, shift )
- 参数
参数 | 释义 |
---|---|
value | 移位的值 |
shift | 移位的位置 |
- 返回值
算术右移之后的结果
- 例子
print(bit.arshift(2,2))--算数右移,左边添加的数与符号有关,输出为0
crypto¶
常见加密,校验算法
crypto.aes_encrypt()¶
aes算法(参考http://tool.chacuo.net/cryptaes)
- 语法
crypto.aes_encrypt(mode,padding,originStr,password)
- 参数
参数 | 释义 |
---|---|
mode | 加密模式 |
padding | 填充方式 |
originStr | 加密字符串 |
password | 密钥 |
- 返回值
已加密的字符串
- 例子
--下面示例为LuaTask的,如果需要LuaScript的,请参考LuaScript crypto demo
local originStr = "AES128 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
originStr = "AES128 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
originStr = "AES128 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"1234567890123456"))
originStr = "AES192 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"123456789012345678901234"))
originStr = "AES192 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"123456789012345678901234"))
originStr = "AES192 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"123456789012345678901234"))
originStr = "AES256 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"12345678901234567890123456789012"))
originStr = "AES256 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"12345678901234567890123456789012"))
originStr = "AES256 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"12345678901234567890123456789012"))
originStr = "AES128 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES192 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES256 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES128 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES192 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES256 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"12345678901234567890123456789012","1234567890666666"))
crypto.crc16()¶
CRC16校验算法
- 语法
crypto.crc16(crcMethod,originstr,poly,initial,finally,inReverse,outReverse)
- 参数
参数 | 释义 |
---|---|
crcMethod | string类型, 校验方法 |
originstr | string类型,计算校验的字符串 |
poly | 可选,默认0 |
initial | 可选,默认0 |
finally | 可选,默认0 |
inReverse | 可选,默认0 |
outReverse | 可选,默认0 |
- 返回值
校验计算结果
- 例子
local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("testCrypto.crc16_MODBUS",string.format("%04X",crypto.crc16("MODBUS",originStr)))
print("testCrypto.crc16_IBM",string.format("%04X",crypto.crc16("IBM",originStr)))
print("testCrypto.crc16_X25",string.format("%04X",crypto.crc16("X25",originStr)))
print("testCrypto.crc16_MAXIM",string.format("%04X",crypto.crc16("MAXIM",originStr)))
print("testCrypto.crc16_USB",string.format("%04X",crypto.crc16("USB",originStr)))
print("testCrypto.crc16_CCITT",string.format("%04X",crypto.crc16("CCITT",originStr)))
print("testCrypto.crc16_CCITT-FALSE",string.format("%04X",crypto.crc16("CCITT-FALSE",originStr)))
print("testCrypto.crc16_XMODEM",string.format("%04X",crypto.crc16("XMODEM",originStr)))
print("testCrypto.crc16_DNP",string.format("%04X",crypto.crc16("DNP",originStr)))
crypto.xxtea_encrypt()¶
xxtea加密算法
- 语法
crypto.xxtea_encrypt(text,key)
- 参数
参数 | 释义 |
---|---|
text | string类型,待加密字符串 |
key | string类型,密钥 |
- 返回值
加密/解密数据
- 例子
local text = "Hello World!";
local key = "07946";
local encrypt_data = crypto.xxtea_encrypt(text, key);
print("testCrypto.xxteaTest","xxtea_encrypt:"..encrypt_data)
local decrypt_data = crypto.xxtea_decrypt(encrypt_data, key);
print("testCrypto.xxteaTest","decrypt_data:"..decrypt_data)
crypto.crc32()¶
CRC32校验算法
- 语法
crypto.crc32(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要校验的字符串 |
len | number类型,字符串长度 |
- 返回值
校验计算结果
- 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("crc32",string.format("%08X",crypto.crc32(originstr,slen(originstr))))
--crc32 2FC153F9
crypto.sha256()¶
sha256算法
- 语法
crypto.sha256(originStr)
- 参数
参数 | 释义 |
---|---|
originStr | string类型, 需要加密的字符串 |
- 返回值
加密后的数据
- 例子
local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("testCrypto.sha256",crypto.sha256(originStr))
crypto.sha1()¶
sha1算法
- 语法
crypto.sha1(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
加密后的数据
- 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("sha1",crypto.sha1(originstr,slen(originstr)))
-- sha1 16EBE919119B9B54C8AF6B4F2A09C18B6B6D8218
crypto.hmac_sha1()¶
hmac_sha1算法
- 语法
hmac_sha1(originstr,len_str,signkey,len_key)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的数据 |
len_str | number类型,字符串长度 |
signkey | string类型, 密钥 |
len_key | number类型, 密钥长度 |
- 返回值
加密后的数据
- 例子
local originstr = "asdasdsadasweqcdsjghjvcb"
local signkey = "12345689012345"
print("hmac_sha1",crypto.hmac_sha1(originstr,slen(originstr),signkey,slen(signkey)))
--hmac_sha1 E3BB109BA59AF6A1F677157E8EC6B21349B9220F
crypto.flow_md5()¶
流式md5算法
- 语法
crypto.flow_md5()
- 参数
无
- 返回值
无
- 例子
local fmd5Obj=crypto.flow_md5()
local testTable={"lqlq666lqlq946","07946lq94607946","lq54075407540707946"}
for i=1, #(testTable) do
fmd5Obj:update(testTable[i])
end
print("testCrypto.flowMd5Test",fmd5Obj:hexdigest())
crypto.md5()¶
md5算法,支持计算文件的md5值
- 语法
crypto.md5(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
加密后的数据
- 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("md5",crypto.md5(originstr,slen(originstr)))
--md5 235B69FBC9E75C4FD5E8C59F9CB16500
crypto.hmac_md5()¶
hmac_md5算法测试
- 语法
crypto.hmac_md5(originstr,len_str,signkey,len_key)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len_str | number类型,字符串长度 |
signkey | string类型, 密钥 |
len_key | number类型, 密钥长度 |
- 返回值
加密后的数据
- 例子
local originstr = "asdasdsadas"
local signkey = "123456"
print("hmac_md5",crypto.hmac_md5(originstr,slen(originstr),signkey,slen(signkey)))
-- hmac_md5 38A7B18DC5F6543849DC49F06FADE3CC
crypto.base64_encode()¶
base64加密
- 语法
crypto.base64_encode(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
加密后的数据
- 例子
local originstr = "123456"
local encodestr = crypto.base64_encode(originstr,slen(originstr))
print("base64_encode",encodestr)
--base64_encode MTIzNDU2
crypto.base64_decode()¶
base64解密
- 语法
crypto.base64_decode(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
解密后的数据
- 例子
print("base64_decode",crypto.base64_decode(encodestr,slen(encodestr)))
-- base64_decode 123456
disp¶
lcd显示
disp.init()¶
初始化显示接口语法
-
disp.init(param)
-
参数
param:显示参数,table类型,包含:
参数 | 释义 |
---|---|
width | 分辨率宽度 |
height | 分辨率高度 |
bpp | 位深度,目前支持16位色彩屏(bpp=16)黑白屏(bpp=1) |
xoffset | x偏移,不设置该域则默认0 |
yoffset | y偏移,不设置该域则默认0 |
freq | spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000) |
hwfillcolor | 填充色 |
pinrst | reset,复位引脚 |
pincs | 命令/数据选择引脚 |
initcmd | 初始化指令表 |
- 返回值
无
disp.puttext()¶
显示字符串
- 语法
disp.puttext(str,x,y)
- 参数
参数 | 释义 |
---|---|
str | string类型,显示的字符串 |
x | number类型,x轴坐标 |
y | number类型,y轴坐标 |
- 返回值
无
- 例子
disp.puttext("欢迎使用Luat",16,0) --从坐标16,0位置开始显示"欢迎使用Luat"
disp.clear()¶
清除缓冲区内容,注意不会刷新到屏幕上,只有在update时才会执行刷屏动作
- 语法
disp.clear()
- 参数
无
- 返回值
无
disp.update()¶
将缓冲区内容刷新到屏幕上
- 语法
disp.update()
- 参数
无
- 返回值
无
disp.putimage()¶
在坐标(x,y)处显示图片,目前仅支持bmp和png格式,这个接口只会将显示数据写到缓冲区,只有在执行了update了以后才会真正的刷屏。最后面的四个参数是规定了从file中截取某一部分区域
- 语法
disp.putimage(file,x,y,transcolor,left,top,right,bottom)
- 参数
参数 | 释义 |
---|---|
file | 图片路径 |
x | 显示起始横坐标x(此参数可选,默认为0) |
y | 显示起始横坐标y(此参数可选,默认为0) |
transcolor | 透明色(此参数可选,默认为-1,表示没有透明色) |
left | 截取区域左上角横坐标(此参数可选,默认为0) |
top | 截取区域左上角纵坐标(此参数可选,默认为0) |
right | 截取区域右下角横坐标(此参数可选,默认为0) |
bottom | 截取区域右下角纵坐标(此参数可选,默认为0) |
- 返回值
无
disp.drawrect()¶
绘制矩形,并且填充颜色。填充色可以自行设置也可不填充颜色值格式RGB565。
- 语法
disp.drawrect(left,top,right,bottom,color)
- 参数
参数 | 释义 |
---|---|
left | 矩形框左上角横坐标 |
top | 矩形框左上角纵坐标 |
right | 矩形框右下角横坐标 |
bottom | 矩形框右下角纵坐标 |
color | 矩形框填充色(此参数可选,默认为-1,不填充颜色。需要填充颜色自行设置颜色值) |
- 返回值
无
disp.setcolor()¶
设置前景色
- 语法
disp.setcolor(color)
- 参数
参数 | 释义 |
---|---|
color | 颜色值,以rgb565填充红绿蓝为0xF800 0x07E0 0x001F |
- 返回值
无
disp.setbkcolor()¶
设置背景色
- 语法
disp.setbkcolor(color)
- 参数
参数 | 释义 |
---|---|
color | 颜色值,以rgb565填充红绿蓝为0xF800 0x07E0 0x001F |
- 返回值
无
disp.loadfont()¶
加载字体
- 语法
fontid=disp.loadfont(path)
- 参数
参数 | 释义 |
---|---|
path | 字体文件路径 |
- 返回值
fontid-返回加载后的字体id 用于setfont设置字体
disp.setfont()¶
设置字体
- 语法
oldfontid=disp.setfont(fontid)
- 参数
参数 | 释义 |
---|---|
fontid | 字体id |
- 返回值
oldfontid-返回旧的字体id
disp.sleep()¶
休眠显示模块
- 语法
disp.sleep()
- 参数
无
- 语法
无
disp.getlcdinfo()¶
获取LCD分辨率的宽度和高度(单位是像素)
- 语法
disp.getlcdinfo()
- 参数
无
- 返回值
WIDTH :宽度
HEIGHT : 高度
disp.putqrcode()¶
显示二维码
- 语法
disp.putqrcode(data, width, display_width, x, y)
- 参数
参数 | 释义 |
---|---|
data | 从qrencode.encode返回的二维码数据 |
width | 二维码数据的实际宽度 |
display_width | 二维码实际显示宽度 |
x | 二维码显示起始坐标x |
y | 二维码显示起始坐标y |
- 返回值
无
json¶
json编译解析
json.encode()¶
json编译
- 语法
json.encode(torigin)
- 参数
参数 | 释义 |
---|---|
torigin | table类型,待编译的源字符 |
- 返回值
json格式字符串
- 例子
local torigin =
{
KEY1 = "VALUE1",
KEY2 = "VALUE2",
KEY3 = "VALUE3",
KEY4 = "VALUE4",
KEY5 = {KEY5_1="VALU5_1",KEY5_2="VALU5_2"},
KEY6 = {1,2,3},
}
local jsondata = json.encode(torigin)
--[[
{"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}},"KEY6":[1,2,3]}
]]
json.decode()¶
json解析
- 语法
json.decode(origin)
- 参数
参数 | 释义 |
---|---|
origin | 待解析的json字符串 |
- 返回值
解析内容,table类型
解析结果,true为成功,false为失败
错误信息
- 例子
-- 正确json字符串
local wrongOrigin = "{\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"
local origin = "{\"KEY3\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"
local tjsondata,result,errinfo = json.decode(origin)
if result then
print(tjsondata["KEY1"])
print(tjsondata["KEY2"])
print(tjsondata["KEY3"])
print(tjsondata["KEY4"])
print(tjsondata["KEY5"]["KEY5_1"],tjsondata["KEY5"]["KEY5_2"])
print(tjsondata["KEY6"][1],tjsondata["KEY6"][2],tjsondata["KEY6"][3])
else
print("json.decode error",errinfo)
end
--origin:正确输出
--wrongOrigin:json.decode error Expected colon but found invalid token at character 5
i2c¶
i2c 操作接口
i2c.setup()¶
打开i2c接口
- 语法
speed = i2c.setup( id, speed [,slaveaddr] )
- 参数
参数 | 释义 |
---|---|
id | i2c 接口 id,目前支持 i2c id=2 即模块的 I2C3 |
speed | i2c.FAST (400KHz), i2c.SLOW (100KHz) |
slaveaddr | 可选,i2c 外设地址 0x00-0x7f |
- 返回值
可以根据返回的频率值判断是否成功打开 i2c
- 例子
--使用i2c.send和i2c.recv的setup
if i2c.setup(i2cid,i2c.SLOW) ~= i2c.SLOW then
print("init fail")
return
end
--使用i2c.write和i2c.read的setup
if i2c.setup(i2cid,i2c.SLOW,i2cslaveaddr) ~= i2c.SLOW then
print("init1 fail")
return
end
i2c.send()¶
向从设备写数据
- 语法
wrote = i2c.send( id,slave, data )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
slave | i2c 外设地址 0x00-0x7f |
data | number / string / table,自动根据参数类型写数据,num 只写 1 个字节,string/table |
- 返回值
传输成功的字节数
- 例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备i2cslaveaddr发送寄存器地址cmd[i]
i2c.send(i2cid,i2cslaveaddr,cmd[i])
--向从设备i2cslaveaddr发送要写入从设备寄存器内的数据cmd[i+1]
i2c.send(i2cid,i2cslaveaddr,cmd[i+1])
end
i2c.recv()¶
向从设备读取数据
- 语法
i2c.recv( id, slave,size )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
slave | i2c 外设地址 0x00-0x7f |
size | 读取数据字节数 |
- 返回值
返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流
- 例子
--向从设备i2cslaveaddr发送寄存器地址cmd[i]
i2c.send(i2cid,i2cslaveaddr,cmd[i])
--读取从设备i2cslaveaddr寄存器内的1个字节的数据,并且打印出来
print("testI2c.init",string.format("%02X",cmd[i]),string.toHex(i2c.recv(i2cid,i2cslaveaddr,1)))
i2c.write()¶
往指定的寄存器地址 reg 传输数据
- 语法
wrote = i2c.write( id, reg, data )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
reg | 写入 i2c 从设备的寄存器起始地址 |
data | number / string / table,自动根据参数类型写数据,num 只写 1 个字节,string/table |
- 返回值
传输成功的字节数
- 例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备的寄存器地址cmd[i]中写1字节的数据cmd[i+1]
i2c.write(i2cid,cmd[i],cmd[i+1])
end
i2c.read()¶
读取指定寄存器地址 reg 的数据内容
- 语法
data = i2c.read( id, reg, num )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
reg | 读取 i2c 从设备的寄存器起始地址 |
num | 读取数据字节数 |
- 返回值
返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流
- 例子
--从从设备的寄存器地址cmd[i]中读1字节的数据,并且打印出来
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备的寄存器地址cmd[i]中写1字节的数据cmd[i+1]
i2c.write(i2cid,cmd[i],cmd[i+1])
--从从设备的寄存器地址cmd[i]中读1字节的数据,并且打印出来
print("testI2c.init1",string.format("%02X",cmd[i]),string.toHex(i2c.read(i2cid,cmd[i],1)))
end
i2c.close()¶
关闭 I2C 接口
- 语法
speed = i2c.close( id )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
- 返回值
无
pack¶
pack 库支持将一系列数据按照格式字符转化为 lua 字符串或者将 lua 字符串按照格式字符转化成 一系列值
格式字符串格式如下:
[endianness]< format specifier >[count]
endianness:字节序
- '<' 小字节序,最低有效字节优先,更低的字节有效位占据着更低地址的内存空间。
- '>' 大字节序,最高有效字节优先,更高的字节有效位占据着更低地址的内存空间。
- '=' 自然字节序,默认。
format specifier:参照下面格式化符号
count:取字节个数
格式化符号 | 变量类型 |
---|---|
'z' | 以'\0'结尾的字符串 |
'p' | 在string数据前面加一个字节的string长度数据 |
'P' | 在string数据前面加2个字节的string长度数据 |
'a' | 在string数据前面加4个字节的string长度数据 |
'A' | 字符串(string) |
'f' | 浮点数(float) |
'd' | 双精度浮点数(double) |
'n' | Lua数字(Lua number) |
'c' | 字符(char) |
'b' | 字节(byte = unsigned char) |
'h' | 短整型(short,两字节) |
'H' | 无符号短整型(unsigned short,两字节) |
'i' | 整型(int,四字节) |
'I' | 无符号整型(unsigned int,四字节) |
'l' | 长整型(long,八字节) |
'L' | 无符号长整型(unsigned long,八字节) |
pack.pack()¶
打包字符串的值,在pack的时候有符号 无符号的输出结果都是一样的 unpack时有符号跟无符号才有区别
- 语法
packed = pack.pack( format, val1, val2, ..., valn )
- 参数
参数 | 释义 |
---|---|
format | 格式化符号 |
val1 | 第一个需打包的值 |
val2 | 第二个需打包的值 |
valn | 第n个需打包的值 |
- 返回值
一个包含所有格式化变量的字符串
- 例子
print("pcak.pack test:")
print(pack.pack("A",10))--当"10"以字符串形式包装时,会打印出“10”
print(common.binstohexs(pack.pack("b",0x10)))--将0x01以十六进制打包为字符串,然后用十六进制输出0x10
print(pack.pack("A","LUAT"))
pack.unpack()¶
解包字符串
- 语法
nextpos, val1, val2, ..., valn = pack.unpack( string, format,[ init ] )
- 参数
参数 | 释义 |
---|---|
string | 需解包的字符串 |
format | 格式化符号 |
init(可选) | 默认值为1,标记解包开始的位置 |
- 返回值
nextpos,字符串标记的位置
val1,第一个解包的值
val2,第二个解包的值
valn,第n个解包的值
- 例子
print("pack.unpack test:")
nextpox1,val1,val2,val3,val4=pack.unpack("luat100","c4")--"nextpos"下个待解析的位置 ,取4个字符(char)
print(nextpox1,val1,val2,val3,val4) --分别对应的是"5",l","u","a","t"的ascii码数据
print(string.char(val1,val2,val3,val4)) --将ascii码数据转化为字符输出
nextpox2,string1=pack.unpack("luat100","A4")--输出“luat”
print(nextpox2,string1)--输出5 luat
nextpox3,number1,number2=pack.unpack(common.hexstobins("006400000064"),">H>i")--[[输出无符号短型和整形,因为无符号短型是2个字节,整形是4个字节,输出为100,100--]]
print(nextpox3,number1,number2)--输出7 100 100
nextpox3,number1=pack.unpack(common.hexstobins("0064"),">h")--输出为100,因为短型是2个字节
print(nextpox3,number1)--输出3 100
pio¶
管脚操作
pio.pin.setdir()¶
设置管脚的描述
- 语法
pio.pin.setdir( direction,pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
direction | 管脚描述,可选pio.INPUT , pio.OUTPUT, pio.INT |
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.setval()¶
设置管脚的值
- 语法
pio.pin.setval(value,pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
value | 管脚值,可选0或1 |
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.getval()¶
读取管脚的值
- 语法
val1, val2, ..., valn = pio.pin.getval( pin1, pin2, ..., pinn )
- 参数
参数 | 释义 |
---|---|
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
number类型,0表示低电平,1表示高电平
pio.pin.sethigh()¶
设置管脚为高电平(1)
- 语法
pio.pin.sethigh(pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.setlow()¶
设置管脚为低电平(0)
- 语法
pio.pin.setlow(pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.setpull()¶
配置IO口默认状态
- 语法
pio.pin.setpull(method,pin)
- 参数
参数 | 释义 |
---|---|
method | pio.PULLUP:上拉模式 。pio.PULLDOWN:下拉模式。pio.NOPULL:高阻态 |
pin | 配置管脚 |
- 返回值
无
- 例子
pio.pin.setpull(pio.PULLUP,pio.P0_5) --配置为上拉
--pio.pin.setpull(pio.PULLDOWN,pio.P0_5) --配置为下拉
--pio.pin.setpull(pio.NOPULL,pio.P0_5) --不配置上下拉
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 控制
电压域与控制的GPIO的对应关系如下:
pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13
pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18
pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24
pmd.LDO_LCD:BL,LCD背光引脚
pmd.KP_LEDB:KP_LED_B
pmd.KP_LEDR:KP_LED_R
一旦设置了某一个电压域的电压等级,受该电压域控制的所有GPIO的高电平都与设置的电压等级一致
- 语法
pmd.ldoset(level,id1,[id2],...,[idn])
- 参数
参数 | 释义 |
---|---|
level | ldo 亮度 0 - 7 级 0 级关闭 0--关闭 1--1.8V 2--1.9V 3--2.0V 4--2.6V 5--2.8V 6--3.0V 7--3.3V |
id1 | 要设置的第一个 ldo |
id2(可选) | 要设置的第 二 个 ldo |
idn(可选) | 要设置的第 n 个 ldo |
- 返回值
无
- 例子
--GPIO8输出电平时,要求输出2.8V,则调用
pmd.ldoset(5,pmd.LDO_VMMC)
pmd.sleep()¶
省电控制
- 语法
pmd.sleep(value)
- 参数
参数 | 释义 |
---|---|
value | 1 - 进入睡眠,0 - 退出睡眠 |
- 返回值
无
qrencode¶
二维码数据
qrencode.encode ()¶
创建二维码信息
- 语法
qrencode.encode(string)
- 参数
参数 | 释义 |
---|---|
string | 二维码字符串 |
- 返回值
width 生成的二维码信息宽度
data 生成的二维码数据
- 例子
local width, data = qrencode.encode("http://www.openluat.com")
rtos¶
嵌入式系统接口:接收消息,软件定时器
rtos.receive()¶
接收消息
- 语法
msg,msgpara = rtos.receive(timeout)
- 参数
参数 | 释义 |
---|---|
timeout | timeout 超时返回以毫秒为单位,可以用#rtos.INF_TIMEOUT#表示阻塞等待消息 |
- 返回值
如果 msg 为 table 类型,msg 根据不同的消息 msg.id 会有不同的数据:
如果 msg 为 number 类型,msg 根据不同的消息 msg 会有不同的数据
1.rtos.MSG_TIMER 定时器超时消息
msg.timer_id 或者 msgpara 为超时的定时器 id
2.rtos.MSG_UART_RXDATA 串口 ATC 数据提醒
msg.uart_id 或者msgpara为收到的数据的串口id或者atc,收到该消息后可以通过uart.read
接口读取数据
3.rtos.MSG_KEYPAD 键盘消息,必须初始化按键(#rtos.init_module#)后才会有键盘消息
msg.pressed 按键按下/弹起
msg.key_matrix_row 按键所在行值
msg.key_matrix_col 按键所在列值
4.rtos.WAIT_MSG_TIMEOUT 等待消息超时
5.rtos.MSG_INT 中断消息
msg.int_id 中断 id
msg.int_resnum 中断 pin 脚编号
6.rtos.MSG_PMD 电源管理消息
msg.present 电池在位状态
msg.level 百分比 0-100
msg.voltage 电池电压
msg.charger 充电器在位状态
msg.state 充电状态:0-不在充电 1-充电中 2-充电停止
rtos.timer_start()¶
启动定时器
- 语法
rtos.timer_start(timer_id, timeout)
- 参数
参数 | 释义 |
---|---|
timer_id | 定时器 id,可以是任意整数,定时器到时 msg.timer_id 值为启动时定时器 |
timeout | 定时器延时时间以毫秒为单位 |
- 返回值
无
rtos.timer_stop()¶
停止定时器
- 语法
rtos.timer_stop(timer_id)
- 参数
参数 | 释义 |
---|---|
timer_id | 输入与启动定时器时定义的 id 即可停止定时器 |
- 返回值
无
rtos.poweron_reason()¶
读取开机原因值
- 语法
reason=rtos.poweron_reason()
- 参数
无
- 返回值
rtos. POWERON_KEY(=0),按键开机
rtos. POWERON_CHARGER(=1),充电开机
rtos. POWERON_ALARM(=2),闹钟开机
rtos. POWERON_RESTART(=3),软件重启开机
rtos. POWERON_EXCEPTION(=6),异常开机
rtos. POWERON_HOST(=7),HOST 工具控制重启开机
rtos. POWERON_WATCHDOG(=8),其他原因
rtos.poweron()¶
是否启动 GSM 开机
- 语法
rtos.poweron(flag)
- 参数
参数 | 释义 |
---|---|
flag | 0 表示不启动系统;1 表示启动系统 |
- 返回值
无
rtos.poweroff()¶
软件关机
- 语法
rtos.poweroff()
- 参数
无
- 返回值
无
rtos.restart()¶
软件重启
- 语法
rtos.restart()
- 参数
无
- 返回值
无
rtos.tick()¶
获取系统开机运行时间总计数
- 语法
ticks=rtos.tick()
- 参数
无
- 返回值
ticks,时间计数,每 tick 时长1/16384秒
rtos.sleep()¶
延时函数
- 语法
rtos.sleep(millisecond)
- 参数
参数 | 释义 |
---|---|
millisecond | 延时时间 ,以毫秒为单位 |
- 返回值
无
rtos.get_env_usage()¶
获取 lua 任务消息队列的使用百分比
- 语法
percentage=rtos.get_env_usage()
- 参数
无
- 返回值
percentage,百分比,例如使用了 80%,则 percentage 为 80
rtos.set_alarm()¶
设置闹钟,在设置之前必须注册闹钟模块和注册消息回调函数
- 语法
rtos.set_alarm(mode,year,month,day,hour,min,sec)
- 参数
参数 | 释义 |
---|---|
mode | 1:设置闹铃 ,0:清除闹铃 |
year | number类型,年 |
month | number类型,月 |
day | number类型,日 |
hour | number类型,时 |
min | number类型,分 |
sec | number类型,秒 |
- 返回值
无
- 例子
rtos.init_module(rtos.MOD_ALARM) --注册闹铃模块
sys.regmsg(rtos.MSG_ALARM,alarmmsg) --注册消息回调函数
rtos.set_alarm(1, 2017, 12, 7, 10, 52, 0) --设置闹铃
--闹钟时间 2017-17-7 10:52:0
rtos.set_alarm(0, 0, 0, 0, 0, 0, 0) --关闭闹铃
--闹钟开机
local reason = rtos.poweron_reason()
if reason == rtos.POWERON_ALARM then
rtos.restart()-- 闹钟开机以后重启不然注册不上GSM协议栈
end
rtos.make_dir()¶
创建目录
- 语法
rtos.make_dir(path)
- 参数
参数 | 释义 |
---|---|
path | 文件夹路径 |
- 返回值
布尔值
true表示创建成功,false表示失败
rtos.remove_dir()¶
删除文件夹
- 语法
rtos.remove_dir(path)
- 参数
参数 | 释义 |
---|---|
path | 文件夹路径 |
- 返回值
true表示删除成功,false表示失败
rtos.get_fs_free_size()¶
获取文件系统剩余空间
- 语法
rtos.get_fs_free_size()
- 参数
无
- 返回值
文件系统剩余空间,单位Bytes
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,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可 |
chpa | 第几个clk的跳变沿传输数据,仅支持0和1,0表示第1个,1表示第2个。 |
cpol | spi_clk idle的状态,仅支持0和1,0表示低电平,1表示高电平 |
dataBits | 数据位,仅支持8 |
clock | spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000) |
duplex | 是否全双工,仅支持0和1,0表示半双工(仅支持输出),1表示全双工。此参数可选,默认半双工 |
- 返回值
number类型,1表示成功,0表示失败
spi.send()¶
写数据
- 语法
spi.send(id,data)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可 |
data | string类型,要发送的数据 |
- 返回值
number类型,写成功的数据长度
spi.recv()¶
读数据
- 语法
spi.recv(id,length)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可 |
length | 要读取的数据的长度 |
- 返回值
string类型,读取的数据内容
spi.send_recv()¶
读写数据
- 语法
spi.send_recv(id,data)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可 |
data | string类型,要发送的数据 |
- 返回值
string类型,读取的数据内容
spi.close()¶
关闭SPI
- 语法
spi.close(id)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1 |
- 返回值
number类型,1表示成功,0表示失败
uart¶
uart 与虚拟 AT 交互接口
uart.setup()¶
uart通讯
- 语法
baud = uart.setup( id, baud, databits, parity, stopbits,[msgmode,txDoneReport] )
- 参数
参数 | 释义 |
---|---|
id | 串口号,可选0,1,2 |
baud | 波特率,可选1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,115200,230400,460800,921600 |
databits | 数据位,7或8 |
parity | 校验位,可选uart.PAR_EVEN, uart.PAR_ODD或uart.PAR_NONE |
stopbits | 停止位,可选uart.STOP_1,uart.STOP_2 |
msgmode | 0 或者默认 - 消息通知,1 - 无消息上报需要用户主动轮询 |
txDoneReport | txdone消息上报开关。0:关闭,1:打开 |
- 返回值
串口的真实波特率
uart.write()¶
向串口写字符串或者整型数据
- 语法
uart.write( id, data1, [data2], ..., [datan] )
- 参数
参数 | 释义 |
---|---|
id | 串口号,可选0,1,2 |
data1 | 第一个字符串或8位整型数据 |
data2 | 第二个字符串或8位整型数据 |
datan(可选) | 第n个字符串或8位整型数据 |
- 返回值
无
uart.getchar()¶
从串口读取单字符
- 语法
str = uart.getchar( id )
- 参数
参数 | 释义 |
---|---|
id | 串口号,可选0,1,2 |
- 返回值
串口读出来的字符
uart.read()¶
从串口读取字符串
- 语法
str = uart.read( id, format)
- 参数
参数 | 释义 |
---|---|
id | 串口号 |
格式化 | *l:读取到结束字符\n或者阻塞发送 *n:读取整型数据 *s:读取到空格字符 数字,number类型:只读取number长度的数据 |
- 返回值
串口读出到的数据
uart.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