亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino MKR IoT Bundle 智能植物监护仪:自动化园艺物联网实战

硬件平台:MKR IoT Bundle

本教程基于 Arduino MKR IoT Bundle (含 MKR WiFi 1010 开发板、传感器套件、面包板、导线等)。MKR WiFi 1010 集成 SAMD21 Cortex-M0+ MCU + u-blox NINA-W102 WiFi/BLE 模块,内置加密芯片 (ATECC508A) 支持 TLS 1.2,非常适合物联网安全连接。

Bundle 内核心组件 用途
MKR WiFi 1010 主控,WiFi/BLE,RTC,低功耗
TMP36 温度传感器 环境温度监测 (-40~125°C)
光敏晶体管 (Phototransistor) 光照强度监测
DIY 土壤湿度探针 (2根导线+1MΩ电阻) 低成本电阻式湿度检测
微动开关、LED、电阻、电容等 辅助电路

项目目标

核心知识点 (#ProTips)

td>硬件 RTC 唤醒中断,无需持续运行 loop()
技能点 说明
Zapier 自动化 无代码连接 HTTP Webhook → Gmail,处理复杂 OAuth/认证
HTTPS 请求与证书 WiFi101 库 FirmwareUpdater 上传 hooks.zapier.com 根证书
RTC 零功耗定时
DIY 电阻式湿度传感器 两根导线+1MΩ分压,间歇供电防电解
ThingSpeak 数据可视化 免费通道存储、绘图、MATLAB 分析
HTML 邮件模板 Zapier 支持内联 CSS,打造专业外观报告
Postman API 调试 可视化构建/测试 HTTP 请求,生成代码片段

步骤 1:搭建 Zapier 自动化流 (Zap)

  1. 注册 Zapier,创建新 Zap
  2. Trigger:选择 Webhooks by Zapier → Catch Hook → 生成唯一 URL (如 https://hooks.zapier.com/hooks/catch/123456/abcdef/)
  3. Test:在浏览器打开 URL?temperature=22&moisture=300&light=800&warning=All%20good,应返回 {"status":"success"}
  4. Action:选择 Gmail → Send Email → 连接 Google 账号
  5. 配置邮件模板:
To: 你的邮箱
Subject: 🌱 每日植物报告 - {{querystring__temperature}}°C
Body Type: HTML
Body: (见下方 HTML 模板)
  1. 开启 Zap,记录 Webhook URL 供 Arduino 使用

HTML 邮件模板 (可直接粘贴到 Zapier Body)

<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container{margin:10%;background:#ECF1F1;padding:5% 10%;font-family:monospace;letter-spacing:2px;}
.title{text-align:center;color:#0CA1A6;font-size:1.5em;padding:0.2vh;}
.subtitle{text-align:center;color:#0CA1A6;font-size:1.1em;padding:4%;}
.data{padding:2% 5%;margin:0 15%;background:#F7F9F9;color:#4E5B61;font-size:1em;font-weight:bold;}
.bttn{padding:3%;margin:10% 25%;background:#00979D;text-align:center;color:#F7F9F9;font-size:1.4em;}
.disclaimer{text-align:center;color:#DA5B4A;font-size:1.1em;font-weight:bold;margin-top:10%;}
.bttn:hover{background:#008184;}
a{text-decoration:none;}
</style>
</head>
<body>
<div class="container">
<h2 class="title">HELLO !</h2>
<h4 class="subtitle">Here's your daily garden update ☘</h4>
<div class="data">♨ Temperature: {{querystring__temperature}} °C</div>
<div id="humidity" class="data">☔ Moisture: {{querystring__moisture}}</div>
<div class="data">☀ Light: {{querystring__light}}</div>
<div class="disclaimer">{{querystring__warning}}</div>
<a href="https://thingspeak.com/channels/YOUR_CHANNEL">
<div class="bttn">SEE THE GRAPH</div>
</a>
</div>
</body>
</html>

步骤 2:上传 WiFi 根证书 (关键!)

MKR WiFi 1010 验证服务器证书需本地存储 CA 根证书。操作:

  1. Arduino IDE → 文件 → 示例 → WiFi101 → FirmwareUpdater
  2. 上传该草图到 MKR1010
  3. 打开串口监视器 (115200),输入域名:hooks.zapier.com
  4. 工具会自动下载并烧录该域名的证书链到 Flash 安全区
  5. 注意:Arduino Web Editor 暂不支持此功能,必须用桌面版 IDE

步骤 3:硬件接线 (面包板搭建)

传感器 MKR1010 引脚 电路说明
TMP36 (Vout) A1 VCC→3.3V, GND→GND, Vout→A1
光敏晶体管 A0 上拉电阻 10kΩ 接 3.3V,集电极接 A0,发射极接 GND
DIY 湿度探针 A2 两根导线插土壤,串联 1MΩ 接 3.3V,中点接 A2,另一根接 GND

Arduino MKR IoT Bundle 智能植物监护仪:自动化园艺物联网实战

步骤 4:核心代码实现

4.1 发送 HTTPS 邮件请求


#include <WiFi101.h>
#include <WiFiSSLClient.h>

const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
String httpsRequest = SECRET_REQUEST;  // Zapier Webhook URL 路径部分,如 "/hooks/catch/123/abc/"
const char* host = "hooks.zapier.com";
WiFiSSLClient client;

void send_email(float temperature, int moisture, int light, String warning) {
  warning.replace(" ", "%20");  // URL 编码空格
  String _temp = String(temperature);
  String _moist = String(moisture);
  String _light = String(light);

  if (client.connect(host, 443)) {
    client.println("POST " + httpsRequest + "?temperature=" + _temp + "&moisture=" + _moist + "&light=" + _light + "&warning=" + warning + " HTTP/1.1");
    client.println("Host: " + String(host));
    client.println("Connection: close");
    client.println();
    delay(1000);
    while (client.available()) {
      Serial.write(client.read());
    }
    client.stop();
  } else {
    Serial.println("TLS connection failed");
  }
}

4.2 RTC 定时触发每日邮件


#include <RTCZero.h>
RTCZero rtc;
bool email_sent_today = false;

void setup() {
  rtc.begin();
  rtc.setTime(16, 0, 0);   // 设置初始时间 16:00:00
  rtc.setDate(4, 12, 17);  // 2017-12-04
  rtc.setAlarmTime(16, 1, 0); // 每天 16:01 触发
  rtc.enableAlarm(rtc.MATCH_HHMMSS);
  rtc.attachInterrupt(alarmMatch);
}

void loop() {
  if (!email_sent_today) {
    // 读取传感器...
    send_email(temp, moisture, light, "Daily report");
    email_sent_today = true;
  }
}

void alarmMatch() {  // 中断服务程序:不可有 delay/串口/网络操作
  email_sent_today = false;  // 仅置标志位
}

4.3 DIY 湿度传感器读取 (平均滤波)


int moisturePin = A2;
int threshold = 800;  // 干燥阈值,需实测标定

int get_average_moisture() {
  int sum = 0;
  for (int i = 0; i < 10; i++) {
    sum += analogRead(moisturePin);
    delay(10);
  }
  return sum / 10;
}

void check_emergency() {
  int m = get_average_moisture();
  if (m > threshold) {  // 值越大 = 越干 (视分压极性)
    send_email(temp, m, light, "⚠️ Soil too dry! Water needed!");
  }
}

4.4 ThingSpeak 数据上传


#include "ThingSpeak.h"
WiFiClient tsClient;
unsigned long channelID = 356392;
const char* writeAPIKey = SECRET_WRITE_API;

void upload_thingspeak() {
  ThingSpeak.setField(1, get_light());
  ThingSpeak.setField(2, get_temperature());
  ThingSpeak.setField(3, get_average_moisture());
  ThingSpeak.writeFields(channelID, writeAPIKey);
}

4.5 完整整合版草图结构


void setup() {
  Serial.begin(9600);
  connect_wifi();
  upload_certs_if_needed(); // 仅首次
  rtc_init();
  thingspeak_init();
}

void loop() {
  rtc.run(); // 处理闹钟中断标志
  if (email_due) { send_daily_report(); email_due=false; }
  if (emergency_due) { check_emergency(); emergency_due=false; }
  if (thingspeak_due) { upload_thingspeak(); thingspeak_due=false; }
  // 低功耗睡眠直到下一个闹钟...
  rtc.standbyMode(); // SAMD21 深度睡眠,RTC 唤醒
}

ThingSpeak 可视化配置

  1. 登录 ThingSpeak → Channels → New Channel
  2. 勾选 Field 1: Light, Field 2: Temperature, Field 3: Moisture
  3. 保存后获取 Write API Key 填入代码
  4. 在「Charts」标签页可自定义图表样式、嵌入网页

Postman API 调试技巧

常见坑点与避坑指南

问题 原因 对策
TLS 连接失败 (-1 / -104) 证书未上传 / 域名不匹配 / 系统时间不对 跑 FirmwareUpdater 上传证书;RTC 设置正确 UTC 时间
Zapier 邮件未收到 Webhook URL 错误 / 参数名不匹配 / 免费额度用尽 (100/月) 核对 URL 路径;参数名与 Zapier 定义一致;付费或改用其他邮件服务
湿度读数漂移/异常 探针电解腐蚀 / 接触不良 / 供电噪声 间歇供电;焊接固定探针;加 0.1µF 滤波电容
RTC 闹钟不触发 中断标志位未清 / 睡眠模式配置错误 在 alarmMatch() 仅置 volatile bool 标志;loop 中处理
ThingSpeak 写入失败 API Key 错误 / 频道号错 / 网络超时 / 频率限制 (15s) 核对 Key/ID;增加重试逻辑;间隔 ≥ 16s

扩展方向

本教程属于 MKR IoT Bundle 官方实验系列 (含 Love You Pillow、Puzzle Box、Pavlov's Cat 等)。完整代码、原理图、Zapier 模板请访问 Arduino Project Hub 原文页面下载。掌握这套「传感器→边缘计算→云端自动化→可视化」流程,即可快速构建各类生产级 IoT 设备原型。

制造工艺

  1. 《Reliable Plant》创刊号:您的维护卓越可靠指南
  2. 确保宠物食品制造卫生规范:全面指南
  3. 工厂维护揭秘:现代工业最佳实践五步法
  4. 化肥:科学、生产与可持续未来
  5. 集成电路 (IC):微观世界里的算力引擎与制造极限
  6. MOSMusic 套件:MOSFET + Arduino 打造音乐同步灯光控制系统
  7. 钻床核心部件解析:从底座到主轴的完整拆解
  8. 电厂运维管理实战指南:提升能源生产可靠性的核心策略与体系构建
  9. 内燃机核心零部件详解
  10. 释放大宗化工厂价值:增长策略与数字化优化
  11. 掌握 SPICE 网表语法:元件命名、无源/有源元件与源定义
  12. 2018工业物联网预测:智能工厂如何重塑制造业