资料介绍
描述
计划是什么?
该计划是建立一个网状连接的家庭项目。
舰队由什么组成?
我将从Particle Ultimate Mesh Bundle开始,并根据需要添加尽可能多的节点:
粒子网格设备介绍
2020 年 1 月更新:Particle 已在其所有第三代设备中停止使用 Mesh 协议。你可以在这里阅读公告。
如果您还不知道 Particle 的第三代开发套件 Particle Mesh 是什么,那么您就错过了。立即在他们的网站上阅读更多内容!
David Scheltema在他的帖子中很好地描述了它。
另外,让我从Jeffrey Lee 的帖子中“复制粘贴”一些话(感谢Julien向我介绍了这个词,不能停止使用它):
什么是无线网状网络?
无线网状网络是彼此无线连接的节点(网状拓扑)的基础设施。这些节点相互捎带以扩展无线电信号(如 Wi-Fi 或蜂窝连接)来路由、中继和代理进出客户端的流量。每个节点都将无线电信号传播得比上一个节点更远一些,从而最大限度地减少死区的可能性。
好处
应该注意的是,并非所有无线网状网络解决方案都提供这些优势,但这是 Thread 和 Particle Mesh 独有的完整列表。
- 无单点故障——构建一个可自我修复的本地网状网络——如果单个设备离线,网络可以将自身重新配置为最近的连接。这意味着没有数据丢失,没有死区,没有问题。
- 自扩展——此外,如果您需要从网状系统中获得更多范围,您可以添加另一个节点,并且消息可以通过网状网络跳回网关。
- 可靠的网络——互连的设备可以同时流畅地传输数据,不会使网络连接复杂化。如果一个节点出现故障,附近的另一个节点可以接起连接并继续数据通信。
- 低成本、低功耗——使用无线网状网络消除了在设施之间安装光纤/电线的成本和复杂性。随着需要或多或少的覆盖范围,可以添加或删除无线网状节点。Mesh 使用与蓝牙相当的能量,因此您可以设计可以使用 3-5 年然后被丢弃和更换的设备。
感谢 Jeffrey 和 David 的所有解释!
粒子网格设备
使用 Particle,您可以拥有 WIFI(使用 Argon 开发套件)或蜂窝(Boron 开发套件)连接的网状网络:
我的舰队
以下是我将使用的所有设备:
这就是我计划为我的 Mesh Home 项目构建的内容:
先决条件
您需要首先将您的所有设备都归入您的 Particle 帐户。如果您还没有这样做,请继续这样做。整个过程将花费您几个小时,并在此处进行了描述。
作为记录,我将我的所有设备都更新到了 Device OS 1.3.0-rc.1。
———————————————————————————————————————————————————————————————————————
第三代极简温控器
这是我的极简恒温器的新版本。很难相信我最初的项目在过去三年半的时间里一直在家里不间断地工作,24/7/365,很少中断(也许我不得不重新设置两次?)。
最初的项目是基于一个 Particle Photon(一个 WIFI 开发套件)和一个便宜的四继电器板。这次我将使用Argon (支持网状网络的 WIFI 开发套件)和NCD 4 继电器板。我将使用DHT22来感应温度和湿度。
恒温器:继电器接线
与原始项目相同,将继电器 1(下图中的 R1)、继电器 2 和继电器 3 连接到 HVAC 电线。
我的 HVAC 使用 24 伏电压,可以处理。
请检查您是否使用更高的电压。
如果是这种情况,您在接线时需要格外小心
任何超过 40 伏的电压都可能对您的健康构成威胁,因此:小心
恒温器:连接温度传感器
我使用的传感器是流行的DHT22 。DHT22 是一种基本的低成本数字温度和湿度传感器。它使用电容式湿度传感器和热敏电阻来测量周围的空气,并在数据引脚上输出数字信号(不需要interwetten与威廉的赔率体系 输入引脚)。它使用起来相当简单,但需要谨慎的时间来获取数据。该传感器唯一真正的缺点是您每 2 秒只能从中获取一次新数据。
连接如下:
DHT22 引脚 1 是氩气上的 Vcc <==> 3v3
DHT pin2是Argon上的数据<==> D5
DHT pin 3 <==> 保持断开连接
DHT pin 4 <==> 连接到 Argon 上的 GND
不要忘记在数据引脚上添加一个 4.7K - 10K 电阻上拉到 Vcc。
注意:我使用的是相当旧的 PietteTech 库,因为我遇到了最新库的问题。
恒温器:放置温度传感器
我把我的放在以前不太聪明的恒温器上:
恒温器:固件
我是有限状态机(从现在开始为 FSM)的忠实粉丝,我现在几乎在所有项目中都使用它们。次我不使用一个,我以后后悔!
如果您不熟悉状态机以及我们如何在物联网项目中使用它们,请查看我关于它们的文章。
现在对于固件,请使用Particle WorkBench 打开文件夹 minimumistThermostat。
我使用从 Arduino 移植的库用于 FSM,加热状态如下所示:
冷却状态与这些相同。
这是全图,请原谅质量:
您可以使用此布尔变量决定温度使用的单位:
bool useFahrenheit = false;
温控器:网状连接
恒温器将在我的家庭网状网络中扮演网关的角色。看到下图中的氩气了吗?正是这个角色。
这意味着其他设备(Xenons)将通过网状协议连接到 Argon。然后他们将通过氩气连接到粒子云。
所以这里的氩气充当网状网络的网关,同时也是极简恒温器的大脑。
恒温器:移动应用程序
Blynk 是一个与硬件无关的物联网平台,具有白标移动应用程序、私有云、设备管理、数据分析和机器学习。
听起来足够强大?这是!这也是我最喜欢的将移动应用程序添加到我的个人项目的方式,包括这个。
使用 Blynk,您可以在几分钟内设计拖放式漂亮的 IoT 应用程序。您可以从各种预先设计的小部件中进行选择,以构建用于控制电子设备、监控传感器数据、获取通知等的原生 iOS 和 Android 应用程序。
从世界任何地方控制您的硬件。
没有比这更好的了!
这是我的移动应用程序:
使用 Blynk 可以轻松共享移动应用程序,只需在设备上安装 Blynk 后从内部扫描此代码:
———————————————————————————————————————————————————————————————————————
第三代网状温度传感器
Minimalist Thermostat 的网状远程温度传感器将基于 Particle Xenon 和 DS18B20。
温度传感器:接线
像 DS18B20 这样的传感器接线再简单不过了。这是数据表,以备不时之需。像这样连接
DS18B20 GND 引脚 1 是 GND <==> Argon 上的 3v3
DS18B20 GND 引脚 2 是氩气上的 DQ <==> D9
DS18B20 GND 引脚 3 是 Vdd <==> 氩气上的 3v3
温度传感器:固件
请在 github 存储库的 tempSensor 文件夹下找到固件。我为这个网状家庭项目的两个组件使用相同的固件:这个远程传感器和水池传感器。请使用Particle WorkBench打开文件夹。
因此,在构建固件之前,您需要使这些行看起来像这样:
// #define SENSOR_POOL // thermistor
#define SENSOR_DS18B20
您还可以使用此布尔变量(默认为摄氏度)决定使用什么单位来表示温度:
bool useFahrenheit = false;
保存更改、构建和闪烁后,您就可以开始使用它了。
温度传感器:网状连接
现在 Xenon 正在读取温度,我们如何处理它?
我们将它发送到恒温器,它也充当网关。
请注意:信息可以通过网关一路到达粒子云,无需我们做任何事情。在这种情况下,我们想要对它进行操作,或者在移动应用程序上显示它,因此我们通过网格协议将它发送到这个网格节点 Argon。
Xenon 上的代码是使用 Mesh.publish 的简单行:
Mesh.publish(MESH_EVENT_DS18B20, the_temperature_reading);
现在在接收端,我们需要使用 Mesh.subscribe。我们在 setup() 函数上设置订阅(每次设备启动时都会运行):
void setup()
{
Mesh.subscribe(MESH_EVENT_DS18B20, meshTempSensorHandler);
}
我们只是设置了一个处理函数,称为 meshTempSensorHandler(),所以该函数的代码如下所示:
double meshTempSensorCurrentTemp = -999;
String meshTempSensorLastHeardOf = "Never";
// enable the remote temperature sensor if on an argon
#if PLATFORM_ID == PLATFORM_ARGON
void meshTempSensorHandler(const char *event, const char *data)
{
char tempChar[BUFFER] = "";
snprintf(tempChar, BUFFER, "event=%s data=%s", event, data ? data : "NULL");
Log.info(tempChar);
snprintf(tempChar, BUFFER, "%s", data ? data : "-999");
meshTempSensorCurrentTemp = atof(tempChar);
meshTempSensorLastHeardOf = Time.timeStr();
#ifdef USE_BLYNK
Blynk.virtualWrite(BLYNK_DISPLAY_CURRENT_TEMP_REMOTE, meshTempSensorCurrentTemp);
Blynk.virtualWrite(BLYNK_DISPLAY_CURRENT_TEMP_REMOTE_LAST_HEARD_OF, meshTempSensorLastHeardOf);
#endif
}
#endif
而已!
从网格上讲,远程网格传感器的温度读数在另一个节点上可用(在这种情况下是网关节点,但任何节点都可以订阅该信息或主题)。
现在变量meshTempSensorCurrentTemp 包含温度,我添加了meshTempSensorLastHeardOf,这是我们每次从该节点接收信息的时间戳。这可以帮助我们判断节点是否处于活动状态,或者即使读数是最近的。
温度传感器:移动应用程序
为了在移动应用程序上显示传感器的信息,我在 Blynk 库中添加了几个对 virtualWrite() 函数的调用。这是向应用程序发送信息的 Blynk 方式。
以下是执行此操作的行:
#ifdef USE_BLYNK
Blynk.virtualWrite(BLYNK_DISPLAY_CURRENT_TEMP_REMOTE, meshTempSensorCurrentTemp);
Blynk.virtualWrite(BLYNK_DISPLAY_CURRENT_TEMP_REMOTE_LAST_HEARD_OF, meshTempSensorLastHeardOf);
#endif
以下是应用程序恒温器选项卡上的信息:
温度传感器:节点外
请记住,一旦您拥有一个像这种远程传感器这样的节点,再拥有更多并且您需要或喜欢的节点是微不足道的。需要更改第二个远程传感器的网格事件名称。这是关键:
Mesh.publish(MESH_EVENT_DS18B20_SENSOR_X, the_temperature_reading);
在我们的例子中,MESH_EVENT_DS18B20_SENSOR_X 是事件节点。您使用 X、Y、Z 等事件名称设置额外节点,并修改网关节点上的订阅处理程序。在 Blynk 移动应用程序上进行一些工作以呈现这些新信息,仅此而已!
———————————————————————————————————————————————————————————————————————
第三代网状池温度传感器
这将是我这里的泳池温度监视器的翻版。
尽管如此,百万美元的问题是:水的温度是多少?
这可以通过氙气、电阻器和热敏电阻来解决。
你有很多选择,这里有两个:
请注意,由于简单的热敏电阻(10K 精密环氧树脂热敏电阻 - 3950 NTC )并非制造用于直接与水接触,因此传感器的使用寿命约为两个夏天。之后,传感器将停止工作,读数将不再有意义。更强大的将持续你的游泳池的整个生命。
水池温度传感器:接线
连接是这样的:
10k 电阻在 Argon 上介于 3v3 和 A0 之间
热敏电阻在 Argon 上的 A0 和 GND 之间
池温度传感器:固件
请在 github 存储库的 tempSensor 文件夹下找到固件。我为这个网状家庭项目的两个组件使用相同的固件:远程传感器和水池传感器。您可以使用Particle WorkBench打开该文件夹。
因此,在构建固件之前,您需要使这些行看起来像这样:
#define SENSOR_POOL // thermistor
// #define SENSOR_DS18B20
您还可以使用此布尔变量(默认为摄氏度)决定使用什么单位来表示温度:
bool useFahrenheit = false;
保存您的更改、构建和闪存,您就可以开始了。
水池温度传感器:网状连接
与之前的传感器相同,Xenon 上的代码使用 Mesh.publish:
Mesh.publish(MESH_EVENT_POOL, the_temperature_of_the_pool);
现在在接收端,我们需要使用 Mesh.subscribe。我们在 setup() 函数上设置订阅(每次设备启动时都会运行):
void setup()
{
Mesh.subscribe(MESH_EVENT_POOL, meshTempSensorPoolHandler);
}
在接收端,看起来与之前的传感器几乎相同,只是处理程序称为meshTempSensorPoolHandler() 。
水池温度传感器:移动应用
我在 Blynk 移动应用上添加了一个选项卡:
水池温度传感器:额外节点
你也有水疗中心来监控吗?遵循与上一节中远程温度传感器的额外节点相同的思路。
———————————————————————————————————————————————————————————————————————
第三代车库开门机
这是对我的Garage Commander的完全重写。在这个版本中,我使用FSM来跟踪车库的状态。
下面是对 FSM 状态的描述:
车库开启器:接线
您将需要两个像这样的磁簧开关。这是我的一张照片:
一旦位于战略位置,这些簧片开关将告诉氙气车库是打开还是关闭。
我把感应关闭位置的那个放在车库门的顶部,你可以在那里看到:
我将感应打开位置的那个放在车库开启器的导轨下:
您可以为您和您的车库门选择最方便的位置。
安装后,将关闭传感器簧片开关连接到 D2 和 GND,将打开传感器连接到 Argon 上的 D1 和 GND。
这就是传感器。
现在要让Xenon移动门,您需要找到按钮板连接到主机的位置。它看起来像这样:
将那个连接到我们将在项目的这一部分中使用的featherWing 功率继电器。
提示:如果您将这些连接器短路,车库门将会移动。当心!
我使用了 FeatherWing 三联器,因为我有一个方便的,但如果你愿意,你可以使用双联器:
车库开启器:固件
是时候刷固件了!您可以在 meshGarage 文件夹下找到它。请使用Particle WorkBench打开文件夹。
车库开启器:网状连接
对于车库开启器,我们有不同的情况。以前的远程传感器向网关发送信息,以便在移动应用程序上显示温度。现在,为了从移动应用程序控制车库,我们需要设置一个类似的发布-订阅网格机制,但反过来。
车库开启器:移动应用程序
车库开启器:额外的节点
你有双车库还是三车库?按照上面远程温度传感器的相同说明添加一个额外的网格节点!
———————————————————————————————————————————————————————————————————————
第三代漏水传感器
这是我的漏水传感器的翻版。但是,与原始项目不同,使用 Particle Mesh 很容易添加我们需要的任意数量的节点。只需复制传感器,修改一下事件名称,瞧!很快您的地下室、厨柜、浴室和热水器都得到保护,不会漏水。
这是我在这个版本上使用的漏水传感器:
漏水传感器:接线
该电路受到了这里的污水泵监控项目和这里的电路的强烈启发。
示意图如下所示:
漏水传感器:固件
在 meshWaterLeakSensor 文件夹下找到该项目节点的固件。
漏水传感器:网状连接
与其他节点的处理相同。网格节点上的事件是:
Mesh.publish(MESH_EVENT_WATER_LEAK_SENSOR, waterLeakState);
然后,事件处理程序在网关节点(恒温器)上接收该信息:
Mesh.subscribe(MESH_EVENT_WATER_LEAK_SENSOR, meshWaterLeakSensorHandler);
并由处理函数本身照顾:
String meshWaterLeakSensorState = "Unknown";
String meshWaterLeakSensorLastHeardOf = "Never";
// enable the remote temperature sensor for the pool if on an argon
#if PLATFORM_ID == PLATFORM_ARGON
void meshWaterLeakSensorHandler(const char *event, const char *data){
char tempChar[BUFFER] = "";
snprintf(tempChar, BUFFER, "event=%s data=%s", event, data ? data : "NULL");
Log.info(tempChar);
snprintf(tempChar, BUFFER, "%s", data ? data : "Unknown");
meshWaterLeakSensorState = tempChar;
meshWaterLeakSensorLastHeardOf = Time.timeStr();
#ifdef USE_BLYNK
Blynk.virtualWrite(BLYNK_DISPLAY_WATER_LEAK_SENSOR, meshWaterLeakSensorState);
Blynk.virtualWrite(BLYNK_DISPLAY_WATER_LEAK_SENSOR_LAST_HEARD_OF, meshWaterLeakSensorLastHeardOf);
#endif
}
#endif
漏水传感器:移动应用
我只需要在精彩的 Blynk 移动应用上添加一个标签:
当传感器检测到水时,它会进入 30 秒的过渡状态,然后进入警报状态(如果情况仍然存在):
漏水传感器:节外
你有更多的地方来监测漏水吗?重复此处的步骤,更改事件名称,修改 Blynk 应用程序,就是这样!
———————————————————————————————————————————————————————————————————————
第三代污水泵监控器
前段时间我为朋友开发了一个污水泵监控项目,并决定将具有此特性或功能的支持网格的节点添加到我的网格家庭项目中。
污水泵监控器由两个水传感器组成,用于读取水位是否过高。第一级将系统的状态设置为高水位报警状态(基本上,你有麻烦了),然后如果水到达第二个传感器,系统进入非常高水位报警状态(这次你是深陷困境)。
这是一个示意图:
请注意,我们计划使用三个传感器,但最终使用了两个。
这些是使用的传感器:
污水泵监控传感器:接线
电路与漏水传感器相同,只是两次:
将高水位传感器连接到 D1,将超高水位传感器连接到氙气灯上的 D2。
晶体管是 MPSA13 晶体管(达林顿对)。
污水泵监控传感器:固件
使用 Particle Workbench 打开 meshSumpPump 文件夹,快闪,尽情享受吧!
污水泵监控传感器:网状连接
污水泵节点发布的事件是这样的:
#define MESH_EVENT_SUMP_PUMP "meshSumpPump"
网关上的代码:
/************************************************************
sump pump sensors
*************************************************************/
String meshSumpPumpState = "Unknown";
String meshSumpPumpLastHeardOf = "Never";
// enable the remote temperature sensor for the pool if on an argon
#if PLATFORM_ID == PLATFORM_ARGON
void meshSumpPumpHandler(const char *event, const char *data){
char tempChar[BUFFER] = "";
snprintf(tempChar, BUFFER, "event=%s data=%s", event, data ? data : "NULL");
Log.info(tempChar);
snprintf(tempChar, BUFFER, "%s", data ? data : "Unknown");
meshSumpPumpState = tempChar;
meshSumpPumpLastHeardOf = Time.timeStr();
#ifdef USE_BLYNK
Blynk.virtualWrite(BLYNK_DISPLAY_SUMP_PUMP, meshSumpPumpState);
Blynk.virtualWrite(BLYNK_DISPLAY_SUMP_PUMP_LAST_HEARD_OF, meshSumpPumpLastHeardOf);
#endif
}
#endif
污水泵监控传感器:移动应用
移动应用程序的另一个标签!!!
现在如果水上升,系统进入过渡状态 30 秒:
如果水没有下降:
如果水继续上涨:
———————————————————————————————————————————————————————————————————————
第三代蜂窝连接温湿度传感器
那么如何处理捆绑包中的硼呢?
好吧,让我们将它用于远程温度传感器!
接线与上面恒温器上的 DHT22 相同。
使用 Particle Workbench 打开 tempSensor 代码。
但在刷机之前,请在固件中调整这些行:
// #define SENSOR_POOL // thermistor
// #define SENSOR_DS18B20
#define SENSOR_DHT22
这样,固件将为 DHT22 传感器编译。现在您已准备好在任何您想要的地方闪烁和安装这个蜂窝连接的温度传感器!
我将把它安装在我的车上:
———————————————————————————————————————————————————————————————————————
结论
通过构建这个雄心勃勃的项目,我发现的一件事是,使用网状节点,您可以毫不费力地进行复制,并为您的网状连接家庭设备的组件增加成本。
故障排除
如果您的项目卡在初始化状态,请检查 Blynk 配置。我发现如果我没有正确配置 Blynk(例如:身份验证令牌无效),整个项目甚至都不会开始运行!
如果您不打算使用 Blynk,请通过更改此行来停用它:
#define USE_BLYNK
所以它最终看起来像这样:
// #define USE_BLYNK
需要帮忙?
如果您的项目需要专业帮助,请随时通过 gusgonnet@gmail.com 给我写信。谢谢!
- 制作一个MQTT ESP8266家庭自动化项目
- 硕士学位论文《家庭智能网关的研究与实现》 24次下载
- 自动售货机项目教程及文件下载 0次下载
- 仿真电路建立及与仿真模型的连接资料下载
- 一种两阶段跨项目缺陷预测方法CLNI-KMM 16次下载
- 如何使用STM32 MDK开发环境建立一个最简单工程 7次下载
- 如何在Protel 99SE中创建一个新的设计数据库 0次下载
- 如何使用keil4创建一个合格的单片机项目
- 如何将Arduino板连接到的计算机上的30个项目 16次下载
- WiFi连接智能家庭信息图免费下载
- 基于家庭照明与物联网连接的解决方案 4次下载
- 建立Http连接 8次下载
- 组态王数据库建立与连接视频 172次下载
- 基于ZigBee网状网络的分簇路由协议
- PADS中如何制作建立一个元件库 0次下载
- 5G中RRC连接建立的两种机制 1526次阅读
- 如何建立一个简单的PLL电路 1099次阅读
- Linux上建立SSH安全连接的10种方法 5887次阅读
- 如何标识一个TCP连接 2741次阅读
- 如何构建一个连接互联网的流量计 1704次阅读
- 如何正确建立自己的机器学习项目集 2078次阅读
- 建立一个家庭光伏电站这些事项需提前预知 3626次阅读
- 如何对一个大的项目进行模块化编程 9852次阅读
- 大神告诉你TCP建立连接为什么是三次握手 1w次阅读
- 提出一个快速启动自己的 TensorFlow 项目模板 3037次阅读
- 建立一个方法和套路来对 Load 高问题排查 5311次阅读
- 蓝牙网状网络解决方案 5150次阅读
- zigbee/Thread网状网络解决方案 8064次阅读
- 搭载 Qualcomm 网状网络平台的路由器 5877次阅读
- Zigbee威廉希尔官方网站 的8个优点 1.2w次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多