亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

使用AWS物联网的植物监控系统

发布时间:2022-11-07
分享到:

使用AWS物联网的植物监控系统

发布时间:2022-11-07
分享到:

如果你家里有养植物,并且之后有计划度假,那么这里正好有一个伟大的项目,能够帮助你跟踪你所养植物的温度和土壤湿度。

想象一下,你要去度假一周左右,并且有点担心家里的盆栽。这个项目正适合你在去度假的前一周进行。

建立自己的植物监控和通知系统,具有以下功能

  • 使用dweet.io监测温度、光照值和土壤湿度值
  • 或者使用新的亚马逊物联网服务来记录数据AWS——DynamoDB
  • 使用AWS -SNS通知,发送电子邮件给你自己,这样你就可以通知你的表弟/邻居迅速给植物浇水或检查你家里的恒温器。

此外,我还设计了一个3D打印的外壳,以容纳Arduino云,传感器。

以下是完成构建所需执行的步骤:

#1 建立电路

基本上连接

  • 温度传感器到A0
  • 土壤湿度传感器到A1
  • 光传感器到A2
  • 使用一个220欧姆的电阻连接一个LED到引脚#2

#2 3D打印方面

设置你的切片软件为0.3毫米的层高和填充密度至少25%或更高。

3D打印大约需要2个小时,所以只需要在完成下面其他步骤的同时启动3D打印机即可。

#3 确定土壤湿度值

将代码(土壤湿度值)上传到您的Arduino Yun中,并在代码中确定tooDryValue。基本上,如果土壤湿度低于干燥值,你需要给植物浇水。(这个值是在AWS-SNS条件下用来发送电子邮件的值)

#4 上传Arduino代码到Yun,将数据发布到dweet.io

现在,一旦你决定了tooldryvalue,上传ArduinoYunDweetIO。将“PlantMonitorTorontoON”替换为对您更有意义的内容。

#5 在您的计算机上设置AWS CLI(这里我使用的是Mac)

现在,要在DyanamoDB中使用AWS IoT记录数据,您必须在https://aws.amazon.com/free上创建一个帐户,在这里您还必须提供您的信用卡详细信息,但对于下面的教程,您不需要支付任何费用(这同样取决于AWS设置的区域)。

完成之后,在你的mac上创建一个名为“AWS”的文件夹,按照下面的链接下载并安装AWS CLI

http://docs.aws.amazon.com/iot/latest/developerguide/installing-aws-cli.html

我用的是mac,下面是我使用的说明

$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"$ unzip awscli-bundle.zip$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

注意:在终端上,您需要位于刚刚创建的AWS文件夹中

#6 使用CLI创建一个事件,它应该显示在AWS IoT控制台中

现在,我们将使用以下命令在AWS IoT中创建一个事件

aws iot create-thing --thing-name "plantSystem"

#7 创建确实的事情

要创建和激活所需的证书,请输入以下命令

aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --public-key-outfile publicKey.pem --private-key-outfile privateKey.pem

该命令将在AWS文件夹中为您创建证书(3个pem文件),如下面的屏幕截图所示

#8 创建AWS IoT策略并将其附加到您的证书上

首先在AWS文件夹中创建一个json文件,使用你最喜欢的文本编辑器(我更喜欢sublime text 2)——将文件命名为policy.json

{    "Version": "2012-10-17",     "Statement": [{        "Effect": "Allow",        "Action":["iot:*"],        "Resource": ["*"]    }]}

然后在文本编辑器中复制粘贴以下命令

aws iot create-policy --policy-name "PubSub" --policy-document file://./policy.json

#9 将策略附加到证书,然后将证书附加到设备

一个接一个地给出下面的命令

$aws iot attach-principal-policy --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx" --policy-name "PubSub"
$ aws iot attach-thing-principal --thing-name "PlantSystem" --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx"

这里有一个简单的方法来获得您的证书,如果您没有记下它是去AWS IoT控制台点击您的证书,并进入屏幕右侧的详细信息。从这里你可以复制粘贴arn到终端

#10 在计算机上验证/测试您的设置,并使用MQTT.fx对其进行测试

现在要宣称已经在计算机上完成了设置,请下载并安装MQTT。通过下面的链接测试设置是否正常,我们是否能够通过AWS物联网发布和订阅数据

http://mqttfx.jfx4ee.org/index.php/download

有关更多设置信息和下载根证书使用下面的链接

http://docs.aws.amazon.com/iot/latest/developerguide/verify-pub-sub.html

完成并测试设置后,请按照以下步骤将经过认证的设置上传到Arduino Yun

#11 设置Arduino Yun与AWS IoT云通信

下载最新版本的Arduino Yun SDK,并解压到你的Arduino“Libraries”文件夹中

https://github.com/aws/aws-iot-device-sdk-arduino-yun

如果您是第一次使用Arduino Yun,请遵循以下的设置说明

https://www.arduino.cc/en/Guide/ArduinoYun

基本上使用该链接,您能够学习到如何设置Arduino Yun连接到家庭WiFi网络。

然后将过程示例草图Arduino IDE加载到您的YUN (File->Examples->Bridge -> Process),这将确认YUN已经访问互联网

将rootCA文件、私钥和证书放入certs文件夹中,如下面的屏幕截图所示

接下来修改codebase_upload.sh和environment_setup.sh,并将[your_boards_IP]替换为您的板的IP地址,[your_boards_IP]替换为您的密码

在您的终端上运行以下命令授予.sh文件权限,这将花费大约5-10分钟,这将移动certs并在Yun上安装distribute、python-openssl、pip、paho-mqtt。这些是您需要从您的Yun(在我们的例子中又称为PlantSystem)与AWS云通信的包。

