跳到主要内容

(UART000)二氧化硫JXM(范例)

一、LoRa节点上报格式

通过 Uart 接口采集JXM二氧化硫传感器,并将采集到的传感器数据组织成 Json 格式通过 LoRa 传输上报给网关,上报格式如下:

{"LrAddr":1,"Dev":"Uart","Data":{"so2":0.96},"Err":null}

二、代码替换

  1. main.lua 模板代码位于开源网盘:

flexluadisk->Software -> 跨界微型LoRa网关 -> node -> OTHERS_SENSOR

  1. 用户将下面的两个函数代码复制后,粘贴覆盖 main.lua 模板代码中的对应的两个函数代码即可
--传感器接口初始化
function SensorInit()
--设置JXM二氧化硫传感器占用TX0和RX0引脚,串口波特率为9600
LIB_Uart0Config("BAUDRATE_9600")
end

--读取传感器数据,获取到的json data数据形式可如下:
--{"so2":0.96}
function SensorGetValue()
err = "null" --err包含错误信息,如果没有错误,设置为"null"

--查询Rx是否收到数据
recv_flag,recv_tab = LIB_Uart0Recv()
if recv_flag == 1 then
--判断收到的数据是否正确性,如果正确,闪烁一下Led灯
if recv_tab[1] == 0xff and recv_tab[2] == 0x01 and recv_tab[3] == 0x07 then
--如果获取成功,data将是一条完整的json字符串
--SO2值,单位:ppm
val = recv_tab[5]*256 + recv_tab[6]
val = val * 0.01
data = string.format("{\"so2\":%.2f}", val)
end
else
--如果获取失败,data设置为"null"
data = "null"
err = "Read sensor fail"
end

--返回结果
finish = 1 --finish=1表示传感器读取完成(无论是否成功)
return finish,data,err
end
  1. 最后将修改后的 main.lua 代码下载到虚拟tf卡中即可运行

三、传感器资料及采购来源

传感器说明书位于: flexluadisk->Spec -> UART000 文件夹中。

采购来源:精讯畅通JXM二氧化硫传感器模块。

四、硬件接线

将 CMA 底板的 TX0/RX0/5V/GND 四个引脚和传感器连接即可。

五、LoRa节点参数配置

请结合实际需求,在上面提到的 main.lua 代码中修改LoRa的地址(LoraAddr),一般在1-65535,这样就可以识别某个具体的LoRa节点了参考如下:

----------------------配置信息------------------------
--Part0:LORA本机节点地址,及节点名称配置
LoraAddr = 1 --LORA本机节点地址,可为任意整数
LoraName = "Uart" --LORA节点名字,可以用来标识传感器类型

--Part1: LORA通信参数配置
SF = "SF9" --LoRa扩频因子设为"SF9"
BW = "BW125KHZ" --LoRa带宽125K
PRMB_LEN = 5 --LoRa发送前导数量=5

--Part2: 系统配置
SysSensorHeatTime = 5 --传感器上电后的预热时间,单位:秒,请查阅相应厂家的传感器说明书
SysWorkInterval = 20 --传感器采集周期,单位:秒,范围 3 ~ 15300 秒
SysSleepEn = 0 --0:不使用低功耗休眠 1:使用。该功能硬件上需结合SB-P10低功模块才能用
SysResetTime = 0 --0:不使用自动重启功能 ,大于0时启用,单位:秒。设备每隔SysResetTime秒会自动重启
提示
  1. 用户一般只需要设置 LoraAddr 即可,当然,LoraName 也可用来作为传感器的字符串标识。
  2. 低功耗模式:如果需要系统低功耗电池供电,那么需要在CMA底板焊接上P10低功耗模块,同时将 SysSleepEn 参数设置为1,这样系统将休眠 SysWorkInterval 秒后自动唤醒工作并休眠,周而复始,休眠期间的电流可低至 3uA 以内,极大的延长电池续航。
注意

SysSensorHeatTime 这里默认为 5 秒,表示系统上电后过 5 秒后才采集传感器数据。如果 SysSleepEn = 0,系统不采用低功耗模式时,这里将不会有太大问题。但如果采用低功耗模式时( SysSleepEn = 1),每次系统工作都是重新上电,所以需要考虑到一些传感器从上电到有效数据输出的预热时间为多少秒,用户可以参考对应的传感器的说明书,并将这个预热时间设置给 SysSensorHeatTime 参数即可。