常用外部设备

LED灯

LIB_LedConfig(p1,p2,p3,p4,p5)

函数描述: LED(LED1~LED4)工作模式配置。注意:LED1~LED4是可以分配在任意D0~D11上的,由开发者自己定义 注意: 该函数只能调用一次

p1需要配置的Led的标识
 “LED1”
“LED2”
“LED3”
“LED4”
p2选择Led所占用的D端口号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3点亮Led所需要的电平值,该值由LED的驱动电路所决定
 “L”:低电平
“H”:高电平
p4设置LED在一个亮灭周期中亮的时间
 0-999999999毫秒
p5设置LED在一个亮灭周期中灭的时间
 0-999999999毫秒

应用示例:

--设置LED2(占用D2端口)以0.2秒亮、0.2秒灭的节奏闪烁,另外假设Led灯是低电平驱动点亮
LIB_LedConfig("LED2","D2","L",200,200)
--LED2开始闪烁
LIB_LedStartWork("LED2")

LIB_LedStartWork(p1)

函数描述: Led开始闪烁

p1需要开始工作的Led的标识
 “LED1”
“LED2”
“LED3”
“LED4”

应用示例:

--设置LED2(占用D2端口)以0.2秒亮、0.2秒灭的节奏闪烁,另外假设Led灯是低电平驱动点亮
LIB_LedConfig("LED2","D2","L",200,200)
--LED2开始闪烁
LIB_LedStartWork("LED2")

LIB_LedStopWork(p1)

函数描述: Led停止闪烁

p1需要停止工作的Led的标识
 “LED1”
“LED2”
“LED3”
“LED4”

应用示例:

--LED2停止闪烁
LIB_LedStopWork("LED2")

独立按键

LIB_ButtonConfig(p1,p2,p3)

函数描述: 按键(BTN1~BTN7)工作模式的配置。注意:BTN1~BTN7是可以分配在任意D0~D11上的,看你的心情。

p1需要配置的按键的标识
 “BTN1”
“BTN2”
“BTN3”
“BTN4”
“BTN5”
“BTN6”
“BTN7”
p2选择按键所占用的D端口号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3按键按下时检测到的有效电平值,该值由按键的电路所决定
 “L”:低电平
“H”:高电平

应用示例:

