资料介绍
介绍
正如英国诗人威廉·华兹华斯曾经说过的:
“你的思想是花园,你的思想是种子,收获可以是花朵或杂草。
“让你的植物保持活力可能是一个相当大的挑战,因为它们非常不善于沟通。让它们开心的一种方法是把你的植物带在身边,但也许你不想带着那个大仙人掌到处走走,或者蕨类植物从你的冬季夹克口袋里伸出来。
此外,大多数植物不喜欢寒冷。在花了几个月的时间尝试与我们的蜘蛛植物进行通信后,我们放弃并使用 MKR IoT Bundle 组件创建了一个可以远程调查任何植物健康状况的设备。
简而言之
在这个实验中,您将学习如何保护您的植物并确保它们能够生存以及如何使用 Arduino 魔法。
通过监测湿度、温度和光照,您可以确保您的植物生长良好。
它可以每天发送电子邮件和图表,并通知您它的需求。
成分
- TMP36温度传感器
学习目标
- 介绍 Zapier 互联网服务
- 发送 HTTP 请求
- 管理实时时钟和闹钟
- 构建一个 DIY 湿度传感器
- 使用 thingSpeak #ProTips绘制值
- 使用 HTML 和 CSS #ProTips为您的电子邮件设置样式
- 使用 PostMan #ProTips测试 API
想知道更多?
本教程是让您熟悉 MKR WiFI 1010 和 IoT 的一系列实验的一部分。所有实验都可以使用 MKR IoT Bundle 中包含的组件构建。
- 带有 MKR WiFi 1010 的植物通讯器
设置 Zapier
Zapier是一款在线自动化工具,可以方便地为我们管理其他应用的 API。它是组合多个任务的好工具,或者如果我们要使用的应用程序具有无法由 Arduino 管理的复杂 API。
在我们的例子中,我们将使用它发送一封电子邮件,其中包含从 Arduino 检索到的数据。
按照这几个简单的步骤来创建自己的 zap!
为了继续,我们需要先复制给定的 URL 来测试我们的钩子,然后选择按下 Continue 时出现的 Test and Review 按钮。将这些参数添加到 URL:
Custom_Webhook_URL?temperature=0&moisture=0&light=0&warning=0
现在只需将此 URL 复制并粘贴到新的浏览器页面上。您应该会看到如下响应:
恭喜!您刚刚发送了一个http 请求!
这正是我们将使用我们的 Arduino 板做的事情。但是,我们不会将该 URL 粘贴到浏览器页面中,而是将其直接发送到 Zapier 服务器。此外,我们将使用我们的传感器值修改现在设置为零的参数值。
有关测试和使用 API 的更高级方法,请查看页面底部的#ProTip 。
测试您的请求后,您可以继续创建 Zap。
继续编辑执行此操作...
检查您的邮箱以查看 Zapier 生成的电子邮件。它将来自您在 gmail 配置的第一步中使用的帐户。
设立董事会
为了实现所有功能,我们将使用以下库:
- WiFiNINA // 连接到互联网并扫描网络
- RTCZero // 管理时间触发事件
发送 HTTP 请求
我们现在准备从 Arduino 板发送 HTTP 请求。现在我们将为我们的参数设置一个任意值,稍后将用真实的传感器值替换。
float temperature = 22;
int moisture = 150;
int light = 40;
String warning = "This is a warning message";
warning.replace(" ", "%20");
请注意,必须对字符串进行编码,因为不能在 HTTP 请求中发送空格。所有空格都替换为编码的等价物%20
设置好参数后,我们将调用该send_email()
函数,它将所有参数转换为字符串,并重建我们之前使用的相同 URL,然后将其发布到 Zapier 服务器。
使用您的 WiFi 凭据和您从 Zapier 收到并上传的 URL 填写此草图。
#include
#include
const char* ssid = SECRET_SSID; // your network SSID (name)
const char* password = SECRET_PSWD; // your network password
String httpsRequest = SECRET_REQUEST; // your Zapier URL
const char* host = "hooks.zapier.com";
WiFiSSLClient client;
void setup() {
Serial.begin(9600);
while (!Serial);
delay(2000);
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
while (WiFi.begin(ssid, password) != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
float temperature = 22;
int moisture = 150;
int light = 40;
String warning = "This is a warning message";
warning.replace(" ", "%20");
send_email(temperature, moistue, light, warning );
delay(20000)
}
void send_email(float temperature, int moisture, int light, String warning) {
// convert values to String
String _temperature = String(temperature);
String _moisture = String(moisture);
String _light = String(light);
String _warning = warning;
if (client.connect(host, 443)) {
client.println("POST " + httpsRequest + "?temperature=" + _temperature + "&moisture=" + _moisture + "&light=" + _light + "&warning=" + _warning + " HTTP/1.1");
client.println("Host: " + String(host));
client.println("Connection: close");
client.println();
delay(1000);
while (client.available()) { // Print on the console the answer of the server
char c = client.read();
Serial.write(c);
}
client.stop(); // Disconnect from the server
}
else {
Serial.println("Failed to connect to client");
}
}
它会每 20 秒向您选择的地址发送一封电子邮件。
请注意请求,Zapier 每月只允许您 100 个免费请求。
RTC 和警报
我们可以使用 MKR WiFi 1010 的实时时钟在每天的某个时间发送一封电子邮件。
此草图将时间和日期设置为 2017 年 12 月 4 日 16:00,然后在每天 16:01 触发警报。
请注意,由于警报附加到中断函数,我们不能包含任何延迟,但我们可以使用布尔变量来触发循环()中的动作
#include
RTCZero rtc; // create RTC object
/* Change these values to set the current initial time */
const byte seconds = 0;
const byte minutes = 0;
const byte hours = 16;
/* Change these values to set the current initial date */
const byte day = 4;
const byte month = 12;
const byte year = 17;
bool email_already_sent = false;
void setup() {
Serial.begin(9600);
while (!Serial);
delay(2000);
rtc.begin(); // initialize RTC 24H format
rtc.setTime(hours, minutes, seconds);
rtc.setDate(day, month, year);
rtc.setAlarmTime(16, 1, 0); // Set the time for the Arduino to send the email
rtc.enableAlarm(rtc.MATCH_HHMMSS);
rtc.attachInterrupt(alarmMatch);
}
void loop() {
if (!email_already_sent) {
// send_email();
email_already_sent = true;
}
}
void alarmMatch() { // triggered when the alarm goes on
Serial.println("Alarm Match!");
email_already_sent = false;
}
DIY土壤湿度传感器
放置在土壤盆中的两根电线形成一个可变电阻器,其电阻根据土壤湿度而变化。该可变电阻器以分压器配置连接,Arduino 收集与 2 根导线之间的电阻成比例的电压。这意味着土壤越潮湿,Arduino 测量的电压越小。使用1 兆欧电阻和两根电线,我们可以创建自己的 DIY 土壤湿度传感器!
上传以下草图,您可以开始读取传感器的值,我们建议您先在干燥的土壤中开始测试,并记下您读取的值。
该值将用于设置阈值,以便 Arduino 知道您的植物何时需要水并向您发送紧急电子邮件。
int moisturePin = A2;
// Set this threeshold accordingly to the resistance you used
// The easiest way to calibrate this value is to test the sensor in both dry and wet soil
int threeshold = 800;
void setup() {
Serial.begin(9600);
while (!Serial);
delay(2000);
}
void loop() {
Serial.println(get_average_moisture());
delay(5000);
}
int get_average_moisture() { // make an average of 10 values to be more accurate
int tempValue = 0; // variable to temporarly store moisture value
for (int a = 0; a < 10; a++) {
tempValue += analogRead(moisturePin);
delay(100);
}
return tempValue / 10;
}
添加温度和光传感器
请参阅下面的示意图来连接两个传感器。我们将使用这两个函数从传感器读取值:
float get_temperature() {
int reading = analogRead(A1);
float voltage = reading * 3.3;
voltage /= 1024.0;
// Print tempeature in Celsius
float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset
// Convert to Fahrenheit
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
return temperatureC;
}
int get_light() {
int light_value = analogRead(A0);
return light_value;
}
请注意,您可以通过返回temperatureF
而不是使用华氏单位temperatureC
#ProTip:使用 ThingSpeak 绘制值
对于你们所有的控制狂来说,这里是把收集到的所有数据绘制成一个漂亮的图表的说明,如下所示:
我们将使用 ThingSpeak 平台绘制图表,按照以下步骤开始。
下载ThingSpeak库,让我们开始吧。下面的这个草图将每分钟将传感器值上传到云端,只需填写您的 WiFi 凭据和您的频道的 API 密钥并上传。
#include
#include
#include "ThingSpeak.h"
const char* ssid = SECRET_SSID; // your network SSID (name)
const char* password = SECRET_PSWD; // your network password
WiFiClient ThingSpeakClient;
unsigned long myChannelNumber = 356392;
const char * myWriteAPIKey = SECRET_WRITE_API;
int lightPin = A0; //the analog pin the light sensor is connected to
int tempPin = A1; //the analog pin the TMP36's Vout (sense) pin is connected to
int moisturePin = A2;
void setup() {
Serial.begin(9600);
while (!Serial);
delay(2000);
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
while (WiFi.begin(ssid, password) != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
ThingSpeak.begin(ThingSpeakClient);
}
void loop() {
ThingSpeak.setField(1, get_light());
ThingSpeak.setField(2, get_temperature());
ThingSpeak.setField(3, get_average_moisture());
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
Serial.println("message sent to cloud");
delay(60000); // send values every 1 minute
}
float get_temperature() {
int reading = analogRead(tempPin);
float voltage = reading * 3.3;
voltage /= 1024.0;
// Print tempeature in Celsius
float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset
// Convert to Fahrenheit
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
return temperatureC;
}
int get_average_moisture() { // make an average of 10 values to be more accurate
int tempValue = 0; // variable to temporarly store moisture value
for (int a = 0; a < 10; a++) {
tempValue += analogRead(moisturePin);
delay(10);
}
return tempValue / 10;
}
int get_light() {
int light_value = analogRead(A0);
return light_value;
}
在下面的完整 Pro 草图中,您可以看到如何将此上传附加到每分钟触发的 RTC 警报。
不幸的是,Gmail 不允许我们在电子邮件正文中嵌入图表和iframe,但我们可以通过电子邮件以漂亮的按钮发送链接,请参阅下面的提示。
我们选择了 ThingSpeak,但还有很多选择!以Dweet.io和freeboard.io为例。
#ProTip:样式化您的电子邮件
Zapier 允许我们在电子邮件正文中嵌入一些 html 和 css 代码。我们可以使用它来发送非常风格化的电子邮件,如下所示:
要实现这个结果,只需在 Zapier 界面上将正文类型更改为 html并添加您的自定义 HTML 和 CSS。
复制并粘贴此模板:
html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container{
margin-left: 10%;
margin-right: 10%;
background-color: #ECF1F1;
min-height: 100%;
padding-top: 5%;
padding-bottom: 10%;
font-family: monospace;
letter-spacing: 2px;
}
.title{
text-align: center;
color: #0CA1A6;
font-size: 1.5em;
padding-top: 0.2vh;
}
.subtitle{
text-align: center;
color: #0CA1A6;
font-size: 1.1em;
padding-bottom: 4%;
padding-left: 4%;
padding-right: 4%;
}
.data{
padding-bottom: 2%;
padding-top: 2%;
padding-left: 5%;
margin-left: 15%;
margin-right: 15%;
background-color: #F7F9F9;
text-align: left;
color: #4E5B61;
font-size: 1em;
font-weight: bold;
}
.bttn{
padding-bottom: 3%;
padding-top: 3%;
margin-left: 25%;
margin-right: 25%;
margin-top: 10%;
background-color: #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-color: #008184;
}
a{
text-decoration: none;
}
style>
head>
<body>
<div class="container">
<h2 class="title">HELLO !h2>
<h4 class="subtitle">Here's your daily update about your garden ☘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="your_link_to_thingSpeak">
<div class="bttn">SEE THE GRAPHdiv>
a>
div>
body>
html>
#ProTip:使用 PostMan 测试 API
处理 HTTP 请求可能很困难,幸运的是有很多工具可以帮助我们构建所需的 URL。Postman 就是一个很好的例子:
只需粘贴 Zapier 给出的初始 URL,添加参数并发送即可。它将打印出服务器的响应并为您编写 URL。
- MKR WiFi 1010 + MKR RS 485 Shield连接到Ignition
- 带有土壤电容传感器的Arduino植物监视器
- 使用Arduino MKR1000通过WiFi进行HID攻击
- MKR FOX 1200运动触发器开源分享
- 在Arduino IoT Cloud的帮助下创建植物通讯器
- 带有MKR Vidor 4000的LED排序器
- 带MKR WiFi 1010的书呆子
- 使用Arduino Mkr Wifi 1010和Thincloud构建连接灯的过程
- 带有Arduino MKR1010和MKR RGB Shield的Otto Biped
- 将MQTT协议物联网与Arduino MKR1010 WiFi结合使用
- 带有NodeMCU的WiFi控制机器人
- 我爱你枕头与MKR WiFi 1010开源分享
- 使用Grove Sensor的Arduino MKR1010和阿里云IoT
- GBU10005-THRU-GBU1010玻璃过桥整流器规格书 1次下载
- 基于ITM-MKR680Temperature Sensing的参考设计
- WiFi模块常用的通讯接口 7116次阅读
- 欧司朗推出的新型LED技术帮助植物生长促进绿色生态 772次阅读
- LED如何在植物领域大展拳脚 2240次阅读
- LED植物灯光谱的研究及应用 6088次阅读
- 基于WIFI通讯的低成本、低功耗甲醛监测器设计详解 1344次阅读
- 简评FPGA——Arduino MKR Vidor 4000 6807次阅读
- 光照对于植物生长的影响——光合作用和光敏色素 3.4w次阅读
- 细说WiFi信号与路由器和WiFi模块的关系 1.2w次阅读
- wifi功率和发射功率的区别_怎么将路由器wifi加到最大功率 8.1w次阅读
- 自制WiFi中继器方法详解 3.7w次阅读
- 植物补光灯哪种好 3.7w次阅读
- led植物生长灯有用吗 1.3w次阅读
- 如何自制植物生长灯_自制植物生长灯步骤 4.3w次阅读
- 双频wifi是什么意思_双频wifi的优点 2.7w次阅读
- 用于植物的土壤加热器 3770次阅读
下载排行
本周
- 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次下载 | 免费
评论
查看更多