背景
我们房子周围有一些盆栽植物,因为它们所处的位置有点偏僻,所以往往并不能及时的受到养护。正巧我的实施清单上有一个完整的花园监控项目,但在此之前,作为朝那个方向迈出的一小步,我想我会从几个基于 ESP8266 的模块开始,然后尝试使用 AWS IoT 将它们整合在一起。
系统总览
初始系统由三个主要部分组成:
基于电池供电的WeMos D1 mini盆栽土壤湿度监测器
一个 基于Adafruit Feather HUZZAH ESP8266的监视器模块,带有一个NeoPixel FeatherWing ,用于一目了然的显示
用于发布和检索传感器数据的 AWS IoT
除了 AWS IoT 方面的一个小例外,一切都按预期进行。在我最初想使用 MQTT 发布和订阅传感器数据的地方,我不得不退回到 REST API,因为ESP8266 无法处理 AWS IoT MQTT 连接的特定要求。稍后,让我们从硬件开始。
土壤湿度传感器
大多数设备工作都在传感器方面。项目没有使用很多传感器,但添加了一些开关以帮助提高可用性。
土壤湿度传感器模块的大脑是基于 ESP-8266EX 的漂亮小巧的 WeMos D1 mini。我在这里焊接了 WeMos 随附的堆叠接头,并且它足够小,可以在两侧使用面包板端子。
土壤湿度传感器本身是 SparkFun 的一个非常简单的传感器。我焊接了几根电线以将其连接到 WeMos。
我还添加了两个开关以帮助提高可用性:
第一个开关是启用/禁用土壤湿度检查和数据发布,以防我不希望启用传感器和/或激活 wifi 连接和数据发布过程。关闭模块后,模块会在配置的时间内重新进入深度睡眠。要立即(重新)启用传感器,请重新打开开关并按下 WeMos 上的重置按钮。
第二个开关是将 WeMos 置于闪光模式,因此我们需要在设备进入深度睡眠模式之前尝试对其配置。当开关“打开”或朝向 WeMos 时,模块已准备好进行正常操作。当“关闭”或远离 WeMos 时,模块已准备好闪烁。在上传固件时,可以将开关重新“打开”,以便在上传后重置模块即可正常使用。
一旦传感器模块全部连接好,就该让它闪烁了。
土壤水分显示
显示器比传感器模块简单得多,部分原因是我只显示各种湿度水平的颜色(红色 -》 黄色 -》 绿色 -》 蓝色),还因为这完全是使用 Adafruit Feather 组件构建的,所以它是几乎只是一个简单的焊料,即插即用。
NeoPixel FeatherWing 需要默认的封闭跳线切割和另一个焊接(与 Feather HUZZAH ESP8266 #15 引脚对齐)。
NeoPixels 的亮度足以引起任何人的注意,即使在最低亮度时也是如此。
在进入固件之前就差不多了。但首先,需要为 AWS IoT 传感器和用户进行一些设置,因为我们需要从那里获取一些信息才能正确连接。
如果您还没有设置这一步,则需要“开始”使用 AWS IoT:
https://aws.amazon.com/iot/
当您可以看到 AWS IoT 仪表板,我们就可以添加一个“事物”。
首先,单击“创建资源”。
然后单击“创建事物”。
将事物命名为“soil-sensor-one”,然后单击“创建”。
单击您刚刚添加的“事物”以查看其详细信息并记下详细信息窗格顶部的“REST API 端点”。
正如我之前提到的,MQTT 端点不能真正与 ESP8266 一起使用,因为它无法执行所需的基于证书的身份验证。相反,我们可以使用带有版本 4 签名的 REST API。
因此,为了使用 REST API,我们需要添加一个拥有 AWS IoT 权限的新用户。为此,请单击页面顶部的“服务”,然后单击左侧的“IAM”。
点击“用户”
然后“创建新用户”
输入用户名,然后单击“创建”。
创建用户后,单击“显示用户安全凭据”
并记下密钥和秘密。稍后固件中的 keys.cpp 文件将需要这些,不要与任何人分享这些内容!
如果需要,也可以下载凭据,然后单击“关闭”(如果您不下载,它会在关闭时发出警告)。
现在需要授予新用户访问 AWS IoT 的权限。单击新创建的用户。
单击“附加策略”。
在过滤器中输入“iot”,选择“AWSIoTDataAccess”,然后单击“AttachPolicy”。
之后可以赋予用户以下权限。
{ "Version": "2012-10-17", "Statement":
[
{ "Effect": "Allow", "Action":
[ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:GetThingShadow", "iot:UpdateThingShadow"
], "Resource": "*"
} ]
}
'UpdateThingShadow' 和 'GetThingShadow' 将用于 REST API 访问。
准备刷新固件
又名,安装 Arduino 板,安装 USB 驱动程序和了解通用设备特定的 Arduino 配置。
WeMos D1 mini入门页面非常清晰,但建议的上传速度似乎不起作用,因此请尝试使用 115200 而不是 921600。
Adafruit Feather HUZZAH ESP8266 Arduino 设置信息很棒,无需更改 AFAIK。该页面上提到,某些版本的 Arduino IDE 可能会导致一些困难,但我对 1.6.7 没有任何问题(它比那些被挑出来的可能难以使用的版本更新)。
刷新固件
首先,您需要一个适用于 ESP8266 的 AWS IoS Arduino 库。 这个 特别是 从 Amazon Web Services - Labs org 开始的,但是 为了获得一些 ESP8266 支持和一些小的改进,它 分叉了一个 叉子。
使库可用于 Arduino IDE 的一种方法是下载此分支
https://github.com/heskew/aws-sdk-arduino/archive/iot-get-shadow-and-cleanup.zip , 将其解压缩到驱动器上的某个位置并将 src/esp8266 文件夹符号链接到 ~/Documents /Arduino/libraries(在 OSX 上——位置可能因操作系统而异)。然后获取传感器代码
https://github.com/heskew/things-aws-iot-soil-monitor/tree/master/sensor , 添加一个keys.cpp并为keys.h中的所有内容添加值。使用 https://github.com/heskew/things-aws-iot-soil-monitor/tree/master/monitor对监视器执行相同操作,并对那里的 keys.cpp 执行相同操作。
闪存每个设备,可能需要对“端口”和“上传速度”进行一些调整,仅此而已。
默认情况下,传感器模块将读取读数,连接到 wifi 并使用标准化值(0-100 刻度)更新传感器阴影,然后休眠 30 秒(并重复)。
在编写本文时,监视器模块将每 5 秒读取一次,并根据值更新 NeoPixel 颜色(使用当前组成的一组范围为红色 -》 黄色 -》 绿色 -》 蓝色刻度)。
基本上:
红色:植物可能正在受伤
黄色:植物可以用水
绿色:植物在水位上表现良好
蓝色:植物濒危
-
监测器
+关注
关注
0文章
164浏览量
38762 -
ESP8266
+关注
关注
50文章
962浏览量
44741
发布评论请先 登录
相关推荐
评论