lora2-lora 驱动模块
作者:王世豪
一、概述
LuatOS 的 lora2 驱动模块,支持多设备挂载,提供完整的 lora 通信功能。仅支持 LLCC68、SX1268 两款主流 lora 芯片。
1.1 lora 通信原理
LoRa(Long Range)是 semtech 公司创建的低功耗、远距离、无线、广域网的标准。
LoRa 模块采用扩频通信技术,其核心原理是将信号的频谱扩展到一个很宽的频率范围内,从而提高信号的抗干扰能力和安全性。LoRa 模块主要采用的是基于线性调频(LFM)的扩频技术,即 Chirp Spread Spectrum(CSS)。
LoRa 模块在发送数据时,会将数据信号与一个高速的伪随机码(PN 序列)进行模二加运算,生成扩频信号。接收端使用相同的 PN 序列对接收到的扩频信号进行解扩,恢复出原始数据信号。
如果您需要权威参考,建议查阅 Semtech 官方(https://www.semtech.cn/lora)发布的 LoRa 技术文档或 LLCC68/SX1268 系列芯片数据手册。
1.2 工作模式
-
发送模式:用于无线发送数据,发送完成触发 "tx_done"事件。
-
接收模式:监听并接收无线信号,接收成功触发 "rx_done"事件 ,超时触发 "rx_timeout"事件。
-
待机模式:准备就绪状态,介于工作和睡眠之间,作为发送/接收操作前的过渡状态。
1.3 注意事项
由于 LoRa 设备的半双工特性,当设备 A 处于发送模式时,若设备 B 同时发送数据,设备 A 将无法接收,导致数据丢失。
二、核心示例
-
核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;
-
核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
-
更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/lora2;
local spi_id,pin_cs,pin_reset,pin_busy,pin_dio1 = 0,8,1,18,19
-- 定义LoRa回调处理函数
local function lora_callback(lora_device, event, data, size)
log.info("lora", "event", event, lora_device, data, size)
if event == "tx_done" then
lora_device:recv(1000)
elseif event == "rx_done" then
lora_device:send("PING")
elseif event == "rx_timeout" then
lora_device:recv(1000)
elseif event == "rx_error" then
-- 可以在这里添加接收错误的处理逻辑
end
end
-- 定义主任务函数
local function lora_main_task()
spi_lora = spi.deviceSetup(spi_id,pin_cs,0,0,8,10*1000*1000,spi.MSB,1,0)
lora_device = lora2.init("llcc68",{res = pin_reset,busy = pin_busy,dio1 = pin_dio1},spi_lora)
log.info("lora_device",lora_device)
lora_device:set_channel(433000000)
lora_device:set_txconfig(
{
mode=1,
power=22,
fdev=0,
bandwidth=0,
datarate=9,
coderate=4,
preambleLen=8,
fixLen=false,
crcOn=true,
freqHopOn=0,
hopPeriod=0,
iqInverted=false,
}
)
lora_device:set_rxconfig(
{
mode=1,
bandwidth=0,
datarate=9,
coderate=4,
bandwidthAfc=0,
preambleLen=8,
symbTimeout=0,
fixLen=false,
payloadLen=0,
crcOn=true,
freqHopOn=0,
hopPeriod=0,
iqInverted=false,
rxContinuous=false,
}
)
lora_device:on(lora_callback)
lora_device:send("PING")
while 1 do
log.info("lora")
sys.wait(1000)
end
end
sys.taskInit(lora_main_task)
三、常量详解
核心库常量,顾名思义是由合宙 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;
每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为LuatOS内核固件可能会变更每个常量对应的常量取值;
如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;
3.1 lora.SLEEP
常量含义:SLEEP模式(休眠模式);
数据类型:number;
常量取值:0;
注意事项:在此模式下,lora设备进入低功耗状态,大部分功能被关闭以节省电能;
在休眠模式下无法进行发送或接收操作;
需要切换到STANDBY模式后才能进行通信操作;
示例代码:-- 设置lora设备进入休眠模式
lora_device:mode(lora.SLEEP)
3.2 lora.STANDBY
常量含义:STANDBY模式(待机模式);
数据类型:number;
常量取值:1;
注意事项:在此模式下,lora设备处于准备状态,可以快速切换到发送或接收模式;
相比SLEEP模式功耗较高,但响应速度更快;
是进行发送和接收操作前的默认工作状态;
示例代码:-- 从休眠模式切换到待机模式
lora_device:mode(lora.STANDBY)
四、函数详解
4.1 lora2.init(ic, loraconfig,spiconfig)
功能
lora 设备初始化,创建并返回一个 lora 设备对象;
注意事项
当前仅支持 llcc68 和 sx1268 两个 lora 型号;
初始化前需要确保 SPI 设备已正确配置;
参数
ic
含义说明:lora 型号;
数值类型:string;
取值范围:"llcc68"/"sx1268";
是否必选:是;
注意事项:当前仅支持llcc68和sx1268两个lora型号;
参数示例:"llcc68"
loraconfig
含义说明:lora设备硬件配置参数表,表结构如下:
{
-- 参数含义:复位引脚;
-- 数据类型:number;
-- 取值范围:有效的GPIO引脚编号;
-- 是否必选:是;
-- 注意事项:用于硬件复位LoRa芯片,低电平有效;
res
-- 参数含义:发射功率;
-- 数据类型:number;
-- 取值范围:有效的GPIO引脚编号;
-- 是否必选:是;
-- 注意事项:用于检测芯片是否处于忙碌状态,高电平表示忙碌;
busy
-- 参数含义:数字IO1引脚;
-- 数据类型:number;
-- 取值范围有效的GPIO引脚编号;
-- 是否必选:是;
-- 注意事项:_用于中断信号,如发送完成、接收完成等事件通知;
dio1
}
数值类型:table;
取值范围:符合上述结构的table对象;
是否必选:是;
注意事项:引脚配置与具体硬件连接有关;
参数示例:{
res = pin_reset,
busy = pin_busy,
dio1 = pin_dio1
}
spiconfig
含义说明:SPI设备配置对象;
数值类型:userdata;
取值范围:由spi.deviceSetup()返回的SPI设备对象;
是否必选:是;
注意事项:需要先调用spi.deviceSetup()创建SPI设备;
参数示例:spi_lora = spi.deviceSetup(spi_id,pin_cs,0,0,8,10*1000*1000,spi.MSB,1,0)
返回值
local lora_device = lora2.init(ic, loraconfig, spiconfig)
lora_device
含义说明:lora设备对象;
数值类型:userdata / nil;
取值范围:初始化成功返回lora设备对象,失败返回nil;
注意事项:成功返回lora设备对象,可用于后续所有lora操作;
返回nil表示初始化失败,需检查参数和硬件连接;
返回示例:成功返回:0C7FCFA8
失败返回:nil
local lora_device = lora2.init("llcc68", lora_config, spi_lora)
log.info("lora_device ", lora_device)
示例
-- 初始化SPI设备
local spi_lora = spi.deviceSetup(spi_id,pin_cs,0,0,8,10*1000*1000,spi.MSB,1,0)
-- 初始化LoRa设备
local lora_config = {
res = pin_reset,
busy = pin_busy,
dio1 = pin_dio1
}
local lora_device = lora2.init("llcc68", lora_config, spi_lora)
4.2 lora_device:set_channel(freq)
功能
设置 lora 设备的通信频道频率;
注意事项
常用频段:433MHz、868MHz、915MHz; 需要确保频率在 lora 设备支持的范围内;
参数
freq
含义说明:通信频率,单位为赫兹(Hz);
数值类型:number;
取值范围:无底层限制,取决于具体硬件设备;
LLCC68/SX1268芯片典型支持范围:150MHz - 960MHz;
芯片手册定义了芯片的理论能力范围,手册见第六章;
lora模块手册才定义了实际产品的可用频率范围;
不同厂商基于同一芯片的模块,支持的频段可能不同;
实际有效范围请参考具体lora模块的数据手册;
是否必选:是;
注意事项:常用频段:433MHz、868MHz、915MHz;
需要确保频率在lora设备支持的范围内;
参数示例:-- 设置433MHz频段,参数需写成433000000
lora_device:set_channel(433000000)
返回值
无
示例
-- 设置433MHz频段
lora_device:set_channel(433000000)
4.3 lora_device:set_txconfig(txconfig)
功能
配置 LoRa 设备的发送参数;
注意事项
发送参数配置必须在 lora 设备初始化成功后调用;
配置后需要调用接收配置函数以建立完整通信链路;
参数
txconfig
含义说明:LoRa发送配置参数表,table内容格式说明如下:
{
-- 参数含义:工作模式;
-- 数据类型:number;
-- 取值范围:0/1;
-- 是否必选:否,默认是1:LoRa模式;
-- 注意事项:0:FSK模式,数据率较高,但传输距离较短,适合短距离高速通信;
-- 1:LoRa模式,适合长距离通信,抗干扰能力强,但数据率较低;
mode
-- 参数含义:发射功率;
-- 数据类型:number;
-- 取值范围:取决于硬件;
-- 是否必选:否,默认是22 (单位:dBm);
-- 注意事项:可参考芯片手册sx1268/llcc68的 4.4 Transmitter 章节部分
power
-- 参数含义:频率偏差;
-- 数据类型:number;
-- 取值范围:取决于硬件;
-- 是否必选:否,默认是0;
-- 注意事项:fdev参数仅在FSK模式下有效(mode=0时),在LoRa模式下设为0;
-- 具体取值可参考芯片手册sx1268/llcc68的 6.2 FSK Modem 章节部分
fdev
-- 参数含义:带宽;
-- 数据类型:number:
-- 取值范围:LoRa模式:取值范围为 [0, 1, 2], 具体对应关系:
-- 0: 125 kHz
-- 1: 250 kHz
-- 2: 500 kHz
-- FSK模式下(mode=0)
-- 2600 Hz 至 250000 Hz,
-- 是否必选:否,默认0;
-- 注意事项:在FSK模式下,bandwidth参数是直接的频率值,不是枚举值。
bandwidth
-- 参数含义:数据速率;
-- 数据类型:number;
-- 取值范围:FSK模式 : 600-300000 bits/s(比特每秒)
-- LoRa模式:6-12(对应扩频因子SF6-SF12)
-- 6: SF6 (64码片/比特)
-- 7: SF7 (128码片/比特)
-- 8: SF8 (256码片/比特)
-- 9: SF9 (512码片/比特)
-- 10: SF10 (1024码片/比特)
-- 11: SF11 (2048码片/比特)
-- 12: SF12 (4096码片/比特)
-- 是否必选:否,默认9(SF9);
-- 注意事项:FSK模式:直接设置比特率,影响通信速度和抗噪能力;
-- LoRa模式:设置扩频因子(SF),决定每个数据比特对应的码片数量;
-- 扩频因子越高,通信距离越远,抗干扰能力越强,但数据速率越低;
-- 扩频因子越低,数据速率越高,但通信距离越短;
datarate
-- 参数含义:编码率;
-- 数据类型:number;
-- 取值范围:0/1/2/3/4
-- 是否必选:否,默认是4;
-- 注意事项:LoRa模式 :取值范围为 [1, 2, 3, 4] ,具体对应关系:
-- 1 : 对应编码率 4/5
-- 2 : 对应编码率 4/6
-- 3 : 对应编码率 4/7
-- 4 : 对应编码率 4/8
-- FSK模式 :不适用,需设置为 0
coderate
-- 参数含义:前导码长度;
-- 数据类型:number;
-- 取值范围:0-65535;
-- 是否必选:否,默认4;
-- 注意事项:LoRa模式 :以符号(symbols)为单位,符号是LoRa调制的基本时间单位,一个符号对应一个完整的Chirp信号周期;
-- FSK模式 :以字节(bytes)为单位,内部实现会将其转换为比特(bit);
preambleLen
-- 参数含义:固定长度模式;
-- 数据类型:boolean;
-- 取值范围:true/false;
-- 是否必选:否,默认是false;
-- 注意事项:无;
fixLen
-- 参数含义:CRC校验使能;
-- 数据类型:boolean;
-- 取值范围:true/false;
-- 是否必选:否,默认是true:
-- 注意事项:无;
crcOn
-- 参数含义:跳频使能;
-- 数据类型:number;
-- 取值范围:0/1;
-- 0 :禁用频率跳变功能
-- 1 :启用频率跳变功能
-- 是否必选:否,默认是0;
-- 注意事项:该参数仅在LoRa模式(mode=1)下有效,在FSK模式下应设置为0;
freqHopOn
-- 参数含义:跳频周期;
-- 数据类型:number;
-- 取值范围:0-255;
-- 是否必选:否,默认是0;
-- 注意事项:该参数仅在LoRa模式(mode=1)下有效,且仅当freqHopOn=1(启用频率跳变)时才需要设置非零值;
hopPeriod
-- 参数含义:IQ反转;
-- 数据类型:boolean;
-- 取值范围:true/false;
-- 是否必选:否,默认是false;
-- 注意事项:仅在 LoRa 模式下有效,FSK 模式下必须设置为 0;
iqInverted
}
数值类型:table;
取值范围:符合上述结构的table对象;
是否必选:是;
注意事项:参数值需要根据具体应用场景和硬件能力进行调整;
高发射功率会增加功耗但提高通信距离;
低数据速率提高通信可靠性但降低吞吐量;
具体参数含义和取值范围请参考设备数据手册;
不同lora芯片支持的参数范围可能不同;
返回值
无
示例
-- 配置发送参数
lora_device:set_txconfig(
{
mode = 1,
power = 22,
fdev = 0,
bandwidth = 0,
datarate = 9,
coderate = 4,
preambleLen = 8,
fixLen = false,
crcOn = true,
freqHopOn = 0,
hopPeriod = 0,
iqInverted = false,
timeout = 3000
})
4.4 lora_device:set_rxconfig(set_rxconfig)
功能
配置 lora 设备的接收参数;
注意事项
接收参数配置必须在 lora 设备初始化成功后调用;
接收参数应与发送端参数匹配才能正常通信;
参数
txconfig
含义说明:LoRa接收配置参数表,table内容格式说明如下:
{
-- 参数含义:工作模式;
-- 数据类型:number;
-- 取值范围:0/1;
-- 是否必选:否,默认是1:LoRa模式;
-- 注意事项:0:FSK模式,数据率较高,但传输距离较短,适合短距离高速通信;
-- 1:LoRa模式,适合长距离通信,抗干扰能力强,但数据率较低;
mode
-- 参数含义:带宽;
-- 数据类型:number:
-- 取值范围:LoRa模式:取值范围为 [0, 1, 2], 具体对应关系:
-- 0: 125 kHz
-- 1: 250 kHz
-- 2: 500 kHz
-- FSK模式下(mode=0)
-- 2600 Hz 至 250000 Hz,
-- 是否必选:否,默认0;
-- 注意事项:在FSK模式下,bandwidth参数是直接的频率值,不是枚举值。
bandwidth
-- 参数含义:数据速率;
-- 数据类型:number;
-- 取值范围:FSK模式 : 600-300000 bits/s(比特每秒)
-- LoRa模式:6-12(对应扩频因子SF6-SF12
-- 6: SF6 (64码片/比特)
-- 7: SF7 (128码片/比特)
-- 8: SF8 (256码片/比特)
-- 9: SF9 (512码片/比特)
-- 10: SF10 (1024码片/比特)
-- 11: SF11 (2048码片/比特)
-- 12: SF12 (4096码片/比特)
-- 是否必选:否,默认9(SF9);
-- 注意事项:FSK模式:直接设置比特率,影响通信速度和抗噪能力;
-- LoRa模式:设置扩频因子(SF),决定每个数据比特对应的码片数量;
-- 扩频因子越高,通信距离越远,抗干扰能力越强,但数据速率越低;
-- 扩频因子越低,数据速率越高,但通信距离越短;
datarate
-- 参数含义:编码率;
-- 数据类型:number;
-- 取值范围:0/1/2/3/4
-- 是否必选:否,默认是4;
-- 注意事项:LoRa模式 :取值范围为 [1, 2, 3, 4] ,具体对应关系:
-- 1 : 对应编码率 4/5
-- 2 : 对应编码率 4/6
-- 3 : 对应编码率 4/7
-- 4 : 对应编码率 4/8
-- FSK模式 :不适用,需设置为 0
coderate
-- 参数含义:前导码长度;
-- 数据类型:number;
-- 取值范围:0-65535;
-- 是否必选:否,默认4;
-- 注意事项:LoRa模式 :以符号(symbols)为单位,符号是LoRa调制的基本时间单位,一个符号对应一个完整的Chirp信号周期;
-- FSK模式 :以字节(bytes)为单位,内部实现会将其转换为比特(bit);
preambleLen
-- 参数含义:符号超时;
-- 数据类型:number;
-- 取值范围:0-255;
-- 是否必选:否,默认是0:
-- 注意事项:symbTimeout 表示接收机在检测到前导码后,等待有效数据包的最大符号数量;
-- 在LoRa模式下,表示以符号为单位的接收超时时间;
-- 在FSK模式下,表示以字节为单位的超时时间;
symbTimeout
-- 参数含义:固定长度模式;
-- 数据类型:boolean;
-- 取值范围:true/false;
-- 是否必选:否,默认是false;
-- 注意事项:无;
fixLen
-- 参数含义:载荷长度;
-- 数据类型:boolean;
-- 取值范围:0-255;
-- 是否必选:否,默认是0:
-- 注意事项:当 fixLen = true (固定长度模式) 时:1-255 字节
-- 当 fixLen = false (可变长度模式) 时:参数值被忽略,使用默认值255;
payloadLen
-- 参数含义:CRC校验使能;
-- 数据类型:boolean;
-- 取值范围:true/false;
-- 是否必选:否,默认是true:
-- 注意事项:无;
crcOn
-- 参数含义:跳频使能;
-- 数据类型:number;
-- 取值范围:0/1;
-- 0 :禁用频率跳变功能
-- 1 :启用频率跳变功能
-- 是否必选:否,默认是0;
-- 注意事项:该参数仅在LoRa模式(mode=1)下有效,在FSK模式下应设置为0;
freqHopOn
-- 参数含义:跳频周期;
-- 数据类型:number;
-- 取值范围:0-255;
-- 是否必选:否,默认是0;
-- 注意事项:该参数仅在LoRa模式(mode=1)下有效,且仅当freqHopOn=1(启用频率跳变)时才需要设置非零值;
hopPeriod
-- 参数含义:IQ反转;
-- 数据类型:boolean;
-- 取值范围:true/false;
-- 是否必选:否,默认是false;
-- 注意事项:仅在 LoRa 模式下有效,FSK 模式下必须设置为 0;
iqInverted
-- 参数含义:接收模式;
-- 数据类型:boolean;
-- 取值范围:true/false;
-- 是否必选:否,默认是false;
-- 注意事项:true=持续接收,false=单次接收;
rxContinuous
}
数值类型:table;
取值范围:符合上述结构的table对象;
是否必选:是;
注意事项:接收参数应与发送端参数匹配才能正常通信;
返回值
无
示例
-- 配置接收参数
lora_device:set_rxconfig(
{
mode = 1,
bandwidth = 0,
datarate = 9,
coderate = 4,
bandwidthAfc = 0,
preambleLen = 8,
symbTimeout = 0,
fixLen = false,
payloadLen = 0,
crcOn = true,
freqHopOn = 0,
hopPeriod = 0,
iqInverted = false,
rxContinuous = false
})
4.5 lora_device:send(data)
功能
发数据
注意事项
-
发送数据前必须确保 lora 设备已正确初始化并配置了发送参数;
-
数据长度受 lora 协议限制,最大载荷长度为 255 字节;
-
发送操作是异步的,发送完成后会触发"tx_done"事件;
-
在发送过程中设备会切换到发送模式,完成后自动返回待机模式;
-
在发送模式下不能连续调用此接口发送数据,前一次发送完成事件"tx_done"触发后,才能开始下一次发送,需要通过事件回调机制来管理连续的数据发送。
参数
data
含义说明:要发送的数据内容;
数值类型:string;
取值范围:任意字符串数据,长度不超过255字节;
是否必选:否;
注意事项:数据长度不应超过LoRa协议的最大限制;
发送前应确保设备处于可发送状态;
参数示例:lora_device:send("PING")
返回值
无
示例
-- 发送传感器数据 local temperature = 25.6
lora_device:send("TEMP:" .. temperature)
4.6 lora_device:recv(timeout)
功能
启动 lora 设备的数据接收模式,监听并接收来自其他 lora 设备发送的数据;
注意事项
-
接收操作是异步的,接收到的数据通过事件回调函数返回;
-
接收超时后会触发"rx_timeout"事件;
-
成功接收到数据后会触发"rx_done"事件;
-
接收过程中发生错误会触发"rx_error"事件;
-
调用此函数后设备会切换到接收模式,直到收到数据、超时或发生错误;
参数
timeout
含义说明:接收超时时间,单位毫秒(ms)
数值类型:number;
取值范围:无特别限制;
是否必选:否,默认1000;
注意事项:timeout=0时,表示一直保持在接收状态,不会因为超时自动退出,只有在接收到数据包或手动调用 lora_device:mode 切换到其他模式时才会退出接收状态;
timeout≠0时,LoRa模块会在指定的时间内保持接收状态,如果在这段时间内接收到数据包,会触发"rx_done"回调,如果超过指定时间未收到数据包,则会触发"rx_timeout"回调并退出接收模式;
参数示例:lora_device:recv(1000)
返回值
无
示例
-- 启动接收,设置1秒超时
lora_device:recv(1000)
4.7 lora_device:mode(mode)
功能
设置 lora 设备的工作模式,用于控制设备的功耗状态和运行状态;
注意事项
在 SLEEP 模式下,通信功能被禁用;
在 STANDBY 模式下,设备处于就绪状态,可以快速切换到发送或接收;
参数
mode
含义说明:lora设备工作模式
数值类型:number
取值范围:lora.SLEEP --休眠模式(低功耗)
lora.STANDBY --待机模式(正常工作)
是否必选:否,默认lora.STANDBY;
注意事项:默认模式为lora.STANDBY;
在SLEEP模式下无法进行通信操作;
模式常量值请参考常量详解章节;
参数示例:lora.SLEEP或者lora.STANDBY
返回值
无
示例
-- 设置设备进入待机模式(默认)
lora_device:mode(lora.STANDBY)
-- 设置设备进入休眠模式(低功耗)
lora_device:mode(lora.SLEEP)
4.8 lora_device:on(cb)
功能
注册 lora 设备的事件回调函数的接口;
注意事项
回调函数中应避免执行耗时操作,以免影响事件处理效率;
参数
cb
参数含义:lora事件回调函数,回调函数的格式为:
function callback(lora_device, event, data, size)
log.info("LoRa事件:", event, "数据:", data, "长度:", size)
end
该回调函数接收lora_device、event、data、size四个参数,在不同事件类型下参数含义有所不同:
-- 参数含义:LoRa设备对象本身;
-- 数据类型:userdata;
-- 取值范围:无限制;
-- 是否必选:必须传入此参数;
-- 注意事项:所有事件类型都会传递此参数,可用于在回调中操作设备(如发送数据、重新接收等);
lora_device
-- 参数含义:事件类型标识符;
-- 数据类型:string;
-- 取值范围:
"tx_done" -- 发送完成:数据已成功发送
"rx_done" -- 接收完成:成功接收到数据
"rx_timeout" -- 接收超时:在指定时间内未收到数据
"rx_error" -- 接收错误:接收过程中发生错误
-- 是否必选:必须传入此参数;
-- 注意事项:用于标识当前触发的事件类型,是回调函数中判断事件类型的核心依据;
event
-- 参数含义:接收到的数据内容;
-- 数据类型:string;
-- 取值范围:任意字符串数据;
-- 是否必选:否,仅在"rx_done"事件中有效,其他事件为nil;
-- 注意事项:仅在"rx_done"事件中包含实际接收到的数据;
data
-- 参数含义:接收到的数据长度;
-- 数据类型:number;
-- 取值范围:取决于具体LoRa设备和配置;
-- 是否必选:否,仅在"rx_done"事件中有效,其他事件为nil;
-- 注意事项:仅在"rx_done"事件中表示实际接收数据的字节长度;
-- 实际最大值受LoRa设备硬件和协议限制
size
数据类型:function;
取值范围:回调函数本身无取值范围这一说法;
是否必选:必须传入此参数;
注意事项:每次调用会覆盖之前注册的回调函数;
参数示例:function callback(lora_device, event, data, size)
log.info("LoRa事件:", event, "数据:", data, "长度:", size)
end
返回值
无
示例
--[[
event可能出现的值有:
tx_done -- 发送完成:数据已成功发送
rx_done -- 接收完成:成功接收到数据
rx_timeout -- 接收超时:在指定时间内未收到数据
rx_error -- 接收错误:接收过程中发生错误
__]]
-- 完整的事件处理示例
function callback(lora_device, event, data, size)
log.info("LoRa事件:", event, "数据:", data, "长度:", size)
if event == "tx_done" then-- 发送成功,可以开始接收或进行下一步操作
log.info("数据发送成功")
lora_device:recv(1000)
elseif event == "rx_done" then-- 成功接收到数据,data为字符串,size为数据长度
log.info("成功接收", size, "字节数据")
elseif event == "rx_timeout" then-- 接收操作超时,在指定时间内未收到任何数据
log.info("接收超时,继续监听")
lora_device:recv(1000)
elseif event == "rx_error" then-- 接收过程中发生错误,可能因为信号质量差或硬件问题
log.error("接收过程中发生错误")-- 建议检查硬件连接和信号环境
else
log.warn("未知事件类型:", event)
end
end
-- 注册回调
lora_device:on(callback)
五、产品支持说明
支持 LuatOS 开发的所有产品都支持 lora2 核心库。