基于AWS IoT的智能植物监测系统:土壤湿度/光照/温度远程监控与邮件报警
硬件清单
| 组件 | 型号/规格 | 接口 |
|---|---|---|
| 主控 | Arduino Yun (Linino OS) | WiFi+Linux桥接 |
| 传感器扩展板 | Grove Starter Kit for Intel Edison | 含温度、光照传感器 |
| 土壤湿度传感器 | Grove Moisture Sensor | A1 |
| 指示LED | 红色5mm + 330Ω电阻 | D2 |
| 3D打印外壳 | PLA, 0.3mm层高, 25%填充 | 容纳Yun+扩展板+传感器 |
系统功能
- 实时采集土壤湿度、环境温度、光照强度
- 双通道上报:
① dweet.io 免Key快速可视化(原型验证)
② AWS IoT Core → DynamoDB 生产级持久化存储 - 阈值报警:土壤湿度低于设定值 → AWS IoT Rule → SNS发送邮件通知用户/邻居浇水
- 本地指示:LED亮起提示缺水/低温
接线表
温度传感器 → A0 土壤湿度传感器 → A1 光照传感器 → A2 红色LED(含330Ω) → D2
实施步骤详解
阶段一:原型验证 (dweet.io)
- 烧录
SoilMoistureValue.ino,串口观察干/湿土读数,确定tooDryValue阈值(示例250) - 烧录
ArduinoYunDweetio.ino,修改设备名PlantMonitorTorontoON为唯一名称,数据自动推送至dweet.io/follow/你的设备名
阶段二:AWS IoT 生产部署
- 创建AWS账号,开通免费套餐
- 安装AWS CLI (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 - 创建Thing:
aws iot create-thing --thing-name "PlantSystem" - 生成证书:
aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --public-key-outfile publicKey.pem --private-key-outfile privateKey.pem - 策略授权:创建允许
iot:*的策略PubSub,关联证书并绑定Thing - 配置Yun连接AWS:
- 下载AWS IoT SDK for Arduino Yun至Libraries
- 将
rootCA.pem、cert.pem、privateKey.pem放入Yun/certs目录(通过codebase_upload.sh脚本) - 运行
environment_setup.sh安装python-openssl、paho-mqtt等依赖
- 创建DynamoDB表:
plantSensor,主键key(String)、排序键timestamp(Number),读写容量单位各1 - 配置IoT Rule写入DynamoDB:
执行{ "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 - 烧录生产固件:
ArduinoYunAWSIoTDynamodb.ino+aws_iot_config.h(填入Endpoint/Thing名/证书路径) - 验证:串口监视器观察Publish成功,DynamoDB控制台查看数据落库
阶段三:SNS邮件报警
- IAM角色
iot-actions-role附加AmazonSNSFullAccess - SNS控制台创建Topic
sendMail,添加邮箱订阅并确认 - AWS IoT控制台创建Rule
EmailSend:- 属性:
moistval(对应JSON载荷字段) - Topic filter:
topic/plantdata - Condition:
moistval < 250(即tooDryValue) - Action:SNS发布至
sendMail,角色iot-actions-role
- 属性:
- 测试:拔出湿度传感器触发报警,收到邮件含完整JSON载荷
3D打印外壳安装
- 打印3个STL部件:底座、土壤探针固定件、顶盖
- M4螺丝固定探针件于底座,顶盖卡扣合
- 探针朝向花盆土壤,顶盖开口朝窗(光照传感器),Micro-USB供电
成本与运维建议
- AWS免费套餐内:IoT 25万条消息/月、DynamoDB 25GB存储、SNS 100万次发布/月
- 生产部署请大幅增加发送间隔(如30-60分钟),避免超额计费
- 可扩展:接入Lambda做异常检测、Kinesis做流式分析、QuickSight做仪表盘、自动浇水泵闭环控制
代码仓库
项目包含4个草图:SoilMoistureValue、ArduinoYunDweetio、ArduinoYunAWSIoTDynamodb、aws_iot_config.h,详见项目代码区。
制造工艺