--设置按键3(占用D1口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN3","D1","L")

r1 = LIB_ButtonQuery(p1)

函数描述: 检测按键(Btn1~Btn7)的动作

p1需要检测的按键的标识
 “BTN1”
“BTN2”
“BTN3”
“BTN4”
“BTN5”
“BTN6”
“BTN7”
r1按键检测返回值
 0: 按键没按下
1: 检测到按键短按动作
2: 检测到按键长按动作(大于3秒)

应用示例:

--设置按键3(占用D0口),假设按键是低电平有效
LIB_ButtonConfig("BTN3","D0","L")
--设置按键4(占用D2口),假设按键是低电平有效
LIB_ButtonConfig("BTN4","D2","L")
--持续检测按键3和4是否有短按动作
while(true)
do    
	--查询按键3是否短按过    
	if LIB_ButtonQuery("BTN3") == 1 then        
		print("Button3 clicked")    
	end    
	--查询按键4是否长按过    
	if LIB_ButtonQuery("BTN4") == 2 then        
		print("Button4 long pressed")    
	end
end

0.96寸oled屏

LIB_0_96_OledConfig(p1)

函数描述: 配置0.96寸oled显示模块和core的连接端口,并初始化开始工作

p1oled模块占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1

应用示例:

--设置0.96寸oled模块占用SCL1和SDA1引脚
LIB_0_96_OledConfig("IIC1")

LIB_0_96_OledPuts(p1,p2,p3)

函数描述: 在p1行,p2列显示字符串。0.96寸oled整个屏幕可以容纳4行且每行长度不超过16列的ascii字符。

p1行号
 “1”,”2″,”3″,”4″
p2列号
 “1”,”2″,”3″,”4″,”5″,”6″,”7″,”8″
“9”,”10″,”11″,”12″,”13″,”14″,”15″,”16″
p3需要显示的字符串
 注意:列号加上字符串长度不能大于16,多出的部分会被截断

应用示例:

--设置0.96寸oled模块占用SCL1和SDA1引脚
LIB_0_96_OledConfig("IIC1")
cnt = 0
while(true)
do
    cnt = cnt + 1
    LIB_DelayMs(1000)
    --每隔1秒,在第2行的起始处(第1列)显示"cnt = xxxxx"字符串
    LIB_0_96_OledPuts("2","1",string.format("cnt = %05d",cnt))
end

LIB_0_96_OledScreenClear()

函数描述: 清除整个屏幕的内容

应用示例:

LIB_0_96_OledScreenClear()

1602LCD(IIc接口)

LIB_LCD1602Config(p1)

函数描述: 配置LCD1602的连接端口,并初始化开始工作

p1IIc LCD1602模块占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1

应用示例:

--设置LCD1602模块占用SCL0和SDA0引脚
LIB_LCD1602Config("IIC0")

LIB_LCD1602Puts(p1,p2,p3,p4)

函数描述: 在p1行,p2列显示字符串。LCD1602整个屏幕可以容纳2行且每行长度不超过16列的ascii字符。

p1行号
 “1”,”2″,”3″,”4″
p2列号
 “1”,”2″,”3″,”4″,”5″,”6″,”7″,”8″
“9”,”10″,”11″,”12″,”13″,”14″,”15″,”16″
p3需要显示的字符串
 注意:列号加上字符串长度不能大于16,多出的部分会被截断
p4背光灯是否打开
 “LightOn”,”LightOff”

应用示例:

--设置LCD1602模块占用SCL0和SDA0引脚
LIB_LCD1602Config("IIC0")
cnt = 1
while(true)
do
    cnt = cnt + 1
    LIB_DelayMs(100)
    --每隔0.1秒,在第2行的起始处(第1列)显示"cnt = xxxxx"字符串
    LIB_LCD1602Puts("2","1",string.format("cnt = %05d",cnt),"LightOn")
end

LIB_LCD1602ScreenClear()

函数描述: 清除整个屏幕的内容

应用示例:

LIB_LCD1602ScreenClear()

TF卡读写

r1,r2 = LIB_Fread(p1,p2)

函数描述: 从文件指定位置开始读取文件内容,一次读取256字节。注意调用该函数会阻塞程序。

p1字符串型,文件名
 注意: 文件名不要超过8字节,后缀名不要超过3个字节
p2整数型,读操作在文件中的起始位置
 以字节为单位
r1整数型,返回本次读取的实际字节数
 r1=0,表示已经读到文件末尾或读操作失败
0<r1<256,表示已经读到文件末尾
r1=256,表示读取到256字节且还未到文件末尾
r2table型,包含实际读取到的内容
 

应用示例:

--从main.lua文件的0地址处开始读取256字节
read_number, read_content = LIB_Fread("main.lua",0)
if read_number > 0 then
    print(string.format("readed %d bytes", #read_content))
end

LIB_Fwrite(p1,p2)

函数描述: 将table内的数据从指定文件的末尾处写入

p1字符串型,文件名
 注意: 文件名不要超过8字节,后缀名不要超过3个字节
p2table型
 table内的元素必须为字节型,元素个数不能超过256个

应用示例:

--向"abc.txt"文件中写入一串整型数据
num_tab = {1,2,3,4,5}
LIB_Fwrite("abc.txt", num_tab)

LIB_Fdelete(p1)

函数描述: 删除文件

p1字符串型,文件名
 注意: 文件名不要超过8字节,后缀名不要超过3个字节

应用示例:

--删除文件"abc.txt"
LIB_Fdelete("abc.txt")

数码管和矩阵键盘

LIB_SegLedsAndMatrixKeysConfig(p1,p2,p3)

函数描述: 配置数码管矩阵键盘模块开始工作。

p1模块DIO引脚所占用的端口号
 “D0″,”D1″,”D2″,”D3″,”D4″,”D5″,”D6″,”D7”,
“D8″已被Core的LED1占用,”D9″已被Core的LED2占用,”D10″已被Core的BTN1占用,”D11″已被Core的BTN2占用
p2模块CLK引脚所占用的端口号
 “D0″,”D1″,”D2″,”D3″,”D4″,”D5″,”D6″,”D7”,
“D8″已被Core的LED1占用,”D9″已被Core的LED2占用,”D10″已被Core的BTN1占用,”D11″已被Core的BTN2占用
p3模块STB引脚所占用的端口号
 “D0″,”D1″,”D2″,”D3″,”D4″,”D5″,”D6″,”D7”,
“D8″已被Core的LED1占用,”D9″已被Core的LED2占用,”D10″已被Core的BTN1占用,”D11″已被Core的BTN2占用

应用示例:

--配置数码管矩阵键盘模块的引脚DIO,CLK,STB占用Core的D7,D6,D5引脚,并开始工作
MQTT工作LIB_SegLedsAndMatrixKeysConfig("D7","D6","D5")

r1,r2 = LIB_MatrixKeysRead()

函数描述: 查询矩阵键盘是否有按键按下,并返回按键值

r1整数型,指示是否由按键按下
 0: 没有
1: 有
r2整数型,按键值
 1-16

应用示例:

--配置数码管矩阵键盘模块的引脚DIO,CLK,STB分别占用Core的D7,D6,D5引脚,并开始工作
LIB_SegLedsAndMatrixKeysConfig("D7","D6","D5")
--查询矩阵键盘是否有按键按下,如果有就print输出
while(true)
do
    keypress_flag,key_pos = LIB_MatrixKeysRead()
    if keypress_flag == 1 then
        print(string.format("Key %d Pressed\r\n", key_pos))
    end
end

LIB_SegLedsWrite(p1,p2,p3)

函数描述: 设置8位数码管需要显示的数值、小数位个数以及数码管亮度

p1整数型,需要显示的数值
 数值的有效范围需要在-9999999,99999999之间,超过部分将截断
p2字符串型,指示p1中的十进制数包含几个小数位
 “0”,”1″,”2″,”3″,”4″,”5″,”6″
p3字符串型,指示数码管显示亮度
 “LEVEL0″,”LEVEL1″,”LEVEL2”,
“LEVEL3″,”LEVEL4″,”LEVEL5”,
“LEVEL6″,”LEVEL7″,”LEVEL8”

“LEVEL0″是完全灭掉,”LEVEL8″是最亮状态

应用示例:

--设置数码管显示8位十进制数值12345.678,亮度为最亮
LIB_SegLedsWrite(12345678, "3", "LEVEL8")

全彩RGB Led

LIB_RGBledConfig(p1,p2,p3)

函数描述: 配置共阴极RGB模块开始工作,模块的R,G,B引脚分别固定占用Core的D0,D1,D2引脚 p1,p2,p3这三个参数用来调整RGB Led白平衡用

p1整数类型,R(红色亮度调整系数)
 0%-100% 当您的RGB硬件模块中的红色Led灯偏暗或偏亮,可以调整该百分比系数
p2整数类型,G(绿色亮度调整系数)
 0%-100% 当您的RGB硬件模块中的绿色Led灯偏暗或偏亮,可以调整该百分比系数
p3整数类型,B(蓝色(亮度调整系数))
 0%-100% 当您的RGB硬件模块中的蓝色Led灯偏暗或偏亮,可以调整该百分比系数

应用示例:

--配置共阴极RGB模块开始工作,模块的R,G,B引脚分别固定占用Core的D0,D1,D2引脚
--三个100表示不调整三色比例,即不考虑白平衡的问题
LIB_RGBledConfig(100,100,100)

LIB_RGBledUpdate(p1,p2,p3)

函数描述: 更新RGB的颜色值

p1整数类型,R(红色)
 0-255
p2整数类型,G(绿色)
 0-255
p3整数类型,B(蓝色)
 0-255

应用示例:

--配置共阴极RGB模块开始工作,模块的R,G,B引脚固定占用Core的D0,D1,D2引脚
LIB_RGBledConfig(100,100,100)
--更新RGB Led灯的色值为120,20,200
LIB_RGBledUpdate(120,20,200)

PCF8574扩展IO口

LIB_PCF8574Config(p1)

函数描述: 配置PCF8574模块占用Core的哪一个IIC端口,

p1IIc PCF8574占用core的引脚
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1

应用示例:

--设置PCF8574模块占用Core的SCL0和SDA0引脚
LIB_PCF8574Config("IIC0")

r1,r2 = LIB_PCF8574ReadPort(p1)

函数描述: 读取PCF8574的8个IO口的电平状态 注意:该函数每调用一次会耗时大概200us,这个耗时需要在您设计Lua代码时加以考虑

p1整数类型,PCF8574器件的iic设备地址
 注意:PCF8574和PCF8574A的地址不一样,且它们芯片上的A0,A1,A2三个引脚的状态也决定了八种不同的地址
r1整数型,指示是否正确读到端口电平
 0: IIc总线异常或PCF8574器件异常
1: 正确读到端口电平
r2整数型,返回一个字节型的端口值(P0-P7)
 字节中的最高位是P7

应用示例:

--设置PCF8574模块占用Core的SCL0和SDA0引脚
LIB_PCF8574Config("IIC0")
--每隔0.3秒读取一次地址为0x27的PCF8574的端口值,如果正常读取到就print输出
while(true)
do
    LIB_DelayMs(300)
    ok,port = LIB_PCF8574ReadPort(0x27)
    if ok == 1 then
        print(string.format("Port Value: %02X\r\n", port))
    else
        print("Read fail, maybe caused by the iic error or device fault!\r\n")
    end
end

r1 = LIB_PCF8574WritePort(p1,p2)

函数描述: 向PCF8574写入8个IO口的电平状态 注意:该函数每调用一次会耗时大概200us,这个耗时需要在您设计Lua代码时加以考虑

p1整数类型,PCF8574器件的iic设备地址
 注意:PCF8574和PCF8574A的地址不一样,且它们芯片上的A0,A1,A2三个引脚的状态也决定了八种不同的地址
p2整数型,需要写入的字节型的端口值(P0-P7)
 字节中的最高位是P7
r1整数型,指示是否正确写入端口电平
 0: IIc总线异常或PCF8574器件异常
1: 正确写入端口电平

应用示例:

--设置PCF8574模块占用Core的SCL0和SDA0引脚
LIB_PCF8574Config("IIC0")
--每隔0.3秒向PCF8574写入端口值0xF0,即P0=P1=P2=P3=0,P4=P5=P6=P7=1
while(true)
do
    LIB_DelayMs(300)
    ok = LIB_PCF8574WritePort(0x27,0xF0)
    if ok == 1 then
        print("Write 0xF0 success\r\n")
    else
        print("Read fail, maybe caused by the iic error or device fault!\r\n")
    end
end

AM1805低功耗

LIB_AM1805Config(p1)

函数描述: 配置AM1805低功耗模块占用Core的哪一个IIC端口

p1IIc AM1805占用core的引脚
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1

应用示例:

--设置AM1805模块占用Core的SCL0和SDA0引脚
LIB_AM1805Config("IIC0")

LIB_AM1805Sleep(p1,p2)

函数描述: 配置AM1805断掉外部系统的电源开始休眠,默认在休眠时间到后唤醒,但也可以增加外部信号唤醒方式。

p1休眠时间
 单位:秒
p2外部信号唤醒方式
 “NONE”: 不使用外部信号唤醒
“RISE”:上升沿唤醒
“FALL”:下降沿唤醒

应用示例:

--设置AM1805模块占用Core的SCL0和SDA0引脚
LIB_AM1805Config("IIC0")
print("power up")
while(true)
do
    --5秒钟后断电,休眠10秒再唤醒
    LIB_DelayMs(5000)
    print("power down")
    --设置AM1805模块开始休眠并断掉系统的电,10秒后唤醒,如果休眠
    --中途检测到上升沿信号,则立刻唤醒
    LIB_AM1805Sleep(10, "RISE")--此时系统将掉电,后面的代码都不再有效了
    --mcu lost power from there
end

SYN6288语音输出

LIB_SYN6288Config(p1,p2)

函数描述: 配置SYN6288语音模块占用的UART端口,以及需要播放的文字的编码

p1SYN6288的UART占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2需要播放的文本的编码信息
 “GB2312”
“GBK”
“BIG5”
“UNICODE”

应用示例:

--设置Lora模块占用TX0、RX0引脚,文本编码为GB2312
LIB_SYN6288Config("UART0","GB2312")

LIB_SYN6288Play(p1)

函数描述: 开始语音播放p1参数所包含的文本内容

p1字符串型,需要播放的语音文字
 字符串长度不能超过200个字节,注意:一个汉字一般占用两个字节

应用示例:

--设置SYN6288模块占用TX0、RX0引脚,文本编码为GB2312
LIB_SYN6288Config("UART0","GB2312")
while(true)
do
    --每隔10秒播放“你好,欢迎光临”
    LIB_SYN6288Play("你好,欢迎光临")
    LIB_DelayMs(10000)
end

LIB_SYN6288Stop()

函数描述: 停止正在播放的语音内容

应用示例:

--停止正在播放的语音内容
LIB_SYN6288Stop()

无线局域网

Ble低功耗蓝牙

LIB_NrfBleDefaultConfig(p1)

函数描述: 按默认参数配置蓝牙,如果对默认参数的值感兴趣,可查看LIB_NrfBleAdvanceConfig里的应用示例,里面的参数即为默认参数 注意: 如果你的项目中同时用到USB功能时,一定要先调用本函数初始化蓝牙之后,再调用LIB_UsbConfig()函数。

p1蓝牙设备名称,即在手机扫描蓝牙设备时列表上显示的设备名字
 字符串型,长度不要超过32字节

service描述: service包含两个特性(Characteristic): 一个用来发送数据,一个用来接收数据

  • Rx Characteristic (UUID: 0x0002)用来接收手机的数据 手机蓝牙可以通过ATT Write方式向Rx Characteristic发送数据
  • Tx Characteristic (UUID: 0x0003)用来向手机发送数据 如果手机蓝牙为Tx Characteristic使能了notification,那么设备就可以通过发送notification的方式向手机蓝牙发送数据

应用示例:

--配置低功耗蓝牙以默认参数工作,设备名称为"MyBle001"
LIB_NrfBleDefaultConfig("MyBle001")

LIB_NrfBleAdvanceConfig(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12)

函数描述: 按指定参数配置蓝牙 注意: 如果你的项目中同时用到USB功能时,一定要先调用本函数初始化蓝牙之后,再调用LIB_UsbConfig()函数。

p1蓝牙设备名称,即在手机扫描蓝牙设备时列表上显示的设备名字。字符串类型,不要超过32字节
p2The advertising interval 蓝牙广播间隔,整数型,单位ms
p3The advertising duration 蓝牙广播持续时长,整数型,单位ms
p4Minimum acceptable connection interval 最小通信间隔,整数型,单位ms
p5Maximum acceptable connection interval 最大通信间隔,整数型,单位ms
p6Slave latency 忽略通信间隔次数,整数型
p7Connection supervisory timeout 连接失效时间,整数型,单位ms
p8The first connect params_update delay 第一次和手机请求参数更新的时间点,整数型,单位ms
p9The next connect params_update delay 下一次和手机请参数更新的时间点,整数型,单位ms
p10Number of attempts before giving up the connection parameter negotiation,整数型,单位ms
p11uuid类型,整数型,1: 16-bit,2: 128-bit 。注意: 目前仅支持16bit
p12service uuid值, 16bit整数型

service描述: service包含两个特性(Characteristic): 一个用来发送数据,一个用来接收数据

  • Rx Characteristic (UUID: 0x0002)用来接收手机的数据 手机蓝牙可以通过ATT Write方式向Rx Characteristic发送数据
  • Tx Characteristic (UUID: 0x0003)用来向手机发送数据 如果手机蓝牙为Tx Characteristic使能了notification,那么设备就可以通过发送notification的方式向手机蓝牙发送数据

应用示例:

--按如下指定参数配置低功耗蓝牙工作:
--设备名称为"MyBle001",广播间隔40ms,广播时长180秒循环广播
--最小连接间隔20ms,最大75ms,0间隔忽略,连接失效时间4秒
--第一次请求参数更新时间5秒,之后每次间隔30秒,尝试请求参数更新次数最多3次就放弃
--uuid类型为16bit,service uuid = 0x0001
LIB_NrfBleAdvanceConfig("MyBle001",40,18000,20,75,0,4000,5000,30000,3,1,0x0001)

r1,r2 = LIB_NrfBleRecv()

函数描述: 查询是否收到蓝牙数据,如果收到数据则返回接收到的蓝牙数据

r1整数型,指示是否收到蓝牙数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到蓝牙的数据
 

应用示例:

--配置低功耗蓝牙以默认参数工作,设备名称为"MyBle001"
LIB_NrfBleDefaultConfig("MyBle001")
--查询是否收到蓝牙数据,如果收到就print输出
while(true)
do
    recv_flag,recv_tab = LIB_NrfBleRecv()
    if recv_flag == 1 then
        print(string.format("receive %d bytes", #recv_tab))
    end
end

LIB_NrfBleSend(p1)

函数描述: 将table p1中的数据通过蓝牙发送出去

p1table类型
 table内的元素必须为字节型,元素个数必须小于255个
为了兼容性建议不超过20个,因为Ble4.0最大包为20个字节

应用示例:

--配置低功耗蓝牙以默认参数工作,设备名称为"MyBle001"
LIB_NrfBleDefaultConfig("MyBle001")
table = {1,2,3,4,5}
while(true)
do
    --每隔3秒发送一次数据
    LIB_NrfBleSend(table)
    LIB_DelayMs(3000)
end

r1 = LIB_NrfBleConnectQuery()

函数描述: 查询是否已和手机蓝牙建立连接

r1整数型,指示是否建立连接
 0: 未连接
1: 已经连上

应用示例:

--配置低功耗蓝牙以默认参数工作,设备名称为"MyBle001"
LIB_NrfBleDefaultConfig("MyBle001")
while(true)
do
    --每隔3秒查询一次是否已和手机蓝牙建立连接
    LIB_DelayMs(3000)
    if LIB_NrfBleConnectQuery() == 1 then
        print("ble connected")
    end
end

Mesh网络(Thread)

LIB_MeshConfig(p1,p2,p3)

函数描述: 配置设备的网络参数,如果设备是网络中的第一个节点,则自动形成Mesh网络,否则加入已存在的Mesh网络。 PanID参数和Channel参数用来决定加入哪个网络,并保证网络的唯一性,所以在同一个物理空间内,是可以共存多个PanID和Channel不一致的Mesh网络。

注意! 如果用了2.4G Mesh,Ble低功耗蓝牙和USB接口就不能再用了。

p1字符串类型,设备在Mesh网络中扮演的角色
 “Client”:上传自己数据给Server,并接收Server端回应的command
“Server”:一个Mesh网络中只能有一个Server
p2整数类型,PanID参数
 802.15.4 PAN ID used by Thread Mesh 范围<0-65535>
Mesh网络的标识
p3整数类型,Channel参数
 802.15.4 channel used by Thread 范围<11-26>
Mesh网络的频率

应用示例:

--配置设备为server节点并开始工作,网络参数为:Pan ID=0x1234 Channel=11
LIB_MeshConfig("Server",0x1234,11)

r1,r2,r3 = LIB_MeshServerRecvData()

函数描述: server查询是否收到client上传的data

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2字符串型,数据的来源(client名称)
 
r3table型,包含接收到的数据
 

应用示例:

--配置设备为server节点并开始工作,网络参数为:Pan ID=0x1234 Channel=11
LIB_MeshConfig("Server",0x1234,11)
--查询是否收到数据,如果收到就print输出
while(true)
do
    recv_flag, recv_client_name, recv_data_tab = LIB_MeshServerRecvData()
    if recv_flag == 1 then
        print(string.format("receive %d bytes data from %s", #recv_data_tab, recv_client_name))
    end
end

LIB_MeshServerSendCommand(p1,p2)

函数描述: server向client下发8字节的命令数据。

注意1: 下发的command不会马上被client收到,而是取决于对应的client下次何时上传数据,server会自动在回复给client的response中附带上该command, 这样做是因为client有可能为低功耗传感器设备,并不会一直保持在线。

注意2: 下发的command并不保证一定会被client收到,比如下发一条command给”client01″还没被”client01″收到就被新下发给”client02″的command给覆盖了, 但是Core专门为名称是”CONTROL0″ ~ “CONTROL9″的10个client分配了专有command缓存,所以mesh网络内最多可以有10个client可以确保接收命令不被其他client覆盖。

注意3:由于网络负荷大或其他原因,Core并不保证每次下发给client的command能够100%被client收到,这一点”CONTROL(0~9)”也不例外, 所以如果希望server下发的command 100%到达client,不仅client的名字需为“CONTROL(0~9)”,而且需要用户在应用层面上做保障,比如读取下一次client上传的状态 以确认上一次的command是否达到。

p1字符串型,需要下发至的client名称,需为8个字节
 
p2table类型 server下发给client的8字节command数据
 table内的元素必须为字节型,元素个数为8个字节

应用示例:

cmd_tab = {1,2,3,4,5,6,7,8}
--向普通 client发送命令
LIB_MeshServerSendCommand("Client01",cmd_tab)
--向CONTROL client发送命令
LIB_MeshServerSendCommand("CONTROL0",cmd_tab)

r1 = LIB_MeshServerNetStateQuery()

函数描述: 查询sever当前的网络状态

r1整数型
 0: server未加入mesh网络
1: server已加入mesh网络

应用示例:

if LIB_MeshServerNetStateQuery() == 1 then
    print("Server had joined in mesh net\r\n")
end

r1,r2 = LIB_MeshClientRecvCommand()

函数描述: client查询是否收到server下发的8字节command

r1整数型,指示是否收到命令
 0: 未收到命令
1: 收到命令
r2table型,包含接收到的8字节命令
 

应用示例:

recv_flag, recv_cmd_tab = LIB_MeshClientRecvCommand()
if recv_flag == 1 then
    print(string.format("receive %d bytes command from server", #recv_cmd_tab))
end

LIB_MeshClientSendData(p1,p2)

函数描述: client向server上传8字节的数据。 此上传过程如果失败Core会自动启动重发机制,如果系统重发了5次都没成功Core会认为和server已断开连接,可以通过LIB_MeshClientNetStateQuery函数查询到连接是否已断开

p1字符串型,client自己的名称,需为8个字节
 
p2table类型 client上传给server的8字节数据
 table内的元素必须为字节型,元素个数为8个字节

应用示例:

data_tab = {1,2,3,4,5,6,7,8}
LIB_MeshClientSendData("Client01",data_tab)

r1 = LIB_MeshClientNetStateQuery()

函数描述: 查询client当前的网络状态

r1整数型
 0: client未加入mesh网络
1: client已加入mesh网络但未和server建立连接
2: 已加入mesh网络且和server建立了连接

应用示例:

link = LIB_MeshClientNetStateQuery()
if link == 0 then
    pirnt("Client had not joined in mesh net\r\n")
elseif link == 1 then
    print("Client had joined in mesh net\r\n")
elseif link == 2 then
    print("Client had joined in mesh and connected with server\r\n")
end

无线广域网

Wifi TCP通信(esp8266)

LIB_WifiTcpConfig(p1,p2,p3,p4,p5,p6,p7)

函数描述: 配置WIFI模块(esp8266)占用的引脚端口,并以TCP Client方式和Server(服务器)通信

p1esp8266模块的UART占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2esp8266模块的reset占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3字符串型,路由器SSID(账号)
 
p4字符串型,路由器Password(密码)
 
p5字符串型,服务器的IP地址或域名
 
p6整数型,服务器的端口号
 
p7整数型,心跳包间隔时间 ,单位:秒,建议该值不要小于20秒
 当该值大于0时,如果Core在该间隔时间内即没收到服务器的心跳包响应也没收到服务器下发的任意数据,此时Core会认为服务器已断联,Core会重新尝试连接服务器

注意1:心跳包是由开发者在Lua代码中以不大于p7的心跳时间间隔向服务器发送一包数据,并且服务器应返回心跳包响应数据。心跳包及响应的具体内容和长度由您和服务器端开发人员商量。 注意2:当p7的值为0的时候,Core默认关闭心跳机制(即Core不会因为服务器长时间没有数据下发而重启wifi模块),但真正开发产品时还是需要您和服务器端开发人员商量好心跳包的策略,这样就能保证wifi模块常年不掉线。

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,TCP Client模式
--路由器账号:mywifi 路由器密码:abc123,tcp服务器域名:www.shineblink.com 端口号:1266
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiTcpConfig函数的p7参数详细介绍
LIB_WifiTcpConfig("UART0","D5","mywifi","abc123","www.shineblink.com",1266,0)

r1,r2 = LIB_WifiTcpRecv()

函数描述: 查询是否收到TCP server发来数据,如果收到数据则返回接收到的数据。注意服务端下发的每个数据包尽量不要大于256字节,且数据包时间间隔尽量不要小于100ms

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,TCP Client模式
--路由器账号:mywifi 路由器密码:abc123,tcp服务器域名:www.shineblink.com 端口号:1266
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiTcpConfig函数的p7参数详细介绍
LIB_WifiTcpConfig("UART0","D5","mywifi","abc123","www.shineblink.com",1266,0)
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的字节数
    recv_flag,recv_tab = LIB_WifiTcpRecv()
    if recv_flag == 1 then
        print(string.format("tcp receive %d bytes", #recv_tab))
    end
end

LIB_WifiTcpSend(p1)

函数描述: 发送p1数组中的数据,每包发送的数据量不要超过256字节,发送间隔时间也尽量大于100ms 注意:只有当TCP连接成功后,调用该函数才会发送,否则该函数会自动忽略对其的调用

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,TCP Client模式
--路由器账号:mywifi 路由器密码:abc123,tcp服务器域名:www.shineblink.com 端口号:1266
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiTcpConfig函数的p7参数详细介绍
LIB_WifiTcpConfig("UART0","D5","mywifi","abc123","www.shineblink.com",1266,0)
table = {1,2,3,4,5}
while(true)
do
    --每隔5秒发送一次心跳包数据
    LIB_WifiTcpSend(table)
    LIB_DelayMs(5000)
end

Wifi UDP通信(esp8266)

LIB_WifiUdpConfig(p1,p2,p3,p4,p5,p6,p7)

函数描述: 配置WIFI模块(esp8266)占用的引脚端口,并以UDP方式通信,自身默认UDP端口是1112

p1esp8266模块的UART占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2esp8266模块的reset占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3字符串型,路由器SSID(账号)
 
p4字符串型,路由器Password(密码)
 
p5字符串型,对端的IP地址或域名
 
p6整数型,对端的端口号
 
p7整数型,心跳包间隔时间 ,单位:秒,建议该值不要小于20秒
 当该值大于0时,如果Core在该间隔时间内即没收到心跳包响应也没收到对端发来的任意数据,此时Core会认为通信链路已断开,Core会重新尝试恢复通信链路

注意1:心跳包是由开发者在Lua代码中以不大于p7的心跳时间间隔向服务器发送一包数据,UDP的另一端应返回心跳包响应数据。心跳包及响应的具体内容和长度由您自己定义。 注意2:当p7的值为0的时候,Core默认关闭心跳机制(即Core不会因为对端长时间没有数据下发而重启wifi模块),但真正开发产品时还是需要您和对端的开发人员商量好心跳包的策略,这样就能保证wifi模块常年不掉线。

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,UDP模式,端口1112
--路由器账号:mywifi 路由器密码:abc123,UDP要连接的对端IP:192.168.1.101 端口号:5678
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiUdpConfig函数的p7参数详细介绍
LIB_WifiUdpConfig("UART0","D5","mywifi","abc123","192.168.1.101",5678,0)

r1,r2 = LIB_WifiUdpRecv()

函数描述: 查询是否收到UDP对端发来的数据,如果收到数据则返回接收到的数据。注意对端发来的每个数据包尽量不要大于256字节,且数据包时间间隔尽量不要小于100ms

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,UDP模式,端口1112
--路由器账号:mywifi 路由器密码:abc123,UDP要连接的对端IP:192.168.1.101 端口号:5678
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiUdpConfig函数的p7参数详细介绍
LIB_WifiUdpConfig("UART0","D5","mywifi","abc123","192.168.1.101",5678,0)
while(true)
do
    --查询是否收到UDP数据,如果收到就print输出收到的字节数
    recv_flag,recv_tab = LIB_WifiUdpRecv()
    if recv_flag == 1 then
        print(string.format("udp receive %d bytes", #recv_tab))
    end
end

LIB_WifiUdpSend(p1)

函数描述: 发送p1数组中的数据,每包发送的数据量不要超过256字节,发送间隔时间也尽量大于100ms 注意:只有当esp8266连上AP后,调用该函数才会发送,否则该函数会自动忽略对其的调用

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,UDP模式,端口1112
--路由器账号:mywifi 路由器密码:abc123,UDP要连接的对端IP:192.168.1.101 端口号:5678
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiUdpConfig函数的p7参数详细介绍
LIB_WifiUdpConfig("UART0","D5","mywifi","abc123","192.168.1.101",5678,0)
table = {1,2,3,4,5}
while(true)
do
    --每隔5秒发送一次心跳包数据
    LIB_WifiUdpSend(table)
    LIB_DelayMs(5000)
end

MQTT通信

LIB_MQTTConfig(p1,p2,p3,p4,p5,p6,p7)

函数描述: 配置MQTT工作

p1选择MQTT通信的载体是WIFI(esp8266)还是以太网(w5500)
 “WIFI”,”ETHERNET”
p2MQTT连接参数: client ID
 字符串类型
p3MQTT连接参数: user name
 字符串类型
p4MQTT连接参数: password
 字符串类型
p5MQTT连接参数: keepalive ,单位:秒
 整数型
p6MQTT订阅路径: subscribe topic
 字符串类型
p7订阅消息的QOS等级
 “QOS0″,”QOS1″,”QOS2”

应用示例:

--配置MQTT底层为WIFI传输(esp8266),并按照如下参数进行MQTT连接
LIB_MQTTConfig("WIFI","ClientID","UsrName","pswd","60","/subtopic/get","QOS1")

r1,r2,r3 = LIB_MqttRecvSub()

函数描述: 查询是否收到服务器( broker )下发的订阅消息

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2字符串型,接收到的订阅数据的topic
 
r3字符串型,接收到的订阅数据的内容
 

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,TCP Client模式
--路由器账号:mywifi 路由器密码:abc123,tcp服务器域名:www.shineblink.com 端口号:1883
--心跳包间隔时间180秒。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiTcpConfig函数的p7参数详细介绍
LIB_WifiTcpConfig("UART0","D5","mywifi","abc123","www.shineblink.com",1883,180)
--配置MQTT底层为WIFI传输(esp8266),并按照如下参数进行MQTT连接
LIB_MQTTConfig("WIFI","ClientID","UsrName","pswd","60","/subtopic/get","QOS1")
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的字节数
    recv_flag,topic,data = LIB_MqttRecvSub()
    if recv_flag == 1 then
        print(string.format("Get datas on topic %s: %s", topic, data))
    end
end

LIB_MqttSendPub(p1,p2,p3)

函数描述: 向服务器订阅的p2主题publish消息 注意:只有当MQTT连接成功后,调用该函数才会发送,否则该函数会自动忽略对其的调用

p1QOS等级
 “QOS0″,”QOS1″,”QOS2”
p2MQTT发布路径: publish topic
 字符串类型
p3MQTT发布内容
 字符串类型

应用示例:

--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,TCP Client模式
--路由器账号:mywifi 路由器密码:abc123,tcp服务器域名:www.shineblink.com 端口号:1883
--心跳包间隔时间180秒。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiTcpConfig函数的p7参数详细介绍
LIB_WifiTcpConfig("UART0","D5","mywifi","abc123","www.shineblink.com",1883,180)
--配置MQTT底层为WIFI传输(esp8266),并按照如下参数进行MQTT连接
LIB_MQTTConfig("WIFI","ClientID","UsrName","pswd","60","/subtopic/get","QOS1")
while(true)
do
    --每隔5秒向服务器publish一次消息
    LIB_MqttSendPub("QOS1", "/pubtopic/update", "helloworld")
    LIB_DelayMs(5000)
end

LIB_JsonParse(p1,p2)

函数描述: 根据JsonPath(p2)来提取Json文本(p1)中所要找的文本(value) 注意:只有当MQTT连接成功后,调用该函数才会发送,否则该函数会自动忽略对其的调用

p1Json文本
 字符串类型
p2Json路径
 字符串类型
r1解析出的value值
 字符串类型

应用示例:

str1 = "{"foo": { "bar": [ 1, 2, 3] }, "baz": true}"
print(LIB_JsonParse(str1, "$.foo.bar[1]")) --结果: "2"
str2 = "{"val":123: , "nnn": what}"
print(LIB_JsonParse(str2, "$.val")) --结果: "123"

NBIOT TCP通信(m5311)

LIB_NbTcpConfig(p1,p2,p3,p4,p5,p6)

函数描述: 配置NB模块(m5311)占用的引脚端口,并以TCP Client方式和Server(服务器)通信

p1m5311模块的UART引脚占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2m5311模块的RST引脚占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3配置m5311模块的RST引脚是低电平复位还是高电平复位(取决于您的NB模块电路实现原理)
 “LOW”,”HIGH”
p4m5311模块的PWR引脚占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p5配置m5311模块的PWR引脚是低电平开机还是高电平开机(取决于您的NB模块电路实现原理)
 “LOW”,”HIGH”
p6字符串型,服务器的IP地址
 
p7整数型,服务器的端口号
 
p8整数型,心跳包间隔时间 ,单位:秒,建议该值不要小于20秒
 当该值大于0时,如果Core在该间隔时间内即没收到服务器的心跳包响应也没收到服务器下发的任意数据,此时Core会认为服务器已断联,Core会重新尝试连接服务器

注意1:心跳包是由开发者在Lua代码中以不大于p8的心跳时间间隔向服务器发送一包数据,并且服务器应返回心跳包响应数据。心跳包及响应的具体内容和长度由您和服务器端开发人员商量。 注意2:当p8的值为0的时候,Core默认关闭心跳机制(即Core不会因为服务器长时间没有数据下发而重启NB模块),但真正开发产品时还是需要您和服务器端开发人员商量好心跳包的策略,这样就能保证NB模块常年不掉线。

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,TCP Client模式
--tcp服务器IP:"103.46.128.49" 端口号:28438
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_NbTcpConfig函数的p8参数详细介绍
LIB_NbTcpConfig("UART0","D5","HIGH","D6","HIGH","103.46.128.49",28438,0)

r1,r2 = LIB_NbTcpRecv()

函数描述: 查询是否收到TCP server发来数据,如果收到数据则返回接收到的数据。注意服务端下发的每个数据包尽量不要大于100字节,且数据包时间间隔尽量不要小于1秒

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,TCP Client模式
--tcp服务器IP:"103.46.128.49" 端口号:28438
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_NbTcpConfig函数的p8参数详细介绍
LIB_NbTcpConfig("UART0","D5","HIGH","D6","HIGH","103.46.128.49",28438,0)
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的字节数
    recv_flag,recv_tab = LIB_NbTcpRecv()
    if recv_flag == 1 then
        print(string.format("tcp receive %d bytes", #recv_tab))
    end
end

LIB_NbTcpSend(p1)

函数描述: 发送p1数组中的数据,每包发送的数据量不要超过100字节,发送间隔时间也尽量大于100ms 注意:只有当TCP连接成功后,调用该函数才会发送,否则该函数会自动忽略对其的调用

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,TCP Client模式
--tcp服务器IP:"103.46.128.49" 端口号:28438
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_NbTcpConfig函数的p8参数详细介绍
LIB_NbTcpConfig("UART0","D5","HIGH","D6","HIGH","103.46.128.49",28438,0)
table = {1,2,3,4,5}
while(true)
do
    --每隔5秒发送一包数据
    LIB_NbTcpSend(table)
    LIB_DelayMs(5000)
end

NBIOT UDP通信(m5311)

LIB_NbUdpConfig(p1,p2,p3,p4,p5,p6)

函数描述: 配置NB模块(m5311)占用的引脚端口,并以Udp方式和Udp对端通信

p1m5311模块的UART引脚占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2m5311模块的RST引脚占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3配置m5311模块的RST引脚是低电平复位还是高电平复位(取决于您的NB模块电路实现原理)
 “LOW”,”HIGH”
p4m5311模块的PWR引脚占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p5配置m5311模块的PWR引脚是低电平开机还是高电平开机(取决于您的NB模块电路实现原理)
 “LOW”,”HIGH”
p6字符串型,Udp对端的IP地址
 
p7整数型,Udp对端的端口号
 
p8整数型,心跳包间隔时间 ,单位:秒,建议该值不要小于20秒
 当该值大于0时,如果Core在该间隔时间内没收到Udp对端发的任何数据,此时Core会认为Udp对端已断联,Core会重新尝试连接Udp对端

注意1:心跳包是由开发者在Lua代码中以不大于p8的心跳时间间隔向Udp对端发送一包数据,并且Udp对端应返回心跳包响应数据。心跳包及响应的具体内容和长度由您和Udp对端开发人员商量。 注意2:当p8的值为0的时候,Core默认关闭心跳机制(即Core不会因为长时间没有收到Udp对端数据而重启NB模块),但真正开发产品时还是需要您和Udp对端开发人员商量好心跳包的策略,这样就能保证NB模块常年不掉线。

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,Udp 模式
--Udp对端IP:"103.46.128.49" 端口号:28438
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_NbUdpConfig函数的p8参数详细介绍
LIB_NbUdpConfig("UART0","D5","HIGH","D6","HIGH","103.46.128.49",28438,0)

r1,r2 = LIB_NbUdpRecv()

函数描述: 查询是否收到Udp 对端发来数据,如果收到数据则返回接收到的数据。注意Udp对端发的每个数据包尽量不要大于100字节,且数据包时间间隔尽量不要小于1秒

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,Udp 模式
--Udp对端IP:"103.46.128.49" 端口号:28438
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_NbUdpConfig函数的p8参数详细介绍
LIB_NbUdpConfig("UART0","D5","HIGH","D6","HIGH","103.46.128.49",28438,0)
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的字节数
    recv_flag,recv_tab = LIB_NbUdpRecv()
    if recv_flag == 1 then
        print(string.format("Udp receive %d bytes", #recv_tab))
    end
end

LIB_NbUdpSend(p1)

函数描述: 发送p1数组中的数据,每包发送的数据量不要超过100字节,发送间隔时间也尽量大于100ms

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,Udp 模式
--Udp对端IP:"103.46.128.49" 端口号:28438
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_NbUdpConfig函数的p8参数详细介绍
LIB_NbUdpConfig("UART0","D5","HIGH","D6","HIGH","103.46.128.49",28438,0)
table = {1,2,3,4,5}
while(true)
do
    --每隔5秒发送一包数据
    LIB_NbUdpSend(table)
    LIB_DelayMs(5000)
end

NBIOT MQTT通信(m5311)

LIB_NbMqttM5311Config(p1,p2,p3,p4,p5,p6,p7)

函数描述: 配置NB-IOT模块(m5311)以MQTT方式工作,并设置相关参数

p1m5311模块的UART引脚占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2m5311模块的RST引脚占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3配置m5311模块的RST引脚是低电平复位还是高电平复位(取决于您的NB模块电路实现原理)
 “LOW”,”HIGH”
p4m5311模块的PWR引脚占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p5配置m5311模块的PWR引脚是低电平开机还是高电平开机(取决于您的NB模块电路实现原理)
 “LOW”,”HIGH”
p6字符串型,服务器的IP地址
 
p7整数型,服务器的端口号
 
p8MQTT连接参数: client ID
 字符串类型
p9MQTT连接参数: user name
 字符串类型
p10MQTT连接参数: password
 字符串类型
p11MQTT连接参数: keepalive ,单位:秒
 整数型
p12MQTT订阅路径: subscribe topic
 字符串类型
p13订阅消息的QOS等级
 “QOS0″,”QOS1″,”QOS2”

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,MQTT模式
--MQTT服务器地址(适用于ONE NET平台)
server_addr = "183.230.40.96" --中移物联网MQTT接入服务ip地址
server_port = 1883
--MQTT 连接参数(适用于ONE NET平台)
mqtt_con_clientID = "TestDevice001"
mqtt_con_username = "353255"
mqtt_con_password = "version=2018-10-31&amp;res=products%2F353255%2Fdevices%2FTestDevice001&amp;et=1893427200&amp;method=md5&amp;sign=%2F5RJwGwytPWvVDB04K7rnw%3D%3D"
--MQTT topic相关参数(适用于ONE NET平台)
mqtt_sub_topic = "$sys/353255/TestDevice001/cmd/request/+"--订阅用
mqtt_pub_topic = "$sys/353255/TestDevice001/dp/post/json" --发布用
--KeepAlive周期180秒
LIB_NbMqttM5311Config("UART0","D5","HIGH","D6","HIGH",server_addr,server_port,mqtt_con_clientID,mqtt_con_username,mqtt_con_password,180,mqtt_sub_topic,QOS0)

r1,r2,r3 = LIB_NbMqttM5311RecvSub()

函数描述: 查询是否收到服务器( broker )下发的订阅消息,该消息总长度尽量不要超过256字节

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2字符串型,接收到的订阅数据的topic
 
r3字符串型,接收到的订阅数据的内容
 

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,MQTT模式
--MQTT服务器地址(适用于ONE NET平台)
server_addr = "183.230.40.96" --中移物联网MQTT接入服务ip地址
server_port = 1883
--MQTT 连接参数(适用于ONE NET平台)
mqtt_con_clientID = "TestDevice001"
mqtt_con_username = "353255"
mqtt_con_password = "version=2018-10-31&amp;res=products%2F353255%2Fdevices%2FTestDevice001&amp;et=1893427200&amp;method=md5&amp;sign=%2F5RJwGwytPWvVDB04K7rnw%3D%3D"
--MQTT topic相关参数(适用于ONE NET平台)
mqtt_sub_topic = "$sys/353255/TestDevice001/cmd/request/+"--订阅用
mqtt_pub_topic = "$sys/353255/TestDevice001/dp/post/json" --发布用
--KeepAlive周期180秒
LIB_NbMqttM5311Config("UART0","D5","HIGH","D6","HIGH",server_addr,server_port,mqtt_con_clientID,mqtt_con_username,mqtt_con_password,180,mqtt_sub_topic,QOS0)
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的字节数
    recv_flag,topic,data = LIB_NbMqttM5311RecvSub()
    if recv_flag == 1 then
        print(string.format("Get datas on topic %s: %s", topic, data))
    end
end

LIB_NbMqttM5311SendPub(p1,p2,p3)

函数描述: 向服务器订阅的p2主题publish消息 注意:1. 只有当MQTT连接成功后,调用该函数才会发送,否则该函数会自动忽略对其的调用

  1. p2和p3的长度总和尽量不要超过200字节
p1QOS等级
 “QOS0″,”QOS1″,”QOS2”
p2MQTT发布路径: publish topic
 字符串类型
p3MQTT发布内容
 字符串类型

应用示例:

--设置m5311 NB模块占用TX0、RX0、D5、D6引脚,MQTT模式
--MQTT服务器地址(适用于ONE NET平台)
server_addr = "183.230.40.96" --中移物联网MQTT接入服务ip地址
server_port = 1883
--MQTT 连接参数(适用于ONE NET平台)
mqtt_con_clientID = "TestDevice001"
mqtt_con_username = "353255"
mqtt_con_password = "version=2018-10-31&amp;res=products%2F353255%2Fdevices%2FTestDevice001&amp;et=1893427200&amp;method=md5&amp;sign=%2F5RJwGwytPWvVDB04K7rnw%3D%3D"
--MQTT topic相关参数(适用于ONE NET平台)
mqtt_sub_topic = "$sys/353255/TestDevice001/cmd/request/+"--订阅用
mqtt_pub_topic = "$sys/353255/TestDevice001/dp/post/json" --发布用
--KeepAlive周期180秒
LIB_NbMqttM5311Config("UART0","D5","HIGH","D6","HIGH",server_addr,server_port,mqtt_con_clientID,mqtt_con_username,mqtt_con_password,180,mqtt_sub_topic,QOS0)
while(true)
do
    --每隔5秒向服务器publish一次消息
    LIB_NbMqttM5311SendPub("QOS0", mqtt_pub_topic, "helloworld")
    LIB_DelayMs(5000)
end

r1,r2,r3,r4,r5 = LIB_NbStatusQuery()

函数描述: 查询NBIOT模块的状态,以及IMEI、IMSI、ICCID号、信号强度 注意:该函数最好在NBIOT模块上电后5秒再调用

r1字符串,指示模块当前的状态
 “power on”:模块上电完成
“sim card is detected”:检测到sim卡
“celluar connected” 已连上附近基站
r2字符串,IMEI号
 数字串
r3字符串,IMSI号
 数字串
r4字符串,ICCID号
 数字串
r5整数型,信号强度(RSSI)
 单位: dBm ,最小值:-113dBm。注意:该信号强度只是模块上电入网时的信号强度,并不会实时变化

应用示例:

State,IMEI,IMSI,ICCID,RSSI = LIB_NbStatusQuery()
print(string.format("module state: %s", State))
print(string.format("module IMEI: %s", IMEI))
print(string.format("module IMSI: %s", IMSI))
print(string.format("module ICCID: %s", ICCID))
print(string.format("module RSSI: %d dBM", RSSI))

Lora通信

LIB_LoraConfig(p1,p2,p3,p4,p5,p6,p7)

函数描述: 配置Lora模块(sx1278)占用的引脚端口,以及Lora通信相关参数的初始化

p1Lora模块的UART占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2Lora模块的Aux占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3Lora模块的Md0占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p4整数型,Lora模块的通信地址
 范围:0-65535
p5整数型,Lora模块的通信信道
 范围:410Mhz-441Mhz
p6Lora模块的无线通信速率
 “0.3kpbs”
“1.2kpbs”
“2.4kpbs”
“4.8kpbs”
“9.6kpbs”
“19.2kpbs”
p7Lora模块的无线发射功率
 “11dB”
“14dB”
“17dB”
“20dB”

应用示例:

--设置Lora模块占用TX0、RX0、Aux接D5引脚,Md0接D6引脚
--Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm
LIB_LoraConfig("UART0","D5","D6",100,433,"9.6kpbs","20dB")

r1,r2,r3 = LIB_LoraRecv()

函数描述: 查询是否收到Lora对端发来的数据,如果收到数据则返回接收到的数据来源及内容。注意对端发来的每个数据包尽量不要大于16字节,且数据包时间间隔尽量不要小于1秒

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2整数型,数据来源地址
 Lora地址范围应该在0-65535
r3table型,包含接收到的数据
 

应用示例:

---设置Lora模块占用TX0、RX0、Aux接D5引脚,Md0接D6引脚
--Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm
LIB_LoraConfig("UART0","D5","D6",100,433,"9.6kpbs","20dB")
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的数据个数,以及数据来源地址
    recv_flag,recv_addr,recv_tab = LIB_LoraRecv()
    if recv_flag == 1 then
        print(string.format("receive %d bytes from %d", #recv_tab, recv_addr))
    end
end

LIB_LoraSend(p1,p2)

函数描述: 将p2数组中的数据发送到地址为p1的Lora对端,每包发送的数据量不要超过16字节,每包发送间隔时间也尽量大于1秒

p1整数型,发送目的地址
 范围:0-65535
p2table类型
 table内的元素必须为字节型,元素个数尽量不超过16个

应用示例:

--设置Lora模块占用TX0、RX0、Aux接D5引脚,Md0接D6引脚
--Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm
LIB_LoraConfig("UART0","D5","D6",100,433,"9.6kpbs","20dB")
table = {1,2,3,4,5}
while(true)
do
    --每隔5秒向地址为122的对端Lora节点发送一包5字节的数据
    LIB_LoraSend(122,table)
    LIB_DelayMs(5000)
end

无线RFID

IC卡功能(RC522读写卡模块)

LIB_RC522Config()

函数描述: 初始化RC522读卡模块,初始化后,后台会一直寻找有效IC卡的出现 RC522模块占用CORE的SPI四个引脚以及NFC1引脚,其中NFC1作为RC522模块的复位引脚。

应用示例:

--初始化RC522读卡模块
LIB_RC522Config()

r1,r2,r3 = LIB_RC522CardFind()

函数描述: 查询是否发现有效的卡,并返回IC卡的类型字符串和4字节的UID 注意:一旦发现有效的卡后,在1秒内不管卡还在不在检测范围,调用LIB_RC522CardFind都会返回有效卡状态 1秒后如果卡确实不在检测范围后,LIB_RC522CardFind才会返回无卡状态。

r1整数型,指示是否发现有效的卡
 0: 还未发现有效的卡
1: 已发现有效的卡
r2字符串型,IC卡的类型字符串
 比如: “M1-S50″,”M1-S70″,”MF-UltraLight”,”MF-Pro”,”MF Desire”
r3table型,包含4字节的UID
 

应用示例:

--初始化RC522读卡模块并开始在后台一直寻找有效IC卡的出现
LIB_RC522Config()
--开始大循环
while(GC(1) == true)
do
    --如果发现IC卡,就输出其卡类型以及卡的32位ID号
    CardFoundFlag,Type,UID = LIB_RC522CardFind()
    if CardFoundFlag == 1 then
        print(string.format("Type:%s\r\nTag UID:%02x %02x %02x %02x",Type,UID[0],UID[1],UID[2],UID[3]))
    end
end

r1 = LIB_RC522CardAuth(p1,p2,p3,p4)

函数描述: 验证密码p3是否和IC卡的扇区p2的密码匹配(在每次读写IC卡时都需要执行该操作)

p1密码验证模式
 “KEYA”: 验证A密钥
“KEYB”: 验证B密钥
p2指定需要验证密码的Sector区
 “Sector0″,”Sector1″,”Sector2″,”Sector3″,”Sector4″,”Sector5″,”Sector6″,”Sector7″,”Sector8”,
“Sector9″,”Sector10″,”Sector11″,”Sector12″,”Sector13″,”Sector14″,”Sector15”
p3table类型 , IC卡的6字节密码
 table内的元素必须为字节型,元素个数必须为6个
p4table类型,IC卡的4字节UID
 table内的元素必须为字节型,元素个数必须为4个
r1整数型,指示对IC卡该扇区的密码认证是否成功
 1: 成功
0: 失败

应用示例:

key = {0x01,0x02,0x03,0x04,0x05,0x06}
uid = {0xa5,0x37,0x8b,0x12}
//用key作为密钥A来验证,是否和ID号为uid的IC卡的扇区2的密码匹配
if LIB_RC522CardAuth("KEYA","Sector2",key,uid) == 1 then
    print("KEYA authentication success\r\n")
end

r1,r2 = LIB_RC522CardRead(p1,p2)

函数描述: 读取IC卡p1扇区中的p2块的16个字节数据,执行该函数前需先执行LIB_RC522CardAuth()函数

p1指定需要执行读操作的Sector(扇区)号
 “Sector0″,”Sector1″,”Sector2″,”Sector3″,”Sector4″,”Sector5″,”Sector6″,”Sector7″,”Sector8”,
“Sector9″,”Sector10″,”Sector11″,”Sector12″,”Sector13″,”Sector14″,”Sector15”
p2指定需要执行读操作的Block(块)号
 “Block0″,”Block1″,”Block2″,”Block3”
r1整数型,指示对IC卡该块的读操作是否成功
 1: 成功
0: 失败
r2table型,包含读到的16字节的块数据
 

应用示例:

--读取Sector0扇区的Block2块
result,rd_data = LIB_RC522CardRead("Sector0", "Block2")
if result == 1 then --读操作成功
    print(string.format("Read success, the data size is %d bytes\r\n", #rd_tab))
else
    print("Read fail\r\n")
end

r1 = LIB_RC522CardWrite(p1,p2,p3)

函数描述: 向IC卡的p1扇区中的p2块写入16个字节数据,执行该函数前需先执行LIB_RC522CardAuth()函数

p1指定需要执行写操作的Sector(扇区)号
 “Sector0″,”Sector1″,”Sector2″,”Sector3″,”Sector4″,”Sector5″,”Sector6″,”Sector7″,”Sector8”,
“Sector9″,”Sector10″,”Sector11″,”Sector12″,”Sector13″,”Sector14″,”Sector15”
p2指定需要执行写操作的Block(块)号
 “Block0″,”Block1″,”Block2″,”Block3”
p3table类型 , 需要写入的16字节数据
 table内的元素必须为字节型,元素个数必须为16个
r1整数型,指示对IC卡该块的写操作是否成功
 1: 成功
0: 失败

应用示例:

wr_data = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}
--向Sector0扇区的Block2块写入16字节的数据
result = LIB_RC522CardWrite("Sector0", "Block2", wr_data)
if result == 1 then --写操作成功
    print("Write success\r\n")
else--写操作失败
    print("Write fail\r\n")
end

ID卡读卡功能(em4001,em4102读卡器)

LIB_IdCardReaderConfig(p1)

函数描述: 配置ID卡读卡器开始工作

p1读卡器模块占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1

应用示例:

--设置ID卡读卡器模块占用TX0和RX0引脚
LIB_IdCardReaderConfig("UART0")

r1,r2,r3 = LIB_IdCardReaderGetContent()

函数描述: 查询是否读到ID卡,并输出ID卡的VID号和ID卡号

r1整数型,指示是否读到ID卡
 0: 未读到ID卡
1: 已读到ID卡
r2整数型,1字节(UINT8型)的VID号
 VID号是ID卡的厂商定制号或版本号
r3整数型,4字节(UINT32型)的ID号
 该ID号即是我们在ID白卡或钥匙扣上看到的号码的十六进制表达形式

应用示例:

--设置ID卡读卡器模块占用TX0和RX0引脚
LIB_IdCardReaderConfig("UART0")
--查询是否读到ID卡
while(true)
do
    id_found,vid,id = LIB_IdCardReaderGetContent()
    if id_found == 1 then
        --将读取到的vid和id号以十进制形式打印输出
        print(string.format("VID:%03d  ID:%010d\r\n", vid, id))
    end
end

UHF读写标签功能(R200读卡器)

LIB_R200ReaderConfig(p1,p2,p3,p4,p5)

函数描述: 配置R200 UHF读卡器开始工作

p1读卡器模块TX和RX引脚占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1
p2读卡器模块EN引脚占用的core引脚配置,该引脚的作用是当R200模块长期工作死机(只是可能)后自动复位引脚
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3工作区域(国家)
 “DEFAULT”:默认CHINA2
“CHINA2”:920~925Mhz
“US”:902.25~927.75Mhz
“EUROPE”:865~868Mhz
“CHINA1”:840~845Mhz
p4工作信道,整数型
 如果工作区域(p3)是China2区 (920.125~924.875MHz)信道值范围(0~19),共20个信道,间隔0.25M
 如果工作区域(p3)是US区(902.25~927.75MHz)信道值范围(0~51),共52个信道,间隔0.5M
 如果工作区域(p3)是Europe区(865.1~867.9MHz)信道值范围(0~14),共15个信道,间隔0.2M
 如果工作区域(p3)是China1区 (840.125~844.875MHz)信道值范围(0~19),共20个信道,间隔0.25M
p5发射功率,整数型 ,可以通过降低发射功率来缩小读卡器扫描标签的距离
 单位:0.01dBm, 最大值2000, 即20dBm 。建议最低值不低于500

应用示例:

--设置R200读卡器模块占用TX0和RX0引脚,EN引脚占用D5引脚,并开始工作
--工作国家区域:China2区 (920.125~924.875MHz)
--工作信道:0通道,即工作频率为920.125MHz
--发射功率:设置为最大的20.00dBm
LIB_R200ReaderConfig("UART0","D5","CHINA2",0,2000)

r1,r2 = LIB_R200GetCard()

函数描述: 查询R200读卡器是否扫描到标签卡,当扫描到时返回扫描到的数量,以及每张标签卡的12字节标签卡号(EPC),EPC= eletronic product code

r1整数型,指示扫描到多少个标签卡号
 0: 未扫描到
大于1: 扫描到r1张标签卡号
r2table型,包含扫描到的r1张标签卡的12字节标签卡号
 

应用示例:

--设置R200读卡器模块占用TX0和RX0引脚,EN引脚占用D5引脚,并开始扫描工作
--工作国家区域:China2区 (920.125~924.875MHz)
--工作信道:0通道,即工作频率为920.125MHz
--发射功率:设置为最大的20.00dBm
LIB_R200ReaderConfig("UART0","D5","CHINA2",0,2000)
while(true)
do
    Cnt, R = LIB_R200GetCard()
    if Cnt >= 1 then --打印Cnt张扫描到的标签卡号
        n = 0
        for 1, Cnt do
            print(string.format("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
            R[1+n],R[2+n],R[3+n],R[4+n],R[5+n],R[6+n],R[7+n],R[8+n],R[9+n],R[10+n],R[11+n],R[12+n]))
            n = n + 12
        end
    end
end

r1 = LIB_R200SetCard(p1,p2,p3,p4)

函数描述: 设置放在读卡器范围内的某个标签的密码和标签卡号,并返回结果代码 注意: 该函数是阻塞型的,所以调用该函数会比较耗时

p132bit整数类型,如0x12345678
 标签卡的旧密码,注意只有旧密码(p1)正确时,p2(新密码)和p3(新标签卡号)才能成功设置
p232bit整数类型,如0x12345678
 将要设置的标签卡新密码
p3整数类型,卡片信号稳定度
 该值越大就越能避免写卡时误写了周围其他的卡,但写卡的过程会耗费更长时间,一般建议设为6
p4table类型
 table内有12个元素,为12个字节新的标签卡号
r1整数类型
 返回的错误代码,0表示成功,大于0表示失败,需要看具体的失败代码
1读卡器无法定位到一张稳定的标签,因为标签不在通信范围内或者周围有其他标签干扰
2关闭读卡器的扫描工作状态时出现问题
3写密码select超时
4写密码select失败
5写密码超时
6写密码超次数
7写密码时,标签不在现场,或标签号不对
8二次写密码时,标签密码错误
9二次写密码未知错误
10二次写密码超时
11二次写密码超次数
12备用
13二次写密码select超时
14二次写密码select失败
15Lock操作前select超时
16Lock操作前select失败
17Lock时超时
18Lock时超次数
19Lock时,标签不在现场,或标签号不对
20Lock时,用的标签密码不对
21写标签卡号前select超时
22写标签卡号前select失败
23写标签卡号超时
24写标签卡号超次数
25写标签卡号时,标签不在现场,或标签号不对
26写标签卡时,密码不正确

应用示例:

--设置R200读卡器模块占用TX0和RX0引脚,EN引脚占用D5引脚,并开始工作
--工作国家区域:China2区 (920.125~924.875MHz)
--工作信道:0通道,即工作频率为920.125MHz
--发射功率:设置为最大的20.00dBm
LIB_R200ReaderConfig("UART0","D5","CHINA2",0,2000)
while(true)
do
    card = {1,2,3,4,5,6,7,8,9,10,11,12}
    if something_happen then --比如按下按键时,开始向标签中写入新的密码和卡号
        --注意:新的标签密码默认都是0x00000000
        err = LIB_R200SetCard(0x00000000, 0x22223333, 6, card)
        print(string.format("error code = %d", err))
    end
end

有线通信:连接电脑

以太网TCP通信(W5500)

LIB_EthTcpConfig(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11)

函数描述: 配置以太网模块(w5500 spi接口)的cs和rst占用的端口,并以TCP Client方式和Server(服务端)通信

p1W5500模块的cs占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p2W5500模块的rst占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3table类型 自身mac地址
 table内的元素必须为字节型,元素个数必须等于6个
p4table类型 自身ip地址
 table内的元素必须为字节型,元素个数必须等于4个
p5table类型 子网掩码
 table内的元素必须为字节型,元素个数必须等于4个
p6table类型 网关ip地址
 table内的元素必须为字节型,元素个数必须等于4个
p7table类型 dns地址
 table内的元素必须为字节型,元素个数必须等于4个
p8table类型 server端ip地址
 table内的元素必须为字节型,元素个数必须等于4个
p9整数型,server端的端口号
 0-65535
p10整数型,client端的端口号
 0-65535
p11整数型,心跳包间隔时间 ,单位:秒,建议该值不要小于20秒
 当该值大于0时,如果Core在该间隔时间内即没收到Server端的心跳包响应也没收到Server端下发的任意数据,此时Core会认为Server已断联,Core会重新尝试连接Server

注意1:心跳包是由开发者在Lua代码中以不大于p11的心跳时间间隔向Server发送一包数据,并且Server应返回心跳包响应数据。心跳包及响应的具体内容和长度由您和Server端开发人员商量。 注意2:当p11的值为0的时候,Core默认关闭心跳机制(即Core不会因为Server端长时间没有数据下发而重启以太网模块),但真正开发产品时还是需要您和Server端开发人员商量好心跳包的策略,这样就能保证以太网模块常年不掉线。

应用示例:

mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11} --自身mac地址
sip = {192, 168, 1, 123} --自身ip地址
subm = {255,255,255,0} --子网掩码
gw = {192, 168, 1, 1} --路由器地址
dns = {8,8,8,8} --dns地址
tip = {192, 168, 1, 123} --目标(server端)ip地址
s_port = 1234 --目标(server端)端口号
c_port = 54321 --本机(client端)端口号
heart_beat = 0 --心跳时间:0秒,即禁止心跳机制
--设置W5500以太网模块占用MOSI,MISO,CLK,D4,D5引脚,TCP Client模式
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_EthTcpConfig函数的p11参数详细介绍
LIB_EthTcpConfig("D4","D5",mac,sip,subm,gw,dns,tip,s_port,c_port,heart_beat)

r1,r2 = LIB_EthTcpRecv()

函数描述: 查询是否收到TCP server发来数据,如果收到数据则返回接收到的数据。注意server端下发的每个数据包不要大于256字节,且数据包时间间隔尽量不要小于100ms

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11} --自身mac地址
sip = {192, 168, 1, 123} --自身ip地址
subm = {255,255,255,0} --子网掩码
gw = {192, 168, 1, 1} --路由器地址
dns = {8,8,8,8} --dns地址
tip = {192, 168, 1, 123} --目标(server端)ip地址
s_port = 1234 --目标(server端)端口号
c_port = 54321 --本机(client端)端口号
heart_beat = 0 --心跳时间:0秒,即禁止心跳机制
--设置W5500以太网模块占用MOSI,MISO,CLK,D4,D5引脚,TCP Client模式
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_EthTcpConfig函数的p11参数详细介绍
LIB_EthTcpConfig("D4","D5",mac,sip,subm,gw,dns,tip,s_port,c_port,heart_beat)
​
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的字节数
    recv_flag,recv_tab = LIB_EthTcpRecv()
    if recv_flag == 1 then
        print(string.format("tcp receive %d bytes", #recv_tab))
    end
end

LIB_EthTcpSend(p1)

函数描述: 发送p1数组中的数据,每包发送的数据量不要超过256字节,发送间隔时间也尽量大于100ms 注意:只有当TCP连接成功后,调用该函数才会发送,否则该函数会自动忽略对其的调用

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11} --自身mac地址
sip = {192, 168, 1, 123} --自身ip地址
subm = {255,255,255,0} --子网掩码
gw = {192, 168, 1, 1} --路由器地址
dns = {8,8,8,8} --dns地址
tip = {192, 168, 1, 123} --目标(server端)ip地址
s_port = 1234 --目标(server端)端口号
c_port = 54321 --本机(client端)端口号
heart_beat = 30 --心跳时间:0秒,即禁止心跳机制
--设置W5500以太网模块占用MOSI,MISO,CLK,D4,D5引脚,TCP Client模式
--心跳包间隔时间30秒。关于心跳机制请在ApiDoc文档中查阅关于LIB_EthTcpConfig函数的p11参数详细介绍
LIB_EthTcpConfig("D4","D5",mac,sip,subm,gw,dns,tip,s_port,c_port,heart_beat)
​
table = {1,2,3,4,5}
while(true)
do
    --每隔5秒发送一次心跳包数据
    LIB_EthTcpSend(table)
    LIB_DelayMs(5000)
end

以太网UDP通信(W5500)

LIB_EthUdpConfig(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11)

函数描述: 配置以太网模块(w5500 spi接口)的cs和rst占用的端口,UDP模式

p1W5500模块的cs占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p2W5500模块的rst占用的core引脚配置
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3table类型 自身mac地址
 table内的元素必须为字节型,元素个数必须等于6个
p4table类型 自身ip地址
 table内的元素必须为字节型,元素个数必须等于4个
p5table类型 子网掩码
 table内的元素必须为字节型,元素个数必须等于4个
p6table类型 网关ip地址
 table内的元素必须为字节型,元素个数必须等于4个
p7table类型 dns地址
 table内的元素必须为字节型,元素个数必须等于4个
p8table类型 目标端ip地址
 table内的元素必须为字节型,元素个数必须等于4个
p9整数型,目标端的端口号
 0-65535
p10整数型,本地端的端口号
 0-65535
p11整数型,心跳包间隔时间 ,单位:秒,建议该值不要小于20秒
 当该值大于0时,如果Core在该间隔时间内即没收到对端的心跳包响应也没收到对端下发的任意数据,此时Core会认为对端已断联,Core会重新启动UDP

注意1:心跳包是由开发者在Lua代码中以不大于p11的心跳时间间隔向UDP对端发送一包数据,并且对端应返回心跳包响应数据。心跳包及响应的具体内容和长度由您和对端开发人员商量。 注意2:当p11的值为0的时候,Core默认关闭心跳机制(即Core不会因为对端长时间没有数据下发而重启UDP),但真正开发产品时还是需要您和对端开发人员商量好心跳包的策略,这样就能保证以太网模块常年不掉线。

应用示例:

mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11} --自身mac地址
my_ip = {192, 168, 1, 123} --自身ip地址
subm = {255,255,255,0} --子网掩码
gw = {192, 168, 1, 1} --路由器地址
dns = {8,8,8,8} --dns地址
trgt_ip = {192, 168, 1, 123} --目标端ip地址
trgt_port = 5678 --目标端端口号
my_port = 54321 --本机端口号
heart_beat = 0 --心跳时间:0秒,即禁止心跳机制
--设置W5500以太网模块占用MOSI,MISO,CLK,D4,D5引脚,UDP模式
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_EthUdpConfig函数的p11参数详细介绍
LIB_EthUdpConfig("D4","D5",mac,my_ip,subm,gw,dns,trgt_ip,trgt_port,my_port,heart_beat)

r1,r2,r3,r4 = LIB_EthUdpRecv()

函数描述: 查询是否收到Udp对端发来数据,如果收到数据则返回接收到的ip地址、端口号以及数据。注意对端下发的每个数据包不要大于256字节,且数据包时间间隔尽量不要小于100ms

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,4个元素,UDP对端的IP地址
 
r3整数型,UDP对端的端口号
 
r4table型,对端发来的数据
 

应用示例:

mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11} --自身mac地址
my_ip = {192, 168, 1, 123} --自身ip地址
subm = {255,255,255,0} --子网掩码
gw = {192, 168, 1, 1} --路由器地址
dns = {8,8,8,8} --dns地址
trgt_ip = {192, 168, 1, 123} --目标端ip地址
trgt_port = 5678 --目标端端口号
my_port = 54321 --本机端口号
heart_beat = 0 --心跳时间:0秒,即禁止心跳机制
--设置W5500以太网模块占用MOSI,MISO,CLK,D4,D5引脚,UDP模式
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_EthUdpConfig函数的p11参数详细介绍
LIB_EthUdpConfig("D4","D5",mac,my_ip,subm,gw,dns,trgt_ip,trgt_port,my_port,heart_beat)
​
while(true)
do
    --查询是否收到数据,如果收到就print输出收到的字节数
    recv_flag,ip,port,data = LIB_EthUdpRecv()
    if recv_flag == 1 then
        print(string.format("recv from %d.%d.%d.%d :%d", ip[1],ip[2],ip[3],ip[4],port))
        print(string.format("received %d bytes", #data))
    end
end

LIB_EthUdpSend(p1)

函数描述: 发送p1数组中的数据,每包发送的数据量不要超过256字节,发送间隔时间也尽量大于100ms

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11} --自身mac地址
my_ip = {192, 168, 1, 123} --自身ip地址
subm = {255,255,255,0} --子网掩码
gw = {192, 168, 1, 1} --路由器地址
dns = {8,8,8,8} --dns地址
trgt_ip = {192, 168, 1, 123} --目标端ip地址
trgt_port = 5678 --目标端端口号
my_port = 54321 --本机端口号
heart_beat = 0 --心跳时间:0秒,即禁止心跳机制
--设置W5500以太网模块占用MOSI,MISO,CLK,D4,D5引脚,UDP模式
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_EthUdpConfig函数的p11参数详细介绍
LIB_EthUdpConfig("D4","D5",mac,my_ip,subm,gw,dns,trgt_ip,trgt_port,my_port,heart_beat)
​
table = {1,2,3,4,5}
while(true)
do
    --每隔5秒发送一次心跳包数据
    LIB_EthUdpSend(table)
    LIB_DelayMs(5000)
end

传感器:环境测量

SHT3x温湿度传感器

LIB_Sht3xConfig(p1,p2,p3)

函数描述: 配置sht3x温湿度传感器以默认参数周期性工作(mps=”10″,repeatability=”MEDIUM”)

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1
p2mps参数,传感器每秒转换次数,mps的详细解析请参看sht3x的官方资料
 “0.5”,”1″,”2″,”4″,”10″
以上数据可以作为您在代码中读传感器的周期参考
p3repeatability参数,传感器精度等级,repeatability的详细解析请参看sht3x的官方资料
 “HIGH”,”MEDIUM”,”LOW”

应用示例:

--设置sht3x传感器占用SCL0和SDA0引脚,并启动传感器以每秒出2个数据的频率工作,repeatability="HIGH"时精度最高
LIB_Sht3xConfig("IIC0","2","HIGH")

r1,r2,r3 = LIB_Sht3xGetResult()

函数描述: 查询SHT30/SHT31温湿度传感器是否出数

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2number浮点型,温度
 
r3number浮点型,湿度百分比
 

应用示例:

--设置sht3x传感器占用SCL0和SDA0引脚,并启动传感器以每秒出10个数据的频率工作,repeatability="HIGH"时精度最高
LIB_Sht3xConfig("IIC0","10","HIGH")
--查询传感器是否出数
while(true)
do
    LIB_DelayMs(500)
    sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult()
    if sht3x_flag == 1 then
        print(string.format("temprature: %f\r\nhumidity: %f", sht3x_temp, sht3x_humi))
    end
end

BMP280气压计/温度传感器

LIB_BMP280Config(p1)

函数描述: 配置BMP280气压计传感器开始工作,以每秒输出26.32组数据的频率工作。

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1

应用示例:

--设置BMP280气压计传感器占用SCL0和SDA0引脚,并启动传感器以每秒输出26.32组数据的频率工作
LIB_BMP280Config("IIC0")

r1,r2,r3 = LIB_BMP280GetResult()

函数描述: 查询BMP280温度/气压传感器是否出数

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2number浮点型,温度,单位:度
 
r3number浮点型,气压值,单位:帕(Pa)
 

应用示例:

--设置BMP280气压计传感器占用SCL0和SDA0引脚,并启动传感器以每秒输出26.32组数据的频率工作
LIB_BMP280Config("IIC0")
--查询传感器是否出数
while(true)
do
    LIB_DelayMs(40)
    bmp280_flag,bmp280_temp,bmp280_pressure = LIB_BMP280GetResult()
    if bmp280_flag == 1 then
        print(string.format("temprature: %f\r\npressure: %f", bmp280_temp, bmp280_pressure))
    end
end

BH1750光照强度传感器

LIB_BH1750Config(p1)

函数描述: 配置BH1750光照强度传感器开始工作,以每秒输出5组数据的频率工作。

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1

应用示例:

--设置BH1750光照强度传感器占用SCL0和SDA0引脚,并启动传感器以每秒输出5组数据的频率工作
LIB_BH1750Config("IIC0")

r1,r2 = LIB_BH1750GetResult()

函数描述: 查询BH1750光照强度传感器是否出数

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2number浮点型,光照强度,单位:勒克斯(lx)
 

应用示例:

--设置BH1750光照强度传感器占用SCL0和SDA0引脚,并启动传感器以每秒输出5组数据的频率工作
LIB_BH1750Config("IIC0")
--查询传感器是否出数
while(true)
do
    LIB_DelayMs(200)
    bh1750_flag,bh1750_illuminance = LIB_BH1750GetResult()
    if bh1750_flag == 1 then
        print(string.format("illuminance: %f\r\n", bh1750_illuminance))
    end
end

传感器:物理测量

MPU6050六轴传感器

LIB_MPU6050Config(p1)

函数描述: 配置MPU6050六轴传感器开始工作,以每秒输出10组欧拉角数据的频率工作。 注意: 模块上电自校正,需保持3秒以上静止状态,建议不要用手拿着模块。

p1传感器占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1

应用示例:

--设置MPU6050六轴传感器占用TX0和RX0引脚,并启动传感器以每秒输出10组欧拉角数据的频率工作
LIB_MPU6050Config("UART0")

r1,r2,r3,r4 = LIB_MPU6050GetEulerAngle()

函数描述: 查询是否收MPU6050传感器模块输出的欧拉角(姿态角)

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2number型,Pitch 俯仰角
 单位:度 ,小数点后两位有效
r3number型,Yaw 航偏角
 单位:度 ,小数点后两位有效
r4number型,Roll 横滚角
 单位:度 ,小数点后两位有效

应用示例:

--设置MPU6050六轴传感器占用TX0和RX0引脚,并启动传感器以每秒输出10组欧拉角数据的频率工作
LIB_MPU6050Config("UART0")
--查询是否收到欧拉角数据,如果收到就print输出
while(true)
do
    recv_flag,pitch,yaw,roll = LIB_MPU6050GetEulerAngle()
    if recv_flag == 1 then
        print(string.format("pitch:%3.2f yaw:%3.2f roll:%3.2f\r\n", pitch,yaw,roll))
    end
end

LIB_MPU6050Cali(p1)

函数描述: 让MPU6050六轴传感器开始校准

p1校准模式
 “PITCH_ROLL”: 开始俯仰横滚角校准,需要保持水平时候再开启
“YAW”: 开启航偏角校准,航向任意角度清零

应用示例:

--开启俯仰横滚角校准
LIB_MPU6050Cali("PITCH_ROLL")

TCS3472颜色及色温传感器

LIB_TCS3472Config(p1,p2,p3)

函数描述: 配置TCS3472颜色传感器开始工作

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1
p2TCS3472传感器的Integration Time(可以理解为每次测量的采样时间),该时间越长转换的结果准确性越高
 “2.4ms”,”24ms”,”50ms”,”101ms”,”154ms”,”700ms”
p3TCS3472传感器的Gain(可以理解传感器采样前端的放大器增益),该增益越大灵敏性越高(越适合弱色)
 “GAIN_1X”,”GAIN_4X”,”GAIN_16X”,”GAIN_60X”

应用示例:

--配置TCS3472颜色传感器开始工作,采样时间为最长的700ms(准确度最高),采样放大器增益为1(无增益)
LIB_TCS3472Config("IIC0","700ms","GAIN_1X")

r1,r2,r3,r4,r5,r6 = LIB_TCS3472GetResult()

函数描述: 查询TCS3472颜色传感器是否出数

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2number浮点型,red值
 0.0-255.0
r3number浮点型,green值
 0.0-255.0
r4number浮点型,blue值
 0.0-255.0
r5整数型,cct(相对色温)
 0-65535 单位:K(开尔文),
r6整数型,光照强度
 0-65535 单位:lux(勒克斯)

应用示例:

--配置TCS3472颜色传感器开始工作,采样时间为最长的700ms(准确度最高),采样放大器增益为1(无增益)
LIB_TCS3472Config("IIC0","700ms","GAIN_1X")
--查询传感器是否出数
while(true)
do
    LIB_DelayMs(10)
    flag, r ,g, b, cct, lux = LIB_TCS3472GetResult()
    if flag == 1 then
        --打印r g b三色值以及色温(cct)和光照强度(lux)
        print(string.format("r:%f, g:%f, b:%f, cct:%d, lux:%d", r, g, b, cct, lux))
    end
end

APDS9960(光照度,靠近检测、手势检测传感器)

LIB_ApdsConfig(p1,p2)

函数描述: 配置APDS9960传感器开始工作

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1
p2传感器工作模式
 “PorximityAndLux”: 靠近感应以及环境光强度测量
“Gesture”: 手势检测

注意:”Gesture”模式时RC522 RFID读卡模块不能同时共存

应用示例:

--配置APDS9960近距离感应&amp;光照度传感器开始工作,占用core的IIC0引脚
LIB_ApdsConfig("IIC0", "PorximityAndLux")

r1,r2,r3 = LIB_ApdsGetPrxmAndLux()

函数描述: 查询APDS9960传感器是否出数

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2整数型,靠近感应数据
 0-255 该值越大表示距离越近
r3整数型,环境光强度
 0-65535 单位:lux(勒克斯)

应用示例:

--配置APDS9960近距离感应&amp;光照度传感器开始工作,占用core的IIC0引脚
LIB_ApdsConfig("IIC0", "PorximityAndLux")
--查询传感器是否出数
while(true)
do
    LIB_DelayMs(10)
    flag, prxm, lux = LIB_ApdsGetPrxmAndLux()
    if flag == 1 then
        --打印靠近感应值和环境光强度(lux)
        print(string.format("prmx:%d, lux:%d", prxm, lux))
    end
end

r1,r2 = LIB_ApdsGetGesture()

函数描述: 查询APDS9960传感器是否检测到手势感应

r1整数型,指示是否感应到手势动作
 0: 未感应到
1: 已感应到
r2整数型,手势动作代号
 1-4 1:up 2:down 3:left 4:right

应用示例:

gest_str = {"up", "down", "left","right"}
--配置APDS9960手势感应传感器开始工作,占用core的IIC0引脚
LIB_ApdsConfig("IIC0", "Gesture")
--查询传感器是否感应到手势
while(true)
do
    LIB_DelayMs(10)
    flag, gest = LIB_ApdsGetGesture()
    if flag == 1 then
        --打印手势动作
        print(string.format("Gesture:%s\r\n", gest_str[gest]))
    end
end

HX711称重/压力/电桥测量

LIB_HX711Config(p1,p2,p3)

函数描述: 配置HX711模块工作模式,以及占用的IO口 注意:Core只使用HX711的A通道,B通道不需要使用。

p1工作模式
 “A_64”
A通道64倍增益,对应的桥式电路差分输入电压范围为:-40mv ~ 40mv
“A_128”
A通道128倍增益,对应的桥式电路差分输入电压范围为:-20mv ~ 20mv
p2选择HX711时钟引脚SCK所占用的D端口号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用
p3选择HX711数据引脚DT(DOUT)所占用的D端口号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”,已被Core的LED1占用
“D9”,已被Core的LED2占用
“D10”,已被Core的BTN1占用
“D11”,已被Core的BTN2占用

应用示例:

--配置HX711模块A通道增益为64,SCK引脚占用D6,DOUT引脚占用D7
LIB_HX711Config("A_64","D6","D7")

r1,r2 = LIB_HX711GetValue()

函数描述: 查询HX711是否出结果,查询频率请根据HX711 RATE引脚来调整 RATE=0时HX711一秒钟能够输出10个AD采样结果,RATE=1时HX711一秒钟能够输出70个AD采样结果

r1整数型,指示HX711是否出结果
 0: 否
1: 是
r2整数型,HX711的24位差分输入电压AD转换结果,结果带正负号
 单位:无,满量程为您给HX711提供的模拟电源电压

应用示例:

--配置HX711模块A通道增益为64,SCK引脚占用D6,DOUT引脚占用D7
LIB_HX711Config("A_64","D6","D7")
--每0.1秒查询一次HX711是否出结果
while(true)
do
    LIB_DelayMs(100)
    flag, ad_value = LIB_HX711GetValue()
    if flag == 1 then
        --打印手势动作
        print(string.format("ad_value:%d\r\n", ad_value))
    end
end

QMC5883三轴磁场强度/指南针

LIB_QMC5883Config(p1,P2)

函数描述: 配置三轴磁场强度传感器开始工作,默认每秒输出100组数据

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1
p2三轴磁场强度的测量方位
 “RNG_2G”: -2G ~ +2G
“RNG_8G”: -8G ~ +8G

应用示例:

--设置QMC5883三轴磁场强度传感器占用SCL0和SDA0引脚,并设置三轴磁场的测量范围为-2G ~ +2G
LIB_QMC5883Config("IIC0", "RNG_2G")

r1,r2,r3,r4,r5 = LIB_QMC5883GetResult()

函数描述: 查询QMC5883三轴磁场强度传感器是否出数,并返回传感器的测量结果 注意:该函数的调用频率不能超过每秒100次,即调用时间间隔需大于等于10毫秒

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2整数型,X轴磁场强度
 该值范围为-32768 ~ 32767,对应着您在LIB_QMC5883Config设置的-2G ~ 2G或-8G ~ 8G
r3整数型,Y轴磁场强度
 该值范围为-32768 ~ 32767,对应着您在LIB_QMC5883Config设置的-2G ~ 2G或-8G ~ 8G
r4整数型,Z轴磁场强度
 该值范围为-32768 ~ 32767,对应着您在LIB_QMC5883Config设置的-2G ~ 2G或-8G ~ 8G
r5浮点小型(NUMBER),方位角(azimuth),单位:度
 水平面上与正北方向的夹角

应用示例:

--设置QMC5883三轴磁场强度传感器占用SCL0和SDA0引脚,并设置三轴磁场的测量范围为-2G ~ +2G
LIB_QMC5883Config("IIC0", "RNG_2G")
--每隔0.2秒查询传感器是否出数
while(true)
do
    LIB_DelayMs(200)
    flag, X, Y, Z, azimuth = LIB_QMC5883GetResult()
    if flag == 1 then
        print(string.format("X:%d,Y:%d,Z:%d,Azimuth:%f\r\n", X, Y, Z, azimuth))
    end
end

ADXL345三轴加速度/倾角

LIB_ADXL345Config(p1)

函数描述: 配置ADXL345传感器开始工作,三轴加速度测量结果输出频率默认100Hz,测量范围默认+-16g

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1

应用示例:

--配置ADXL345开始工作,占用IIc0接口,三轴加速度测量结果输出频率默认100Hz,测量范围默认+-16g
LIB_ADXL345Config("IIC0")

LIB_ADXL345AutoSleepConfig(p1,p2,p3,p4)

函数描述: 设置ADXL345传感器自动休眠及唤醒相关参数 注意: 该函数必须在LIB_ADXL345Config()之前调用,否则无效

p1字符串类型,选择某个轴作为判断进入休眠和结束休眠的参考轴
 “X”:选择X轴作为参考
“Y”:选择Y轴作为参考
“Z”:选择Z轴作为参考
p2浮点数类型,当p1轴的加速度小于p2,并持续p3秒后,ADXL345会进入休眠状态
 单位: mg(1000mg = 1g) 范围为:62.5-15999.0mg,建议p2的大小为62.5的倍数
p3整数类型,当p1轴的加速度小于p2,并持续p3秒后,ADXL345会进入休眠状态
 单位: 秒, 范围为:1-255秒
p4浮点数类型,当p1轴的加速度大于p4时,ADXL345会自动唤醒,并在INT1引脚输出唤醒信号
 单位: mg(1000mg = 1g) 范围为:62.5-15999.0mg,建议p4的大小为62.5的倍数
p5字符串类型 设置当ADXL345自动唤醒时,ADXL345的INT1引脚输出的唤醒信号
 “HIGH”:高电平脉冲
“LOW”:低电平脉冲

应用示例:

--配置ADXL345的休眠及唤醒参数:当X轴加速度低于1000.0mg并持续10秒后进入休眠,当X轴加速度
--大于2000.0mg时唤醒且INT1引脚输出高电平脉冲
LIB_ADXL345AutoSleepConfig("X", 1000.0, 10, 2000.0, "HIGH")
--配置ADXL345开始工作,占用IIc0接口,三轴加速度测量结果输出频率默认100Hz,测量范围默认+-16g
LIB_ADXL345Config("IIC0")

r1,r2,r3,r4 = LIB_ADXL345GetAccXYZ()

函数描述: 查询ADXL345三轴加速度传感器是否出数

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2整数型,X轴加速度
 单位: mg (1000mg = 1g)
r3整数型,Y轴加速度
 单位: mg (1000mg = 1g)
r4整数型,Z轴加速度
 单位: mg (1000mg = 1g)

应用示例:

--配置ADXL345开始工作,占用IIc0接口,三轴加速度测量结果输出频率默认100Hz,测量范围默认+-16g
LIB_ADXL345Config("IIC0")
--查询传感器是否出数
while(true)
do
    LIB_DelayMs(10)
    flag, acc_x, acc_y, acc_z = LIB_ADXL345GetAccXYZ()
    if flag == 1 then
        --打印三轴加速度
        print(string.format("acc_x:%d,acc_x:%d,acc_x:%d",acc_x,acc_y,acc_z))
    end
end

VL53L0X激光测距

LIB_VL53L0XConfig(p1,p2)

函数描述: 配置VL53L0X传感器开始工作

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1
p2传感器工作模式
 “Default”:默认模式
“HighAccuracy”:高精度模式
“LongRange”:长距离模式
“HighSpeed”:高速模式
各种工作模式性能介绍每次测量耗时(毫秒)测距范围(米)精度应用场景
“Default”301.23% ~ 12%通用场景
“HighAccuracy”2001.23%以内精确测量场景
“LongRange”3323% ~ 12%远距离,但仅适合暗光场景
“HighSpeed”201.25%左右要求测量速度快,但精度不追求太高的场景

应用示例:

--配置VL53L0X激光传感器开始工作,占用core的IIC0引脚,以高精度模式工作--高精度模式下,精度在3%以内,测量范围在1.2米以内
LIB_VL53L0XConfig("IIC0", "HighAccuracy")

r1,r2 = LIB_VL53L0XGetDistance()

函数描述: 查询VL53L0X传感器是否测量出距离

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2整数型,传感器测量出来的距离
 单位:毫米

应用示例:

--配置VL53L0X激光传感器开始工作,占用core的IIC0引脚,以高精度模式工作
--高精度模式下,精度在3%以内,测量范围在1.2米以内
LIB_VL53L0XConfig("IIC0", "HighAccuracy")
--每隔200ms查询一次传感器是否出数
while(true)
do
    LIB_DelayMs(200)
    flag, distance = LIB_VL53L0XGetDistance()
    if flag == 1 then
        --打印测量距离(mm)
        print(string.format("distance:%d", distance))
    end
end

US015超声波测距

LIB_US015Config(p1,p2)

函数描述: 配置US-015超声波测距传感器开始工作 注意:US-015超声波模块固定占用Core的D4,D5引脚,D4–>Echo,D5–>Trig。

应用示例:

--配置超声波传感器开始工作,固定占用Core的D4,D5引脚,每隔100ms左右可输出一个测量结果
LIB_US015Config()

r1,r2 = LIB_US015GetDistance()

函数描述: 查询US-015传感器是否测量出距离

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2整数型,传感器测量出来的距离
 单位:毫米

应用示例:

--配置超声波传感器开始工作,固定占用Core的D4,D5引脚,每隔100ms左右可输出一个测量结果
LIB_US015Config()
--开始大循环
while(true)
do
    --每隔200ms查询一次传感器是否出数
    LIB_DelayMs(200)
    flag, distance = LIB_US015GetDistance()
    if flag == 1 then
        --打印测量距离(mm)
        print(string.format("distance:%dmm", distance))
    end
end

GPS定位/授时

LIB_NEO6MConfig(p1)

函数描述: 配置GPS模块开始工作

p1GPS模块占用的core引脚配置
 “UART0”: TX0,RX0
“UART1”: TX1,RX1

应用示例:

--配置GPS模块开始工作,占用TX0和RX0引脚
LIB_NEO6MConfig("UART0")

r1,r2,r3,r4,r5 = LIB_NEO6MGetGpsData()

函数描述: 查询是否读到GPS数据

r1整数型,指示是否读到GPS数据
 0: 未读到
1: 已读到
r2浮点小数型,经度(longtitude),单位:度
 正数表示东经,负数表示西经
r3浮点小数型,纬度(latitude),单位:度
 正数表示北纬,负数表示南纬
r4浮点小数型,海拔(altitude),单位:米
 
r5整数型,UTC时间 单位:秒
 

应用示例:

--配置GPS模块开始工作,占用TX0和RX0引脚
LIB_NEO6MConfig("UART0")
--开始大循环
while(true)
do
    --查询是否解析到GPS数据
    flag,lo,la,al,utc = LIB_NEO6MGetGpsData()
    if flag == 1 then
        --将读取到的经度、纬度、海拔、UTC时间打印输出
        print(string.format("longtitue:%.3f° latitue:%.3f° altitue:%.0fm UTC:%d", lo,la,al,utc))
    end
end

心率/脉搏测量

LIB_HrAlgorithmConfig()

函数描述: 为PulseSensor心率脉搏传感器算法准备好运行环境

应用示例:

--为PulseSensor心率脉搏传感器算法准备好运行环境
LIB_HrAlgorithmConfig()

r1,r2,r3 = LIB_HrGetBpmIbi(p1)

函数描述: 该函数向算法喂传感器原始数据的同时也查询算法是否输出有效心率值和脉搏区间

p1整数型,喂给心率算法的传感器原始数据
 该原始数据为2ms间隔的心率传感器AD值
r1整数型,指示算法是否检测到一个有效的BPM和IBI数据
 0: 未检测到
1: 已检测到
r2整数型,BPM
 每分钟的心跳数
r3整数型,IBI 单位:毫秒
 相邻两次脉搏的间隔时间,心电图曲线中的(R-R间隔)

应用示例:

--为PulseSensor心率脉搏传感器算法准备好运行环境
LIB_HrAlgorithmConfig()
while(true)
do
    --采集心率传感器的原始值
    --此处省略采集原始值部分代码,请参看Core相关例程
​
    --给传感器喂原始数据(rawdata),并查询是否解析到有效的心率数据
    flag,BPM,IBI = LIB_HrGetBpmIbi(rawdata)
    if flag == 1 then
        --将解析到的BPM(每分钟心跳)、IBI(心率间隔)值打印输出
        print(string.format("BPM:%d IBI:%d ", BPM, IBI))
    end
end

传感器:气体测量

CCS811 TVOC/eCO2传感器

LIB_CCS811Config(p1,p2)

函数描述: 配置CCS811气体传感器开始工作

p1传感器占用的core引脚配置
 “IIC0”: SCL0,SDA0
“IIC1”: SCL1,SDA1
p2CCS811传感器产生测量结果的周期
 “1S”,”10S”,”60S”,”250MS”

应用示例:

--配置CCS811气体传感器开始工作,占用IIC0接口,每1秒出一组测量结果
LIB_CCS811Config("IIC0", "1S")

r1,r2,r3,r4,r5 = LIB_CCS811GetResult()

函数描述: 查询CCS811传感器是否出数

r1整数型,指示是否读取到传感器结果数据
 0: 还未读取到数据
1: 已读取到数据
r2整数型,Tvoc 单位:ppb
 挥发性有机化合物气体 0ppb-1000ppb
r3整数型,eCO2 单位:ppm
 等效二氧化碳 400ppm-5000ppm
r4整数型,rawdata中的i 单位:uA
 current through the sensor, 流经传感器的电流,范围:1-63uA
r5整数型,rawdata中的u 单位:(1.65v/1023)
 raw ADC reading of the voltage across the sensor, 范围:0-1023

应用示例:

--配置CCS811气体传感器开始工作,占用IIC0接口,每1秒出一组测量结果
LIB_CCS811Config("IIC0", "1S")
--查询传感器是否出数
while(true)
do
    flag, tvoc, eCO2, raw_i, raw_u = LIB_CCS811GetResult()
    if flag == 1 then
        --打印Tvoc和eCO2的值以及rawdata数据i和u
        print(string.format("Tvoc:%d, eCO2:%d, i=%d, u=%d", tvoc,eCO2,raw_i,raw_u))
    end
end

LIB_CCS811SetCompensate(p1,p2)

函数描述:如果您设计的系统有条件可以得到环境温度和湿度值时,可以对CCS811进行环境温度和湿度补偿。 注意:该函数不需要一直调用,可以视环境温湿度的变化情况每隔一段时间补偿一次。

p1NUMBER类型(浮点小数),温度
 单位:℃(度)
p2整数类型,湿度
 单位:%

应用示例:

--将当前的25.38度的温度和70%的湿度作为校准参数传入CCS811
LIB_CCS811EnvCompensate(25.38, 70)

有线通信:连接电脑

USB相关功能

LIB_UsbConfig(p1)

函数描述: 配置USB口的工作模式 注意: 如果你的项目中同时用到Ble蓝牙功能时,一定要先初始化Ble蓝牙之后,再调用本函数。

p1USB口工作模式选择参数
 “CDC”: USB接口以USB转串口(cdc)方式和PC通信
“CDC_PD”: 同CDC,但不支持Lua代码中的print打印至PC了
“KBD”: 模拟成USB键盘

应用示例:

--配置USB接口以USB转串口(cdc)方式工作,和电脑通信的串口波特率为115200,且在Lua代码中的
--print函数直接输出到电脑串口终端上
LIB_UsbConfig("CDC")

r1,r2 = LIB_UsbCdcRecv()

函数描述: 查询是否收到USB串口数据,如果收到数据则返回接收到的数据。注意pc每包发送的数据不要多于256字节,间隔不要小于100ms最好

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

--配置USB口以串口(cdc)模式工作
LIB_UsbConfig("CDC")
--查询是否收到PC发来的串口数据,如果收到就print输出
while(true)
do
    recv_flag,recv_tab = LIB_UsbCdcRecv()
    if recv_flag == 1 then
        print(string.format("receive %d bytes", #recv_tab))
    end
end

LIB_UsbCdcSend(p1)

函数描述: 将table p1中的数据通过usb串口(cdc)发送出去

p1table类型
 table内的元素必须为字节型,元素个数必须小于255个

应用示例:

--配置USB口以串口(cdc)模式工作
LIB_UsbConfig("CDC")
table = {1,2,3,4,5}
while(true)
do
    --每隔3秒向PC的串口终端发送一次数据
    LIB_UsbCdcSend(table)
    LIB_DelayMs(3000)
end

r1 = LIB_UsbCommPortOpenQuery()

函数描述: 查询USB线是否连上,且PC端已经打开了相应的串口端口

r1整数型,指示是否建立连接
 0: 未连接
1: 已经连上

应用示例:

--配置USB口以串口(cdc)模式工作
LIB_UsbConfig("CDC")
while(true)
do
    --每隔3秒查询一次USB是否已和PC的串口端口建立连接
    LIB_DelayMs(3000)
    if LIB_UsbCommPortOpenQuery() == 1 then
        print("Usb serial commm port connected")
    end
end

LIB_UsbKbdSend(p1,p2)

函数描述: 模拟按键动作发送给电脑。注意调用该函数模拟每个按键的动作时都会阻塞LUA系统50毫秒左右

p1按键动作的模拟类型
 “SINGLE”: 单个按键
“COMBINE”: 组合按键
p2table类型
 p1=”SINGLE”时,table内的元素必须为正确的按键标识符字符串,且元素个数不能大于255个
p1=”COMBINE”时,table内的元素必须为正确的按键标识符字符串,且元素个数不能大于6个

应用示例:

--先配置USB口以USB键盘模式工作
LIB_UsbConfig("KBD")
--模拟组合按键WIN+R调出运行界面效果
combine_tab = {"GUI","R"}
LIB_UsbKbdSend("COMBINE", combine_tab)
--模拟多次敲击产生打字hello world效果
single_tab = {"H","E","L","L","O","SPACEBAR","W","O","R","L","D"}
LIB_UsbKbdSend("SINGLE", single_tab)

r1,r2 = LIB_UsbKbdCapsLockAndNumLockQuery()

函数描述: 查询CapsLock,NumLock是否打开

r1整数型,CapsLock状态
 0: 关闭
1: 已打开
r2整数型,NumLock状态
 0: 关闭
1: 已打开

应用示例:

--配置USB口以串口(cdc)模式工作
CapsLock,NumLock = LIB_UsbKbdCapsLockAndNumLockQuery()

单片机常用功能

uart通用异步串口

LIB_Uart0Config(p1)

函数描述: 配置Uart0串口开始工作,并按照参数p1的值设定波特率

p1字符串类型,工作模式选择参数
 “BAUDRATE_1200”
 “BAUDRATE_2400”
 “BAUDRATE_4800”
 “BAUDRATE_9600”
 “BAUDRATE_14400”
 “BAUDRATE_19200”
 “BAUDRATE_28800”
 “BAUDRATE_31250”
 “BAUDRATE_38400”
 “BAUDRATE_56000”
 “BAUDRATE_57600”
 “BAUDRATE_76800”
 “BAUDRATE_115200”
 “BAUDRATE_230400”
 “BAUDRATE_250000”
 “BAUDRATE_460800”
 “BAUDRATE_921600”
 “BAUDRATE_1000000”

应用示例:

--配置Uart0串口波特率为115200
LIB_Uart0Config("BAUDRATE_115200")

r1,r2 = LIB_Uart0Recv()

函数描述: 查询是否收到串口数据,如果收到数据则返回接收到的数据。注意每个数据包不要大于256字节,且数据包时间间隔尽量不要小于100ms

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

--配置Uart0串口波特率为115200
LIB_Uart0Config("BAUDRATE_115200")
--查询是否收到数据,如果收到就print输出
while(true)
do
    recv_flag,recv_tab = LIB_Uart0Recv()
    if recv_flag == 1 then
        print(string.format("receive %d bytes", #recv_tab))
    end
end

LIB_Uart0Send(p1)

函数描述: 发送table p1中的数据,每包发送的数据量不要超过256字节,包之间的发送间隔时间也尽量大于100ms

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--配置Uart0串口波特率为115200
LIB_Uart0Config("BAUDRATE_115200")
table = {1,2,3,4,5}
while(true)
do
    --每隔3秒发送一次数据
    LIB_Uart0Send(table)
    LIB_DelayMs(3000)
end

LIB_Uart0BlockSend(p1)

函数描述: 阻塞发送table p1中的数据,每包发送的数据量不要超过256字节,包之间的发送间隔时间也尽量大于10ms

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--配置Uart0串口波特率为115200
LIB_Uart0Config("BAUDRATE_115200")
table = {1,2,3,4,5}
while(true)
do
    --每隔3秒发送一次数据
    LIB_Uart0BlockSend(table)
    LIB_DelayMs(3000)
end

LIB_Uart1Config(p1)

函数描述: 配置Uart1串口开始工作,并按照参数p1的值设定波特率

p1字符串类型,工作模式选择参数
 “BAUDRATE_1200”
 “BAUDRATE_2400”
 “BAUDRATE_4800”
 “BAUDRATE_9600”
 “BAUDRATE_14400”
 “BAUDRATE_19200”
 “BAUDRATE_28800”
 “BAUDRATE_31250”
 “BAUDRATE_38400”
 “BAUDRATE_56000”
 “BAUDRATE_57600”
 “BAUDRATE_76800”
 “BAUDRATE_115200”
 “BAUDRATE_230400”
 “BAUDRATE_250000”
 “BAUDRATE_460800”
 “BAUDRATE_921600”
 “BAUDRATE_1000000”

应用示例:

--配置Uart1串口波特率为115200
LIB_Uart1Config("BAUDRATE_115200")

r1,r2 = LIB_Uart1Recv()

函数描述: 查询是否收到串口数据,如果收到数据则返回接收到的数据。注意每个数据包不要大于256字节,且数据包时间间隔尽量不要小于100ms

r1整数型,指示是否收到数据
 0: 未收到数据
1: 收到数据
r2table型,包含接收到的数据
 

应用示例:

--配置Uart1串口波特率为115200
LIB_Uart1Config("BAUDRATE_115200")
--查询是否收到数据,如果收到就print输出
while(true)
do
    recv_flag,recv_tab = LIB_Uart1Recv()
    if recv_flag == 1 then
        print(string.format("receive %d bytes", #recv_tab))
    end
end

LIB_Uart1Send(p1)

函数描述: 发送table p1中的数据,每包发送的数据量不要超过256字节,发送间隔时间也尽量大于100ms

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--配置Uart1串口波特率为115200
LIB_Uart1Config("BAUDRATE_115200")
table = {1,2,3,4,5}
while(true)
do
    --每隔3秒发送一次数据
    LIB_Uart1Send(table)
    LIB_DelayMs(3000)
end

LIB_Uart1BlockSend(p1)

函数描述: 阻塞发送table p1中的数据,每包发送的数据量不要超过256字节,包之间的发送间隔时间也尽量大于10ms

p1table类型
 table内的元素必须为字节型,元素个数必须小于256个

应用示例:

--配置Uart1串口波特率为115200
LIB_Uart1Config("BAUDRATE_115200")
table = {1,2,3,4,5}
while(true)
do
    --每隔3秒发送一次数据
    LIB_Uart1BlockSend(table)
    LIB_DelayMs(3000)
end

gpio引脚输入输出

LIB_GpioInputConfig(p1,p2)

函数描述: 将GPIO口设置为输入

p1选择需要配置为输入端口的端口标识号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”
“D9”
“D10”
“D11”
p2输入模式配置
 “NOPULL”: 既不上拉也不下拉
“PULLDOWN”: 下拉输入
“PULLUP”: 上拉输入

应用示例:

--设置D0口为上拉输入
LIB_GpioInputConfig("D0","PULLUP")

LIB_GpioOutputConfig(p1,p2)

函数描述: 将GPIO口设置为输出

p1选择需要配置为输出端口的端口标识号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”
“D9”
“D10”
“D11”
p2输出模式配置
 “STANDARD”: 标准输出
“OPENDRAIN”: 开漏输出

应用示例:

--设置D0口为开漏输出
LIB_GpioOutputConfig("D0","OPENDRAIN")

r1 = LIB_GpioRead(p1)

函数描述: 读取端口电平状态

p1选择需要读取的端口标识号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”
“D9”
“D10”
“D11”
r1整数型,指示端口读取到的电平高低
 0: 检测到低电平
1: 检测到高电平

应用示例:

--设置D0口为上拉输入
LIB_GpioInputConfig("D0","PULLUP")
--一直检测D0的值
while(true)
do
    gpio_value = LIB_GpioRead("D0")
    if gpio_value == 0 then
        --do something
    end
end

LIB_GpioWrite(p1, p2)

函数描述: 控制端口的输出电平值

p1选择需要控制的端口标识号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”
“D9”
“D10”
“D11”
P2整数型,需要输出的电平值
 0: 低电平
1: 高电平

应用示例:

--设置D0口为普通输出
LIB_GpioOutputConfig("D0","STANDARD")
--输出周期为1秒的方波
while(true)
do
    --D0口输出高电平
    LIB_GpioWrite("D0",1)
    --延时500ms
    LIB_DelayMs(500)
    --D0口输出低电平
    LIB_GpioWrite("D0",0)
    --延时500ms
    LIB_DelayMs(500)
end

LIB_GpioToggle(p1)

函数描述: 控制端口输出翻转

p1选择需要控制的端口标识号
 “D0”
“D1”
“D2”
“D3”
“D4”
“D5”
“D6”
“D7”
“D8”
“D9”
“D10”
“D11”

应用示例:

--设置D0口为普通输出
LIB_GpioOutputConfig("D0","STANDARD")
while(true)
do
    --D0口输出翻转
    LIB_GpioToggle("D0")
    --延时500ms
    LIB_DelayMs(500)
end

timer定时器

LIB_10msTimerConfig(p1)

函数描述: 配置是否使能10ms定时器

p1字符串类型,工作模式选择参数
 “DISABLE”: 禁止10ms timer
 “ENABLE”: 使能10ms timer

应用示例:

--使能10毫秒定时器开始工作
LIB_10msTimerConfig("ENABLE")

LIB_10msTimerCallback()

函数描述: 如果执行了LIB_10msTimerConfig(“ENABLE”)后,该函数每10毫秒会被系统自动调用,用户只需定义并填充该函数的具体功能即可

应用示例:

--首先定义函数
function LIB_10msTimerCallback()
    --注意: 在该函数内不要做阻塞性的工作,不然会导致10ms的调用周期不准确
    --do something
end
--然后使能定时器
LIB_10msTimerConfig("ENABLE")
while(true)
do
    --do something
end

iic同步串行总线

LIB_IIC0Config(p1)

函数描述: 配置IIC0以master模式开始工作,IIC0使用Core的scl0和sda0引脚

p1字符串类型,IIC通信速率选择
 “100K”:100Khz
“250K”:250Khz
“400K”:400Khz

应用示例:

--使能IIC0以400Khz的频率开始工作
LIB_IIC0Config("400K")

r1 = LIB_IIC0Write(p1,p2)

函数描述: 向设备地址为p1的slave设备发送p2中的数据,该函数为阻塞型函数,如果连续失败10次后IIC0将被Core放弃。

p1整数类型
 iic slave设备地址
p2table类型
 table内的元素必须为字节型,元素个数必须小于256个
r1整数型
 1: 表示通信成功
0: 表示通信失败,失败原因可能是地址不对,器件不存在,或发送数据有误等

应用示例:

--使能IIC0以400Khz的频率开始工作
LIB_IIC0Config("400K")
--向地址为0x32的从设备写5个数据
tab = {1,2,3,4,5}
result = LIB_IIC0Write(0x32, tab)
if result == 1 then
    print("write success")
else
    print("write fail")
end

r1,r2 = LIB_IIC0Read(p1,p2)

函数描述: 从设备地址为p1的从设备读取数据,该函数为阻塞函数

p1整数类型
 iic slave设备地址
p2整数类型
 需要读取的字节数,最多256字节
r1整数型
 1: 表示通信成功
0: 表示未能读取到数据,也可能是因为通信失败:地址不对,器件不存在,或发送数据有误等
r2table类型
 table内的元素为字节型,读取的数据即存储在table中

应用示例:

--使能IIC0以400Khz的频率开始工作
LIB_IIC0Config("400K")
--从设备地址为0x11的slave设备读取10个字节
result,tab = LIB_IIC0Read(0x11,10)
if result == 1 then
    print("read success,the data you read is in tab")
else
    print("read fail")
end

LIB_IIC1Config(p1)

函数描述: 配置IIC1以master模式开始工作,IIC1使用Core的scl1和sda1引脚

p1字符串类型,IIC通信速率选择
 “100K”:100Khz
“250K”:250Khz
“400K”:400Khz

应用示例:

--使能IIC1以400Khz的频率开始工作
LIB_IIC1Config("400K")

r1 = LIB_IIC1Write(p1,p2)

函数描述: 向设备地址为p1的slave设备发送p2中的数据,该函数为阻塞型函数,如果连续失败10次后IIC1将被Core放弃。

p1整数类型
 iic slave设备地址
p2table类型
 table内的元素必须为字节型,元素个数必须小于256个
r1整数型
 1: 表示通信成功
0: 表示通信失败,失败原因可能是地址不对,器件不存在,或发送数据有误等

应用示例:

--使能IIC1以400Khz的频率开始工作
LIB_IIC1Config("400K")
--向地址为0x32的从设备写5个数据
tab = {1,2,3,4,5}
result = LIB_IIC1Write(0x32, tab)
if result == 1 then
    print("write success")
else
    print("write fail")
end

r1,r2 = LIB_IIC1Read(p1,p2)

函数描述: 从设备地址为p1的从设备读取数据,该函数为阻塞函数

p1整数类型
 iic slave设备地址
p2整数类型
 需要读取的字节数,最多256字节
r1整数型
 1: 表示通信成功
0: 表示未能读取到数据,也可能是因为通信失败:地址不对,器件不存在,或发送数据有误等
r2table类型
 table内的元素为字节型,读取的数据即存储在table中

应用示例:

--使能IIC1以400Khz的频率开始工作
LIB_IIC1Config("400K")
--从设备地址为0x11的slave设备读取10个字节
result,tab = LIB_IIC1Read(0x11,10)
if result == 1 then
    print("read success,the data you read is in tab")
else
    print("read fail")
end

spi串行外设接口总线

LIB_SpiMasterConfig(p1,p2,p3)

函数描述: 配置Core的SPI接口以master模式开始工作,SPI使用Core的CLK,MOSI,MISO,CS引脚 注意:该函数只能调用一次

p1字符串类型,SPI时钟速率选择
 “125K”,”250K”,”500K”,”1M”,”2M”,”4M”,”8M”
p2字符串类型,SPI通信模式选择,一般情况下Mode0和Mode3比较常用
 “Mode0″,”Mode1″,”Mode2″,”Mode3”
“Mode0”CPOL=0 CPHA=0, SCK active high, Data sampled on the rising edge and shifted out on the falling edge
“Mode1”CPOL=0 CPHA=1, SCK active high, Data sampled on the falling edge and shifted out on the rising edge
“Mode2”CPOL=1 CPHA=0, SCK active low, Data sampled on the falling edge and shifted out on the rising edge
“Mode3”CPOL=1 CPHA=1, SCK active low, Data sampled on the rising edge and shifted out on the falling edge
p3字符串类型,发送数据高低位顺序选择,一般情况下都是先发送一个字节的最高位”MSB_First”
 “MSB_First”,”LSB_First”

应用示例:

--使能SPI以master模式工作在模式0,时钟为4Mhz的频率,MSB_First:每次先发送字节里的最高位
LIB_SpiMasterConfig("4M","Mode0","MSB_First")

… LIB_SpiMstTransmit(p1, …)

函数描述: SPI主机开始发送和接收数据,需要注意的是每次收发的数据个数不能超过128个字节。

p1字符串类型,传输模式
 “TxAndRx”,”TxThenRx”,”Tx”,”Rx”
“TxAndRx”全双工模式,发送和接收同时进行,即SPI主机发送出去多少字节,同时也会收到多少字节
“TxThenRx”单双工模式,SPI主机先发送数据,发送完后紧接着又开始接收数据
“Tx”单双工模式,SPI主机只发送数据
“Rx”单双工模式,SPI主机只接收数据

注意:不同传输模式下函数LIB_SpiMstTransmit()的输入参数和返回值不一样,下面的例子会介绍不同模式下函数的调用方法

TxAndRx 应用示例:

TxData = {1,2,3}
RxLen = 3
--全双模式,SPI主机发送3个数据同时接收3个数据
RxData = LIB_SpiMstTransmit("TxAndRx",TxData,RxLen)
print(string.format("Spi master had recv %d bytes data,Data[1]=%d,Data[2]=%d,Data[3]=%d", #RxData,RxData[1],RxData[2],RxData[3]))

TxThenRx 应用示例:

TxData = {1,2,3}
RxLen = 3
--半双模式,SPI主机发送3个数据完成后,再紧接着接收3个数据
RxData = LIB_SpiMstTransmit("TxThenRx",TxData,RxLen)
print(string.format("Spi master had recv %d bytes data,Data[1]=%d,Data[2]=%d,Data[3]=%d", #RxData,RxData[1],RxData[2],RxData[3]))

Tx 应用示例:

TxData = {1,2,3}
--半双模式,SPI主机仅发送3个数据
LIB_SpiMstTransmit("Tx",TxData)

Rx 应用示例:

RxLen = 3
--半双模式,SPI主机仅接收3个数据
RxData = LIB_SpiMstTransmit("Rx",RxLen)
print(string.format("Spi master had recv %d bytes data,Data[1]=%d,Data[2]=%d,Data[3]=%d", #RxData,RxData[1],RxData[2],RxData[3]))

pwm

LIB_PwmConfig1(p1,p2)

函数描述: 将D0口配置为PWM功能

p1整数类型,Pwm波形的周期
 0-32767微秒
p2整数类型,Pwm波形的极性
 0: 负极性,即有效占空比期间输出低电平
1 :正极性,即有效占空比期间输出高电平

应用示例:

--配置D0口为PWM功能,周期10ms,高电平为有效极性
LIB_PwmConfig1(10000,1)

LIB_PwmUpdate1(p1)

函数描述: 调整D0口输出的PWM波形占空比值

p1整数类型,脉冲宽度
 0-32767微秒

应用示例:

--配置D0口为PWM功能,周期10ms,高电平为有效极性
LIB_PwmConfig1(10000,1)
--更新D0口的PWM输出占空比为50%
LIB_PwmUpdate1(5000)

LIB_PwmSetPrd1(p1,p2)

函数描述: 调整D0口输出的PWM波形的周期(频率)以及占空比值 注意:该函数不适合频繁调用,因为该函数会有几us时间的延时,并且该函数会在当前PWM周期结束时刻才产生效果

p1整数类型,Pwm波形的周期
 0-32767微秒
p2整数类型,脉冲宽度
 0-32767微秒

应用示例:

--调整PWM功能输出的波形为周期10ms(100Hz),占空比值为5ms
LIB_PwmSetPrd1(10000,5000)

LIB_PwmConfig3(p1,p2)

函数描述: 将D0, D1, D2口配置为PWM功能

p1整数类型,Pwm波形的周期
 0-32767微秒
p2整数类型,Pwm波形的极性
 0: 负极性,即有效占空比期间输出低电平
1 :正极性,即有效占空比期间输出高电平

应用示例:

--配置D0 D1 D2口为PWM功能,周期10ms,高电平为有效极性
LIB_PwmConfig3(10000,1)

LIB_PwmUpdate3(p1,p2,p3)

函数描述: 调整D0 D1 D2口输出的PWM波形占空比值

p1整数类型,DO口脉冲宽度
 0-32767微秒
p2整数类型,D1口脉冲宽度
 0-32767微秒
p3整数类型,D2口脉冲宽度
 0-32767微秒

应用示例:

--配置D0 D1 D2口为PWM功能,周期10ms,高电平为有效极性
LIB_PwmConfig3(10000,1)
--更新D0口的PWM输出占空比为50%
--更新D1口的PWM输出占空比为25%
--更新D2口的PWM输出占空比为100%
LIB_PwmUpdate3(5000,2500,10000)

LIB_PwmSetPrd3(p1,p2,p3,p4)

函数描述: 调整D0 D1 D2口输出的PWM波形的周期(频率)以及占空比值 注意:该函数不适合频繁调用,因为该函数会有几us时间的延时,并且该函数会在当前PWM周期结束时刻才产生效果

p1整数类型,D0 D1 D2口Pwm波形的周期
 0-32767微秒
p2整数类型,D0口的脉冲宽度
 0-32767微秒
p3整数类型,D1口的脉冲宽度
 0-32767微秒
p4整数类型,D2口的脉冲宽度
 0-32767微秒

应用示例:

--调整PWM功能输出的波形为周期10ms(100Hz),D0,D1,D2的占空比值分别5ms,2ms,1ms
LIB_PwmSetPrd3(10000,5000,2000,1000)

AD

LIB_ADConfig(p1,p2)

函数描述: 同时让4个通道(A0-A3)开始AD采集工作。AD工作模式为单端输入,12-bit工作模式,4096对应最大电压3.6v 注意1: A0-A3的输入电压均不能超过mcu的VDD 3.3V 注意2: 配置了AD功能就不能再用比较器功能了

p1整数类型,每个通道缓存大小,即缓存需要存放多少个采集点才会满
 该值必须大于等于1,且小于等于64
p2整数类型,采集时间间隔,单位:微秒(us)
 最小值不能小于200us,建议该值大于1000以上,太低了会增加CPU负荷

应用示例:

--配置A0-A3这四个通道同时开始工作,每个通道采集满50个点时缓存满,每个点的采集时间间隔为1000us
LIB_ADConfig(50,1000)

r1,r2 = LIB_ADCheckBufFull(p1)

函数描述: 查询某个AD通道缓存是否已满,如果满了就在表中返回缓存中的数据

p1字符串型,需要查询的通道标识
 “A0″,”A1″,”A2″,”A3”
r1整数型,指示通道An的缓存buf是否已满,如果满了r2就会包含缓存中的所有AD采样数据
 0: 未满
1: 已满
r2table型,返回已满缓存中的数据,数据个数取决于你用LIB_ADConfig时设置的大小
 

应用示例:

--配置A0-A3这四个通道同时开始工作,每个通道采集满50个点时缓存满,每个点的采集时间间隔为1000us
LIB_ADConfig(50,1000)
--分别查询A0和A1通道的缓存是否已满,如果满了就取出数据并做相关处理,此处我们可以不管A2和A3
while(true)
do
    A0_full_flag, A0_tab = LIB_ADCheckBufFull("A0")
    if A0_full_flag == 1 then
        print(string.format("A0 get %d sample datas\r\n", #A0_tab))
        --do something with A0_tab
    end
​
    A1_full_flag, A1_tab = LIB_ADCheckBufFull("A1")
    if A1_full_flag == 1 then
        print(string.format("A1 get %d sample datas\r\n", #A1_tab))
        --do something with A1_tab
    end
end

电压比较器

LIB_CompConfig(p1,p2)

函数描述: 配置电压比较器开始工作,比较器的输入引脚为Core的A0引脚,注意:当配置电压比较器后就无法使用AD功能 另外电压比较器默认带迟滞功能,hysteresis=50mv

p1字符串类型,比较器的参考电压1/16Vdd – 15/16Vdd,其中Vdd为Core的电源3.3v
 “0.125Vdd”
 “0.25Vdd”
 “0.375Vdd”
 “0.5Vdd”
 “0.625Vdd”
 “0.75Vdd”
 “0.875Vdd”
 “0.0625Vdd”
 “0.1875Vdd”
 “0.3125Vdd”
 “0.4375Vdd”
 “0.5625Vdd”
 “0.6875Vdd”
 “0.8125Vdd”
 “0.9375Vdd”
p2字符串类型,比较器工作模式选择参数
 “UpAndDown” : 当A0引脚的输入电压超过或低于参考电压时,都会触发回调函数LIB_CompCallBack()的调用
 “Up” : 当A0引脚的输入电压超过参考电压时,触发回调函数LIB_CompCallBack()的调用
 “Down” : 当A0引脚的输入电压低于参考电压时,触发回调函数LIB_CompCallBack()的调用

应用示例:

--配置电压比较器开始工作,参考电压=0.5Vdd,工作模式为Down
--即当A0引脚上电压降低到小于0.5Vdd时,Lua应用层会立即自动调用用户定义的LIB_CompCallBack()回调函数
LIB_CompConfig("0.5Vdd", "Down")

LIB_CompCtrl(p1)

函数描述: 调用LIB_CompConfig配置比较器开始工作后,可以用LIB_CompCtrl函数随时打开或关闭比较器

p1字符串类型
 “CLOSE”:打开比较器
“OPEN”:关闭比较器

应用示例:

--配置比较器,该函数执行完后比较器会立即开始工作
LIB_CompConfig("0.5Vdd", "Down")
--但此时让比较器立即停止工作
LIB_CompCtrl("CLOSE")

LIB_CompCallBack()

函数描述: 如果执行了LIB_CompConfig()让电压比较器开始工作后,每当Core的A0引脚上电压变化满足条件时,该函数会自动被调用

应用示例:

--首先定义函数,该函数在比较器输入电压低于0.5Vdd时会自动被调用
function LIB_CompCallBack()
    --注意: 在该函数内不要做阻塞性的工作
    --do something
end
​
--配置电压比较器开始工作
LIB_CompConfig("0.5Vdd", "Down")
while(true)
do
    --do something
end

脉宽测量

LIB_PulseWidthMeasureConfig(p1,p2)

函数描述: 配置测量脉宽时的参数,测量的时间精度能够达到1us。Core中用于测量的引脚固定为D4引脚

p1字符串类型,用于配置测量引脚D4是否使能内部上拉或下拉电阻
 “NoPull”
“PullDown”
“PullUp”
p2字符串类型,用于配置触发测量的条件
 “Fall”:下降沿触发
“Rise”:上升沿触发
p3整数类型,滤波参数,测量的波形中脉宽小于该值的将被忽略
 单位:us

应用示例:

--配置测量脉宽的D4引脚内部上拉,触发条件为下降沿,滤掉脉宽小于1000us的波形
LIB_PulseWidthMeasureConfig("PullUp","Fall",1000)

LIB_PulseWidthMeasureStart(p1,p2)

函数描述: 配置测量脉宽时的参数,测量的时间精度能够达到1us。Core中用于测量的引脚固定为D4引脚

p1整数类型,想要测量的高低电平脉宽数量
 由于系统缓存有限,要测量的脉宽数量最多不能超过256个,如果大于256,按256个算
p2整数类型,超时时间
 单位:毫秒

应用示例:

--开始脉宽测量,希望在10秒内测到150个高低电平的脉宽
LIB_PulseWidthMeasureStart(150,10000)

r1,r2 = LIB_PulseWidthMeasureFinishCheck()

函数描述: 查询脉宽测量工作是否结束,如果结束就可以从返回的table表中取出每个高低电平的脉宽(单位:us)

r1整数型,指示测量工作是否结束
 0: 测量中
1: 测量结束(结束原因可能是已完成预定的高低电平数量,也可能是超时)
r2table型,包含测量到的数据 ,正数表示该脉宽是高电平,负数表示该脉宽是低电平,单位:us
 table的元素个数反映了实际测量到的高低电平数量,当数量少于预设的值时说明测量是因超时结束的

应用示例:

--配置测量脉宽的D4引脚内部上拉,触发条件为下降沿,滤掉脉宽小于1000us的波形
LIB_PulseWidthMeasureConfig("PullUp","Fall",1000)
--开始脉宽测量,希望在10秒内测到150个高低电平的脉宽
LIB_PulseWidthMeasureStart(150,10000)
while(true)
do
    --查询测量工作是否结束
    finish_flag, data_tab = LIB_PulseWidthMeasureFinishCheck()
    if finish_flag == 1 then
        print(string.format("Job over, had measured %d segments\r\n", #data_tab))
    end
end

脉冲计数

LIB_PulseCountMeasureConfig(p1,p2)

函数描述: 配置脉冲计数工作时的参数,配置完成后以p3设定的周期计量并更新每个周期所测的脉冲数量

p1字符串类型,用于配置测量引脚D4是否使能内部上拉或下拉电阻
 “NoPull”
“PullDown”
“PullUp”
p2字符串类型,用于配置计数的脉冲类型
 “Fall”: 下降沿触发
“Rise”:上升沿触发
“RiseAndFall”: 上升沿和下降沿
p3整数类型,计数周期
 单位:ms,范围可从(1-0x7FFFFFFF)毫秒

应用示例:

--配置计量脉冲的D4引脚内部上拉,触发条件为下降沿,计数周期为1000ms
LIB_PulseCountMeasureConfig("PullUp","Fall",1000)

r1,r2 = LIB_PulseCountMeasureFinishCheck()

函数描述: 查询本周期的脉冲计数的工作是否出结果

r1整数型,本周期计数工作是否完成
 0: 正在计数中
1: 计数结束
r2整数型,本周期的计数结果
 单位: 个

应用示例:

--配置计量脉冲的D4引脚内部上拉,触发条件为下降沿,计数周期为1000ms
LIB_PulseCountMeasureConfig("PullUp","Fall",1000)
while(true)
do
    --查询计数结果,该函数需要保证每1000ms至少调用一次,不然你会错过这个周期的计数结果
    finish_flag, data = LIB_PulseCountMeasureFinishCheck()
    if finish_flag == 1 then
        print(string.format("Job over, had count %d pulse in 1000ms\r\n", data))
    end
end

内部Flash读写

r1 = LIB_FlashGetNumber(p1)

函数描述: Core为用户提供64个Number存储区域,每个Number区域可以让用户存1个4字节的int型数据, 本函数通过p1参数来获取指定的Number区的值。

p1字符串类型,Number区索引
 “0”,”1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9″,
“10”,”11″,”12″,”13″,”14″,”15″,”16″,”17″,”18″,”19″,
“20”,”21″,”22″,”23″,”24″,”25″,”26″,”27″,”28″,”29″,
“30”,”31″,”32″,”33″,”34″,”35″,”36″,”37″,”38″,”39″,
“40”,”41″,”42″,”43″,”44″,”45″,”46″,”47″,”48″,”49″,
“50”,”51″,”52″,”53″,”54″,”55″,”56″,”57″,”58″,”59″,
“60”,”61″,”62″,”63″
r1整数型
 返回指定Number区的int值

应用示例:

--读取Number6的值
value = LIB_FlashGetNumber("6")
print(string.format("Number6 = %d\r\n", value))

LIB_FlashWriteNumber(p1,p2)

函数描述: Core为用户提供64个Number存储区域,每个Number区域可以让用户存1个4字节的int型数据, 本函数实现了向p1参数所指定的Number区写入int型值p2。 注意:调用该函数会造成大概100毫秒的阻塞

p1字符串类型,Number区索引
 “0”,”1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9″,
“10”,”11″,”12″,”13″,”14″,”15″,”16″,”17″,”18″,”19″,
“20”,”21″,”22″,”23″,”24″,”25″,”26″,”27″,”28″,”29″,
“30”,”31″,”32″,”33″,”34″,”35″,”36″,”37″,”38″,”39″,
“40”,”41″,”42″,”43″,”44″,”45″,”46″,”47″,”48″,”49″,
“50”,”51″,”52″,”53″,”54″,”55″,”56″,”57″,”58″,”59″,
“60”,”61″,”62″,”63″
p2整数型
 需要写入的int型数据

应用示例:

--向Number6区域写入值-100
LIB_FlashWriteNumber("6",-100)

r1 = LIB_FlashGetString(p1)

函数描述: Core为用户提供4个String存储区域,每个String区域可以让用户存1个长度在64字节范围内的字符串, 本函数通过p1参数来获取指定的String区的字符串。

p1字符串类型,String区索引
 “0”:String0
“1”:String1
“2”:String2
“3”:String3
r1字符串型
 返回指定String区的字符串

应用示例:

--读取String0的字符串
str = LIB_FlashGetString("0")
print(string.format("String0 = %s\r\n", str))

LIB_FlashWriteString(p1,p2)

函数描述: Core为用户提供4个String存储区域,每个String区域可以让用户存1个长度在64字节范围内的字符串, 本函数实现了向p1参数所指定的String区写入字符串。 注意:调用该函数会造成大概100毫秒的阻塞

p1字符串类型,String区索引
 “0”:String0
“1”:String1
“2”:String2
“3”:String3
p2字符串类型
 需要写入String区的字符串

应用示例:

--向String0区域写入字符串"www.shineblink.com"
str = "www.shineblink.com"
LIB_FlashWriteString("0",str)

看门狗(WatchDog)

LIB_WatchDogConfig(p1)

函数描述: 配置看们狗按指定的溢出时间开始工作 当溢出时间到达之时,Lua代码仍然没有执行LIB_WatchDogFeed()喂狗操作,Core会自动系统重启

p1字符串类型,用于配置看门狗的溢出时间
 “0.1S”,”1S”,”10S”,”30S”,”120S”

应用示例:

--配置开始工作,溢出时间为10秒
LIB_WatchDogConfig("10S")

LIB_WatchDogFeed()

函数描述: 喂狗

应用示例:

--喂狗,可以在Lua代码任意位置执行
LIB_WatchDogFeed()

工具库函数

系统垃圾回收函数

r1 = GC(p1)

函数描述: 执行Lua的垃圾回收功能,及时为系统heap释放空间

p1整数型,表示每调用多少次GC()才执行一次垃圾回收
 一般设置成1,即每次调用GC()都执行一次垃圾回收
如果为了给CPU减负,该值可以设置的大一些
r1boolean类型,总是返回true
 

注意: 也可以不用这个函数,用Lua自带的垃圾回收函数collectgarbage(“collect”)也可以。

应用示例:

--在大循环中,每循环一次,执行一次垃圾回收
while(GC(1) == true)
do
    --do something
end

系统堆空间使用率统计函数

LIB_LuaHeapStatistics()

函数描述: 打印输出Lua heap使用情况,打印结果可以在log.txt或usb串口终端看到

应用示例:

LIB_LuaHeapStatistics()
--[[
打印出结果类似于下面的样例,Block表示heap中的各个区块大小,Total表示每个区块一共有多少个,Used表示被用了多少个。
Heap Use Statistics(HeapSize= 54048 bytes):
 Block   16B     32B     64B    256B    2048B   4096B   4352B
 Total    50     400      60      30      10       1       1
  Used     3     216      14       7       9       1       0
]]

系统日志函数

LIB_SystemLogEnable()

函数描述: 使能系统日志,系统日志不仅可以存在sd卡上,也可以通过usb串口print出来,取决于用户设置,该功能用户不需用。

应用示例:

--在代码一开始处增加如下代码
LIB_SystemLogEnable()

系统复位函数

LIB_SystemReset()

函数描述: 调用该函数后,系统会立刻重启。

应用示例:

--在代码的某处执行重启操作
LIB_SystemReset()

系统时间函数

r1,r2,r3,r4,r5,r6,r7 = LIB_GetDateTime()

函数描述: 获取系统年月日,时分秒以及毫秒

r1整数型,年
r2整数型,月
r3整数型,日
r4整数型,时
r5整数型,分
r6整数型,秒
r7整数型,毫秒

应用示例:

y,mo,d,h,mi,s,ms = LIB_GetDateTime()
print(string.format("date=%02d-%02d-%02d time=%02d:%02d:%02d.%03d",y,mo,d,h,mi,s,ms))

LIB_SetUtcTime(p1)

函数描述: 将UTC时间设置为系统时间

p1整数类型,UTC时间
 单位:秒

应用示例:

--将2020/5/20 14:38:35的时间戳1589956715设置为系统时间
LIB_SetUtcTime(1589956715)

系统延时函数

LIB_DelayMs(p1)

函数描述: 毫秒级延时

p1整数类型,延时参数
 0-999999999毫秒

应用示例:

--延时1000毫秒
LIB_DelayMs(1000)

常用字符串处理函数

r1 = LIB_StrToTab(p1)

函数描述: 将字符串转换成table类型返回

p1字符串类型
 注意: 字符串长度不能超过256字节,否则会截断字符串
r1table类型
 

应用示例:

table = LIB_StrToTab("hello world\r\n")

r1 = LIB_TabToStr(p1)

函数描述: 将table中的每个字符合并转换成字符串返回

p1table类型
 注意: table中的每个元素必须是0-255的ascii码值(否则会造成无法预料结果),且table中的元素个数不能大于256
r1字符串类型
 注意: 返回的字符串长度不会超过256字节

应用示例:

--打印"hello"
table = {0x68,0x65,0x6c,0x6c,0x6f}
str = LIB_TabToStr(table)
print(str)