(AD000)紫外线S12D(范例)
一、LoRa节点上报格式
通过 AD 电压接口采集S12D紫外线传感器模块输出的电压mv(毫伏),并将采集到的传感器数据组织成 Json 格式通过 LoRa 传输上报给网关,上报格式如下:
{"LrAddr":1,"Dev":"Uart","Data":{"uv":158},"Err":null}
二、代码替换
- main.lua 模板代码位于开源网盘:
flexluadisk
->Software
-> 跨界微型LoRa网关
-> node
-> OTHERS_SENSOR
- 用户将下面的两个函数代码复制后,粘贴覆盖 main.lua 模板代码中的对应的两个函数代码即可
--传感器接口初 始化
function SensorInit()
--配置紫外线传感器占用AD电压采集的A0引脚,最大值采样值4096对应3.6V输入电压
--当通道采集满10个点时缓存满,每个点的采集时间间隔为30ms
LIB_ADConfig(10,30000)
end
--读取传感器数据,获取 到的json data数据形式可如下:
--{"uv":158} 单位mv
function SensorGetValue()
err = "null" --err包含错误信息,如果没有错误,设置为"null"
--查询A0通道电压采集是否转换完成
A0_full_flag, A0_tab = LIB_ADCheckBufFull("A0")
if A0_full_flag == 1 then
SUM = 0
for i = 1, #A0_tab do --此处#A0_tab的值是10,表示A0_tab表内的元素个数
SUM = SUM + A0_tab[i]
end
AVER = SUM / #A0_tab --平均值
--将A0通道的AD值转换成实际电压mv
val = math.floor(AVER*3600/4096.0)--整数mv
--data是一条完整的json字符串
--紫外线传感器电压值,单位:mv
data = string.format("{\"uv\":%d}", val)
else
--如果获取失败,data设置为"null"
data = "null"
err = "Read sensor fail"
end
--返回结果
finish = 1 --finish=1表示传感器读取完成(无论是否成功)
return finish,data,err
end
- 最后将修改后的 main.lua 代码下载到虚拟tf卡中即可运行
三、传感器资料及采购来源
传感器说明书位于: flexluadisk
->Spec
-> AD000
文件夹中。
采购来源:CJMCU-S12D紫外线传感器模块。
四、硬件接线
将 CMA 底板的 A0/3V3/GND 三个引脚和传感器连接即可。
五、LoRa节点参数配置
请结合实际需求,在上面提到的 main.lua 代码中修改LoRa的地址(LoraAddr),一般在1-65535,这样就可以识别某个具体的LoRa节点了参考如下:
----------------------配置信息------------------------
--Part0:LORA本机节点地址,及节点名称配置
LoraAddr = 1 --LORA本机节点地址,可为任意整数
LoraName = "AD" --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
参数即可。