$chmod 755 codebase_upload.sh
$./codebase_upload.sh

$chmod 755 environment_setup.sh
$./environment_setup.sh

要在Linux/Windows上安装,请参考以下链接

https://github.com/aws/aws-iot-device-sdk-arduino-yun#installation

现在作为接下来使用AWS CLI的一部分,我们将在DynamoDB中创建一个表来发布传感器数据

#12 创建IAM角色并授予权限

基本上,为了将数据输入到DynamoDB传感器表中(我们将在下一步中创建该表),我们需要创建一个IoT规则,该规则将对AWS接收到的MQTT消息起作用,为此我们需要创建一个角色并授予它必要的权限

创建一个json文件rolePolicy.json

{"Version": "2012-10-17",  "Statement": [{      "Sid": "",           "Effect": "Allow",            "Principal": {             "Service": "iot.amazonaws.com"       },      "Action": "sts:AssumeRole"  }]}

要创建角色,在终端中运行以下命令

aws iam create-role --role-name iot-actions-role --assume-role-policy-document file://./rolePolicy.json

创建另一个json文件policy.json

{    "Version": "2012-10-17",        "Statement": [{        "Effect": "Allow",        "Action": [ "dynamodb:*", "lambda:InvokeFunction"],         "Resource": ["*"]    }]}

然后调用create-policy并指定IAM策略文档

aws iam create-policy --policy-name iot-actions-policy --policy-document file://./policy.json

最后使用-将policy-ARN修改为您在上一步中收到的ARN将策略附加到角色

aws iam attach-role-policy --role-name iot-actions-role --policy-arn "arn:aws:xxxxxxxxxxxxx:policy/iot-action-policy"

#13 在AWS控制台的DynamoDB中设置表

作为这一步的一部分,我们将在AWS控制台中创建一个DynamoDB

表名称:plantSensor

分区键:键

排序键:时间戳

并将读容量单位和写容量设置为1。

#14 创建一个规则,将数据插入PlantSensor表

创建一个json文件plantdatarule。(这里修改roleArn的值在下面的章节,去IAM->Roles->iot-action-role获取arn)

{
  "sql": "SELECT * FROM 'topic/plantdata'",
  "ruleDisabled": false,
  "actions": [{
      "dynamoDB": {
        "tableName": "plantSensor",
        "hashKeyField": "key",
        "hashKeyValue": "${topic(2)}",
        "rangeKeyField": "timestamp",
        "rangeKeyValue": "${timestamp()}",
        "roleArn": "arn:aws:iam::XXXXXXXXXXXX:role/iot-actions-role"
      }
    }]
}

然后在终端上运行以下命令

aws iot create-topic-rule --rule-name plantDataToDynamoDB --topic-rule-payload file://./plantdatarule.json

现在,如果你进入AWS IoT控制台,你应该会看到创建了一个名为“PlantDataToDynamoDB”的规则,如下面的屏幕截图所示(“忽略电子邮件发送规则,这是下面步骤的一部分。)

用MQTT.FX运行一个快速测试,看看是否在创建的表中创建了记录。

#15 上传Arduino草图,将数据从云发布到AWS IoT

这里首先从github下载ArduinoJSON库开始

https://github.com/bblanchon/ArduinoJson

现在代码部分下载YunAWSIoTDynamoDB、ino和aws_iot_config.h文件,并将其上传到Yun。

打开你的串行监视器,你应该看到温度,光值和土壤湿度值张贴到DynamoDB。

如果你有AWS,你可以通过设置Lambda函数和发布数据运动来做各种了不起的事情。

注意:如果您计划将此设置为永久设置,请不要忘记在循环结束时增加延迟,以增加发布到DynamoDB的时间间隔,这样就不会产生额外的成本。

建立AWS-IoT SNS规则,在土壤湿度值低于阈值时接收和发送电子邮件。

基本上,这一步包括基于AWS IoT规则设置一个简单的SNS通知。

首先,将以下策略分配给您在上一步中在IAM控制台中创建的AWS角色(iot-action-role)

-AmazonSNSRole

-AmazonSNSFullAccess

在SNS控制台创建一个名为sendMail的主题,并创建一个订阅,给你的手机上的电子邮件配置,当土壤湿度值是低的时候得到通知。

现在返回AWS IoT控制台,使用+Create Resource按钮创建一个名为Email Send的规则,并提供以下信息

  • 名称:EmailSend
  • 属性:mositValue(这应该与你在Arduino代码中作为主题的一部分发布的json值相匹配)
  • 主题过滤器:Topic /plantdata
  • 条件:当湿度< 250时(这是您在本教程的前几个步骤中确定的值)
  • 选择“动作”:发送消息作为推送通知SNS
  • SNS目标:sendEmail
  • 角色:iot-action-role

完成之后,你的控制台应该看起来像下面的屏幕截图

这是我从一杯水中取出土壤湿度传感器时收到的一封邮件样本

之后把3D打印的部分放在一起,你将需要一个4x40螺丝和螺母将黑土拨牌3D打印部分连接到Arduino Yun的底座部分。

顶部刚好贴合,记得把顶部的开口对着窗户,把土壤中的水分戳进去。然后用一个微型usb电缆插头连接到墙上的插座来为Yun充电。

注意:我仍然在探索和学习AWS这个令人敬畏的世界,并对AWS控制台上的功能感到敬畏,所以如果您已经使用AWS很长一段时间了,请发表您希望看到/适用于工厂监控项目的功能的评论或建议。

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:CJA3D,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论