最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

劳拉物联网家庭环境监测系统(5)

时间:2017-05-18 09:49来源:未知 作者:admin 点击:
详细描述了操作的每个菜单项包含在步骤:strong劳拉物联网网关的用户界面/strong。 在某些情况下,枚举也使用索引到一个字符数组为对应的字符串显示在LCD。 例如,下面是显示模式串的枚举显示模式和相应的字符数组
详细描述了操作的每个菜单项包含在步骤:<strong>劳拉物联网网关的用户界面</strong>。

在某些情况下,枚举也使用索引到一个字符数组为对应的字符串显示在LCD。例如,下面是显示模式串的枚举显示模式和相应的字符数组。

enum { 
 start_display_modes,
 last_station_temp,
 last_station_humi,
 fixed_station_temp,
 fixed_station_humi,
 cycle_station_temp,
 cycle_station_humi,
 end_display_modes 
 };
 const char* display_mode [ ] = { 
”,
“最后的STN温度”,
“最后的STN湿”,
固定STN温度”,
”固定的STN湿”,
“周期”,
 STN温度循环;

这种技术是不作为可能是为了节省RAM为广泛。指:https://www.baldengineer.com/arduino-f-macro.html

…const关键字告诉编译器变量是恒定的和不能改变的。根据不同的优化使用,AVR GCC编译器会避免把价值到RAM因为它知道它永远不会改变。但是,技术与C风格字符串或数组不工作。由于数组是基于指针,编译器需要把数组的内存使指针正确工作。这意味着,所有的字符串都需要放入内存才可以使用。

所以即使常数声明使用字符串常数写入RAM。作为网关软件使用许多字符串常量来实现用户界面、内存使用率已经远远高于Arduino Mega 50%。的f()函数是用来缓解这种情况。所以,f()函数是做什么的?

的f()宏告诉编译器把这个特定的阵列PROGMEM。然后,当它的时间来访问它,一个字节的数据被复制到RAM的时候。有一个小的性能开销,这额外的工作。然而,在串行或打印字符串一个液晶是一个非常缓慢的过程,所以一些额外的时钟周期真的不重要。

注意的f()功能只能在一个字符串,它不会对字符串的改变工作,或任何其他变量类型。下面是一段代码展示了如何使用f()。

无效的显示(字节functiontodisplay){ 
 cleardisplayline1(F(“选择功能”));
开关(functiontodisplay)
 { 
案例0:
 { 
打破;
 } 
案例set_back_light:
 { 
 updatedisplayline2(F(“背光”));
打破;
 } 
案例set_number_stations:
 { 
 updatedisplayline2(F(“定数

.............................................................................................................................
SD卡文件例程

功能<strong>readgatewaydata()</strong>读temboo和Goole认证从一个文件名为<strong>gw_data.txt</strong>在SD卡中设置。请参阅步骤:<strong>物联网网关的SD记忆卡的认证文件</strong>信息的内容以及如何创建它gw_data.txt。

<strong>gw_data.txt</strong>包含字符串是划定的“[”、“]”。这是假设的验证字符串不包含这些字符;如果是以前没有的情况下,新的分隔符必须使用。的<strong>readgatewaydata()</strong>函数读取的字符串到字符串数组<strong>gatewaydata [ 12</strong> ]。下列枚举用于指数在<strong>gatewaydata</strong>认证字符串数组。

enum { 
 temboo_account,
 temboo_app_key_name,
 temboo_app_key,
 ss_title,
 ss_refresh_token,
 ss_client_secret,
 ss_client_id,
 em_subject,
 em_password,
 em_username,
 em_to_address 
;

额外的身份验证或其他字符串可以被添加以增加尺寸的<strong>gatewaydata</strong>阵列和添加相应的条目枚举。

.............................................................................................................................
液晶显示程序

的<strong>updatestationdisplay()</strong>功能创建的字符串<strong>laststationdisplay</strong>包含站数据显示在2号线的液晶显示模式选择。每当一个函数使用2线的液晶显示状态或等,<strong>laststationdisplay</strong>用来恢复站的数据时,函数完成。

以下函数用于操纵线在液晶和简化代码。

<strong>updatedisplayline12(字符串line_1,字符串line_2</strong>)-更新线路1和2

<strong>updatedisplayline1(字符串line_1</strong>)-更新线1线2 unchaged离开

<strong>updatedisplayline2(字符串line_2</strong>)-更新线2线1 unchaged离开

<strong>cleardisplayline1(字符串line_1</strong>)-清除1线和2线,并更新1

<strong>cleardisplayline2(字符串line_2</strong>)-清除1线和2线,并更新2

这是它的劳拉物联网网关软件。

 
  • 劳拉物联网家庭环境监测系统aio_account。H
    下载
  • 劳拉物联网家庭环境监测系统lora_gateway_v1.5.0.ino
    下载

步骤9:室内站软件

整个室内站的软件编写的一个程序的风格和自由评论鼓励增强和重用。软件发布在这里在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的收音机放在睡眠模式发送无线分组网关之间。

室内站的其余部分的代码应该是自解释的。这是它的室内站软件。

 
  • 劳拉物联网家庭环境监测系统indoor_station_v1.5.0.ino
    下载

步骤10:室外站软件

LORA的室外站的软件编写的一个程序的风格和自由评论鼓励增强和重用。软件发布在这里在GitHub上,也附在下面。室外站软件是基于室内站软件,所以只有差异这一步了。一个详细的了解,最好是通过软件实现的代码和注释来完成。

室外站发送的空气温度(airtemp),地面温度(gndtemp)、湿度、压力和电池电压(batvolt)。在室外站的情况下,电池电压的电压的锂离子电池送到羽毛板..

室外站使用bme280温度、湿度、压力传感器。Adafruit库用于初始化和读温度,湿度,和从bme280传感器压力值。

防水的DS18B20温度传感器用于测量地面温度。Adafruit一资讯库用于初始化和从DS18B20读取温度。

这是它的户外站软件。

 
  • 劳拉物联网家庭环境监测系统outdoor_station_v1.5.0.ino
    下载

步骤11:物联网网关的SD记忆卡的认证文件

Arduino Mega SD卡插槽以微型SD卡,请参阅步骤:<strong>劳拉物联网网关的硬件</strong>细节的具体使用的卡片。的SD记忆卡容量不是关键。使用SD卡为8GB,留下很多记忆的网关数据记录被添加在未来。

认证数据存储在SD卡中的文件称为gw_data.txt。这样的网关软件可以部署了重新编译为特定用户身份验证数据是存储在SD卡。把SD卡为手机SIM卡。

网关软件读取认证数据从gw_data.txt在SD卡中设置网关软件。<strong>readgatewaydata()</strong>功能的网关软件搜索的分隔符“[”和“]”,并拷贝数据之间的分隔符为一个字符串数组<strong>gatewaydata</strong>。在方括号字符被忽略,只有包含在文件标签认证数据字符串。

<strong>temboo_account</strong>:用户指定名称的temboo帐户

<strong>temboo_app_key_name</strong>:用户指定的应用程序名称

<strong>temboo_app_key</strong>:所产生的temboo网站

<strong>ss_title</strong>:用户指定的名称/姓名的谷歌表文件的云数据存储

<strong>ss_refreshtoken</strong>:所产生的temboo网站在谷歌表舞蹈设置

<strong>ss_clientsecret</strong>:所产生的temboo网站在谷歌表舞蹈设置

<strong>ss_clientid</strong>:所产生的temboo网站在谷歌表舞蹈设置

<strong>em_subject</strong>:用户定义的主题邮件/短信 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片