Luat的API分为两种:一种直接用Lua语言实现的,在lib目录下,对开发者可见。另一种是在用C语言实现的,在lod里面,对开发者不可见。这儿称前者为API,后者为扩展API。
目录¶
API列表
模块名 | 模块功能 |
---|---|
sys | Luat协程调度框架 |
audio | 音频播放 |
cc | 通话管理 |
common | 通用库函数、编码格式转换、时区时间转换 |
gps | GPS模块管理 |
socket | 数据链路激活、SOCKET管理(创建、连接、数据收发、状态维护) |
http | HTTP客户端 |
log | 系统日志记录,分级别日志工具 |
nvm | 参数管理 |
ntp | 网络授时 |
wdt | 外部硬件看门狗 |
clib | 完善luat的c库接口 |
pb | 电话簿管理 |
console | Luat控制台 |
mqtt | MQTT客户端 |
errDump | 系统错误日志管理(强烈建议用户开启此模块的“错误日志上报调试服务器”功能). |
lbsLoc | 根据基站信息查询经纬度 |
utils | 常用工具类接口 |
pins | GPIO 功能配置,包括输入输出IO和上升下降沿中断IO |
update | 远程升级 |
pm | 休眠管理 |
record | 录音处理 |
sms | 短信功能 |
misc | 配置管理-序列号、IMEI、底层软件版本号、时钟、是否校准、飞行模式、查询电池电量等功能 |
sim | 查询sim卡状态、iccid、imsi、mcc、mnc |
ril | 虚拟串口AT命令交互管理 |
扩展API列表
模块名 | 模块功能 |
---|---|
adc | adc模块 |
apn | apn 读取库 |
bit | 位操作库 |
i2c | i2c 操作接口 |
spi | spi 操作接口 |
pack | 字符转换 |
pio | 管脚操作 |
pmd | 电源管理接口 |
rtos | 嵌入式系统接口 |
uart | uart接口 |
crypto | 常见加密,校验算法 |
json | json编译解析 |
disp | lcd显示 |
LuaTask¶
sys¶
Luat协程调度框架
sys.powerOn()¶
启动GSM协议栈。例如在充电开机未启动GSM协议栈状态下,如果用户长按键正常开机,此时调用此接口启动GSM协议栈即可
- 语法
sys.powerOn()
- 参数
无
- 返回值
无
sys.restart()¶
软件重启
- 语法
sys.restart(r)
- 参数
参数 | 释义 |
---|---|
r | string, 重启原因,用户自定义,一般是string类型,重启后的trace中会打印出此重启原因 |
- 返回值
无
- 例子
sys.restart('程序超时软件重启')
sys.wait()¶
Task任务延时函数,只能用于任务函数中
- 语法
sys.wait(ms)
- 参数
参数 | 释义 |
---|---|
ms | number,整数,最大等待126322567毫秒 |
- 返回值
number 正常返回1,失败返回nil
sys.waitUntil()¶
Task任务的条件等待函数(包括事件消息和定时器消息等条件),只能用于任务函数中。
- 语法
sys.waitUntil(id, ms)
- 参数
参数 | 释义 |
---|---|
id | 消息ID |
ms | 等待超时时间,单位ms,最大等待126322567毫秒 。ms可以为nil的,为nil的时候表示阻塞等待,也就是无限时间 |
- 返回值
result 接收到消息返回true,超时返回false
data 接收到消息返回消息参数
- 例子
result, data = sys.waitUntil("SIM_IND", 120000)
sys.taskInit()¶
创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数,main.lua导入该模块即可
- 语法
sys.taskInit(fun, ...)
- 参数
参数 | 释义 |
---|---|
fun | 任务函数名,用于resume唤醒时调用 |
... | 任务函数fun的可变参数 |
- 返回值
co 返回该任务的线程号
- 例子
sys.taskInit(task1,'a','b')
sys.init()¶
Luat平台初始化
- 语法
sys.init(mode, lprfnc)
- 参数
参数 | 释义 |
---|---|
mode | 充电开机是否启动GSM协议栈,1不启动,否则启动 |
lprfnc | 用户应用脚本中定义的“低电关机处理函数”,如果有函数名,则低电时,本文件中的run接口不会执行任何动作,否则,会延时1分钟自动关机 |
- 返回值
无
- 例子
sys.init(1,0)
sys.timerStop()¶
关闭计时器
- 语法
sys.timerStop(val, ...)
- 参数
参数 | 释义 |
---|---|
val | 值为number时,识别为定时器ID,值为回调函数时,需要传参数 |
... | val值为函数时,函数的可变参数 |
- 返回值
无
sys.timerStopAll()¶
关闭同一回调函数的所有定时器
- 语法
sys.timerStopAll(fnc)
- 参数
参数 | 释义 |
---|---|
fnc | 定时器回调函数 |
- 返回值
无
sys.timerStart()¶
开启一个定时器
- 语法
sys.timerStart(fnc, ms, ...)
- 参数
参数 | 释义 |
---|---|
fnc | 定时器回调函数 |
ms | number,整数,最大定时126322567毫秒 |
... | 可变参数 fnc的参数 |
- 返回值
number 定时器ID,如果失败,返回nil
sys.timerLoopStart()¶
开启一个循环定时器
- 语法
sys.timerLoopStart(fnc, ms, ...)
- 参数
参数 | 释义 |
---|---|
fns | 定时器回调函数 |
ms | number 整数,最大定时126322567毫秒 |
... | 可变参数 fnc的参数 |
- 返回值
number 定时器ID,如果失败,返回nil
sys.timerIsActive()¶
判断某个定时器是否处于开启状态
- 语法
sys.timerIsActive(val, ...)
- 参数
参数 | 释义 |
---|---|
val | 有两种形式: 一种是开启定时器时返回的定时器id,此形式时不需要再传入可变参数...就能唯一标记一个定时器 另一种是开启定时器时的回调函数,此形式时必须再传入可变参数...才能唯一标记一个定时器 |
... | 可变参数 |
- 返回值
number 开启状态返回true,否则nil
sys.subscribe()¶
订阅消息
- 语法
sys.subscribe(id, callback)
- 参数
参数 | 释义 |
---|---|
id | 消息id |
callback | 消息回调处理 |
- 返回值
无
- 例子
sys.subscribe("NET_STATUS_IND", callback)
sys.unsubscribe()¶
取消订阅消息
- 语法
sys.unsubscribe(id, callback)
- 参数
参数 | 释义 |
---|---|
id | 消息id |
callback | 消息回调处理 |
- 返回值
无
- 例子
sys.unsubscribe("NET_STATUS_IND", callback)
sys.publish()¶
发布内部消息,存储在内部消息队列中
- 语法
sys.publish(...)
- 参数
参数 | 释义 |
---|---|
... | 可变参数,用户自定义 |
- 返回值
无
- 例子
sys.publish("NET_STATUS_IND")
rtos¶
注册rtos消息回调处理函数
- 语法
rtos.on(id, handler)
- 参数
参数 | 释义 |
---|---|
id | number,消息类型id |
handler | 消息处理函数 |
- 返回值
无
- 例子
rtos.on(rtos.MSG_KEYPAD, function(param) handle keypad message end)
audio¶
音频播放.
支持MP3、amr文件播放; 支持本地TTS播放、通话中TTS播放到对端(需要使用支持TTS功能的core软件)
audio.play()¶
播放音频
- 语法
audio.play(priority, type, path[, vol=4][, cbFnc=nil][, dup=nil][, dupInterval=0])
- 参数
参数 | 释义 |
---|---|
priority | number, 音频优先级,数值越大,优先级越高 |
type | string,音频类型,目前仅支持"FILE"、"TTS"、"TTSCC","RECORD" |
path | string,音频文件路径,跟typ有关 typ为"FILE"时:表示音频文件路径 typ为"TTS"时:表示要播放的UTF8编码格式的数据 typ为"TTSCC"时:表示要播放给通话对端的UTF8编码格式的数据 |
vol | number, 此参数可选,默认值为: 4 ,播放音量,取值范围0到7,0为静音 |
cbFnc | function, 此参数可选,默认值为: nil,音频播放结束时的回调函数,回调函数的调用形式如下: cbFnc(result) result表示播放结果: 0-播放成功结束; 1-播放出错 2-播放优先级不够,没有播放 3-传入的参数出错,没有播放 4-被新的播放请求中止 |
dup | bool , 此参数可选,默认值为: nil,是否循环播放,true循环,false或者nil不循环 |
dupInterval | number,此参数可选,默认值为: 0,循环播放间隔(单位毫秒),dup为true时,此值才有意义 |
- 返回值
result,bool或者nil类型,同步调用成功返回true,否则返回nil
- 例子
audio.play(0,"FILE","/ldata/call.mp3")
audio.play(0,"FILE","/ldata/call.mp3",7)
audio.play(0,"FILE","/ldata/call.mp3",7,cbFnc)
audio.setVolume()¶
设置喇叭音量等级
- 语法
audio.setVolume(vol)
- 参数
参数 | 释义 |
---|---|
vol | number,音量值为0-7,0为静音 |
- 返回值
bool result,设置成功返回true,失败返回false
audio.setMicVolume()¶
设置麦克音量等级
- 语法
audio.setMicVolume(vol)
- 参数
参数 | 释义 |
---|---|
vol | number, 音量值为0-15,0为静音 |
- 返回值
bool result,设置成功返回true,失败返回false
audio.setStrategy()¶
设置优先级相同时的播放策略
- 语法
audio.setStrategy(strategy)
- 参数
参数 | 释义 |
---|---|
strategy | number,优先级相同时的播放策略; 0:表示继续播放正在播放的音频,忽略请求播放的新音频; 1:表示停止正在播放的音频,播放请求播放的新音频 |
- 返回值
nil
cc¶
通话管理
cc.anyCallExist()¶
是否存在通话
- 语法
cc.anyCallExist()
- 参数
无
- 返回值
bool result 存在通话返回true,否则返回false
cc.getState()¶
查询某个号码的通话状态
- 语法
cc.getState(num)
- 参数
参数 | 释义 |
---|---|
num | string,查询号码 |
- 返回值
number state 通话状态,状态值参考本模块Fields定义
- 例子
state = cc.getState('10086')
cc.dial()¶
呼出电话
- 语法
cc.dial(num[, delay=0])
- 参数
参数 | 释义 |
---|---|
num | string,呼出号码 |
delay | number,此参数可选,默认值为: 0,延时delay毫秒后,才发起呼叫 |
- 返回值
bool result,true表示允许发送at命令拨号并且发送at,false表示不允许at命令拨号
cc.hangUp()¶
挂断通话
- 语法
cc.hangUp(num)
- 参数
参数 | 释义 |
---|---|
num | string,号码,若指定号码通话状态不对 则直接退出 不会执行挂断,若挂断时会挂断所有电话 |
- 返回值
无
cc.accept()¶
接听电话
- 语法
cc.accept(num)
- 参数
参数 | 释义 |
---|---|
num | string, 号码,若指定号码通话状态不对 则直接退出 不会接通 |
- 返回值
无
cc.transVoice()¶
通话中发送声音到对端,必须是12.2K AMR格式
- 语法
cc.transVoice(data[, loop=nil][, downLinkPlay=nil])
- 参数
参数 | 释义 |
---|---|
data | string,12.2K AMR格式的数据 |
loop | bool,此参数可选,默认值为: nil,是否循环发送,true为循环,其余为不循环 |
downLinkPlay | bool,此参数可选,默认值为: nil,声音是否在本端播放,true为播放,其余为不播放 |
- 返回值
bool result true为成功,false为失败
- 例子
cc.transVoice("#!AMR\010\060*********")
cc.transVoice("#!AMR\010\060*********",true)
cc.transVoice("#!AMR\010\060*********",true,true)
cc.dtmfDetect()¶
设置dtmf检测是否使能以及灵敏度
- 语法
cc.dtmfDetect([enable=nil][, sens=3])
- 参数
参数 | 释义 |
---|---|
enable | bool ,此参数可选,默认值为: nil, true使能,false或者nil为不使能 |
sens | number,此参数可选,默认值为: 3,灵敏度,最灵敏为1 |
- 返回值
nil
cc.sendDtmf()¶
发送dtmf到对端
- 语法
cc.sendDtmf(str[, playtime=100][, intvl=100])
- 参数
参数 | 释义 |
---|---|
str | string,dtmf字符串,仅支持数字、ABCD*# |
playtime | number ,此参数可选,默认值为: 100,每个dtmf播放时间,单位毫秒 |
intvl | number ,此参数可选,默认值为: 100,两个dtmf间隔,单位毫秒 |
- 返回值
nil
Fields¶
状态 | 释义 |
---|---|
CONNECTED | 通话中 |
HOLD | 通话保持中 |
DIALING | 正在呼出 |
INCOMING | 正在呼入 |
DISCONNECTING | 正在挂断通话 |
DISCONNECTED | 通话已挂断 |
common¶
通用库函数、编码格式转换、时区时间转换
common.ucs2ToAscii()¶
ascii字符串的unicode编码的16进制字符串 转化为 ascii字符串
- 语法
common.ucs2ToAscii(inNum)
- 参数
参数 | 释义 |
---|---|
inNum | string, 待转换字符串 |
- 返回值
string data,转换后的字符串
- 例子
local data = common.ucs2ToAscii("0031003200330034")
--data is "1234"
common.nstrToUcs2Hex()¶
ascii字符串 转化为 ascii字符串的unicode编码的16进制字符串(仅支持数字和+)
- 语法
common.nstrToUcs2Hex(inNum)
- 参数
参数 | 释义 |
---|---|
inNum | string, 待转换字符串 |
- 返回值
string data,转换后的字符串
- 例子
local data = common.nstrToUcs2Hex("+1234")
--data is "002B0031003200330034"
common.numToBcdNum()¶
ASCII字符串 转化为 BCD编码格式字符串(仅支持数字)
- 语法
common.numToBcdNum(inStr, destLen)
- 参数
参数 | 释义 |
---|---|
inStr | string, 待转换字符串 |
destLen | number, 转换后的字符串期望长度,如果实际不足,则填充F |
- 返回值
string data,转换后的字符串
- 例子
local data = common.numToBcdNum("8618126324567")
--data is "688121364265f7" (表示第1个字节是0x68,第2个字节为0x81,......)
common.bcdNumToNum()¶
BCD编码格式字符串 转化为 号码ASCII字符串(仅支持数字)
- 语法
common.bcdNumToNum(num)
- 参数
参数 | 释义 |
---|---|
num | string, 待转换字符串 |
- 返回值
string data,转换后的字符串
- 例子
local data = common.bcdNumToNum(common.fromHex("688121364265f7")) --表示第1个字节是0x68,第2个字节为0x81,......
--data is "8618126324567"
common.ucs2ToGb2312()¶
unicode小端编码 转化为 gb2312编码
- 语法
common.ucs2ToGb2312(ucs2s)
- 参数
参数 | 释义 |
---|---|
ucs2s | string, unicode小端编码数据 |
- 返回值
string data,gb2312编码数据
- 例子
local data = common.ucs2ToGb2312(ucs2s)
common.gb2312ToUcs2()¶
gb2312编码 转化为 unicode小端编码
- 语法
common.gb2312ToUcs2(gb2312s)
- 参数
参数 | 释义 |
---|---|
gb2312s | string, gb2312编码数据 |
- 返回值
string data,unicode小端编码数据
- 例子
local data = common.gb2312ToUcs2(gb2312s)
common.ucs2beToGb2312()¶
unicode大端编码 转化为 gb2312编码
- 语法
common.ucs2beToGb2312(ucs2s)
- 参数
参数 | 释义 |
---|---|
ucs2s | string, unicode大端编码数据 |
- 返回值
string data,gb2312编码数据
- 例子
local data = common.ucs2beToGb2312(ucs2s)
common.gb2312ToUcs2be()¶
gb2312编码 转化为 unicode大端编码
- 语法
common.gb2312ToUcs2be(gb2312s)
- 参数
参数 | 释义 |
---|---|
gb2312s | string, gb2312编码数据 |
- 返回值
string data,unicode大端编码数据
- 例子
local data = common.gb2312ToUcs2be(gb2312s)
common.ucs2ToUtf8()¶
unicode小端编码 转化为 utf8编码
- 语法
common.ucs2ToUtf8(ucs2s)
- 参数
参数 | 释义 |
---|---|
ucs2s | string, unicode小端编码数据 |
- 返回值
string data,utf8编码数据
common.utf8ToUcs2()¶
utf8编码 转化为 unicode小端编码
- 语法
common.utf8ToUcs2(utf8s)
- 参数
参数 | 释义 |
---|---|
utf8s | string, utf8编码数据 |
- 返回值
string data,unicode小端编码数据
common.ucs2beToUtf8()¶
unicode大端编码 转化为 utf8编码
- 语法
common.ucs2beToUtf8(ucs2s)
- 参数
参数 | 释义 |
---|---|
ucs2s | string, unicode大端编码数据 |
- 返回值
string data,utf8编码数据
common.utf8ToUcs2be()¶
utf8编码 转化为 unicode大端编码
- 语法
common.utf8ToUcs2be(utf8s)
- 参数
参数 | 释义 |
---|---|
utf8s | string, utf8编码数据 |
- 返回值
string data,unicode大端编码数据
common.utf8ToGb2312()¶
utf8编码 转化为 gb2312编码
- 语法
common.utf8ToGb2312(utf8s)
- 参数
参数 | 释义 |
---|---|
utf8s | string, utf8编码数据 |
- 返回值
string data,gb2312编码数据
common.gb2312ToUtf8()¶
gb2312编码 转化为 utf8编码
- 语法
common.gb2312ToUtf8(gb2312s)
- 参数
参数 | 释义 |
---|---|
gb2312s | string, gb2312编码数据 |
- 返回值
string data,utf8编码数据
common.timeZoneConvert()¶
时区时间转换
- 语法
common.timeZoneConvert(y, m, d, hh, mm, ss, srcTimeZone, dstTimeZone)
- 参数
参数 | 释义 |
---|---|
y | number,源时区年份 |
m | number,源时区月份 |
d | number,源时区天 |
hh | number,源时区小时 |
mm | number,源时区分 |
ss | number,源时区秒 |
srcTimeZone | number,源时区 |
dstTimeZone | number,目的时区 |
- 返回值
table dstZoneTime,返回目的时区对应的时间,{year,month,day,hour,min,sec}
- 例子
local dstZoneTime = common.timeZoneConvert(2018,1,1,18,00,00,0,8)
--dstZoneTime为{year=2018,month=1,day=2,hour=2,min=0,sec=0}
gps¶
GPS模块管理
gps.open()¶
打开一个“GPS应用”
“GPS应用”:指的是使用GPS功能的一个应用
例如,假设有如下3种需求,要打开GPS,则一共有3个“GPS应用”:
“GPS应用1”:每隔1分钟打开一次GPS
“GPS应用2”:设备发生震动时打开GPS
“GPS应用3”:收到一条特殊短信时打开GPS
只有所有“GPS应用”都关闭了,才会去真正关闭GPS
每个“GPS应用”打开或者关闭GPS时,最多有4个参数,其中 GPS应用模式和GPS应用标记 共同决定了一个唯一的“GPS应用”:
1、GPS应用模式(必选)
2、GPS应用标记(必选)
3、GPS开启最大时长[可选]
4、回调函数[可选]
- 语法
gps.open(mode, para)
- 参数
参数 | 释义 |
---|---|
mode | number, GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种 |
para | table类型,GPS应用参数 para.tag:string类型,GPS应用标记 para.val:number类型,GPS应用开启最大时长,mode参数为gps.TIMERORSUC或者gps.TIMER时,此值才有意义 para.cb:GPS应用结束时的回调函数,回调函数的调用形式为para.cb(para.tag) |
- 返回值
nil
- 例子
gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb})
gps.open(gps.TIMERORSUC,{tag="TEST2",val=60,cb=test2Cb})
gps.open(gps.TIMER,{tag="TEST3",val=120,cb=test3Cb})
gps.close()¶
关闭一个“GPS应用” 只是从逻辑上关闭一个GPS应用,并不一定真正关闭GPS,是有所有的GPS应用都处于关闭状态,才回去真正关闭GPS
- 语法
gps.close(mode, para)
- 参数
参数 | 释义 |
---|---|
mode | number, GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种 |
para | table类型,GPS应用参数 para.tag:string类型,GPS应用标记 para.val:number类型,GPS应用开启最大时长,mode参数为gps.TIMERORSUC或者gps.TIMER时,此值才有意义;使用close接口时,不需要传入此参数 para.cb:GPS应用结束时的回调函数,回调函数的调用形式为para.cb(para.tag);使用close接口时,不需要传入此参数 |
- 返回值
nil
- 例子
--GPS应用模式和GPS应用标记唯一确定一个“GPS应用”,调用本接口关闭时,mode和para.tag要和gps.open打开一个“GPS应用”时传入的mode和para.tag保持一致
gps.close(gps.DEFAULT,{tag="TEST1"})
gps.close(gps.TIMERORSUC,{tag="TEST2"})
gps.close(gps.TIMER,{tag="TEST3"})
gps.closeAll()¶
关闭所有“GPS应用”
- 语法
gps.closeAll()
- 参数
无
- 返回值
无
gps.isActive()¶
判断一个“GPS应用”是否处于激活状态
- 语法
gps.isActive(mode, para)
- 参数
参数 | 释义 |
---|---|
mode | number, GPS应用模式,支持gps.DEFAULT,gps.TIMERORSUC,gps.TIMER三种 |
para | table类型,GPS应用参数 para.tag:string类型,GPS应用标记 para.val:number类型,GPS应用开启最大时长,mode参数为gps.TIMERORSUC或者gps.TIMER时,此值才有意义;使用isActive接口时,不需要传入此参数 para.cb:GPS应用结束时的回调函数,回调函数的调用形式为para.cb(para.tag);使用isActive接口时,不需要传入此参数 |
- 返回值
bool result,处于激活状态返回true,否则返回nil
- 例子
--GPS应用模式和GPS应用标记唯一确定一个“GPS应用”,调用本接口查询状态时,mode和para.tag要和gps.open打开一个“GPS应用”时传入的mode和para.tag保持一致
gps.isActive(gps.DEFAULT,{tag="TEST1"})
gps.isActive(gps.TIMERORSUC,{tag="TEST2"})
gps.isActive(gps.TIMER,{tag="TEST3"})
gps.setPowerCbFnc()¶
设置GPS模块供电控制的回调函数
如果使用的是Air800,或者供电控制使用的是LDO_VCAM,则打开GPS应用前不需要调用此接口进行设置
否则在调用gps.open前,使用此接口,传入自定义的供电控制函数cbFnc,GPS开启时,gps.lua自动执行cbFnc(true),GPS关闭时,gps.lua自动执行cbFnc(false)
- 语法
gps.setPowerCbFnc(cbFnc)
- 参数
参数 | 释义 |
---|---|
cbFnc | function类型,用户自定义的GPS供电控制函数 |
- 返回值
nil
gps.setUart()¶
设置GPS模块和GSM模块之间数据通信的串口参数
如果使用的是Air800,或者使用的UART2(波特率115200,数据位8,无检验位,停止位1),则打开GPS应用前不需要调用此接口进行设置
否则在调用gps.open前,使用此接口,传入UART参数
- 语法
gps.setUart(id, baudrate, databits, parity, stopbits)
- 参数
参数 | 释义 |
---|---|
id | number, UART ID,支持1和2,1表示UART1,2表示UART2 |
baudrate | number, 波特率,支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 |
databits | number, 数据位,支持7,8 |
parity | number, 校验位,支持uart.PAR_NONE,uart.PAR_EVEN,uart.PAR_ODD |
stopbits | number, 停止位,支持uart.STOP_1,uart.STOP_2 |
- 返回值
lua
gps.setUart(2,115200,8,uart.PAR_NONE,uart.STOP_1)
gps.setAerialMode()¶
设置GPS模块搜星模式. 如果使用的是Air800或者Air530,不调用此接口配置,则默认同时开启GPS和北斗定位
- 语法
gps.setAerialMode(gps, beidou, glonass, galieo)
- 参数
参数 | 释义 |
---|---|
gps | number,GPS定位系统,1是打开,0是关闭 |
beidou | number ,中国北斗定位系统,1是打开,0是关闭 |
glonass | number ,俄罗斯Glonass定位系统,1是打开,0是关闭 |
galieo | number ,欧盟伽利略定位系统,1是打开,0是关闭 |
- 返回值
nil
gps.setNmeaMode()¶
设置NMEA数据处理模式. 如果不调用此接口配置,则默认仅gps.lua内部处理NMEA数据
- 语法
gps.setNmeaMode(mode, cbFnc)
- 参数
参数 | 释义 |
---|---|
mode | number,NMEA数据处理模式,0表示仅gps.lua内部处理,1表示仅用户自己处理,2表示gps.lua和用户同时处理 |
cbFnc | function类型,用户处理一条NMEA数据的回调函数,mode为1和2时,此值才有意义 |
- 返回值
nil
gps.setRunMode()¶
设置GPS模块的运行模式. 如果不调用此接口配置,则默认为正常运行模式
- 语法
gps.setRunMode(mode, runTm, sleepTm)
- 参数
参数 | 释义 |
---|---|
mode | number,运行模式。 0:正常运行模式 1:周期超低功耗跟踪模式 2:周期低功耗模式 4:直接进入超低功耗跟踪模式 8:自动低功耗模式,可以通过串口唤醒 9:自动超低功耗跟踪模式,需要force on来唤醒 |
runTm | number,单位毫秒,mode为0时表示NEMA数据的上报间隔,mode为1或者2时表示运行时长,其余mode时此值无意义 |
sleepTm | number,单位毫秒,mode为1或者2时表示运行时长,其余mode时此值无意义 |
- 返回值
nil
gps.isOpen()¶
获取GPS模块是否处于开启状态
- 语法
gps.isOpen()
- 参数
无
- 返回值
bool result,true表示开启状态,false或者nil表示关闭状态
gps.isFix()¶
获取GPS模块是否定位成功
- 语法
gps.isFix()
- 参数
无
- 返回值
bool result,true表示定位成功,false或者nil表示定位失败
gps.getLocation()¶
获取度格式的经纬度信息
- 语法
gps.getLocation()
- 参数
无
- 返回值
table location
{ lngType="E",lng="121.123456",latType="N",lat="31.123456" }
lngType:string类型,表示经度类型,取值"E","W"
lng:string类型,表示度格式的经度值,无效时为""
latType:string类型,表示纬度类型,取值"N","S"
lat:string类型,表示度格式的纬度值,无效时为""
gps.getAltitude()¶
获取海拔
- 语法
gps.getAltitude()
- 参数
无
- 返回值
number altitude,海拔,单位米
gps.getSpeed()¶
获取速度
- 语法
gps.getSpeed()
- 参数
无
- 返回值
number kmSpeed,第一个返回值为公里每小时的速度
number nmSpeed,第二个返回值为海里每小时的速度
gps.getCourse()¶
获取方向角
- 语法
gps.getCourse()
- 参数
无
- 返回值
number course,方向角
gps.getViewedSateCnt()¶
获取可见卫星的个数
- 语法
gps.getViewedSateCnt()
- 参数
无
- 返回值
number count,可见卫星的个数
gps.getUsedSateCnt()¶
获取定位使用的卫星个数
- 语法
gps.getUsedSateCnt()
- 参数
无
- 返回值
number count,定位使用的卫星个数
gps.getGgaloc()¶
获取GGA语句中度分格式的经纬度信息
- 语法
gps.getGgaloc()
- 参数
无
- 返回值
string lng,度分格式的经度值(dddmm.mmmm),西经会添加一个-前缀,无效时为"";例如"12112.3456"表示东经121度12.3456分,"-12112.3456"表示西经121度12.3456分
string lat,度分格式的纬度值(ddmm.mmmm),南纬会添加一个-前缀,无效时为"";例如"3112.3456"表示北纬31度12.3456分,"-3112.3456"表示南纬31度12.3456分
gps.getUtcTime()¶
获取RMC语句中的UTC时间
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第一个参数设置为true
- 语法
gps.getUtcTime()
- 参数
无
- 返回值
table utcTime,UTC时间,nil表示无效,例如{year=2018,month=4,day=24,hour=11,min=52,sec=10}
gps.getSep()¶
获取定位使用的大地高
- 语法
gps.getSep()
- 参数
无
- 返回值
number sep,大地高
gps.getSateSn()¶
获取GSA语句中的可见卫星号
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第三个参数设置为true
- 语法
gps.getSateSn()
- 参数
无
- 返回值
string viewedSateId,可用卫星号,""表示无效
gps.getGsv()¶
获取GSV语句中的可见卫星的信噪比
只有同时满足如下两个条件,返回值才有效
1、开启了GPS,并且定位成功
2、调用setParseItem接口,第二个参数设置为true
- 语法
gps.getGsv()
- 参数
无
- 返回值
string gsv,信噪比
gps.setParseItem()¶
设置是否需要解析的字段
- 语法
gps.setParseItem([utcTime=nil][, gsv=nil][, gsaId=nil])
- 参数
参数 | 释义 |
---|---|
utcTime | bool,此参数可选,默认值为: nil,是否解析RMC语句中的UTC时间,true表示解析,false或者nil不解析 |
gsv | bool,此参数可选,默认值为: nil,是否解析GSV语句,true表示解析,false或者nil不解析 |
gsaId | bool,此参数可选,默认值为: nil,是否解析GSA语句中的卫星ID,true表示解析,false或者nil不解析 |
- 返回值
无
Fields¶
参数 | 释义 |
---|---|
DEFAULT | GPS应用模式1。 打开GPS后,GPS定位成功时,如果有回调函数,会调用回调函数。使用此应用模式调用gps.open打开的“GPS应用”,必须主动调用gps.close或者gps.closeAll才能关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数 |
TIMERORSUC | GPS应用模式2。 打开GPS后,如果在GPS开启最大时长到达时,没有定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用”。打开GPS后,如果在GPS开启最大时长内,定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用”。打开GPS后,在自动关闭此“GPS应用”前,可以调用gps.close或者gps.closeAll主动关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数。 |
TIMER | GPS应用模式3。 打开GPS后,在GPS开启最大时长时间到达时,无论是否定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“GPS应用” 。 打开GPS后,在自动关闭此“GPS应用”前,可以调用gps.close或者gps.closeAll主动关闭此“GPS应用”,主动关闭时,即使有回调函数,也不会调用回调函数 |
socket¶
数据链路激活、SOCKET管理(创建、连接、数据收发、状态维护)
socket.tcp()¶
创建基于TCP的socket对象
- 语法
socket.tcp([ssl=nil][, cert=nil])
- 参数
参数 | 释义 |
---|---|
ssl | bool,此参数可选,默认值为: nil,是否为ssl连接,true表示是,其余表示否 |
cert | table,此参数可选,默认值为: nil,ssl连接需要的证书配置,只有ssl参数为true时,才参数才有意义,cert格式如下: { caCert = "ca.crt", --CA证书文件(Base64编码 X.509格式),如果存在此参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = "client.crt", --客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = "client.key", --客户端私钥文件(Base64编码 X.509格式) clientPassword = "123456", --客户端证书文件密码[可选] } |
- 返回值
tcp对象
- 例子
c = socket.tcp()
c = socket.tcp(true)
c = socket.tcp(true, {caCert="ca.crt"})
c = socket.tcp(true, {caCert="ca.crt", clientCert="client.crt", clientKey="client.key"})
c = socket.tcp(true, {caCert="ca.crt",clientCert="client.crt",clientKey="client.key",clientPassword="123456"})
socket.udp()¶
创建基于UDP的socket对象
- 语法
socket.udp()
- 参数
无
- 返回值
udp对象
mt.__index:connect()¶
连接服务器
- 语法
mt.__index:connect (address, port)
- 参数
参数 | 释义 |
---|---|
address | string,服务器地址,支持ip和域名 |
port | string或者number类型,服务器端口 |
- 返回值
bool result true - 成功,false - 失败
- 例子
c = socket.tcp();
c:connect();
mt.__index:send()¶
发送数据
- 语法
mt.__index:send(data)
- 参数
参数 | 释义 |
---|---|
data | 数据 |
- 返回值
result true - 成功,false - 失败
- 例子
c = socket.tcp(); c:connect(); c:send("12345678");
mt.__index:recv()¶
接收数据
- 语法
mt.__index:recv([timeout=0])
- 参数
参数 | 释义 |
---|---|
timeout | number,此参数可选,默认值为: 0,可选参数,接收超时时间 |
- 返回值
result true - 成功,false - 失败
data 如果成功的话,返回接收到的数据,超时时返回错误为"timeout"
- 例子
c = socket.tcp(); c:connect(); result, data = c:recv()
mt.__index:close()¶
销毁一个socket
- 语法
mt.__index:close()
- 参数
无
- 返回值
nil
- 例子
c = socket.tcp(); c:connect(); c:send("123"); c:close()
socket.setTcpResendPara()¶
设置TCP层自动重传的参数
- 语法
socket.setTcpResendPara([retryCnt=4][, retryMaxTimeout=16])
- 参数
参数 | 释义 |
---|---|
retryCnt | number,[此参数可选,默认值为: 4],重传次数;取值范围0到12 |
retryMaxTimeout | number,[此参数可选,默认值为: 16],限制每次重传允许的最大超时时间(单位秒),取值范围1到16 |
- 返回值
nil
- 例子
socket.setTcpResendPara(3,8)
socket.setTcpResendPara(4,16)
Fields¶
参数 | 释义 |
---|---|
isReady | SOCKET 是否有可用 |
http¶
HTTP客户端
http.request()¶
发送HTTP请求
- 语法
http.request(method, url[, cert=nil][, head=nil][, body=nil][, timeout=30000][, cbFnc=nil][, rcvFileName=nil])
- 参数
参数 | 释义 |
---|---|
method | string,HTTP请求方法 支持"GET","HEAD","POST","OPTIONS","PUT","DELETE","TRACE","CONNECT" |
url | string, HTTP请求url。url格式(除hostname外,其余字段可选;目前的实现不支持hash) |
cert | table,此参数可选,默认值为: nil,table或者nil类型,ssl证书,当url为https类型时,此参数才有意义。cert格式如下: { caCert = "ca.crt", --CA证书文件(Base64编码 X.509格式),如果存在此参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = "client.crt", --客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = "client.key", --客户端私钥文件(Base64编码 X.509格式) clientPassword = "123456", --客户端证书文件密码[可选] } |
head | table,此参数可选,默认值为: nil,nil或者table类型,自定义请求头 http.lua会自动添加Host: XXX、Connection: short、Content-Length: XXX三个请求头 如果这三个请求头满足不了需求,head参数传入自定义请求头,如果自定义请求头中存在Host、Connection、Content-Length三个请求头,将覆盖http.lua中自动添加的同名请求头 head格式如下: 如果没有自定义请求头,传入nil或者{};否则传入{head1="value1", head2="value2", head3="value3"},value中不能有\r\n |
body | 此参数可选,默认值为: nil,nil、string或者table类型,请求实体。如果body仅仅是一串数据,可以直接传入一个string类型的body即可 如果body的数据比较复杂,包括字符串数据和文件,则传入table类型的数据,格式如下: { [1] = "string1", [2] = {file="/ldata/test.jpg"}, [3] = "string2" } 例如上面的这个body,索引必须为连续的数字(从1开始),实际传输时,先发送字符串"string1",再发送文件/ldata/test.jpg的内容,最后发送字符串"string2" |
timeout | number,此参数可选,默认值为: 30000。请求发送成功后,接收服务器返回应答数据的超时时间,单位毫秒,默认为30秒 |
cbFnc | function,此参数可选,默认值为: nil。 执行HTTP请求的回调函数(请求发送结果以及应答数据接收结果都通过此函数通知用户),回调函数的调用形式为: cbFnc(result,prompt,head,body) result:true或者false,true表示成功收到了服务器的应答,false表示请求发送失败或者接收服务器应答失败 prompt:string类型,result为true时,表示服务器的应答码;result为false时,表示错误信息 head:table或者nil类型,表示服务器的应答头;result为true时,此参数为{head1="value1", head2="value2", head3="value3"},value中不包含\r\n;result为false时,此参数为nil body:string类型,如果调用request接口时传入了rcvFileName,此参数表示下载文件的完整路径;否则表示接收到的应答实体数据 |
recFileName | string,此参数可选,默认值为: nil。 保存“服务器应答实体数据”的文件名,可以传入完整的文件路径,也可以传入单独的文件名,如果是文件名,http.lua会自动生成一个完整路径,通过cbFnc的参数body传出 |
- 返回值
string rcvFilePath,如果传入了rcvFileName,则返回对应的完整路径;其余情况都返回nil
- 例子
http.request("GET","www.lua.org",nil,nil,nil,30000,cbFnc)
http.request("GET","http://www.lua.org",nil,nil,nil,30000,cbFnc)
http.request("GET","http://www.lua.org:80",nil,nil,nil,30000,cbFnc,"download.bin")
http.request("GET","www.lua.org/about.html",nil,nil,nil,30000,cbFnc)
http.request("GET","www.lua.org:80/about.html",nil,nil,nil,30000,cbFnc)
http.request("GET","http://wiki.openluat.com/search.html?q=123",nil,nil,nil,30000,cbFnc)
http.request("POST","www.test.com/report.html",nil,{Head1="ValueData1"},"BodyData",30000,cbFnc)
http.request("POST","www.test.com/report.html",nil,{Head1="ValueData1",Head2="ValueData2"},{[1]="string1",[2] ={file="/ldata/test.jpg"},[3]="string2"},30000,cbFnc)
http.request("GET","https://www.baidu.com",{caCert="ca.crt"})
http.request("GET","https://www.baidu.com",{caCert="ca.crt",clientCert = "client.crt",clientKey = "client.key"})
http.request("GET","https://www.baidu.com",{caCert="ca.crt",clientCert = "client.crt",clientKey = "client.key",clientPassword = "123456"})
log¶
系统日志记录,分级别日志工具
log.trace()¶
输出trace级别的日志
- 语法
log.trace(tag,...)
- 参数
参数 | 释义 |
---|---|
tag | 模块或功能名称,作为日志前缀 |
... | 日志内容,可变参数 |
- 返回值
nil
- 例子
log.trace('moduleA', 'log content')
log.debug()¶
输出debug级别的日志
- 语法
log.debug(tag,...)
- 参数
参数 | 释义 |
---|---|
tag | 模块或功能名称,作为日志前缀 |
... | 日志内容,可变参数 |
- 返回值
nil
log.info()¶
输出info级别的日志
- 语法
log.info(tag,...)
- 参数
参数 | 释义 |
---|---|
tag | 模块或功能名称,作为日志前缀 |
... | 日志内容,可变参数 |
- 返回值
nil
log.warn()¶
输出warn级别的日志
- 语法
log.warn(tag,...)
- 参数
参数 | 释义 |
---|---|
tag | 模块或功能名称,作为日志前缀 |
... | 日志内容,可变参数 |
- 返回值
nil
log.error()¶
输出error级别的日志
- 语法
log.error(tag,...)
- 参数
参数 | 释义 |
---|---|
tag | 模块或功能名称,作为日志前缀 |
... | 日志内容,可变参数 |
- 返回值
nil
log.fatal()¶
输出fatal级别的日志
- 语法
log.fatal(tag,...)
- 参数
参数 | 释义 |
---|---|
tag | 模块或功能名称,作为日志前缀 |
... | 日志内容,可变参数 |
- 返回值
nil
log.openTrace()¶
开启或者关闭print的打印输出功能
- 语法
log.openTrace(v, uartid, baudrate)
- 参数
参数 | 释义 |
---|---|
v | bool,false或nil为关闭,其余为开启 |
uartid | 输出Luatrace的端口:nil表示host口,1表示uart1,2表示uart2 |
baudrate | number,number类型,uartid不为nil时,此参数才有意义,表示波特率,默认115200 \ 支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 |
- 返回值
nil
nvm¶
参数管理
nvm.init()¶
初始化参数存储模块
- 语法
nvm.init(defaultCfgFile)
- 参数
参数 | 释义 |
---|---|
defaultCfgFile | string,默认配置文件名 |
- 返回值
nil
- 例子
nvm.init("config.lua")
nvm.set()¶
设置某个参数的值
- 语法
nvm.set(k, v, r, s)
- 参数
参数 | 释义 |
---|---|
k | string,参数名 |
v | 可以是任意类型,参数的新值 |
r | 设置原因,如果传入了非nil的有效参数,并且v值和旧值相比发生了改变,会产生一个PARA_CHANGED_IND消息,携带 k,v,r 3个参数 |
s | 是否立即写入到文件系统中,false不写入,其余的都写入 |
- 返回值
bool或者nil,成功返回true,失败返回nil
- 例子
nvm.set("name","Luat") --参数name赋值为Luat,立即写入文件系统
nvm.set("age",12,"SVR") --参数age赋值为12,立即写入文件系统,如果旧值不是12,会产生一个PARA_CHANGED_IND消息,携带 "age",12,"SVR" 3个参数
nvm.set("class","Class2",nil,false) --参数class赋值为Class2,不写入文件系统
nvm.set("score",{chinese=100,math=99,english=98}) --参数score赋值为{chinese=100,math=99,english=98},立即写入文件系统
nvm.sett()¶
设置某个table类型参数的某一个索引的值
- 语法
nvm.sett(k, kk, v, r, s)
- 参数
参数 | 释义 |
---|---|
k | string,table类型的参数名 |
kk | table类型参数的某一个索引名 |
v | table类型参数的某一个索引的新值 |
r | 设置原因,如果传入了非nil的有效参数,并且v值和旧值相比发生了改变,会产生一个TPARA_CHANGED_IND消息,携带 k,kk,v,r 4个参数 |
s | 是否立即写入到文件系统中,false不写入,其余的都写入 |
- 返回值
bool或者nil,成功返回true,失败返回nil
- 例子
nvm.sett("score","chinese",100) --参数score["chinese"]赋值为100,立即写入文件系统
nvm.set("score","chinese",100,"SVR") --参数score["chinese"]赋值为100,立即写入文件系统,如果旧值不是100,会产生一个TPARA_CHANGED_IND消息,携带 "score","chinese",100,"SVR" 4个参数
nvm.set("score","chinese",100,nil,false) --参数class赋值为Class2,不写入文件系统
nvm.flush()¶
所有参数立即写入文件系统
- 语法
nvm.flush()
- 参数
无
- 返回值
nil
nvm.get()¶
读取某个参数的值
- 语法
nvm.get(k)
- 参数
参数 | 释义 |
---|---|
k | string,参数名 |
- 返回值
参数值
nvm.gett()¶
读取某个table类型参数的某一个索引的值
- 语法
nvm.gett(k,kk)
- 参数
参数 | 释义 |
---|---|
k | string,table类型的参数名 |
kk | table类型参数的某一个索引名 |
- 返回值
索引值
nvm.restore()¶
参数恢复出厂设置
- 语法
nvm.restore()
- 参数
无
- 返回值
nil
ntp¶
网络授时
ntp.getServers()¶
获取NTP服务器地址列表
- 语法
ntp.getServers()
- 参数
无
- 返回值
table,服务器地址列表
ntp.setServers()¶
设置NTP服务器地址列表
- 语法
ntp.setServers(st)
- 参数
参数 | 释义 |
---|---|
st | table类型,服务器地址列表 |
- 返回值
无
- 例子
ntp.getServers({"1edu.ntp.org.cn","cn.ntp.org.cn"})
ntp.isEnd()¶
NTP同步标志
- 语法
ntp.isEnd()
- 参数
无
- 返回值
boole,NTP的同步状态true为成功,fasle为失败
ntp.ntpTime()¶
同步时间,每个NTP服务器尝试3次,超时8秒,适用于被任务函数调用
- 语法
ntp.ntpTime(ts, fnc)
- 参数
参数 | 释义 |
---|---|
ts | 每隔ts小时同步1次 |
fnc | 同步成功后回调函数 |
- 返回值
无
- 例子
ntp.ntpTime() -- 只同步1次
ntp.ntpTime(1) -- 1小时同步1次
ntp.ntpTime(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.ntpTime(24,fnc) -- 24小时同步1次,同步成功后执行fnc()
link¶
模块功能:数据链路激活(创建、连接、状态维护)
Fields¶
状态 | 释义 |
---|---|
IP_READY_IND | IP数据阶段 |
wdt¶
外部硬件看门狗
wdt.setup()¶
配置模块与看门狗通讯IO并启动任务
- 语法
wdt.setup(rst,wd)
- 参数
参数 | 释义 |
---|---|
rst | 模块复位单片机引脚(pio.P0_31) |
wd | 模块和单片机相互喂狗引脚(pio.P0_29) |
- 返回值
无
clib¶
完善luat的c库接口
uart.on()¶
注册串口事件的处理函数
- 语法
uart.on(id, event[, callback=nil])
- 参数
参数 | 释义 |
---|---|
id | number,串口ID: 1表示串口1,2表示串口2,uart.ATC表示虚拟AT口 |
event | string。 串口事件: "recieve"表示串口收到数据 注意:使用uart.setup配置串口时,第6个参数设置为nil或者0,收到数据时,才会产生"receive"事件 "sent"表示串口数据发送完成,注意:使用uart.setup配置串口时,第7个参数设置为1,调用uart.write接口发送数据之后,才会产生"sent"事件 |
callback | function,串口事件的处理函数 |
- 返回值
nil
- 例子
uart.on(1,"receive",rcvFnc)
uart.on(1,"sent",sentFnc)
pb¶
电话簿管理
pb.setStorage()¶
设置电话本存储区域
- 语法
pb.setStorage(storage, cb)
- 参数
参数 | 释义 |
---|---|
storage | string,存储区域字符串,仅支持"ME"和"SM" |
cb | 设置后的回调函数, 回调方式为cb(result),result为true表示成功,false或者nil表示失败 |
- 返回值
无
pb.read()¶
读取一条电话本记录
- 语法
pb.read(index, cb)
- 参数
参数 | 释义 |
---|---|
index | number,电话本在存储区的位置 |
cb | function,读取后的回调函数, 回调方式为cb(result,name,number):result为true表示成功,false或者nil表示失败;name为姓名;number为号码 |
- 返回值
无
pb.write()¶
写入一条电话本记录
- 语法
pb.write(index, name, num, cb)
- 参数
参数 | 释义 |
---|---|
index | number,电话本在存储区的位置 |
name | string,姓名 |
num | string,号码 |
cb | function,写入后的回调函数。 回调方式为cb(result):result为true表示成功,false或者nil表示失败 |
- 返回值
无
- 例子
pb.write(1,"zhangsan","13233334444",cb)
pb.delete()¶
删除一条电话本记录
- 语法
pb.delete(index,cb)
- 参数
参数 | 释义 |
---|---|
index | number,电话本在存储区的位置 |
cb | function,删除后的回调函数。 回调方式为cb(result):result为true表示成功,false或者nil表示失败 |
- 返回值
无
console¶
Luat控制台
console.setup()¶
配置控制台使用的串口参数,创建控制台协程
- 语法
console.setup(id[, baudrate=115200])
- 参数
参数 | 释义 |
---|---|
id | number,控制台使用的串口ID:1表示串口1,2表示串口2 |
baudrate | number,此参数可选,默认值为: 115200。控制台使用的串口波特率 支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 |
- 返回值
nil
mqtt¶
MQTT客户端
mqtt.client()¶
创建一个mqtt client实例
- 语法
mqtt.client(clientId[, keepAlive=300][, username=""][, password=""][, cleanSession=1][, will={flag=0])
- 参数
参数 | 释义 |
---|---|
clientId | string,客户端号 |
keepAlive | number,此参数可选,默认值为: 300。心跳间隔(单位为秒),默认300秒 |
username | string,此参数可选,默认值为: ""。用户名,用户名为空配置为""或者nil |
password | string,此参数可选,默认值为: ""。密码,密码为空配置为""或者nil |
cleanSession | number,此参数可选,默认值为: 1。1/0 |
will | table,此参数可选,默认值为: {flag=0}。遗嘱参数,格式为{qos=, retain=, topic=, payload=} |
- 返回值
table mqttc client实例
- 例子
mqttc = mqtt.client("clientid-123")
mqttc = mqtt.client("clientid-123",200)
mqttc = mqtt.client("clientid-123",nil,"user","password")
mqttc:connect()¶
连接mqtt服务器
- 语法
mqttc:connect(host, port[, transport="tcp"][, cert=nil])
- 参数
参数 | 释义 |
---|---|
host | string, 服务器地址 |
port | string或者number类型,服务器端口 |
transport | string,此参数可选,默认值为: "tcp"。"tcp"或者"tcp_ssl" |
cert | table,此参数可选,默认值为: nil。table或者nil类型,ssl证书,当transport为"tcp_ssl"时,此参数才有意义。 cert格式如下: { caCert = "ca.crt", --CA证书文件(Base64编码 X.509格式),如果存在此参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = "client.crt", --客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = "client.key", --客户端私钥文件(Base64编码 X.509格式) clientPassword = "123456", --客户端证书文件密码[可选] } |
- 返回值
result true表示成功,false或者nil表示失败
- 例子
mqttc = mqtt.client("clientid-123", nil, nil, false); mqttc:connect("mqttserver.com", 1883, "tcp")
mqttc:subscribe()¶
订阅主题
- 语法
mqttc:subscribe(topic[, qos=0])
- 参数
参数 | 释义 |
---|---|
topic | string或者table类型,一个主题时为string类型,多个主题时为table类型,主题内容为UTF8编码 |
qos | 此参数可选,默认值为: 0。number或者nil,topic为一个主题时,qos为number类型(0/1/2,默认0);topic为多个主题时,qos为nil |
- 返回值
bool true表示成功,false或者nil表示失败
- 例子
mqttc:subscribe("/abc", 0) -- subscribe topic "/abc" with qos = 0
mqttc:subscribe({["/topic1"] = 0, ["/topic2"] = 1, ["/topic3"] = 2}) -- subscribe multi topic
mqttc:publish()¶
发布一条消息
- 语法
mqttc:publish(topic, payload[, qos=0][, retain=0])
- 参数
参数 | 释义 |
---|---|
topic | string,UTF8编码的字符串 |
payload | string,用户自己控制payload的编码,mqtt.lua不会对payload做任何编码转换 |
qos | number,此参数可选,默认值为: 0。0/1/2, default 0 |
retain | number,此参数可选,默认值为: 0。0或者1 |
- 返回值
bool 发布成功返回true,失败返回false
- 例子
mqttc = mqtt.client("clientid-123", nil, nil, false)
mqttc:connect("mqttserver.com", 1883, "tcp")
mqttc:publish("/topic", "publish from luat mqtt client", 0)
mqttc:receive()¶
接收消息
- 语法
mqttc:receive(timeout)
- 参数
参数 | 释义 |
---|---|
timeout | number, 超时间隔,单位毫秒 |
- 返回值
result 接收结果,true表示成功,false表示失败
data
如果成功返回的时候接收到的服务器发过来的包
如果失败返回的是错误信息,如果是超时失败,返回"timeout"
mqttc:disconnect ()¶
断开与服务器的连接
- 语法
mqttc:disconnect()
- 参数
无
- 返回值
nil
- 例子
mqttc = mqtt.client("clientid-123", nil, nil, false)
mqttc:connect("mqttserver.com", 1883, "tcp")
--process data
mqttc:disconnect()
errDump¶
系统错误日志管理(强烈建议用户开启此模块的“错误日志上报调试服务器”功能).
错误日志包括三种:
1、系统主任务运行时的错误日志
此类错误会导致软件重启,错误日志保存在/luaerrinfo.txt文件中
2、调用sys.taskInit创建的协程运行过程中的错误日志
此类错误会终止当前协程的运行,但是不会导致软件重启,错误日志保存在/lib_err.txt中
3、调用errDump.appendErr或者sys.restart接口保存的错误日志
此类错误日志保存在/lib_err.txt中
其中2和3保存的错误日志,最多支持5K字节
每次上报错误日志给调试服务器之后,会清空已保存的日志
errDump.appendErr()¶
追加错误信息到LIB_ERR_FILE文件中(文件最多允许存储5K字节的数据)
- 语法
errDump.appendErr(s)
- 参数
参数 | 释义 |
---|---|
s | string,用户自定义的错误信息,errDump功能模块会对此错误信息做如下处理: 1、重启后会通过Luat下载调试工具输出,在trace中搜索errDump.libErr,可以搜索到错误信息 2、如果用户调用errDump.request接口设置了错误信息要上报的调试服务器地址和端口,则每次重启会自动上报错误信息到调试服务器 3、如果用户调用errDump.request接口设置了定时上报,则定时上报时会上报错误信息到调试服务器 其中第2和第3种情况,上报成功后,会自动清除错误信息 |
- 返回值
bool result,true表示成功,false或者nil表示失败
- 例子
errDump.appendErr("net working timeout!")
errDump.request()¶
配置调试服务器地址,启动错误信息上报给调试服务器的功能,上报成功后,会清除错误信息
- 语法
errDump.request(addr[, period=600000)
- 参数
参数 | 释义 |
---|---|
addr | string。 1、如果调试服务器使用http协议,终端将采用POST命令,把错误信息上报到addr指定的URL中,addr的格式如下 (除protocol和hostname外,其余字段可选;目前的实现不支持hash)。 2、如果调试服务器使用udp协议,终端将错误信息,直接上报给调试服务器,调试服务器收到信息后,要回复大写的OK; 3、如果调试服务器使用tcp协议,终端将错误信息,直接上报给调试服务器; |
period | number,此参数可选,默认值为: 600000。单位毫秒,定时检查错误信息并上报的间隔 |
- 返回值
bool result,成功返回true,失败返回nil
- 例子
errDump.request("http://www.user_server.com/errdump")
errDump.request("udp://www.user_server.com:8081")
errDump.request("tcp://www.user_server.com:8082")
errDump.request("tcp://www.user_server.com:8082",6*3600*1000)
lbsLoc¶
根据基站信息查询经纬度
lbsLoc.request()¶
发送根据基站查询经纬度请求(仅支持中国区域的位置查询)
- 语法
lbsLoc.request(cbFnc[, reqAddr=nil][, timeout=20000][, productKey=nil][, host=nil][, port=nil][, reqTime=nil])
- 参数
参数 | 释义 |
---|---|
cbFnc | function,用户回调函数,回调函数的调用形式为: cbFnc(result,lat,lng,addr) result:number类型,0表示成功,1表示网络环境尚未就绪,2表示连接服务器失败,3表示发送数据失败,4表示接收服务器应答超时,5表示服务器返回查询失败;为0时,后面的3个参数才有意义 lat:string类型或者nil,纬度,整数部分3位,小数部分7位,例如"031.2425864" lng:string类型或者nil,经度,整数部分3位,小数部分7位,例如"121.4736522" addr:string类型,UCS2大端编码的位置字符串。调用lbsLoc.request时传入的第二个参数为true时,才返回本参数 |
reqAddr | bool,此参数可选,默认值为: nil。是否需要服务器返回地址字符串信息,true返回,false或者nil不返回 |
timeout | number,此参数可选,默认值为: 20000。请求超时时间,单位毫秒,默认20000毫秒 |
productKey | string,此参数可选,默认值为: nil。IOT网站上的产品证书,此参数可选,用户如果在main.lua中定义了PRODUCT_KEY变量,就不需要传入此参数 |
host | string,此参数可选,默认值为: nil。服务器域名,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数 |
port | string,此参数可选,默认值为: nil。服务器端口,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数 |
reqTime | bool,此参数可选,默认值为: nil。是否需要服务器返回时间信息,true返回,false或者nil不返回,此参数可选,目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数 |
- 返回值
nil
- 例子
lbsLoc.request(cbFnc)
lbsLoc.request(cbFnc,true)
lbsLoc.request(cbFnc,nil,20000)
net¶
网络管理、信号查询、GSM网络状态查询、网络指示灯控制、临近小区信息查询
net.switchFly()¶
设置飞行模式
- 语法
net.switchFly(mode)
- 参数
参数 | 释义 |
---|---|
mode | bool值,true:飞行模式开,false:飞行模式关 |
- 返回值
nil
net.getState()¶
获取GSM网络注册状态
- 语法
net.getState()
- 参数
无
- 返回值
string state,GSM网络注册状态,
"INIT"表示正在初始化
"REGISTERED"表示已注册
"UNREGISTER"表示未注册
net.getMcc()¶
获取当前小区的mcc
- 语法
net.getMcc()
- 参数
无
- 返回值
string mcc,当前小区的mcc,如果还没有注册GSM网络,则返回sim卡的mcc
net.getMnc()¶
获取当前小区的mnc
- 语法
net.getMnc()
- 参数
无
- 返回值
string mcn,当前小区的mnc,如果还没有注册GSM网络,则返回sim卡的mnc
net.getLac()¶
获取当前位置区ID
- 语法
net.getLac()
- 参数
无
- 返回值
string lac,当前位置区ID(16进制字符串,例如"18be"),如果还没有注册GSM网络,则返回""
net.getCi()¶
获取当前小区ID
- 语法
net.getCi()
- 参数
无
- 返回值
string ci,当前小区ID(16进制字符串,例如"93e1"),如果还没有注册GSM网络,则返回""
net.getRssi()¶
获取信号强度
- 语法
net.getRssi()
- 参数
无
- 返回值
number rssi,当前信号强度(取值范围0-31)
net.getCellInfo()¶
获取当前和临近位置区、小区以及信号强度的拼接字符串
- 语法
net.getCellInfo()
- 参数
无
- 返回值
string cellInfo,当前和临近位置区、小区以及信号强度的拼接字符串,例如:"6311.49234.30;6311.49233.23;6322.49232.18;"
net.getCellInfoExt()¶
获取当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串
- 语法
net.getCellInfoExt()
- 参数
无
- 返回值
string cellInfo,当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串,例如:"460.01.6311.49234.30;460.01.6311.49233.23;460.02.6322.49232.18;"
net.getTa()¶
获取TA值
- 语法
net.getTa()
- 参数
无
- 返回值
number ta,TA值
net.getMultiCell()¶
实时读取“当前和临近小区信息”
- 语法
net.getMultiCell(cbFnc)
- 参数
参数 | 释义 |
---|---|
cbFnc | function,回调函数,当读取到小区信息后,会调用此回调函数,回调函数的调用形式为: cbFnc(cells),其中cells为string类型,格式为:当前和临近位置区、小区、mcc、mnc、以及信号强度的拼接字符串,例如:"460.01.6311.49234.30;460.01.6311.49233.23;460.02.6322.49232.18;" |
- 返回值
nil
net.cengQueryPoll()¶
发起查询基站信息(当前和临近小区信息)的请求
- 语法
net.cengQueryPoll(period)
- 参数
参数 | 释义 |
---|---|
period | number,查询间隔,单位毫秒 |
- 返回值
bool result, true:查询成功,false:查询失败
net.csqQueryPoll()¶
发起查询信号强度的请求
- 语法
net.csqQueryPoll(period)
- 参数
参数 | 释义 |
---|---|
period | number,查询间隔,单位毫秒 |
- 返回值
bool , true:查询成功,false:查询停止
net.startQueryAll()¶
查询信号强度和基站信息(飞行模式,简单模式会返回查询失败)
- 语法
net.startQueryAll(...)
- 参数
参数 | 释义 |
---|---|
... | number,查询周期,参数可变,参数为nil只查询1次,参数1是信号强度查询周期,参数2是基站查询周期 |
- 返回值
bool ,true:查询成功,false:查询失败
- 例子
net.startQueryAll()
net.startQueryAll(60000) -- 6分钟查询1次信号强度和基站信息
net.startQueryAll(60000,600000) -- 1分钟查询1次信号强度,10分钟查询1次基站信息
net.stopQueryAll()¶
停止查询信号强度和基站信息
- 语法
net.stopQueryAll()
- 参数
无
- 返回值
无
Fileds¶
状态 | 释义 |
---|---|
NET_STATE_REGISTERED | GSM网络注册成功 |
GSM_SIGNAL_REPORT_IND | 读取到了信号强度 |
NET_STATE_UNREGISTER | GSM网络注册失败 |
netLed¶
网络指示灯模块
netLed.setup()¶
配置网络指示灯并且立即执行配置后的动作
- 语法
netLed.setup(flag,pin)
- 参数
参数 | 释义 |
---|---|
flag | bool, 是否打开网络指示灯功能,true为打开,false为关闭 |
pin | number,控制网络指示灯闪烁的GPIO引脚,例如pio.P1_1表示GPIO33 |
- 返回值
nil
- 例子
netLed.setup(true,pio.P1_1) --表示打开网络指示灯功能,GPIO33控制指示灯
netLed.setup(false) --表示关闭网络指示灯功能
netLed.updateBlinkTime()¶
配置某种工作状态下指示灯点亮和熄灭的时长(如果用户不配置,使用netLed.lua中ledBlinkTime配置的默认值)
- 语法
netLed.updateBlinkTime(state, on, off)
- 参数
参数 | 释义 |
---|---|
state | String,某种工作状态,仅支持"FLYMODE"、"SIMERR"、"IDLE"、"GSM"、"GPRS"、"SCK" |
on | number,指示灯点亮时长,单位毫秒,0xFFFF表示常亮,0表示常灭 |
off | number,指示灯熄灭时长,单位毫秒,0xFFFF表示常灭,0表示常亮 |
- 返回值
nil
- 例子
netLed.updateBlinkTime("FLYMODE",1000,500) --表示飞行模式工作状态下,指示灯闪烁规律为:亮1秒,灭0.5秒
netLed.updateBlinkTime("SCK",0xFFFF,0) --表示有socket连接上后台的工作状态下,指示灯闪烁规律为:常亮
netLed.updateBlinkTime("SIMERR",0,0xFFFF) --表示SIM卡异常状态下,指示灯闪烁规律为:常灭
ntp¶
模块功能:网络授时
重要提醒!!!!!!
本功能模块采用多个免费公共的NTP服务器来同步时间
并不能保证任何时间任何地点都能百分百同步到正确的时间
所以,如果用户项目中的业务逻辑严格依赖于时间同步功能
则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间.
ntp.getServers()¶
获取NTP服务器地址列表
- 语法
ntp.getServers()
- 参数
无
- 返回值
table,服务器地址列表
ntp.setServers()¶
设置NTP服务器地址列表
- 语法
ntp.setServers(st)
- 参数
参数 | 释义 |
---|---|
st | tab类型,服务器地址列表 |
- 返回值
无
- 例子
ntp.getServers({"1edu.ntp.org.cn","cn.ntp.org.cn"})
ntp.isEnd()¶
NTP同步标志
- 语法
ntp.isEnd()
- 参数
无
- 返回值
boole,NTP的同步状态true为成功,fasle为失败
ntp.ntpTime()¶
同步时间,每个NTP服务器尝试3次,超时8秒,适用于被任务函数调用
- 语法
ntp.ntpTime(ts, fnc)
- 参数
参数 | 释义 |
---|---|
ts | 每隔ts小时同步1次 |
fnc | 同步成功后回调函数 |
- 返回值
无
- 例子
ntp.ntpTime() -- 只同步1次
ntp.ntpTime(1) -- 1小时同步1次
ntp.ntpTime(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.ntpTime(24,fnc) -- 24小时同步1次,同步成功后执行fnc()
ntp.timeSync()¶
自动同步时间任务适合独立执行.
重要提醒!!!!!!
本功能模块采用多个免费公共的NTP服务器来同步时间
并不能保证任何时间任何地点都能百分百同步到正确的时间
所以,如果用户项目中的业务逻辑严格依赖于时间同步功能
则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间
- 语法
ntp.timeSync(ts, fnc)
- 参数
参数 | 释义 |
---|---|
ts | 每隔ts小时同步1次 |
fnc | 同步成功后回调函数 |
- 返回值
无
- 例子
ntp.timeSync() -- 只同步1次
ntp.timeSync(1) -- 1小时同步1次
ntp.timeSync(nil,fnc) -- 只同步1次,同步成功后执行fnc()
ntp.timeSync(24,fnc) -- 24小时同步1次,同步成功后执行fnc()
Fileds¶
状态 | 释义 |
---|---|
NTP_SUCCEED | NTP同步成功 |
utils¶
常用工具类接口
string.toHex()¶
字符转16进制,如"123abc"转为"313233616263"
- 语法
string.toHex(str[, separator=""])
- 参数
参数 | 释义 |
---|---|
str | string,输入字符串。 |
separator | string,此参数可选,默认值为: ""。输出的16进制字符串分隔符 |
- 返回值
hexstring 16进制组成的串
len 输入的字符串长度
- 例子
string.toHex("\1\2\3") -- "010203" 3
string.toHex("123abc") -- "313233616263" 6
string.toHex("123abc"," ") -- "31 32 33 61 62 63 " 6
string.fromHex()¶
16进制转字符,如"313233616263"转为"123abc", 函数里加入了过滤分隔符,可以过滤掉大部分分隔符(可参见正则表达式中\s和\p的范围)。
- 语法
string.fromHex(hex)
- 参数
参数 | 释义 |
---|---|
hex | string, 16进制组成的串 |
- 返回值
charstring,字符组成的串
len,输出字符串的长度
- 例子
string.fromHex("010203") -- "\1\2\3"
string.fromHex("313233616263:) -- "123abc"
string.utf8Len()¶
返回utf8编码字符串的长度
- 语法
string.utf8Len(str)
- 参数
参数 | 释义 |
---|---|
str | string,utf8编码的字符串,支持中文 |
- 返回值
number,返回字符串长度
- 例子
local cnt = string.utf8Len("中国") --str = 2
string.urlEncode()¶
返回字符串的urlEncode编码
- 语法
string.urlEncode(str)
- 参数
参数 | 释义 |
---|---|
str | string,要转换编码的字符串 |
- 返回值
str,urlEncode编码的字符串
- 例子
string.urlEncode("####133")
string.formatNumberThousands()¶
返回数字的千位符号格式
- 语法
string.formatNumberThousands(num)
- 参数
参数 | 释义 |
---|---|
num | number,数字 |
- 返回值
string,千位符号的数字字符串
- 例子
loca s = string.formatNumberThousands(1000) --s = "1,000"
string.split()¶
按照指定分隔符分割字符串
- 语法
string.split(str, delimiter)
- 参数
参数 | 释义 |
---|---|
str | string,输入字符串 |
delimiter | string,分隔符 |
- 返回值
分割后的字符串列表
- 例子
"123,456,789":split(',') -- {'123','456','789'}
io.exists()¶
判断文件是否存在
- 语法
io.exists(path)
- 参数
参数 | 释义 |
---|---|
path | string,文件全名例如:"/ldata/call.mp3" |
- 返回值
boole,存在为true,不存在为false
- 例子
local ex = io.exists("/ldata/call.mp3")
io.readFile()¶
读取文件并返回文件的内容
- 语法
io.readFile(path)
- 参数
参数 | 释义 |
---|---|
path | string,文件全名例如:"/ldata/call.txt" |
- 返回值
string,文件的内容,文件不存在返回nil
io.writeFile()¶
写入文件指定的内容,默认为覆盖二进制模式
- 语法
io.writeFile(path, content, mode)
- 参数
参数 | 释义 |
---|---|
path | string,文件全名例如:"/ldata/call.txt" |
content | string,文件内容 |
mode | string,文件写入模式默认"w+b" |
- 返回值
string,文件的内容
- 例子
local c = io.writeFile("/ldata/call.txt","test")
io.pathInfo()¶
将文件路径分解为table信息
- 语法
io.pathInfo(path)
- 参数
按时 | 释义 |
---|---|
path | string,文件路径全名例如:"/ldata/call.txt" |
- 返回值
table,{dirname="/ldata/",filename="call.txt",basename="call",extname=".txt"}
io.fileSize()¶
返回文件大小
- 语法
io.fileSize(path)
- 参数
参数 | 释义 |
---|---|
path | string,文件路径全名例如:"/ldata/call.txt" |
- 返回值
number ,文件大小
pins¶
GPIO 功能配置,包括输入输出IO和上升下降沿中断IO
pins.setup()¶
配置GPIO模式
- 语法
pins.setup(pin, val)
- 参数
参数 | 释义 |
---|---|
pin | number,GPIO ID。 GPIO 0到GPIO 31表示为pio.P0_0到pio.P0_31 。 GPIO 32到GPIO XX表示为pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示为pio.P1_1 |
val | number、nil或者function类型。 配置为输出模式时,为number类型,表示默认电平,0是低电平,1是高电平 。 配置为输入模式时,为nil 。 配置为中断模式时,为function类型,表示中断处理函数 |
- 返回值
function
配置为输出模式时,返回的函数,可以设置IO的电平
配置为输入或者中断模式时,返回的函数,可以实时获取IO的电平
- 例子
setOutputFnc = pins.setup(pio.P1_1,0) --[[配置GPIO 33,输出模式,默认输出低电平;
执行setOutputFnc(0)可输出低电平,执行setOutputFnc(1)可输出高电平 ]]--
getInputFnc = pins.setup(pio.P1_1,intFnc) --[[配置GPIO33,中断模式
产生中断时自动调用intFnc(msg)函数:上升沿中断时:msg为cpu.INT_GPIO_POSEDGE;下降沿中断时:msg为cpu.INT_GPIO_NEGEDGE
执行getInputFnc()即可获得当前电平;如果是低电平,getInputFnc()返回0;如果是高电平,getInputFnc()返回1]]--
getInputFnc = pins.setup(pio.P1_1) --[[配置GPIO33,输入模式
执行getInputFnc()即可获得当前电平;如果是低电平,getInputFnc()返回0;如果是高电平,getInputFnc()返回1]]--
pins.close()¶
关闭GPIO模式
- 语法
pins.close(pin)
- 参数
参数 | 释义 |
---|---|
pin | number,GPIO ID GPIO 0到GPIO 31表示为pio.P0_0到pio.P0_31 。 GPIO 32到GPIO XX表示为pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示为pio.P1_1 |
- 返回值
nil
- 例子
pins.close(pio.P1_1) --关闭GPIO33
update¶
远程升级
update.request()¶
启动远程升级功能
- 语法
update.request(cbFnc, url, period)
- 参数
参数 | 释义 |
---|---|
cbFnc | function,可选,每次执行远程升级功能后的回调函数,回调函数的调用形式为: cbFnc(result),result为true表示升级包下载成功,其余表示下载失败 如果没有设置此参数,则升级包下载成功后,会自动重启 |
url | string,可选,使用http的get命令下载升级包的url,如果没有设置此参数,默认使用Luat iot平台的url 如果用户设置了url。 注意:仅传入完整url的前半部分(如果有参数,即传入?前一部分),http.lua会自动添加?以及后面的参数。 例如: 设置的url="www.userserver.com/api/site/firmware_upgrade",则http.lua会在此url后面补充下面的参数 "?project_key="..G.PRODUCT_KEY .."&imei="..misc.getimei() .."&device_key="..misc.getsn() .."&firmware_name=".._G.PROJECT..""..rtos.get_version().."&version=".._G.VERSION |
period | number, 可选,单位毫秒,定时启动远程升级功能的间隔,如果没有设置此参数,仅执行一次远程升级功能 |
- 返回值
nil
- 例子
update.request()
update.request(cbFnc)
update.request(cbFnc,"www.userserver.com/update")
update.request(cbFnc,nil,4*3600*1000)
pm¶
休眠管理
pm.wake()¶
某个Lua应用唤醒系统
- 语法
pm.wake(tag)
- 参数
参数 | 释义 |
---|---|
tag | string类型,某个Lua应用的唤醒标记,用户自定义 |
- 返回值
nil
pm.sleep()¶
某个Lua应用休眠系统
- 语法
pm.sleep(tag)
- 参数
参数 | 释义 |
---|---|
tag | string类型,某个Lua应用的唤醒标记,用户自定义,跟wake中的标记保持一致 |
- 返回值
无
pm.isSleep()¶
pm.isSleep([tag]) 读取某个Lua应用或者全局的休眠状态
- 语法
pm.isSleep(tag)
- 参数
参数 | 释义 |
---|---|
tag | 可选参数,如果查询某个tag的休眠状态,则跟wake中的tag保持一致;如果查询全局休眠状态,则不需要这个参数 |
- 返回值
true休眠,其余没休眠
- 例子
pm.isSleep() -- 查询全局休眠状态
pm.isSleep('lcd') -- 查询lcd的休眠状态
record¶
录音处理
record.start()¶
开始录音
- 语法
record.start(seconds, cb)
- 参数
参数 | 释义 |
---|---|
seconds | 录音时长,单位:秒 |
cb | 录音结果回调 |
- 返回值
result true - 开始录音 其他 - 失败
record.stop()¶
停止录音
- 语法
record.stop()
- 参数
无
- 返回值
无
record.getFilePath()¶
读取录音文件的完整路径
- 语法
record.getFilePath()
- 参数
无
- 返回值
string 录音文件的完整路径
record.getData()¶
读取录音数据
- 语法
record.getData(offset, len)
- 参数
参数 | 释义 |
---|---|
offset | 偏移位置 |
len | 长度 |
- 返回值
data 录音数据
record.getSize()¶
读取录音文件总长度,录音时长
- 语法
record.getSize()
- 参数
无
- 返回值
fileSize 录音文件大小
duration 录音时长
record.exists ()¶
判断是否存在录音
- 语法
record.exists()
- 参数
无
- 返回值
result true - 有录音 false - 无录音
record.isBusy()¶
是否正在处理录音
- 语法
record.isBusy()
- 参数
无
- 返回值
result true - 正在处理 false - 空闲
sms¶
短信功能
sms.send()¶
发送短信
- 语法
sms.send(num, data, cbFnc, idx)
- 参数
参数 | 释义 |
---|---|
num | string,短信接收方号码,ASCII码字符串格式 |
data | string,短信内容,GB2312编码的字符串 |
cbFnc | function, 短信发送结果异步返回时使用的回调函数,可选 |
idx | number,插入短信发送缓冲表的位置,可选,默认是插入末尾 |
- 返回值
nil
sms.setNewSmsCb()¶
设置新短信的用户处理函数
- 语法
sms.setNewSmsCb(cbFnc)
- 参数
参数 | 释义 |
---|---|
cbFnc | function, 新短信的用户处理函数 |
- 返回值
nil
misc¶
模块功能:配置管理-序列号、IMEI、底层软件版本号、时钟、是否校准、飞行模式、查询电池电量等功能
misc.setClock()¶
设置系统时间
- 语法
misc.setClock(t)
- 参数
参数 | 释义 |
---|---|
t | table,系统时间,格式参考:{year=2017,month=2,day=14,hour=14,min=2,sec=58} |
- 返回值
无
- 例子
misc.setClock({year=2017,month=2,day=14,hour=14,min=2,sec=58})
misc.getClock()¶
获取系统时间
- 语法
misc.getClock()
- 参数
无
- 返回值
table time,{year=2017,month=2,day=14,hour=14,min=19,sec=23}
misc.getWeek()¶
获取星期
- 语法
misc.getWeek()
- 参数
无
- 返回值
number week,1-7分别对应周一到周日
misc.getCalib()¶
获取校准标志
- 语法
misc.getCalib()
- 参数
无
- 返回值
bool calib, true表示已校准,false或者nil表示未校准
misc.setSn()¶
设置SN
- 语法
misc.setSn(s,cbFnc)
- 参数
参数 | 释义 |
---|---|
s | string, 新sn的字符串 |
cbFnc | function ,此参数可选,默认值为: nil。设置结果回调函数,回调函数的调用形式为:cnFnc(result),result为true表示成功,false或者nil为失败 |
- 返回值
nil
misc.getSn()¶
获取模块序列号
- 语法
misc.getSn()
- 参数
无
- 返回值
string sn,序列号,如果未获取到返回""
注意:开机lua脚本运行之后,会发送at命令去查询sn,所以需要一定时间才能获取到sn。开机后立即调用此接口,基本上返回""
misc.setImei()¶
设置IMEI
- 语法
misc.setImei(s[, cbFnc=nil])
- 参数
参数 | 释义 |
---|---|
s | string,新IMEI字符串 |
cbFnc | function,此参数可选,默认值为: nil。设置结果回调函数,回调函数的调用形式为:cnFnc(result),result为true表示成功,false或者nil为失败 |
- 返回值
无
misc.getImei()¶
获取模块IMEI
- 语法
misc.getImei()
- 参数
无
- 返回值
string,IMEI号,如果未获取到返回""
注意:开机lua脚本运行之后,会发送at命令去查询imei,所以需要一定时间才能获取到imei。开机后立即调用此接口,基本上返回""
misc.getVbatt()¶
获取VBAT的电池电压
- 语法
misc.getVbatt()
- 参数
无
- 返回值
number,电池电压,单位mv
misc.openPwm()¶
打开并且配置PWM(支持2路PWM,仅支持输出)
说明:
当id为0时:period 取值在 80-1625 Hz范围内时,level 占空比取值范围为:1-100;
period 取值在 1626-65535 Hz范围时,设x=162500/period, y=x * level / 100, x 和 y越是接近正的整数,则输出波形越准确
- 语法
misc.openPwm(id, period, level)
- 参数
参数 | 释义 |
---|---|
id | number, PWM输出通道,仅支持0和1,0用的是uart2 tx,1用的是uart2 rx |
period | number, 当id为0时,period表示频率,单位为Hz,取值范围为80-1625,仅支持整数。 当id为1时,取值范围为0-7,仅支持整数,表示时钟周期,单位为毫秒,0-7分别对应125、250、500、1000、1500、2000、2500、3000毫秒 |
level | number, 当id为0时,level表示占空比,单位为level%,取值范围为1-100,仅支持整数。 当id为1时,取值范围为1-15,仅支持整数,表示一个时钟周期内的高电平时间,单位为毫秒,1-15分别对应15.6、31.2、46.9、62.5、78.1、93.7、110、125、141、156、172、187、203、219、234毫秒 |
- 返回值
无
misc.closePwm()¶
关闭PWM
- 语法
misc.closePwm(id)
- 参数
参数 | 释义 |
---|---|
id | number, PWM输出通道,仅支持0和1,0用的是uart2 tx,1用的是uart2 rx |
- 返回值
nil
Fileds¶
消息 | 释义 |
---|---|
SN_READY_IND | 可以成功获取SN |
IMEI_READY_IND | 可以成功获取IMEI |
TIME_UPDATE_IND | 将当前时间设置为正确的时间 |
sim¶
查询sim卡状态、iccid、imsi、mcc、mnc
sim.getIccid()¶
获取sim卡的iccid
- 语法
sim.getIccid()
- 参数
无
- 返回值
string ,返回iccid,如果还没有读取出来,则返回nil
注意:开机lua脚本运行之后,会发送at命令去查询iccid,所以需要一定时间才能获取到iccid。开机后立即调用此接口,基本上返回nil
sim.getImsi()¶
获取sim卡的imsi
- 语法
sim.getImsi()
- 参数
无
- 返回值
string ,返回imsi,如果还没有读取出来,则返回nil
开机lua脚本运行之后,会发送at命令去查询imsi,所以需要一定时间才能获取到imsi。开机后立即调用此接口,基本上返回nil
sim.getMcc()¶
获取sim卡的mcc
- 语法
sim.getMcc()
- 参数
无
- 返回值
string ,返回值:mcc,如果还没有读取出来,则返回""
注意:开机lua脚本运行之后,会发送at命令去查询mcc,所以需要一定时间才能获取到mcc。开机后立即调用此接口,基本上返回""
sim.getMnc()¶
获取sim卡的getmnc
- 语法
sim.getMnc()
- 参数
无
- 返回值
string ,返回mnc,如果还没有读取出来,则返回""
注意:开机lua脚本运行之后,会发送at命令去查询mnc,所以需要一定时间才能获取到mnc。开机后立即调用此接口,基本上返回""
misc.getStatus()¶
获取sim卡的状态
- 语法
misc.getStatus()
- 参数
无
- 返回值
bool ,true表示sim卡正常,false或者nil表示未检测到卡或者卡异常
开机lua脚本运行之后,会发送at命令去查询状态,所以需要一定时间才能获取到状态。开机后立即调用此接口,基本上返回nil
ril¶
虚拟串口AT命令交互管理
ril.regRsp()¶
注册某个AT命令应答的处理函数
- 语法
ril.regRsp(head, fnc, typ, formt)
- 参数
参数 | 释义 |
---|---|
head | 此应答对应的AT命令头,去掉了最前面的AT两个字符 |
fnc | AT命令应答的处理函数 |
typ | AT命令的应答类型,取值范围NORESULT,NUMBERIC,SLINE,MLINE,STRING,SPECIAL |
formt | typ为STRING时,进一步定义STRING中的详细格式 |
- 返回值
bool ,成功返回true,失败false
- 例子
ril.regRsp("+CSQ", rsp)
ril.regUrc()¶
注册某个urc的处理函数
- 语法
ril.regUrc(prefix, handler)
- 参数
参数 | 释义 |
---|---|
prefix | urc前缀,最前面的连续字符串,包含+、大写字符、数字的组合 |
handler | urc的处理函数 |
- 返回值
无
- 例子
ril.regUrc("+CREG", neturc)
ril.deRegUrc()¶
解注册某个urc的处理函数
- 语法
ril.deRegUrc(prefix)
- 参数
参数 | 释义 |
---|---|
prefix | urc前缀,最前面的连续字符串,包含+、大写字符、数字的组合 |
- 返回值
无
ril.request()¶
发送AT命令到底层软件
- 语法
ril.request(cmd, arg, onrsp, delay)
- 参数
参数 | 释义 |
---|---|
cmd | AT命令内容 |
arg | AT命令参数,例如AT+CMGS=12命令执行后,接下来会发送此参数;AT+CIPSEND=14命令执行后,接下来会发送此参数 |
onrsp | AT命令应答的处理函数,只是当前发送的AT命令应答有效,处理之后就失效了 |
delay | 延时delay毫秒后,才发送此AT命令 |
- 返回值
无
- 例子
ril.request("AT+CENG=1,1")
ril.request("AT+CRSM=214,28539,0,0,12,\"64f01064f03064f002fffff\"", nil, crsmResponse)
aLiYun¶
目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密和“一型一密”
aLiYun.setup()¶
配置阿里云物联网套件的产品信息和设备信息
- 语法
aLiYun.setup(productKey[, productSecret=nil], getDeviceNameFnc, getDeviceSecretFnc[, setDeviceSecretFnc=nil])
- 参数
参数 | 释义 |
---|---|
productKey | String,产品标识 |
productSecret | String,此参数可选,默认值为: nil。 产品密钥 一机一密认证方案时,此参数传入nil 一型一密认证方案时,此参数传入真实的产品密钥 |
getDeviceNameFnc | function,获取设备名称的函数 |
getDeviceSecretFnc | function,获取设备密钥的函数 |
setDeviceSecretFnc | function,此参数可选,默认值为: nil。设置设备密钥的函数,一型一密认证方案才需要此参数 |
- 返回值
无
- 例子
aLiYun.setup("b0FMK1Ga5cp",nil,getDeviceNameFnc,getDeviceSecretFnc)
aLiYun.setup("a1AoVqkCIbG","7eCdPyR6fYPntFcM",getDeviceNameFnc,getDeviceSecretFnc,setDeviceSecretFnc)
aLiYun.setMqtt()¶
设置MQTT数据通道的参数
- 语法
aLiYun.setMqtt([cleanSession=1][, will=nil][, keepAlive=240])
- 参数
参数 | 释义 |
---|---|
cleanSession | number,此参数可选,默认值为: 1。 1/0 |
will | table,此参数可选,默认值为: 240。 |
keepAlive | number,此参数可选,默认值为: 240。 |
- 返回值
nil
- 例子
aLiYun.setMqtt(0)
aLiYun.setMqtt(1,{qos=0,retain=1,topic="/willTopic",payload="will payload"})
aLiYun.setMqtt(1,{qos=0,retain=1,topic="/willTopic",payload="will payload"},120)
aLiYun.subscribe()¶
订阅主题
- 语法
aLiYun.subscribe(topic, qos)
- 参数
参数 | 释义 |
---|---|
topic | string或者table类型,一个主题时为string类型,多个主题时为table类型,主题内容为UTF8编码 |
qos | number或者nil,topic为一个主题时,qos为number类型(0/1/2,默认0);topic为多个主题时,qos为nil |
- 返回值
nil
- 例子
aLiYun.subscribe("/b0FMK1Ga5cp/862991234567890/get", 0)
aLiYun.subscribe({["/b0FMK1Ga5cp/862991234567890/get"] = 0, ["/b0FMK1Ga5cp/862991234567890/get"] = 1})
aLiYun.publish()¶
发布一条消息
- 语法
aLiYun.publish(topic, payload[, qos=0][, cbFnc=nil][, cbPara=nil])
- 参数
参数 | 释义 |
---|---|
topic | String,UTF8编码的主题 |
payload | String,数据包 |
qos | number,此参数可选,默认值为: 0。质量等级,0/1/2。 |
cbFnc | function,此参数可选,默认值为: nil。 消息发布结果的回调函数,回调函数的调用形式为:cbFnc(result,cbPara)。result为true表示发布成功,false或者nil表示订阅失败;cbPara为本接口中的第5个参数。 |
cbPara | 此参数可选,默认值为: nil。消息发布结果回调函数的回调参数。 |
- 返回值
nil
- 例子
aLiYun.publish("/b0FMK1Ga5cp/862991234567890/update","test",0)
aLiYun.publish("/b0FMK1Ga5cp/862991234567890/update","test",1,cbFnc,"cbFncPara")
aLiYun.on()¶
注册事件的处理函数
- 语法
aLiYun.on(evt, cbFnc)
- 参数
参数 | 释义 |
---|---|
evt | String,事件 "connect"表示连接结果事件 "receive"表示接收到消息事件 |
cbFnc | function,事件的处理函数 当evt为"connect"时,cbFnc的调用形式为:cbFnc(result),result为true表示连接成功,false或者nil表示连接失败 当evt为"receive"时,cbFnc的调用形式为:cbFnc(topic,qos,payload),topic为UTF8编码的主题(string类型),qos为质量等级(number类型),payload为原始编码的负载(string类型) |
- 返回值
nil
- 例子
aLiYun.on("b0FMK1Ga5cp",nil,getDeviceNameFnc,getDeviceSecretFnc)
aLiYunOta¶
阿里云物联网套件客户端OTA功能 ,目前固件签名算法仅支持MD5
aLiYun.setVer()¶
设置当前的固件版本号
- 语法
aLiYun.setVer(version)
- 参数
参数 | 释义 |
---|---|
version | String,当前固件版本号 |
- 返回值
nil
- 例子
aLiYunOta.setVer("MCU_VERSION_1.0.0")
aLiYun.setName()¶
设置新固件保存的文件名
- 语法
aLiYun.setName(name)
- 语法
参数 | 释义 |
---|---|
name | String,新固件下载后保存的文件名;注意此文件名并不是保存的完整路径,完整路径通过setCb设置的回调函数去获取 |
- 返回值
nil
- 例子
aLiYunOta.setName("MCU_FIRMWARE.bin")
aLiYun.setCb()¶
设置新固件下载后的回调函数
- 语法
aLiYun.setCb(cbFnc)
- 参数
参数 | 释义 |
---|---|
cbFnc | function,新固件下载后的回调函数,回调函数的调用形式为:cbFnc(result,filePath),result为下载结果,true表示成功,false或者nil表示失败;filePath为新固件文件保存的完整路径 |
- 返回值
nil
powerKey¶
开机键功能配置
powerKey.setup()¶
配置开机键长按弹起和短按弹起的功能.
如何定义长按键和短按键,例如长按键判断时长为3秒:
按下大于等于3秒再弹起判定为长按键;
按下后,在3秒内弹起,判定为短按键
- 语法
powerKey.setup([longPrd=3000][, longCb=nil][, shortCb=nil])
- 参数
参数 | 释义 |
---|---|
longPrd | number [此参数可选,默认值为: 3000],长按键判断时长,单位毫秒 |
longCb | function [此参数可选,默认值为: nil],长按弹起时的回调函数,如果为nil,使用默认的处理函数,会自动关机 |
shortCb | function [此参数可选,默认值为: nil],短按弹起时的回调函数 |
- 返回值
nil
- 例子
powerKey.setup(nil,longCb,shortCb)
powerKey.setup(5000,longCb)
powerKey.setup()
gizwits¶
机智云物联网套件客户端功能
gizwits.setup()¶
初始化机智云注册所需要的数据
- 语法
gizwits.setup(PRODUCT_KEY, PRODUCT_SECRET, getDeviceName, getDeviceSecret)
- 参数
参数 | 释义 |
---|---|
PRODUCT_KEY | string,机智云应用列表中的Product Key |
PRODUCT_SECRET | string, 机智云应用列表中的Product Secret |
getDeviceName | function,获取设备mac地址的函数 |
getDeviceSecret | function,获取设备passcode的函数 |
- 返回值
nil
- 例子
gizwits.setup("PRODUCT_KEY","PRODUCT_SECRET",getDeviceName,getDeviceSecret)
gizwits.publish()¶
发布一条消息 手动编写并发送一条mqtt消息
- 语法
gizwits.publish(topic, payload[, qos=0][, cbFnc=nil], cbPara)
- 参数
参数 | 释义 |
---|---|
topic | string,UTF8编码的主题 |
payload | string,负载 |
qos | number,[此参数可选,默认值为: 0],质量等级,0/1/2,默认0 |
cbFnc | function,[此参数可选,默认值为: nil],消息发布结果的回调函数 |
cbPara | string,标志 |
- 返回值
nil
- 例子
gizwits.publish(topic,msg,0)
gizwits.publish(topic,msgbody,0,{cb=cbFnc,para=cbPara})
gizwits.transmissionSend()¶
发布一条透传消息 按照机智云带ack的格式发送一条消息
- 参数
gizwits.transmissionSend(flag, ccmd, sn, cmd, topic)
- 参数
参数 | 释义 |
---|---|
flag | number,通讯协议手册中的flag |
ccmd | string,命令字,ack返回为0094 |
sn | string, 包序号 |
cmd | string, 业务指令 |
topic | string, UTF8编码的主题 |
- 返回值
nil
- 例子
gizwits.transmissionSend(0,string.fromHex("0094"),string.fromHex("000000001"),"cmd","dev2app/12345/67890")) --回复ack
on()¶
注册事件的处理函数
- 语法
on(evt,cbFnc)
- 参数
参数 | 释义 |
---|---|
evt | string,事件 "connect"表示连接结果事件 "receive"表示接收到消息事件 |
cbFnc | function,事件的处理函数 当evt为"connect"时,cbFnc的调用形式为:cbFnc(result),result为true表示连接成功,false或者nil表示连接失败 当evt为"receive"时,cbFnc的调用形式为:cbFnc(topic,qos,payload),topic为UTF8编码的主题(string类型),qos为质量等级(number类型),payload为原始编码的负载(string类型) 当evt为"transmissionRev"时,cbFnc的调用形式为:cbFnc(flag,ccmd,sn,cmd,topic),flag为数值型的量,ccmd为命令字,sn为包序号,cmd为透传消息内容,topic为UTF8编码的主题(string类型) |
- 返回值
nil
- 例子
gizwits.on("transmissionRev",rcvTransCbFnc)
扩展API¶
adc¶
adc.open()¶
打开对应ID的ADC通道
- 语法
result = adc.open( id )
- 参数
参数 | 释义 |
---|---|
id | adc通道id |
- 返回值
1:成功打开adc通道
0:其他
- 例子
--adc id
local ADC_ID = 0
--打开adc
adc.open(ADC_ID)
adc.read()¶
读取原始测量数据和电压值,电压值单位为mv
- 语法
adcValue,voltValue = adc.read( id )
- 参数
参数 | 释义 |
---|---|
id | adc通道id |
- 返回值
adcValue | 原始数据ad值,无效值为0xFFFF |
---|---|
voltValue | 电压值,单位为mv,无效值为0xFFFF |
- 例子
--adcval为number类型,表示adc的原始值,无效值为0xFFFF
--voltval为number类型,表示转换后的电压值,单位为毫伏,无效值为0xFFFF;adc.read接口返回的voltval放大了3倍,所以需要除以3还原成原始电压
local adcval,voltval = adc.read(ADC_ID)
apn¶
apn 读取库
apn.get_default_apn()¶
通过mcc和mnc获取到默认apn
- 语法
apn,user,password = apn.get_default_apn( mcc,mnc )
- 参数
参数 | 释义 |
---|---|
mcc | 手机国家编码 |
mnc | 手机网络编码 |
- 返回值
apn | apn名字 |
---|---|
user | 用户名 |
password | 密码 |
audiocore¶
音频操作接口
audiocore.play()¶
播放音乐
- 语法
ret = audiocore.play( filename )
- 参数
参数 | 释义 |
---|---|
filename | 音频文件名 |
- 返回值
true:播放成功
false:播放失败
audiocore.stop()¶
停掉正在播放的音频
- 语法
audiocore.stop()
- 参数
无
- 返回值
无
audiocore.setchannel()¶
设置音频播放通道
- 语法
result = audiocore.setchannel( channel )
- 参数
channel | 音频播放通道(可选参数见下列表) |
---|---|
audiocore.HANDSET 、 audiocore.EARPIECE 、 audiocore.LOUDSPEAKER 、audiocore.BLUETOOTH 、 audiocore.FM 、 audiocore.FM_LP 、 audiocore.TV 、audiocore.AUX_HANSET 、 audiocore.AUX_LOUDSPEAKER 、audiocore.AUX_EARPIECE 、 audiocore.DUMMY_HANDSET 、audiocore.DUMMY_AUX_HANDSET 、 audiocore.DUMMY_LOUDSPEAKER 、audiocore.DUMMY_AUX_LOUDSPEAKER | |
audiocore.setvol()¶
设置音频播放音量大小
- 语法
result = audiocore.setvol( vol )
- 参数
vol | 音频播放器音量(可选参数见下列表) |
---|---|
audiocore. VOL0、 audiocore. VOL1、 audiocore. VOL2、 audiocore. VOL3、 audiocore. VOL4、audiocore. VOL5、 audiocore. VOL6、 audiocore. VOL7 |
- 返回值
1:成功
0:其他
audiocore.setmicvol()¶
设置麦克风音量
- 语法
result = audiocore.setmicvol( vol )
- 参数
参数 | 释义 |
---|---|
vol | 麦克风音量(可选参数见下列表) |
audiocore.MIC_VOL0、audiocore. MIC_VOL1、audiocore. MIC_VOL2、audiocore.MIC_VOL3、audiocore. MIC_VOL4、audiocore. MIC_VOL5、audiocore. MIC_VOL6、audiocore. MIC_VOL7 、 audiocore.MIC_VOL8 、 audiocore.MIC_VOL9 、audiocore.MIC_VOL10 、 audiocore.MIC_VOL11 、 audiocore.MIC_VOL12 、audiocore.MIC_VOL13、audiocore.MIC_VOL14、audiocore.MIC_VOL15 |
- 返回值
1:成功
0:其他
audiocore.setloopback()¶
设置通道指定的环回测试
- 语法
result = audiocore.setloopback( status,channel )
- 参数
参数 | 释义 |
---|---|
status | 1开启回环测试,0关闭回环测试 |
channel | 音频通道(可选参数见下列表) |
audiocore. LOOPBACK_HANDSET 、 audiocore. LOOPBACK_EARPIECE 、 audiocore.LOOPBACK_LOUDSPEAKER 、 audiocore. LOOPBACK_AUX_HANDSET 、 audiocore.LOOPBACK_AUX_LOUDSPEAKER |
- 返回值
1:成功
0:其他
bit¶
位操作库
bit.bit()¶
左移运算,等价于C语言中的1 << position
- 语法
number = bit.bit( position )
- 参数
参数 | 释义 |
---|---|
position | 需要移位的位置 |
- 返回值
移位运算后的值
- 例子
print(bit.bit(2))--参数是位数,作用是1向左移动两位,打印出4
bit.isset()¶
测试位数是否被置1
- 语法
flag = bit.isset( value, position )
- 参数
参数 | 释义 |
---|---|
value | 被测试的值 |
position | 被测试的位置 |
- 返回值
true:该位被置1
false:其他
- 例子
print(bit.isset(5,0))--第一个参数是是测试数字,第二个是测试位置。从右向左数0到7。是1返回true,否则返回false,该返回true
print(bit.isset(5,1))--打印false
print(bit.isset(5,2))--打印true
print(bit.isset(5,3))--返回返回false
bit.isclear()¶
测试位数是否被置0
- 语法
flag = bit.isclear( value, position )
- 参数
参数 | 释义 |
---|---|
value | 被测试的值 |
position | 被测试的位置 |
- 返回值
true:该位被置0
false:其他
- 例子
print(bit.isclear(5,0))--与上面的相反
print(bit.isclear(5,1))
print(bit.isclear(5,2))
print(bit.isclear(5,3))
bit.set()¶
置1
- 语法
number = bit.set( value, pos1, pos2, ..., posn )
- 参数
参数 | 释义 |
---|---|
value | 基数(需要改变的值) |
pos1 | 第一位置 |
pos2 | 第二位置 |
posn | 第n位置 |
- 返回值
置1之后的值
- 例子
print(bit.set(0,0,1,2,3))--在相应的位数置1,打印15
bit.clear()¶
置0
- 语法
number = bit.clear( value, pos1, pos2, ..., posn )
- 参数
参数 | 释义 |
---|---|
value | 基数(需要改变的值) |
pos1 | 第一位置 |
pos2 | 第二位置 |
posn | 第n位置 |
- 返回值
置0之后的值
- 例子
print(bit.clear(5,0,2)) --在相应的位置置0,打印0
bit.bnot()¶
取反,等价于C语言中的~
- 语法
number = bit.bnot( value )
- 参数
参数 | 释义 |
---|---|
value | 需要取反的值 |
- 返回值
取反之后的值
- 例子
print(bit.bnot(5))--按位取反,输出-6
bit.band()¶
与运算,等价于C语言中的val1 & val2 & ... & valn
- 语法
number = bit.band( val1, val2, ... valn )
- 参数
参数 | 释义 |
---|---|
val1 | 第一个参数 |
val2 | 第二个参数 |
valn | 第n个参数 |
- 返回值
与运算之后的结果
- 例子
print(bit.band(1,1))--与,--输出1
bit.bor()¶
或运算,等价于C里面的val1 | val2 | ... | valn
- 语法
number = bit.bor( val1, val2, ... valn )
- 参数
参数 | 释义 |
---|---|
val1 | 第一个参数 |
val2 | 第二个参数 |
valn | 第n个参数 |
- 返回值
或运算之后的结果
- 例子
print(bit.bor(1,2))--或,--输出3
bit.bxor()¶
异或运算,等价于C语言中的val1 ^ val2 ^ ... ^ valn
- 语法
number = bit.bxor( val1, val2, ... valn )
- 参数
参数 | 释义 |
---|---|
val1 | 第一个参数 |
val2 | 第二个参数 |
valn | 第n个参数 |
- 返回值
异或运算之后的结果
- 例子
print(bit.bxor(1,2))--异或,相同为0,不同为1
bit.lshift()¶
逻辑左移,等价于C语言中的value << shift
- 语法
number = bit.lshift( value, shift )
- 参数
参数 | 释义 |
---|---|
value | 移位的值 |
shift | 移位的位置 |
- 返回值
逻辑左移之后的结果
- 例子
print(bit.lshift(1,2))--逻辑左移,“100”,输出为4
bit.rshift()¶
逻辑右移,等价于C语言中的value >> shift
- 语法
number = bit.rshift( value, shift )
- 参数
参数 | 释义 |
---|---|
value | 移位的值 |
shift | 移位的位置 |
- 返回值
逻辑右移之后的结果
- 例子
print(bit.rshift(4,2))--逻辑右移,“001”,输出为1
bit.arshift()¶
算数右移
- 语法
number = bit.arshift( value, shift )
- 参数
参数 | 释义 |
---|---|
value | 移位的值 |
shift | 移位的位置 |
- 返回值
算术右移之后的结果
- 例子
print(bit.arshift(2,2))--算数右移,左边添加的数与符号有关,输出为0
i2c¶
i2c 操作接口
i2c.setup()¶
打开i2c接口
- 语法
speed = i2c.setup( id, speed [,slaveaddr] )
- 参数
参数 | 释义 |
---|---|
id | i2c 接口 id,目前支持 i2c id=2 即模块的 I2C3 |
speed | i2c.FAST (400KHz), i2c.SLOW (100KHz) |
slaveaddr | 可选,i2c 外设地址 0x00-0x7f |
- 返回值
可以根据返回的频率值判断是否成功打开 i2c
- 例子
--使用i2c.send和i2c.recv的setup
if i2c.setup(i2cid,i2c.SLOW) ~= i2c.SLOW then
print("init fail")
return
end
--使用i2c.write和i2c.read的setup
if i2c.setup(i2cid,i2c.SLOW,i2cslaveaddr) ~= i2c.SLOW then
print("init1 fail")
return
end
i2c.send()¶
向从设备写数据
- 语法
wrote = i2c.send( id,slave, data )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
slave | i2c 外设地址 0x00-0x7f |
data | number / string / table,自动根据参数类型写数据,num 只写 1 个字节,string/table |
- 返回值
传输成功的字节数
- 例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备i2cslaveaddr发送寄存器地址cmd[i]
i2c.send(i2cid,i2cslaveaddr,cmd[i])
--向从设备i2cslaveaddr发送要写入从设备寄存器内的数据cmd[i+1]
i2c.send(i2cid,i2cslaveaddr,cmd[i+1])
end
i2c.recv()¶
向从设备读取数据
- 语法
i2c.recv( id, slave,size )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
slave | i2c 外设地址 0x00-0x7f |
size | 读取数据字节数 |
- 返回值
返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流
- 例子
--向从设备i2cslaveaddr发送寄存器地址cmd[i]
i2c.send(i2cid,i2cslaveaddr,cmd[i])
--读取从设备i2cslaveaddr寄存器内的1个字节的数据,并且打印出来
print("init",string.format("%02X",cmd[i]),common.binstohexs(i2c.recv(i2cid,i2cslaveaddr,1)))
i2c.write()¶
往指定的寄存器地址 reg 传输数据
- 语法
wrote = i2c.write( id, reg, data )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
reg | 写入 i2c 从设备的寄存器起始地址 |
data | number / string / table,自动根据参数类型写数据,num 只写 1 个字节,string/table |
- 返回值
传输成功的字节数
- 例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备的寄存器地址cmd[i]中写1字节的数据cmd[i+1]
i2c.write(i2cid,cmd[i],cmd[i+1])
end
i2c.read()¶
读取指定寄存器地址 reg 的数据内容
- 语法
data = i2c.read( id, reg, num )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
reg | 读取 i2c 从设备的寄存器起始地址 |
num | 读取数据字节数 |
- 返回值
返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流
- 例子
--从从设备的寄存器地址cmd[i]中读1字节的数据,并且打印出来
print("init1",string.format("%02X",cmd[i]),common.binstohexs(i2c.read(i2cid,cmd[i],1)))
i2c.close()¶
关闭 I2C 接口
- 语法
speed = i2c.close( id )
- 参数
参数 | 释义 |
---|---|
id | i2c接口id,目前支持 i2c id=2 即模块的i2c3 |
- 返回值
无
spi¶
spi 操作接口
spi.setup¶
- 语法
spi.setup(id,chpa,cpol,dataBits,clock,duplexMode)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可 |
chpa | 第几个clk的跳变沿传输数据,仅支持0和1,0表示第1个,1表示第2个。 |
cpol | spi_clk idle的状态,仅支持0和1,0表示低电平,1表示高电平 |
dataBits | 数据位,仅支持8 |
clock | spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000) |
duplex | 是否全双工,仅支持0和1,0表示半双工(仅支持输出),1表示全双工。此参数可选,默认半双工 |
- 返回值
number类型,1表示成功,0表示失败
spi.send()¶
写数据
- 语法
spi.send(id,data)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可 |
data | string类型,要发送的数据 |
- 返回值
number类型,写成功的数据长度
spi.recv()¶
读数据
- 语法
spi.recv(id,length)
- 参数
参数 | 释义 |
---|---|
id | SPI的ID,spi.SPI_1表示SPI1,Air201、Air202、Air800只有SPI1,固定传spi.SPI_1即可 |
length | 要读取的数据的长度 |
- 返回值
string类型,读取的数据内容
pack¶
pack 库支持将一系列数据按照格式字符转化为 lua 字符串或者将 lua 字符串按照格式字符转化成 一系列值
格式字符串格式如下:
[endianness]< format specifier >[count]
endianness:字节序
- '<' 小字节序,最低有效字节优先,更低的字节有效位占据着更低地址的内存空间。
- '>' 大字节序,最高有效字节优先,更高的字节有效位占据着更低地址的内存空间。
- '=' 自然字节序,默认。
format specifier:参照下面格式化符号
count:取字节个数
格式化符号 | 变量类型 |
---|---|
'z' | 以'\0'结尾的字符串 |
'p' | 在string数据前面加一个字节的string长度数据 |
'P' | 在string数据前面加2个字节的string长度数据 |
'a' | 在string数据前面加4个字节的string长度数据 |
'A' | 字符串(string) |
'f' | 浮点数(float) |
'd' | 双精度浮点数(double) |
'n' | Lua数字(Lua number) |
'c' | 字符(char) |
'b' | 字节(byte = unsigned char) |
'h' | 短整型(short,两字节) |
'H' | 无符号短整型(unsigned short,两字节) |
'i' | 整型(int,四字节) |
'I' | 无符号整型(unsigned int,四字节) |
'l' | 长整型(long,八字节) |
'L' | 无符号长整型(unsigned long,八字节) |
pack.pack()¶
打包字符串的值,在pack的时候有符号 无符号的输出结果都是一样的 unpack时有符号跟无符号才有区别
- 语法
packed = pack.pack( format, val1, val2, ..., valn )
- 参数
参数 | 释义 |
---|---|
format | 格式化符号 |
val1 | 第一个需打包的值 |
val2 | 第二个需打包的值 |
valn | 第n个需打包的值 |
- 返回值
一个包含所有格式化变量的字符串
- 例子
print("pcak.pack test:")
print(pack.pack("A",10))--当"10"以字符串形式包装时,会打印出“10”
print(common.binstohexs(pack.pack("b",0x10)))--将0x01以十六进制打包为字符串,然后用十六进制输出0x10
print(pack.pack("A","LUAT"))
pack.unpack()¶
解包字符串
- 语法
nextpos, val1, val2, ..., valn = pack.unpack( string, format,[ init ] )
- 参数
参数 | 释义 |
---|---|
string | 需解包的字符串 |
format | 格式化符号 |
init(可选) | 默认值为1,标记解包开始的位置 |
- 返回值
nextpos | 字符串标记的位置 |
---|---|
val1 | 第一个解包的值 |
val2 | 第二个解包的值 |
valn | 第n个解包的值 |
- 例子
print("pack.unpack test:")
nextpox1,val1,val2,val3,val4=pack.unpack("luat100","c4")--"nextpos"下个待解析的位置 ,取4个字符(char)
print(nextpox1,val1,val2,val3,val4) --分别对应的是"5",l","u","a","t"的ascii码数据
print(string.char(val1,val2,val3,val4)) --将ascii码数据转化为字符输出
nextpox2,string1=pack.unpack("luat100","A4")--输出“luat”
print(nextpox2,string1)--输出5 luat
nextpox3,number1,number2=pack.unpack(common.hexstobins("006400000064"),">H>i")--[[输出无符号短型和整形,因为无符号短型是2个字节,整形是4个字节,输出为100,100--]]
print(nextpox3,number1,number2)--输出7 100 100
nextpox3,number1=pack.unpack(common.hexstobins("0064"),">h")--输出为100,因为短型是2个字节
print(nextpox3,number1)--输出3 100
pio¶
管脚操作
pio.pin.setdir()¶
设置管脚的描述
- 语法
pio.pin.setdir( direction,pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
direction | 管脚描述,可选pio.INPUT , pio.OUTPUT, pio.INT |
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.setval()¶
设置管脚的值
- 语法
pio.pin.setval(value,pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
value | 管脚值,可选0或1 |
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.getval()¶
读取管脚的值
- 语法
val1, val2, ..., valn = pio.pin.getval( pin1, pin2, ..., pinn )
- 参数
参数 | 释义 |
---|---|
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
number类型,0表示低电平,1表示高电平
pio.pin.sethigh()¶
设置管脚为高电平(1)
- 语法
pio.pin.sethigh(pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.setlow()¶
设置管脚为低电平(0)
- 语法
pio.pin.setlow(pin1,pin2,...,pinn)
- 参数
参数 | 释义 |
---|---|
pin1 | 第一个管脚 |
pin2(可选) | 第二个管脚 |
pinn(可选) | 第n个管脚 |
- 返回值
无
pio.pin.setpull()¶
配置IO口默认状态
- 语法
pio.pin.setpull(method,pin)
- 参数
参数 | 释义 |
---|---|
method | pio.PULLUP:上拉模式 。pio.PULLDOWN:下拉模式。pio.NOPULL:高阻态 |
pin | 配置管脚 |
- 返回值
无
- 例子
pio.pin.setpull(pio.PULLUP,pio.P0_5) --配置为上拉
--pio.pin.setpull(pio.PULLDOWN,pio.P0_5) --配置为下拉
--pio.pin.setpull(pio.NOPULL,pio.P0_5) --不配置上下拉
pmd¶
电源管理接口:ldo 控制,省电管理
pmd.init()¶
设置电源管理参数
电池充电控制,3 阶段电流充电:
一阶段:电压低于 battlevelFirst 充电电流为 currentFirst
二阶段:电压高于 battlevelFirst 低于 battlevelSecond 充电电流为 currentSecond
三阶段:电压高于 battlevelSecond 至充满 4.25v 充电电流为 currentThird
- 语法
result = pmd.init( param )
- 参数
参数 | 释义 |
---|---|
param | 参数表,电流有效值:50,100,150,200,300,400,500,600,700,800 电压值以mV为单位,可选值为下 |
param.currentFirst - 电池电压小于一阶段电压值时的充电电流param.battlevelFirst - 一阶段电压值节点param.currentSecond - 电池电压大于一阶段电压值小于二阶段电压值时的充电电流param.battlevelSecond - 二阶段电压值节点param.currentThird - 电池电压大于二阶段电压值时的充电电流 |
- 返回值
1:成功
0:失败
pmd.ldoset()¶
ldo 控制
电压域与控制的GPIO的对应关系如下:
pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13
pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18
pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24
一旦设置了某一个电压域的电压等级,受该电压域控制的所有GPIO的高电平都与设置的电压等级一致
- 语法
pmd.ldoset(level,id1,[id2],...,[idn])
- 参数
参数 | 释义 |
---|---|
level | ldo 亮度 0 - 7 级 0 级关闭 0--关闭 1--1.8V 2--1.9V 3--2.0V 4--2.6V 5--2.8V 6--3.0V 7--3.3V |
id1 | 要设置的第一个 ldo |
id2(可选) | 要设置的第 二 个 ldo |
idn(可选) | 要设置的第 n 个 ldo |
- 返回值
无
- 例子
--GPIO8输出电平时,要求输出2.8V,则调用
pmd.ldoset(5,pmd.LDO_VMMC)
pmd.sleep()¶
省电控制
- 语法
pmd.sleep(value)
- 参数
参数 | 释义 |
---|---|
value | 1 - 进入睡眠,0 - 退出睡眠 |
- 返回值
无
rtos¶
嵌入式系统接口:接收消息,软件定时器
rtos.receive()¶
接收消息
- 语法
msg,msgpara = rtos.receive(timeout)
- 参数
参数 | 释义 |
---|---|
timeout | timeout 超时返回以毫秒为单位,可以用#rtos.INF_TIMEOUT#表示阻塞等待消息 |
- 返回值
如果 msg 为 table 类型,msg 根据不同的消息 msg.id 会有不同的数据:
如果 msg 为 number 类型,msg 根据不同的消息 msg 会有不同的数据
1.rtos.MSG_TIMER 定时器超时消息 msg.timer_id 或者 msgpara 为超时的定时器 id
2.rtos.MSG_UART_RXDATA 串口 ATC 数据提醒 msg.uart_id 或者msgpara为收到的数据的串口id或者atc,收到该消息后可以通过uart.read 接口读取数据
3.rtos.MSG_KEYPAD 键盘消息,必须初始化按键(#rtos.init_module#)后才会有键盘消息
msg.pressed 按键按下/弹起
msg.key_matrix_row 按键所在行值
msg.key_matrix_col 按键所在列值
4.rtos.WAIT_MSG_TIMEOUT 等待消息超时
5.rtos.MSG_INT 中断消息
msg.int_id 中断 id
msg.int_resnum 中断 pin 脚编号
6.rtos.MSG_PMD 电源管理消息
msg.present 电池在位状态
msg.level 百分比 0-100
msg.voltage 电池电压
msg.charger 充电器在位状态
msg.state 充电状态:0-不在充电 1-充电中 2-充电停止
rtos.timer_start()¶
启动定时器
- 语法
rtos.timer_start(timer_id, timeout)
- 参数
参数 | 释义 |
---|---|
timer_id | 定时器 id,可以是任意整数,定时器到时 msg.timer_id 值为启动时定时器 |
timeout | 定时器延时时间以毫秒为单位 |
- 返回值
无
rtos.timer_stop()¶
停止定时器
- 语法
rtos.timer_stop(timer_id)
- 参数
参数 | 释义 |
---|---|
timer_id | 输入与启动定时器时定义的 id 即可停止定时器 |
- 返回值
无
rtos.poweron_reason()¶
读取开机原因值
- 语法
reason=rtos.poweron_reason()
- 参数
无
- 返回值
rtos. POWERON_KEY(=0) | 按键开机 |
---|---|
rtos. POWERON_CHARGER(=1) | 充电开机 |
rtos. POWERON_ALARM(=2) | 闹钟开机 |
rtos. POWERON_RESTART(=3) | 软件重启开机 |
rtos. POWERON_EXCEPTION(=6) | 异常开机 |
rtos. POWERON_HOST(=7) | HOST 工具控制重启开机 |
rtos. POWERON_WATCHDOG(=8) | 其他原因 |
rtos.poweron()¶
是否启动 GSM 开机
- 语法
rtos.poweron(flag)
- 参数
参数 | 释义 |
---|---|
flag | 0 表示不启动系统;1 表示启动系统 |
- 返回值
无
rtos.poweroff()¶
软件关机
- 语法
rtos.poweroff()
- 参数
无
- 返回值
无
rtos.restart()¶
软件重启
- 语法
rtos.restart()
- 参数
无
- 返回值
无
rtos.tick()¶
获取系统开机运行时间总计数
- 语法
ticks=rtos.tick()
- 参数
无
- 返回值
ticks,时间计数,每 tick 时长:Air200 或 Air202 是 1/16384 秒,Air810 是 4.615 毫 秒。
rtos.sleep()¶
延时函数
- 语法
rtos.sleep(millisecond)
- 参数
参数 | 释义 |
---|---|
millisecond | 延时时间 ,以毫秒为单位 |
- 返回值
无
rtos.get_env_usage()¶
获取 lua 任务消息队列的使用百分比
- 语法
percentage=rtos.get_env_usage()
- 参数
无
- 返回值
percentage,百分比,例如使用了 80%,则 percentage 为 80
rtos.set_alarm()¶
设置闹钟,在设置之前必须注册闹钟模块和注册消息回调函数
- 语法
rtos.set_alarm(mode,year,month,day,hour,min,sec)
- 参数
参数 | 释义 |
---|---|
mode | 1:设置闹铃 ,0:清除闹铃 |
year | number类型,年 |
month | number类型,月 |
day | number类型,日 |
hour | number类型,时 |
min | number类型,分 |
sec | number类型,秒 |
- 返回值
无
- 例子
rtos.init_module(rtos.MOD_ALARM) --注册闹铃模块
sys.regmsg(rtos.MSG_ALARM,alarmmsg) --注册消息回调函数
rtos.set_alarm(1, 2017, 12, 7, 10, 52, 0) --设置闹铃
--闹钟时间 2017-17-7 10:52:0
rtos.set_alarm(0, 0, 0, 0, 0, 0, 0) --关闭闹铃
--闹钟开机
local reason = rtos.poweron_reason()
if reason == rtos.POWERON_ALARM then
rtos.restart()-- 闹钟开机以后重启不然注册不上GSM协议栈
end
rtos.make_dir()¶
创建目录
- 语法
rtos.make_dir(path)
- 参数
参数 | 释义 |
---|---|
path | 文件夹路径 |
- 返回值
布尔值
true表示创建成功,false表示失败
rtos.remove_dir()¶
删除文件夹
- 语法
rtos.remove_dir(path)
- 参数
参数 | 释义 |
---|---|
path | 文件夹路径 |
- 返回值
true表示删除成功,false表示失败
rtos.get_fs_free_size()¶
获取文件系统剩余空间
- 语法
rtos.get_fs_free_size()
- 参数
无
- 返回值
文件系统剩余空间,单位Bytes
uart¶
uart 与虚拟 AT 交互接口
uart.setup()¶
uart通讯
- 语法
baud = uart.setup( id, baud, databits, parity, stopbits,[msgmode,txDoneReport] )
- 参数
参数 | 释义 |
---|---|
id | 串口号,可选0,1,2 |
baud | 波特率,可选1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,115200,230400,460800,921600 |
databits | 数据位,7或8 |
parity | 校验位,可选uart.PAR_EVEN, uart.PAR_ODD或uart.PAR_NONE |
stopbits | 停止位,可选uart.STOP_1,uart.STOP_2 |
msgmode | 0 或者默认 - 消息通知,1 - 无消息上报需要用户主动轮询 |
txDoneReport | txdone消息上报开关。0:关闭,1:打开 |
- 返回值
串口的真实波特率
uart.write()¶
向串口写字符串或者整型数据
- 语法
uart.write( id, data1, [data2], ..., [datan] )
- 参数
参数 | 释义 |
---|---|
id | 串口号,可选0,1,2 |
data1 | 第一个字符串或8位整型数据 |
data2 | 第二个字符串或8位整型数据 |
datan(可选) | 第n个字符串或8位整型数据 |
- 返回值
无
uart.getchar()¶
从串口读取单字符
- 语法
str = uart.getchar( id )
- 参数
参数 | 释义 |
---|---|
id | 串口号,可选0,1,2 |
- 返回值
串口读出来的字符
uart.read()¶
从串口读取字符串
- 语法
str = uart.read( id, format)
- 参数
参数 | 释义 |
---|---|
id | 串口号 |
格式化 | *l:读取到结束字符\n或者阻塞发送 *n:读取整型数据 *s:读取到空格字符 数字,number类型:只读取number长度的数据 |
- 返回值
串口读出到的数据
uart.close()¶
关闭 uart 接口
- 语法
uart.close(id)
- 参数
参数 | 释义 |
---|---|
id | 串口号,可选0,1,2 |
- 返回值
无
crypto¶
常见加密,校验算法
crypto.aes_encrypt()¶
aes算法(参考http://tool.chacuo.net/cryptaes)
- 语法
crypto.aes_encrypt(mode,padding,originStr,password)
- 参数
参数 | 释义 |
---|---|
mode | 加密模式 |
padding | 填充方式 |
originStr | 加密字符串 |
password | 密钥 |
- 返回值
已加密的字符串
- 例子
--下面示例为LuaTask的,如果需要LuaScript的,请参考LuaScript crypto demo
local originStr = "AES128 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
originStr = "AES128 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
originStr = "AES128 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"1234567890123456"))
originStr = "AES192 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"123456789012345678901234"))
originStr = "AES192 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"123456789012345678901234"))
originStr = "AES192 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"123456789012345678901234")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"123456789012345678901234"))
originStr = "AES256 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit
local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"12345678901234567890123456789012"))
originStr = "AES256 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"12345678901234567890123456789012"))
originStr = "AES256 ECB Pkcs7Padding test"
--加密模式:ECB;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"12345678901234567890123456789012")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"12345678901234567890123456789012"))
originStr = "AES128 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES192 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES256 CBC ZeroPadding test"
--加密模式:CBC;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CBC Pkcs7Padding test"
--加密模式:CBC;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES128 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES128 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"1234567890123456","1234567890666666"))
originStr = "AES192 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES192 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"123456789012345678901234","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"123456789012345678901234","1234567890666666"))
originStr = "AES256 CTR ZeroPadding test"
--加密模式:CTR;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CTR Pkcs5Padding test"
--加密模式:CTR;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CTR Pkcs7Padding test"
--加密模式:CTR;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))
originStr = "AES256 CTR NonePadding test"
--加密模式:CTR;填充方式:NonePadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"12345678901234567890123456789012","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"12345678901234567890123456789012","1234567890666666"))
crypto.crc16()¶
CRC16校验算法
- 语法
crypto.crc16(crcMethod,originstr)
- 参数
参数 | 释义 |
---|---|
crcMethod | string类型, 校验方法 |
originstr | string类型,计算校验的字符串 |
- 返回值
校验计算结果
- 例子
local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("testCrypto.crc16_MODBUS",string.format("%04X",crypto.crc16("MODBUS",originStr)))
print("testCrypto.crc16_IBM",string.format("%04X",crypto.crc16("IBM",originStr)))
print("testCrypto.crc16_X25",string.format("%04X",crypto.crc16("X25",originStr)))
print("testCrypto.crc16_MAXIM",string.format("%04X",crypto.crc16("MAXIM",originStr)))
print("testCrypto.crc16_USB",string.format("%04X",crypto.crc16("USB",originStr)))
print("testCrypto.crc16_CCITT",string.format("%04X",crypto.crc16("CCITT",originStr)))
print("testCrypto.crc16_CCITT-FALSE",string.format("%04X",crypto.crc16("CCITT-FALSE",originStr)))
print("testCrypto.crc16_XMODEM",string.format("%04X",crypto.crc16("XMODEM",originStr)))
print("testCrypto.crc16_DNP",string.format("%04X",crypto.crc16("DNP",originStr)))
crypto.xxtea_encrypt()¶
xxtea加密算法
- 语法
crypto.xxtea_encrypt(text,key)
- 参数
参数 | 释义 |
---|---|
text | string类型,待加密字符串 |
key | string类型,密钥 |
- 返回值
加密/解密数据
- 例子
local text = "Hello World!";
local key = "07946";
local encrypt_data = crypto.xxtea_encrypt(text, key);
print("testCrypto.xxteaTest","xxtea_encrypt:"..encrypt_data)
local decrypt_data = crypto.xxtea_decrypt(encrypt_data, key);
print("testCrypto.xxteaTest","decrypt_data:"..decrypt_data)
crypto.crc32()¶
CRC32校验算法
- 语法
crypto.crc32(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要校验的字符串 |
len | number类型,字符串长度 |
- 返回值
校验计算结果
- 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("crc32",string.format("%08X",crypto.crc32(originstr,slen(originstr))))
--crc32 2FC153F9
crypto.sha256()¶
sha256算法
- 语法
crypto.sha256(originStr)
- 参数
参数 | 释义 |
---|---|
originStr | string类型, 需要加密的字符串 |
- 返回值
加密后的数据
- 例子
local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("testCrypto.sha256",crypto.sha256(originStr))
crypto.sha1()¶
sha1算法
- 语法
crypto.sha1(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
加密后的数据
- 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("sha1",crypto.sha1(originstr,slen(originstr)))
-- sha1 16EBE919119B9B54C8AF6B4F2A09C18B6B6D8218
crypto.hmac_sha1()¶
hmac_sha1算法
- 语法
hmac_sha1(originstr,len_str,signkey,len_key)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的数据 |
len_str | number类型,字符串长度 |
signkey | string类型, 密钥 |
len_key | number类型, 密钥长度 |
- 返回值
加密后的数据
- 例子
local originstr = "asdasdsadasweqcdsjghjvcb"
local signkey = "12345689012345"
print("hmac_sha1",crypto.hmac_sha1(originstr,slen(originstr),signkey,slen(signkey)))
--hmac_sha1 E3BB109BA59AF6A1F677157E8EC6B21349B9220F
crypto.flow_md5()¶
流式md5算法
- 语法
crypto.flow_md5()
- 参数
无
- 返回值
无
- 例子
local fmd5Obj=crypto.flow_md5()
local testTable={"lqlq666lqlq946","07946lq94607946","lq54075407540707946"}
for i=1, #(testTable) do
fmd5Obj:update(testTable[i])
end
print("testCrypto.flowMd5Test",fmd5Obj:hexdigest())
crypto.md5()¶
md5算法
- 语法
crypto.md5(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
加密后的数据
- 例子
local originstr = "sdfdsfdsfdsffdsfdsfsdfs1234"
print("md5",crypto.md5(originstr,slen(originstr)))
--md5 235B69FBC9E75C4FD5E8C59F9CB16500
crypto.hmac_md5()¶
hmac_md5算法测试
- 语法
crypto.hmac_md5(originstr,len_str,signkey,len_key)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len_str | number类型,字符串长度 |
signkey | string类型, 密钥 |
len_key | number类型, 密钥长度 |
- 返回值
加密后的数据
- 例子
local originstr = "asdasdsadas"
local signkey = "123456"
print("hmac_md5",crypto.hmac_md5(originstr,slen(originstr),signkey,slen(signkey)))
-- hmac_md5 38A7B18DC5F6543849DC49F06FADE3CC
crypto.base64_encode()¶
base64加密
- 语法
crypto.base64_encode(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
加密后的数据
- 例子
local originstr = "123456"
local encodestr = crypto.base64_encode(originstr,slen(originstr))
print("base64_encode",encodestr)
--base64_encode MTIzNDU2
crypto.base64_decode()¶
base64解密
- 语法
crypto.base64_decode(originstr,len)
- 参数
参数 | 释义 |
---|---|
originstr | string类型, 需要加密的字符串 |
len | number类型,字符串长度 |
- 返回值
解密后的数据
- 例子
print("base64_decode",crypto.base64_decode(encodestr,slen(encodestr)))
-- base64_decode 123456
json¶
json编译解析
json.encode()¶
json编译
- 语法
json.encode(torigin)
- 参数
参数 | 释义 |
---|---|
torigin | table类型,待编译的源字符 |
- 返回值
json格式字符串
- 例子
local torigin =
{
KEY1 = "VALUE1",
KEY2 = "VALUE2",
KEY3 = "VALUE3",
KEY4 = "VALUE4",
KEY5 = {KEY5_1="VALU5_1",KEY5_2="VALU5_2"},
KEY6 = {1,2,3},
}
local jsondata = json.encode(torigin)
--[[
{"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}},"KEY6":[1,2,3]}
]]
json.decode()¶
json解析
- 语法
json.decode(origin)
- 参数
参数 | 释义 |
---|---|
origin | 待解析的json字符串 |
- 返回值
解析内容,table类型
解析结果,true为成功,false为失败
错误信息
- 例子
-- 正确json字符串
local wrongOrigin = "{\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"
local origin = "{\"KEY3\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"
local tjsondata,result,errinfo = json.decode(origin)
if result then
print(tjsondata["KEY1"])
print(tjsondata["KEY2"])
print(tjsondata["KEY3"])
print(tjsondata["KEY4"])
print(tjsondata["KEY5"]["KEY5_1"],tjsondata["KEY5"]["KEY5_2"])
print(tjsondata["KEY6"][1],tjsondata["KEY6"][2],tjsondata["KEY6"][3])
else
print("json.decode error",errinfo)
end
--origin:正确输出
--wrongOrigin:json.decode error Expected colon but found invalid token at character 5
disp¶
lcd显示
disp.init()¶
初始化显示接口语法
-
disp.init(param)
-
参数
param:显示参数,table类型,包含:
参数 | 释义 |
---|---|
width | lcd宽度 |
height | lcd高 |
bpp | 色深,目前支持16位色彩屏(bpp=16)黑白屏(bpp=1) |
xoffset | x偏移,不设置该域则默认0 |
yoffset | y偏移,不设置该域则默认0 |
bus | 4线spi:disp.BUS_SPI4LINE。并口:disp.BUS_PARALLEL |
pinrst | LCD_RST lcd reset 管脚根据实际硬件填写 |
pincs | LCD_CS lcd cs管脚不填写则使用默认CS管脚 |
initcmd | 初始化指令表 |
- 返回值
无
disp.puttext()¶
显示字符串
- 语法
disp.puttext(str,x,y)
- 参数
参数 | 释义 |
---|---|
str | string类型,显示的字符串 |
x | number类型,x轴坐标 |
y | number类型,y轴坐标 |
- 返回值
无
- 例子
disp.puttext("欢迎使用Luat",16,0) --从坐标16,0位置开始显示"欢迎使用Luat"
disp.clear()¶
清除缓冲区内容,注意不会刷新到屏幕上,只有在update时才会执行刷屏动作
- 语法
disp.clear()
- 参数
无
- 返回值
无
disp.update()¶
将缓冲区内容刷新到屏幕上
- 语法
disp.update()
- 参数
无
- 返回值
无
disp.putimage()¶
在坐标(x,y)处显示图片,目前仅支持bmp和png格式,这个接口只会将显示数据写到缓冲区,只有在执行了update了以后才会真正的刷屏。最后面的四个参数是规定了从file中截取某一部分区域
- 语法
disp.putimage(file,x,y,transcolor,left,top,right,bottom)
- 参数
参数 | 释义 |
---|---|
file | 图片路径 |
x | 显示起始横坐标x(此参数可选,默认为0) |
y | 显示起始横坐标y(此参数可选,默认为0) |
transcolor | 透明色(此参数可选,默认为-1,表示没有透明色) |
left | 截取区域左上角横坐标(此参数可选,默认为0) |
top | 截取区域左上角纵坐标(此参数可选,默认为0) |
right | 截取区域右下角横坐标(此参数可选,默认为0) |
bottom | 截取区域右下角纵坐标(此参数可选,默认为0) |
- 返回值
无
disp.drawrect()¶
绘制矩形,并且填充颜色。填充色可以自行设置也可不填充颜色值格式RGB565。
- 语法
disp.drawrect(left,top,right,bottom,color)
- 参数
参数 | 释义 |
---|---|
left | 矩形框左上角横坐标 |
top | 矩形框左上角纵坐标 |
right | 矩形框右下角横坐标 |
bottom | 矩形框右下角纵坐标 |
color | 矩形框填充色(此参数可选,默认为-1,不填充颜色。需要填充颜色自行设置颜色值) |
- 返回值
无
disp.setcolor()¶
设置前景色
- 语法
disp.setcolor(color)
- 参数
参数 | 释义 |
---|---|
color | 颜色值,以rgb565填充红绿蓝为0xF800 0x07E0 0x001F |
- 返回值
无
disp.setbkcolor()¶
设置背景色
- 语法
disp.setbkcolor(color)
- 参数
参数 | 释义 |
---|---|
color | 颜色值,以rgb565填充红绿蓝为0xF800 0x07E0 0x001F |
- 返回值
无
disp.loadfont()¶
加载字体
- 语法
fontid=disp.loadfont(path)
- 参数
参数 | 释义 |
---|---|
path | 字体文件路径 |
- 返回值
fontid-返回加载后的字体id 用于setfont设置字体
disp.setfont()¶
设置字体
- 语法
oldfontid=disp.setfont(fontid)
- 参数
参数 | 释义 |
---|---|
fontid | 字体id |
- 返回值
oldfontid-返回旧的字体id
disp.sleep()¶
休眠显示模块
- 语法
disp.sleep()
- 参数
无
- 语法
无
disp.getlcdinfo()¶
获取LCD分辨率的宽度和高度(单位是像素)
- 语法
disp.getlcdinfo()
- 参数
无
- 返回值
WIDTH :宽度
HEIGHT : 高度
disp.putqrcode()¶
显示二维码
- 语法
disp.putqrcode(data, width, display_width, x, y)
- 参数
参数 | 释义 |
---|---|
data | 从qrencode.encode返回的二维码数据 |
width | 二维码数据的实际宽度 |
display_width | 二维码实际显示宽度 |
x | 二维码显示起始坐标x |
y | 二维码显示起始坐标y |
- 返回值
无
qrencode¶
二维码数据
qrencode.encode ()¶
创建二维码信息
- 语法
qrencode.encode(string)
- 参数
参数 | 释义 |
---|---|
string | 二维码字符串 |
- 返回值
width 生成的二维码信息宽度
data 生成的二维码数据
- 例子
local width, data = qrencode.encode("http://www.openluat.com")