如果您在自己的地方養(yǎng)了一只寵物,并且在您不在的時候沒有人在正確的時間喂他/她。因此,我們正在構(gòu)建一個簡單、高效且經(jīng)濟(jì)的基于物聯(lián)網(wǎng)的寵物喂食器。使用這款自動寵物喂食器,您可以在世界任何地方使用Blynk 移動應(yīng)用程序或 Web 儀表板喂養(yǎng)您的寵物。您只需按一個按鈕或設(shè)置一個時間,其余的任務(wù)將由這臺機(jī)器完成。在這個項目中,我們使用NodeMCU ESP8266作為主控制器,使用伺服電機(jī)來操作寵物喂食器和 NTP 服務(wù)器來獲取當(dāng)前時間。
構(gòu)建寵物喂食器所需的組件
NodeMCU ESP8266
伺服電機(jī)
自動寵物喂食器電路圖
自動寵物喂食器的完整示意圖如下:
連接非常簡單,因為我們只是將伺服電機(jī)與 NodeMCU 連接起來。Servo 的 Vcc(紅線)和 GND(棕線)引腳連接到 NodeMCU 的 3.3V 和 GND,而 Servo 的信號引腳(黃線)連接到 NodeMCU 的 D3 引腳。
為寵物喂食器配置 Blynk
Blynk 是一套完整的軟件,用于對任何規(guī)模的連接設(shè)備進(jìn)行原型設(shè)計、部署和遠(yuǎn)程管理,從小型物聯(lián)網(wǎng)項目到數(shù)百萬商業(yè)可用的連接項目。它可用于將硬件連接到云并構(gòu)建無代碼 iOS、Android 和 Web 應(yīng)用程序,以分析來自設(shè)備的實時和歷史數(shù)據(jù),從全球任何地方遠(yuǎn)程控制它們,接收重要通知等等。 在這個項目中,我們將使用 Blynk 移動應(yīng)用程序來控制連接到寵物喂食器設(shè)置的伺服電機(jī)。
首先,我們必須為Blynk Cloud平臺創(chuàng)建一個新帳戶,或者如果您已有舊帳戶,您可以使用舊帳戶。登錄到您的帳戶后,您必須創(chuàng)建一個模板,您可以在其中添加多個設(shè)備。為此,請單擊右上角的“+ 新模板”按鈕。
將彈出一個窗口,您必須在其中輸入模板名稱、硬件類型和連接類型。模板名稱可以是與您的項目相關(guān)的任何名稱,硬件類型是您正在使用的微控制器板,連接類型是 Wi-Fi。
現(xiàn)在在模板中,我們可以添加多個信息,如設(shè)備信息、元數(shù)據(jù)、DataStream、事件等。在接下來的步驟中,我們將一一填寫這些詳細(xì)信息。因此,第一個選項卡是設(shè)備信息,將其保留為默認(rèn)值。
然后第二個選項卡是元數(shù)據(jù)。元數(shù)據(jù)是我們提供給項目的附加信息,例如設(shè)備名稱、設(shè)備所有者等。這不是強(qiáng)制性的,您可以根據(jù)需要添加填寫這些內(nèi)容。
下一個選項卡是“DataStream”。數(shù)據(jù)流是一種結(jié)構(gòu)化數(shù)據(jù)的方法,這些數(shù)據(jù)定期流入和流出設(shè)備。在這里,我們將創(chuàng)建兩個數(shù)據(jù)流,一個用于控制伺服,另一個用于從 blynk 應(yīng)用程序獲取計時器數(shù)據(jù)。要創(chuàng)建 DataStream,請單擊“+New Datastream”按鈕,然后選擇Virtual Pin。
將彈出一個窗口,您必須在其中輸入數(shù)據(jù)流名稱、虛擬引腳和數(shù)據(jù)類型。在此之后單擊“創(chuàng)建”按鈕并按照相同的過程創(chuàng)建數(shù)據(jù)流以獲取計時器值。
完成此操作后,保留“事件”選項卡并移至“Web 儀表板”選項卡。在 blynk 2.0 中,我們有兩種類型的儀表板,即 Web 儀表板和移動儀表板。兩個儀表板都可以單獨配置和使用。Web Dashboard 的小部件數(shù)量有限。您可以添加一個開關(guān)進(jìn)行測試。
完成此操作后,下一個選項卡是移動儀表板。移動儀表板只能在移動設(shè)備上配置。所以在移動到移動端之前,首先將所有更改保存在云端。為此,請單擊右上角的保存按鈕。
現(xiàn)在我們剩下編碼部分和移動儀表板。首先,我們將使用編碼部分。
為寵物喂食器編程 NodeMCU
該項目的完整代碼在文檔末尾給出。在這里,我們將解釋一些重要的代碼行。因此,像往常一樣通過包含所有必需的庫文件來啟動代碼。BlynkEdgent.h是 Blynk 2.0 平臺的新庫?!癗TPClient.h”用于從 NTP 服務(wù)器獲取時間和日期數(shù)據(jù)?!癢iFiUdp.h”庫用于處理UDP協(xié)議,如打開UDP端口,發(fā)送和接收UDP數(shù)據(jù)包等。而“Servo.h”用于控制伺服電機(jī)。
#include “BlynkEdgent.h” #include#include #include #include <伺服.h>
然后在接下來的行中輸入 Blynk 模板 ID 和 Blynk 設(shè)備 ID。這些 ID 可以從 Blynk 云平臺上的“設(shè)備信息”頁面復(fù)制。
#define BLYNK_TEMPLATE_ID "TMPLrKGv1gYp" #define BLYNK_DEVICE_NAME "寵物喂食器"
然后在下一行為 NTP 客戶端創(chuàng)建一個實例。在這個實例中,我們必須指定我們希望使用的 NTP 服務(wù)器的地址。
NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", utcOffsetInSeconds);
BLYNK_WRITE()函數(shù)用于檢查 V0 和 V1 虛擬引腳的傳入數(shù)據(jù)。虛擬引腳 V0 用于接收開關(guān)狀態(tài),而 V1 引腳用于從 Blynk 應(yīng)用程序獲取定時器數(shù)據(jù)。
BLYNK_WRITE(V0) { int 數(shù)據(jù) = param.asInt(); 如果(數(shù)據(jù) == 1){ 伺服_1.write(45);// 伺服將移動到 45 度角。 延遲(1000); 伺服_1.write(90);//伺服將移動到90度角。 } } BLYNK_WRITE(V1){ time_blynk = param.asInt(); }
在設(shè)置部分,我們首先以 115200 的波特率初始化串行通信,并啟動 Blynk 和時間客戶端通信。
無效設(shè)置() { 序列號.開始(115200); 延遲(100); BlynkEdgent.begin(); 伺服_1.attach(0); timeClient.begin(); }
現(xiàn)在在循環(huán)函數(shù)中,我們首先從 NTP 客戶端-服務(wù)器獲取時間數(shù)據(jù),然后將這些數(shù)據(jù)存儲在 HH 和 MM 變量中。我們從 NTP 客戶端獲取的時間數(shù)據(jù)是 24 小時格式,所以首先我們將其更改為 12 小時格式,然后我們以秒為單位轉(zhuǎn)換小時和分鐘數(shù)據(jù),以將其與我們從 Blynk 接收的計時器數(shù)據(jù)進(jìn)行比較應(yīng)用程序。如果當(dāng)前時間和從 Blynk 應(yīng)用程序接收到的時間相同,則寵物喂食器將在特定時間段內(nèi)打開和關(guān)閉。
無效循環(huán)(){ timeClient.update(); HH = timeClient.getHours(); 國際小時= HH; 如果(小時 == 0)小時 = 12; 如果(小時 > 12)小時 = 小時 - 12; MM = timeClient.getMinutes(); final_time = 3600*小時+ 60*MM; 如果(time_blynk == final_time){ } BlynkEdgent.run(); }
現(xiàn)在選擇“ NodeMCU ”的板類型和連接NodeMCU的端口并上傳代碼?,F(xiàn)在完成此操作后,我們就剩下了 Blynk 移動應(yīng)用程序,并將 Wi-Fi 憑據(jù)添加到 NodeMCU。
配置 Blynk 移動應(yīng)用程序
第一步是從 Play 商店下載 Blynk 應(yīng)用程序,然后創(chuàng)建一個新帳戶。如果您有一個現(xiàn)有帳戶,您也可以使用現(xiàn)有帳戶登錄。現(xiàn)在您必須啟用開發(fā)者模式。開發(fā)人員是一個特殊用戶,他可以訪問配置平臺以供最終用戶使用所需的所有功能。要啟用開發(fā)者模式,請單擊左上角的“個人資料”圖標(biāo),然后啟用開發(fā)者模式。
之后,您需要單擊添加新設(shè)備按鈕并將 NodeMCU 板靠近手機(jī)并單擊就緒按鈕。
它會自動找到NodeMCU板創(chuàng)建的熱點。連接到該熱點,然后您可以輕松輸入路由器的 Wi-Fi 憑據(jù)。之后單擊繼續(xù),它將 Wi-Fi 憑據(jù)發(fā)送到 NodeMCU 板,我們完成了將 Wi-Fi 憑據(jù)添加到板。
創(chuàng)建 Blynk 移動儀表板
現(xiàn)在我們完成了配置 Blynk 移動儀表板的最后一步。為此,請轉(zhuǎn)到您剛剛創(chuàng)建的設(shè)備,然后單擊菜單圖標(biāo),您將看到所有可用的小部件。
在這里,我們將添加兩個小部件,即 Button 和 Timer 小部件。按鈕小部件用于手動控制伺服,而計時器小部件用于設(shè)置特定操作的時間。
現(xiàn)在點擊按鈕小部件進(jìn)行配置。在這里,您必須選擇我們在 Blynk 云上創(chuàng)建的數(shù)據(jù)流。之后點擊計時器小部件并選擇數(shù)據(jù)流。您還可以更改其他設(shè)置,如小部件名稱、顏色等。
現(xiàn)在我們已經(jīng)成功配置了 Blynk Mobile 儀表板,下一步是構(gòu)建 Pet Feeder 設(shè)置。
構(gòu)建寵物喂食器設(shè)置
為了制造一個自動貓喂食器,我們從亞馬遜訂購了一個寵物喂食器盒,并對其進(jìn)行了修改以適應(yīng)伺服系統(tǒng)和其他電子設(shè)備。直流電機(jī)放置在盒子內(nèi),并附有一個 3D 打印齒輪。NodeMCU 板放置在盒子的底部,這個完整的設(shè)置使用 12V 適配器供電。
測試自動寵物喂食器
現(xiàn)在我們已經(jīng)準(zhǔn)備好了一切,讓我們繼續(xù)測試這個寵物喂食器設(shè)置。為此,我在寵物喂食器的盒子里裝滿了貓糧,為了進(jìn)行測試,我使用安裝在我手機(jī)上的 Blynk 應(yīng)用程序作為遙控器來檢查我們的寵物喂食器是否正在分配食物。我一打開設(shè)置,寵物喂食器就開始以可控的速度分配貓糧。
除了開關(guān),我們還可以使用 Blynk 應(yīng)用程序的計時器小部件設(shè)置喂貓的時間。完整的測試過程顯示在頁面底部的視頻中。希望你理解這篇文章并學(xué)到新的東西。如果您有任何疑問,請將它們放在下面的評論部分。
代碼
// 在此處填寫來自您的 Blynk 模板的信息
#define BLYNK_TEMPLATE_ID "TMPLrKGv1gYp" #define BLYNK_DEVICE_NAME "寵物喂食器" #define BLYNK_FIRMWARE_VERSION "0.1.0" #define BLYNK_PRINT 序列號 //#define BLYNK_DEBUG #define APP_DEBUG // 取消注釋您的板,或在 Settings.h 中配置自定義板 //#define USE_SPARKFUN_BLYNK_BOARD //#define USE_NODE_MCU_BOARD //#define USE_WITTY_CLOUD_BOARD //#define USE_WEMOS_D1_MINI #include “BlynkEdgent.h” #include#include #include //#include // 包括伺服庫。 常量長 utcOffsetInSeconds = 19800; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", utcOffsetInSeconds); int HH,MM,final_time; int time_blynk,數(shù)據(jù); //伺服servo_1; #定義電機(jī)D0 BLYNK_WRITE(V0) { 數(shù)據(jù) = param.asInt(); } BLYNK_WRITE(V1) { time_blynk = param.asInt(); Serial.print(time_blynk); //Serial.print("有時間"); } 無效設(shè)置() { 序列號.開始(115200); 延遲(100); BlynkEdgent.begin(); pinMode(電機(jī),輸出); 數(shù)字寫入(電機(jī),低); //servo_1.attach(0); timeClient.begin(); } 無效循環(huán)(){ timeClient.update(); HH = timeClient.getHours(); //Serial.print(timeClient.getHours()); 國際小時= HH; 如果(小時 == 0)小時 = 12;// 午夜 如果(小時 > 12)小時 = 小時 - 12; //Serial.print(小時); //Serial.print(":"); MM = timeClient.getMinutes(); // Serial.println(timeClient.getMinutes()); final_time = 3600*小時+ 60*MM; // Serial.println(final_time); 如果(time_blynk == final_time){ 數(shù)字寫入(電機(jī),低); 延遲(3000); 數(shù)字寫入(電機(jī),高); } 如果(數(shù)據(jù) == 1){ 數(shù)字寫入(電機(jī),高); 延遲(5000); 數(shù)字寫入(電機(jī),低); Serial.print("開幕"); } 延遲(6000); BlynkEdgent.run(); }
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44736瀏覽量
374464 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45128 -
喂食器
+關(guān)注
關(guān)注
1文章
24瀏覽量
3111
發(fā)布評論請先 登錄
相關(guān)推薦
評論