(S000A)温湿度(范例)
一、LoRa节点上报格式
RS485接口采集温湿度传感器,并将采集 到的传感器数据组织成 Json 格式通过 LoRa 传输上报给网关,上报格式如下:
{"LrAddr":1,"Dev":"RS485","Data":{"Humi":79.7,"Temp":26.8},"Err":null}
二、代码替换:ModbusToJson() 函数
- main.lua 模板代码位于开源网盘:
flexluadisk
->Software
-> 跨界微型LoRa网关
-> node
-> RS485_SENSOR
- 用户将下面的代码复制后,粘贴覆盖 main.lua 模板代码中原来的 ModbusToJson() 函数即可
--读取RS485温湿度传感器
--获取到的Json数据形如:{"Humi":79.7,"Temp":26.8}
function ModbusToJson()
--配置RS485 Modbus转Json功能,并设置将要生成的Json字符串最大长度为150字节
LIB_ModbusToJsonConfig(150)--必须小于255
--湿度值寄存器地址0x0000,类型为16bit带符号AB型,小数点个数1个,Json Key名称"Humi"
LIB_ModbusToJsonAdd(0x0000,"S_AB",1,"Humi")
--温度值寄存器地址0x0001,类型为16bit带符号AB型,小数点个数1个,Json Key名称"Temp"
LIB_ModbusToJsonAdd(0x0001,"S_AB",1,"Temp")
--参数设置(4800,无校验,1位停止位,功能码"03",从机地址0x01,应答最长等待1000ms,包与包最短间隔100ms)
LIB_ModbusToJsonSend("BAUDRATE_4800","NoneParity","StopBit_1","03",0x01,1000,100)
end
- 最后将修改后的 main.lua 代码下载到虚拟tf卡中即可运行
三、传感器资料及采购来源
传感器说明书位于: flexluadisk
->Spec
-> S000A
文件夹中。
采购来源:可根据传感器说明书的厂家信息,联系厂家采购。或者淘宝搜索建大仁科、威盟士、等店铺都有卖同款的RS485导轨式温湿度传感器,价格很便宜。
四、硬件接线
将 CMA 底板的 485 接口(A/B/6-24V/GND)的四个引脚和传感器连接即可。
五、LoRa节点参数配置
请结合实际需求,在上面提到的 main.lua 代码中修改LoRa的地址(LoraAddr),一般在1-65535,这样就可以识别某个具体的LoRa节点了参考如下:
----------------------配置信息------------------------
--Part0:LORA本机节点地址,及节点名称配置
LoraAddr = 1 --LORA本机节点地址,可为任意整数
LoraName = "RS485" --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秒会自动重启
提示
- 用户一般只需要设置
LoraAddr
即可,当然,LoraName
也可用来作为传感器的字符串标识。 - 低功耗模式:如果需要系统低功耗电池供电,那么需要在CMA底板焊接上P10低功耗模块,同时将
SysSleepEn
参数设置为1,这样系统将休眠SysWorkInterval
秒后自动唤醒工作并休眠,周而复始,休眠期间的电流可低至 3uA 以内,极大的延长电池续航。
注意
SysSensorHeatTime
这里默认为 5 秒,表示系统上电后过 5 秒后才采集传感器数据。如果 SysSleepEn
= 0,系统不采用低功耗模式时,这里将不会有太大问题。但如果采用低功耗模式时( SysSleepEn
= 1),每次系统工作都是重新上电,所以需要考 虑到一些传感器从上电到有效数据输出的预热时间为多少秒,用户可以参考对应的传感器的说明书,并将这个预热时间设置给 SysSensorHeatTime
参数即可。