資料介紹
介紹
正如英國詩人威廉·華茲華斯曾經(jīng)說過的:
“你的思想是花園,你的思想是種子,收獲可以是花朵或雜草。
“讓你的植物保持活力可能是一個相當大的挑戰(zhàn),因為它們非常不善于溝通。讓它們開心的一種方法是把你的植物帶在身邊,但也許你不想帶著那個大仙人掌到處走走,或者蕨類植物從你的冬季夾克口袋里伸出來。
此外,大多數(shù)植物不喜歡寒冷。在花了幾個月的時間嘗試與我們的蜘蛛植物進行通信后,我們放棄并使用 MKR IoT Bundle 組件創(chuàng)建了一個可以遠程調(diào)查任何植物健康狀況的設(shè)備。
簡而言之
在這個實驗中,您將學(xué)習(xí)如何保護您的植物并確保它們能夠生存以及如何使用 Arduino 魔法。
通過監(jiān)測濕度、溫度和光照,您可以確保您的植物生長良好。
它可以每天發(fā)送電子郵件和圖表,并通知您它的需求。
成分
- TMP36溫度傳感器
學(xué)習(xí)目標
- 介紹 Zapier 互聯(lián)網(wǎng)服務(wù)
- 發(fā)送 HTTP 請求
- 管理實時時鐘和鬧鐘
- 構(gòu)建一個 DIY 濕度傳感器
- 使用 thingSpeak #ProTips繪制值
- 使用 HTML 和 CSS #ProTips為您的電子郵件設(shè)置樣式
- 使用 PostMan #ProTips測試 API
想知道更多?
本教程是讓您熟悉 MKR WiFI 1010 和 IoT 的一系列實驗的一部分。所有實驗都可以使用 MKR IoT Bundle 中包含的組件構(gòu)建。
- 帶有 MKR WiFi 1010 的植物通訊器
設(shè)置 Zapier
Zapier是一款在線自動化工具,可以方便地為我們管理其他應(yīng)用的 API。它是組合多個任務(wù)的好工具,或者如果我們要使用的應(yīng)用程序具有無法由 Arduino 管理的復(fù)雜 API。
在我們的例子中,我們將使用它發(fā)送一封電子郵件,其中包含從 Arduino 檢索到的數(shù)據(jù)。
按照這幾個簡單的步驟來創(chuàng)建自己的 zap!
為了繼續(xù),我們需要先復(fù)制給定的 URL 來測試我們的鉤子,然后選擇按下 Continue 時出現(xiàn)的 Test and Review 按鈕。將這些參數(shù)添加到 URL:
Custom_Webhook_URL?temperature=0&moisture=0&light=0&warning=0
現(xiàn)在只需將此 URL 復(fù)制并粘貼到新的瀏覽器頁面上。您應(yīng)該會看到如下響應(yīng):
恭喜!您剛剛發(fā)送了一個http 請求!
這正是我們將使用我們的 Arduino 板做的事情。但是,我們不會將該 URL 粘貼到瀏覽器頁面中,而是將其直接發(fā)送到 Zapier 服務(wù)器。此外,我們將使用我們的傳感器值修改現(xiàn)在設(shè)置為零的參數(shù)值。
有關(guān)測試和使用 API 的更高級方法,請查看頁面底部的#ProTip 。
測試您的請求后,您可以繼續(xù)創(chuàng)建 Zap。
繼續(xù)編輯執(zhí)行此操作...
檢查您的郵箱以查看 Zapier 生成的電子郵件。它將來自您在 gmail 配置的第一步中使用的帳戶。
設(shè)立董事會
為了實現(xiàn)所有功能,我們將使用以下庫:
- WiFiNINA // 連接到互聯(lián)網(wǎng)并掃描網(wǎng)絡(luò)
- RTCZero // 管理時間觸發(fā)事件
發(fā)送 HTTP 請求
我們現(xiàn)在準備從 Arduino 板發(fā)送 HTTP 請求。現(xiàn)在我們將為我們的參數(shù)設(shè)置一個任意值,稍后將用真實的傳感器值替換。
float temperature = 22;
int moisture = 150;
int light = 40;
String warning = "This is a warning message";
warning.replace(" ", "%20");
請注意,必須對字符串進行編碼,因為不能在 HTTP 請求中發(fā)送空格。所有空格都替換為編碼的等價物%20
設(shè)置好參數(shù)后,我們將調(diào)用該send_email()
函數(shù),它將所有參數(shù)轉(zhuǎn)換為字符串,并重建我們之前使用的相同 URL,然后將其發(fā)布到 Zapier 服務(wù)器。
使用您的 WiFi 憑據(jù)和您從 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 秒向您選擇的地址發(fā)送一封電子郵件。
請注意請求,Zapier 每月只允許您 100 個免費請求。
RTC 和警報
我們可以使用 MKR WiFi 1010 的實時時鐘在每天的某個時間發(fā)送一封電子郵件。
此草圖將時間和日期設(shè)置為 2017 年 12 月 4 日 16:00,然后在每天 16:01 觸發(fā)警報。
請注意,由于警報附加到中斷函數(shù),我們不能包含任何延遲,但我們可以使用布爾變量來觸發(fā)循環(huán)()中的動作
#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土壤濕度傳感器
放置在土壤盆中的兩根電線形成一個可變電阻器,其電阻根據(jù)土壤濕度而變化。該可變電阻器以分壓器配置連接,Arduino 收集與 2 根導(dǎo)線之間的電阻成比例的電壓。這意味著土壤越潮濕,Arduino 測量的電壓越小。使用1 兆歐電阻和兩根電線,我們可以創(chuàng)建自己的 DIY 土壤濕度傳感器!
上傳以下草圖,您可以開始讀取傳感器的值,我們建議您先在干燥的土壤中開始測試,并記下您讀取的值。
該值將用于設(shè)置閾值,以便 Arduino 知道您的植物何時需要水并向您發(fā)送緊急電子郵件。
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;
}
添加溫度和光傳感器
請參閱下面的示意圖來連接兩個傳感器。我們將使用這兩個函數(shù)從傳感器讀取值:
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 繪制值
對于你們所有的控制狂來說,這里是把收集到的所有數(shù)據(jù)繪制成一個漂亮的圖表的說明,如下所示:
我們將使用 ThingSpeak 平臺繪制圖表,按照以下步驟開始。
下載ThingSpeak庫,讓我們開始吧。下面的這個草圖將每分鐘將傳感器值上傳到云端,只需填寫您的 WiFi 憑據(jù)和您的頻道的 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 草圖中,您可以看到如何將此上傳附加到每分鐘觸發(fā)的 RTC 警報。
不幸的是,Gmail 不允許我們在電子郵件正文中嵌入圖表和iframe,但我們可以通過電子郵件以漂亮的按鈕發(fā)送鏈接,請參閱下面的提示。
我們選擇了 ThingSpeak,但還有很多選擇!以Dweet.io和freeboard.io為例。
#ProTip:樣式化您的電子郵件
Zapier 允許我們在電子郵件正文中嵌入一些 html 和 css 代碼。我們可以使用它來發(fā)送非常風(fēng)格化的電子郵件,如下所示:
要實現(xiàn)這個結(jié)果,只需在 Zapier 界面上將正文類型更改為 html并添加您的自定義 HTML 和 CSS。
復(fù)制并粘貼此模板:
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 請求可能很困難,幸運的是有很多工具可以幫助我們構(gòu)建所需的 URL。Postman 就是一個很好的例子:
只需粘貼 Zapier 給出的初始 URL,添加參數(shù)并發(fā)送即可。它將打印出服務(wù)器的響應(yīng)并為您編寫 URL。
- MKR WiFi 1010 + MKR RS 485 Shield連接到Ignition
- 帶有土壤電容傳感器的Arduino植物監(jiān)視器
- 使用Arduino MKR1000通過WiFi進行HID攻擊
- MKR FOX 1200運動觸發(fā)器開源分享
- 在Arduino IoT Cloud的幫助下創(chuàng)建植物通訊器
- 帶有MKR Vidor 4000的LED排序器
- 帶MKR WiFi 1010的書呆子
- 使用Arduino Mkr Wifi 1010和Thincloud構(gòu)建連接燈的過程
- 帶有Arduino MKR1010和MKR RGB Shield的Otto Biped
- 將MQTT協(xié)議物聯(lián)網(wǎng)與Arduino MKR1010 WiFi結(jié)合使用
- 帶有NodeMCU的WiFi控制機器人
- 我愛你枕頭與MKR WiFi 1010開源分享
- 使用Grove Sensor的Arduino MKR1010和阿里云IoT
- GBU10005-THRU-GBU1010玻璃過橋整流器規(guī)格書 1次下載
- 基于ITM-MKR680Temperature Sensing的參考設(shè)計
- WiFi模塊常用的通訊接口 7116次閱讀
- 歐司朗推出的新型LED技術(shù)幫助植物生長促進綠色生態(tài) 772次閱讀
- LED如何在植物領(lǐng)域大展拳腳 2240次閱讀
- LED植物燈光譜的研究及應(yīng)用 6088次閱讀
- 基于WIFI通訊的低成本、低功耗甲醛監(jiān)測器設(shè)計詳解 1344次閱讀
- 簡評FPGA——Arduino MKR Vidor 4000 6807次閱讀
- 光照對于植物生長的影響——光合作用和光敏色素 3.4w次閱讀
- 細說WiFi信號與路由器和WiFi模塊的關(guān)系 1.2w次閱讀
- wifi功率和發(fā)射功率的區(qū)別_怎么將路由器wifi加到最大功率 8.1w次閱讀
- 自制WiFi中繼器方法詳解 3.7w次閱讀
- 植物補光燈哪種好 3.7w次閱讀
- led植物生長燈有用嗎 1.3w次閱讀
- 如何自制植物生長燈_自制植物生長燈步驟 4.3w次閱讀
- 雙頻wifi是什么意思_雙頻wifi的優(yōu)點 2.7w次閱讀
- 用于植物的土壤加熱器 3770次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多