谷歌助手使用NodeMCU控制基于物聯(lián)網(wǎng)的寵物喂食器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
如果你家里有一只寵物,當(dāng)你離開家的時(shí)候,你沒有人喂它,那么你肯定需要某種機(jī)器來(lái)做這項(xiàng)工作。因此,我們正在構(gòu)建一個(gè)簡(jiǎn)單,高效且具有成本效益的物聯(lián)網(wǎng)寵物喂食機(jī)。使用這臺(tái)機(jī)器,你可以喂你的寵物谷歌助手從世界任何地方。你只需要說(shuō):“好的,谷歌。喂我的寵物”和其他的事情將由這臺(tái)機(jī)器完成。你也可以設(shè)置一個(gè)特定的時(shí)間使用谷歌助手喂養(yǎng)你的寵物。例如,說(shuō)“好的,谷歌?!拔刮业膶櫸锝裉煸缟稀?,它會(huì)在事先指定的時(shí)間喂你的寵物。像這樣,你也可以為中午和晚上設(shè)定一個(gè)特定的時(shí)間。
在這個(gè)項(xiàng)目中,我們使用了一個(gè)NodeMCU ESP8266作為主控制器,一個(gè)伺服電機(jī)來(lái)打開和關(guān)閉喂瓶,一個(gè)16*2的LCD來(lái)顯示時(shí)間。我們將從NTP服務(wù)器獲取時(shí)間。這里我們使用NTP服務(wù)器來(lái)減少硬件組件,而不是使用RTC模塊來(lái)處理時(shí)間和日期。與RTC相比,NTP服務(wù)器是獲得時(shí)間的更好解決方案,因?yàn)樗鼫?zhǔn)確,可以提供世界上任何地理區(qū)域的時(shí)間。這里是建立一個(gè)互聯(lián)網(wǎng)時(shí)鐘的完整教程。
組件的要求
?NodeMCU ESP8266
?16x2液晶顯示模塊
?LCD I2C模塊
?伺服電機(jī)
線路圖
下面給出了這個(gè)基于物聯(lián)網(wǎng)的寵物喂食器項(xiàng)目的電路圖。在這個(gè)電路圖中,一個(gè)伺服電機(jī)和LCD模塊與NodeMCU ESP8266連接。
伺服電機(jī)和LCD I2C模塊的Vcc和GND引腳與NodeMCU的Vin和GND引腳相連。I2C模塊的SCL和SDA引腳分別與NodeMCU的D1和D2引腳相連。
這里我們使用了一個(gè)塑料瓶作為寵物食品容器:
Adafruit IO設(shè)置物聯(lián)網(wǎng)寵物喂食器
Adafruit IO是一個(gè)開放的數(shù)據(jù)平臺(tái),允許您在云中聚合、可視化和分析實(shí)時(shí)數(shù)據(jù)。使用Adafruit IO,您可以在互聯(lián)網(wǎng)上上傳,顯示和監(jiān)控?cái)?shù)據(jù),并使您的項(xiàng)目啟用物聯(lián)網(wǎng)。您可以使用Adafruit IO控制電機(jī),讀取傳感器數(shù)據(jù),并通過(guò)互聯(lián)網(wǎng)制作酷的物聯(lián)網(wǎng)應(yīng)用程序。為了測(cè)試和嘗試,有一些限制,Adafruit IO是免費(fèi)使用的。我們以前也在樹莓派上使用過(guò)Adafruit IO。
1. 對(duì)于Adafruit IO設(shè)置,您需要做的第一件事是注冊(cè)Adafruit IO。登錄Adafruit IO的網(wǎng)站,點(diǎn)擊屏幕右上方的“Get started for Free”即可注冊(cè)。
2. 在此之后,將彈出一個(gè)窗口,您需要在其中填寫詳細(xì)信息
在注冊(cè)窗口填寫您的詳細(xì)信息,如您的姓名,郵件id,用戶名等。然后點(diǎn)擊保存設(shè)置,你的賬戶就創(chuàng)建好了。要獲得你的AIO密鑰,點(diǎn)擊“查看AIO密鑰”。
3. 一個(gè)窗口將彈出與您的Adafruit IO AIO密鑰。復(fù)制此鍵,稍后在代碼中需要它。
4. 現(xiàn)在,在此之后,您需要?jiǎng)?chuàng)建一個(gè)提要。要?jiǎng)?chuàng)建提要,請(qǐng)單擊“feed”。然后點(diǎn)擊“Actions”,你會(huì)看到一些選項(xiàng),點(diǎn)擊“Create a New Feed”。
5. 在此之后,將打開一個(gè)新窗口,您需要輸入:
名稱-在名稱中,選擇為提要寫一個(gè)簡(jiǎn)短的描述性名稱。你可以用
字母、數(shù)字和空格。
描述-對(duì)數(shù)據(jù)的長(zhǎng)格式描述。這個(gè)字段不是必需的,但是你
可以寫你的數(shù)據(jù)的描述。
6. 點(diǎn)擊“創(chuàng)建”,你將被重定向到你的新提要。
IFTTT設(shè)置物聯(lián)網(wǎng)寵物喂食器
IFTTT又名“If This Then That”,是一個(gè)免費(fèi)的基于網(wǎng)絡(luò)的服務(wù),用于創(chuàng)建簡(jiǎn)單條件語(yǔ)句鏈,稱為applet。IFTTT允許用戶創(chuàng)建觸發(fā)器并基于這些觸發(fā)器執(zhí)行操作。
在這個(gè)物聯(lián)網(wǎng)貓喂食器項(xiàng)目中,當(dāng)我們使用谷歌助手說(shuō)出特定的線路時(shí),我們使用IFTTT來(lái)創(chuàng)建觸發(fā)器。為此,我們必須創(chuàng)建一個(gè)applet,我們將在其中集成谷歌助理與Adafruit IO。我們以前使用谷歌助手來(lái)構(gòu)建物聯(lián)網(wǎng)項(xiàng)目。
首先,在IFTTT上創(chuàng)建一個(gè)帳戶。要做到這一點(diǎn),請(qǐng)瀏覽IFTTT網(wǎng)站并點(diǎn)擊注冊(cè)。然后填寫所需的詳細(xì)信息并單擊“創(chuàng)建帳戶”。
現(xiàn)在,當(dāng)你登錄你的賬戶時(shí),點(diǎn)擊你的個(gè)人資料,然后點(diǎn)擊“創(chuàng)建”。
注意:使用與Android手機(jī)谷歌帳戶相同的電子郵件ID登錄IFTTT。例如,如果您的手機(jī)使用xyz@gmail.com電子郵件ID登錄,那么使用相同的電子郵件ID登錄IFTTT。
現(xiàn)在用If ' This ' Than ' That創(chuàng)建一個(gè)小程序。這里的“This”是服務(wù)名,我們將通過(guò)它提供輸入,而“That”將根據(jù)輸入生成觸發(fā)器。所以在這個(gè)項(xiàng)目中,我們將使用Google Assistant作為“this”,而Adafruit IO作為“That”。
因此,要?jiǎng)?chuàng)建一個(gè)applet,請(qǐng)單擊“This”圖標(biāo)。然后搜索b谷歌助手。在這里,IFTTT將請(qǐng)求允許使用您的谷歌帳戶。
現(xiàn)在在谷歌助手中點(diǎn)擊“說(shuō)一個(gè)簡(jiǎn)單的短語(yǔ)”。
現(xiàn)在在下一個(gè)窗口中,它會(huì)詢問你想對(duì)谷歌助手說(shuō)的短語(yǔ),以及你想聽到什么作為對(duì)該短語(yǔ)的回應(yīng)。你也可以添加一些可選的短語(yǔ)?,F(xiàn)在單擊Create Trigger。
現(xiàn)在,這個(gè)applet的一部分已經(jīng)完成。對(duì)于第二部分,點(diǎn)擊“That”。
現(xiàn)在在搜索窗口中,搜索Adafruit
在下一個(gè)窗口中,選擇要為其創(chuàng)建觸發(fā)器的提要名稱,然后輸入在說(shuō)出指定短語(yǔ)時(shí)要發(fā)送到提要的單詞/數(shù)據(jù)。之后點(diǎn)擊“Create Action”。之后,它會(huì)讓你點(diǎn)擊finish按鈕來(lái)完成設(shè)置?,F(xiàn)在applet就可以使用了。
當(dāng)我們對(duì)谷歌助手說(shuō)一句話時(shí),這個(gè)小程序就會(huì)給寵物喂食。
現(xiàn)在我們將創(chuàng)建另一個(gè)applet,通過(guò)這個(gè)applet,我們可以在特定的時(shí)間通過(guò)說(shuō)一個(gè)帶有文本的短語(yǔ)來(lái)喂養(yǎng)我們的寵物,例如,“Ok Google喂養(yǎng)我的寵物今天早上?!蓖ㄟ^(guò)使用這個(gè)小程序,我們可以在特定時(shí)間向ESP8266發(fā)送觸發(fā)器。對(duì)于這個(gè)小程序,請(qǐng)遵循相同的步驟:?jiǎn)螕魀rofile,然后單擊“Create”。之后,在“This”選項(xiàng)中選擇“Google assistant”?,F(xiàn)在在谷歌助手點(diǎn)擊“說(shuō)一個(gè)文本成分的短語(yǔ)”。
在下一個(gè)窗口中,單擊“That”并選擇Adafruit。在Adafruit中,選擇與前一個(gè)applet相同的feed名稱。然后點(diǎn)擊“Create action”和“Finish”來(lái)完成這個(gè)過(guò)程
代碼的解釋
這個(gè)寵物喂食器的完整代碼以及演示視頻在這個(gè)項(xiàng)目的最后給出,在這里我們解釋它的幾個(gè)部分。
通過(guò)包含此項(xiàng)目所需的所有庫(kù)開始編寫代碼。Arduino IDE預(yù)裝了用于伺服電機(jī)和LCD模塊的庫(kù)。但是你必須從下面給出的鏈接下載并安裝其余的庫(kù):
?Adafruit MQTT
?NTP Client
?Wire.h
為了從NTP服務(wù)器獲得準(zhǔn)確的時(shí)間,需要初始化服務(wù)器位置。這里我使用的是“pool.ntp.org”,這是一個(gè)全球服務(wù)器池。
在這部分代碼中,我們定義了Adafruit服務(wù)器地址、端口號(hào)、Adafruit帳戶用戶名和您從Adafruit帳戶復(fù)制的唯一AIO密鑰。這用于在ESP和Adafruit IO之間建立MQTT連接。
在這部分代碼中,使用前面的信息設(shè)置MQTT和WiFi客戶機(jī),即adafruit用戶名、AIO密鑰、服務(wù)器地址和端口號(hào)。
現(xiàn)在我們用名稱“onoff”設(shè)置提要并訂閱它。
timeClient.begin ();函數(shù)用于啟動(dòng)NTP客戶端,以便它可以向ESP8266發(fā)送數(shù)據(jù)。
在void循環(huán)中,timeClient.update()函數(shù)用于在我們向NTP服務(wù)器請(qǐng)求時(shí)更新日期和時(shí)間。獲取數(shù)據(jù)后,我們將小時(shí)、分鐘和秒存儲(chǔ)為三個(gè)不同的整數(shù)。
這里我們直接檢查訂閱提要中的特定單詞,如果該單詞與我們指定的單詞匹配,即‘ ON ’,它將調(diào)用open_door()和close_door()函數(shù)。
通過(guò)使用if條件為“Morning”、“Afternoon”和“Evening”字符串指定特定的時(shí)間。之后,使用另一個(gè)if條件來(lái)匹配當(dāng)前時(shí)間和饋送時(shí)間。因此,每當(dāng)我們說(shuō)“喂我的寵物今天早上”時(shí),它將在當(dāng)前時(shí)間等于10:30時(shí)調(diào)用open_door()和close_door()函數(shù)。對(duì)于“Evening”和“Afternoon”字符串將遵循相同的過(guò)程。
Void open_door()和Void close_door()函數(shù)用于向伺服電機(jī)發(fā)送打開活板門的命令。開角定義為60°,閉角定義為0°。
物聯(lián)網(wǎng)寵物喂食器的工作原理
將代碼上傳到NodeMCU后,當(dāng)前時(shí)間和饋入時(shí)間將顯示在16*2的LCD上。最初,它將顯示0:0的飼料時(shí)間,因?yàn)槲覀儧]有輸入任何飼料時(shí)間?,F(xiàn)在說(shuō)“好的,谷歌。把我的寵物喂給你的谷歌助手。谷歌助手會(huì)識(shí)別出這個(gè)短語(yǔ),并回答“喂你的寵物”。之后,它將伺服電機(jī)從其初始位置0?旋轉(zhuǎn)到60?,并在延遲后返回到其初始位置。你也可以在特定的時(shí)間喂你的寵物。為此,我們使用了三個(gè)字符串,即“Morning”,“Afternoon”和“Evening”。這些字符串被分配了不同的時(shí)間,所以當(dāng)你說(shuō)“今天早上喂我的寵物”時(shí),它會(huì)把分配給“早上”字符串的時(shí)間作為喂食時(shí)間,當(dāng)輸入的時(shí)間與當(dāng)前時(shí)間匹配時(shí),它會(huì)將伺服電機(jī)從初始位置0?旋轉(zhuǎn)到60?,并在延遲后返回到初始位置。
這是如何使用谷歌助手喂養(yǎng)你的寵物。如果你想在特定的時(shí)間喂你的寵物,而不是早上、下午和晚上,去IFTTT,把谷歌助手的設(shè)置從“說(shuō)一個(gè)帶文字成分的短語(yǔ)”改成“說(shuō)一個(gè)帶數(shù)字的短語(yǔ)”。
本文編譯自iotdesignpro