整个室内站的软件编写的一个程序的风格和自由评论鼓励增强和重用。软件发布在这里在GitHub上,也附在下面。该软件的亮点是在这一步,但是,一个详细的了解,最好是通过软件实现的代码和注释来完成。
室内和室外站站统称为远程站。
每个远程站点需要一个唯一的身份证号码是由劳拉物联网网关正确识别。身份证号码是硬编码在当前的软件,因此,远程站的软件必须重新编译为每个远程站一个独特的远程站点ID。该软件目前限制站的最大数量为十,所以站ID应该在0x09 0x00和结束与开始。在未来的软件版本将自动处理网关和远程站之间,使系统可以即插即用。
Adafruit库用于初始化和从sht31传感器读取温度和湿度值。
远程站发送五浮点值的网关,如下面的代码片段所示。
typedef联盟{
浮动浮点;
字节二进制[ sizeof(浮点)];
} binaryfloat;
binaryfloat airtemp;
binaryfloat gndtemp;
binaryfloat湿度;
结合地图浮点值字节允许浮点值被发送到无线链路的字节。如int变量和长可以以同样的方式发送。在无线链路上发送变量个数,可以增加通过定义新的变量,并添加变量,下面描述的无线分组。
室内空气温度(airtemp站发送),湿度,和电池电压(batvolt)。在室内站的情况下电池电压是电源电压的羽毛板。室内站地面温度(gndtemp)和压力值为零。
在无线链路上发送数据包的大小确定为5 x 4字节浮每1字节浮+远程站点ID = 21字节。无线数据包是建立在<strong>buildwirelesspacket()</strong>功能使用二进制映射的浮点变量如下。
为(int n = 0;n<4;N + +){
wirelesspacket [n] = airtemp。二进制[N];
wirelesspacket [ n + 4 ] = gndtemp。二进制[N];
wirelesspacket [ ] = n + 8的湿度。二[N];
wirelesspacket [ n + 12 ] =压力。二[N];
wirelesspacket [ n + 16 ] = batvolt。二进制[N];
}
wirelesspacket;
这个过程是在网关软件反向提取字节从无线分组和地图到相应的浮点值。
下面的代码是用来启用看门狗定时器(WDT)睡眠模式和设置的分频器,其最大值使WDT唤醒处理器的每一~ 8秒。
set_sleep_mode(sleep_mode_pwr_down);<BR> mcusr & = ~(1 << wdrf);
wdtcsr | =(1 << wdce)|(1 << WDE);
wdtcsr =(1 << wdp0)|(1 << wdp3);
wdtcsr | =(1 <<能力;
当WDT唤醒处理器的中断服务程序(ISR)的增量变<strong>statetime</strong>计数8秒为增量的时间,和<strong>loop()</strong>函数被执行一次,最后把处理器回到睡眠模式。的<strong>loop()</strong>函数是一个基于时间的事件循环,使传感器的读数被发送到网关每十分钟。
LORA的收音机放在睡眠模式发送无线分组网关之间。
室内站的其余部分的代码应该是自解释的。这是它的室内站软件。