物聯(lián)網(wǎng)具有巨大的DIY潛力。有了足夠的專業(yè)知識和少量廉價的組件,您就可以構(gòu)建一個復(fù)雜的連接設(shè)備系統(tǒng)。
有時候,您想要簡單的東西。沒有鐘聲或口哨聲,只需執(zhí)行一個任務(wù)的按鈕即可。如果您曾經(jīng)使用Amazon Dash按鈕對日常家用物品進(jìn)行重新排序,那么您可能已經(jīng)熟悉這種情況。
今天,我們將使用NodeMCU制作一個啟用Wi-Fi的按鈕,并將其編程為使用IFTTT做。..好吧,任何事!如果需要,可以在視頻后提供書面說明。
您需要的內(nèi)容
您將需要:
1 x NodeMCU(ESP8266)板,可在速賣通上以2-3美元的價格購買
1 x按鈕
1 x LED(可選)
1 x 220歐姆電阻(可選)
面包板和連接線
用于編程的Micro USB
已安裝Arduino IDE的計(jì)算機(jī)
除了NodeMCU之外,您應(yīng)該能夠在任何Arduino入門套件中找到大多數(shù)這些部件。本教程將假定您使用的是可選的LED和電阻,但這不是必需的。
步驟1:設(shè)置電路
此項(xiàng)目的硬件設(shè)置非常簡單。
紫色線將引腳D0 連接到按鈕的一側(cè)。綠線將按鈕的另一端連接到 RST引腳。藍(lán)色導(dǎo)線從引腳D1 連接到電阻器和LED。 LED的負(fù)極連接到NodeMCU的 GND引腳。
設(shè)置試驗(yàn)板后,其外觀應(yīng)類似于:
如果您想知道我是如何僅使用這些細(xì)小的電纜將我的LED接地,那么我們的快速面包板崩潰過程應(yīng)該有助于清除它!檢查設(shè)置并通過USB將NodeMCU連接到計(jì)算機(jī)。
步驟2:設(shè)置IDE
在進(jìn)行編碼之前,您需要做一些準(zhǔn)備。如果尚未安裝,請?jiān)O(shè)置Arduino IDE以識別您的NodeMCU板。您可以通過文件》首選項(xiàng)將其添加到板列表中。
您可以找到有關(guān)此步驟的更詳細(xì)說明在我們的NodeMCU簡介文章中。
該項(xiàng)目需要兩個庫。導(dǎo)航到草圖》包含庫》管理庫。搜索Ivan Grokhotkov的 ESP8266WIFI 并將其安裝。編寫該庫是為了與NodeMCU板建立Wi-Fi連接。
下一步,搜索John Romkey的 IFTTTWebhook 并安裝最新的版。該庫旨在簡化向IFTTT發(fā)送Webhook的過程。
這就是我們需要的所有準(zhǔn)備工作,讓我們編寫代碼!
代碼的工作方式
我們將使用 ESP8266WIFI 庫建立Wi-Fi連接。 IFTTTWebhooks 庫向IFTTT發(fā)送請求-在這種情況下,將其發(fā)布到Twitter。然后,指示NodeMCU板在不使用時進(jìn)入睡眠狀態(tài)以節(jié)省電量。
按下按鈕時,它將鏈接 D0 和 RST 針腳。這將重置板,然后再次執(zhí)行該過程。
本教程中的大多數(shù)代碼對于初學(xué)者來說都足夠簡單。就是說,如果您是入門者,那么在遵循我們的Arduino初學(xué)者指南之后,您會發(fā)現(xiàn)它容易理解。
本教程分批遍歷代碼以幫助您理解。如果您想直接做生意,可以在Pastebin上找到完整的代碼。請注意,您仍然需要在此代碼中填寫Wi-Fi和IFTTT憑據(jù)才能使其正常工作!
步驟3:測試深度睡眠
我們將開始創(chuàng)建一個簡單的測試以顯示深度睡眠的工作原理。在Arduino IDE中打開一個新草圖。輸入以下兩個代碼塊。
#include
#include
#define ledPin 5
#define wakePin 16
#define ssid “YOUR_WIFI_SSID”
#define password “YOUR_WIFI_PASSWORD”
#define IFTTT_API_KEY “IFTTT_KEY_GOES_HERE”
#define IFTTT_EVENT_NAME “IFTTT_EVENT_NAME_HERE”
在這里,我們包括我們的庫,并定義了我們在草圖中需要的一些變量。您會注意到,與上面的Fritzing圖相比,此處的ledPin和akePin編號不同。 NodeMCU與Arduino開發(fā)板具有不同的引腳排列。不過,由于這個方便的圖表,這不是問題:
現(xiàn)在創(chuàng)建一個設(shè)置函數(shù):
void setup() {
Serial.begin(115200);
while(!Serial) {
}
Serial.println(“ ”);// print an empty line before and after Button Press
Serial.println(“Button Pressed”);
Serial.println(“ ”);// print an empty line
ESP.deepSleep(wakePin);
}
在這里,我們設(shè)置了串行端口,并使用while循環(huán)等待它開始。由于此代碼將在按下重置按鈕后觸發(fā),因此我們將“已按下按鈕” 打印到串行監(jiān)視器。然后,我們告訴NodeMCU進(jìn)入深度睡眠狀態(tài),直到按下連接 wakePin 和 RST 引腳的按鈕。
最后,為了進(jìn)行測試,將其添加到您的 loop()方法中:
void loop(){
//if deep sleep is working, this code will never run.
Serial.println(“This shouldn‘t get printed”);
}
通常,Arduino草圖在設(shè)置后會連續(xù)運(yùn)行循環(huán)功能。由于我們在設(shè)置結(jié)束之前就將電路板送入睡眠狀態(tài),因此循環(huán)永遠(yuǎn)不會運(yùn)行。
保存您的草圖并將其上傳到電路板上。打開串行監(jiān)視器,您應(yīng)該看到“已按下按鈕”。每次按鈕觸發(fā)時,電路板都會復(fù)位,并且消息會再次打印。
有關(guān)串行監(jiān)視器的注意事項(xiàng)
在某些情況下,您可能已經(jīng)注意到串行監(jiān)視器中的一些廢話字符您的項(xiàng)目。這通常是由于未將串行監(jiān)視器設(shè)置為與 Serial.begin(XXXX)速率相同的波特率。
許多指南建議以波特率啟動串行連接115200這樣的項(xiàng)目。我嘗試了許多組合,在串行消息前后,它們都有不同程度的亂碼。根據(jù)各種論壇的帖子,這可能是由于板故障或軟件兼容性問題造成的。因?yàn)樗粫?yán)重影響項(xiàng)目,所以我選擇假裝它沒有發(fā)生。
如果您在串行監(jiān)視器上遇到問題,請嘗試使用不同的波特率,看看哪種最適合您。
第4步:連接到Wi-Fi
現(xiàn)在創(chuàng)建一個用于連接到Wi-Fi網(wǎng)絡(luò)的功能。
void connectToWifi() {
Serial.print(“Connecting to: SSID NAME”); //uncomment next line to show SSID name
//Serial.print(ssid);
WiFi.begin(ssid, password);
Serial.println(“ ”);// print an empty line
Serial.print(“Attempting to connect: ”);
//try to connect for 10 seconds
int i = 10;
while(WiFi.status() != WL_CONNECTED && i 》=0) {
delay(1000);
Serial.print(i);
Serial.print(“, ”);
i--;
}
Serial.println(“ ”);// print an empty line
//print connection result
if(WiFi.status() == WL_CONNECTED){
Serial.print(“Connected.”);
Serial.println(“ ”);// print an empty line
Serial.print(“NodeMCU ip address: ”);
Serial.println(WiFi.localIP());
}
else {
Serial.println(“Connection failed - check your credentials or connection”);
}
}
此方法嘗試連接到您的網(wǎng)絡(luò)十次,中間間隔一秒鐘。連接成功或失敗會打印到串行監(jiān)視器。
第5步:調(diào)用連接方法
現(xiàn)在,永遠(yuǎn)不會調(diào)用 connectToWifi()。在“已按下按鈕”消息和使評估板進(jìn)入睡眠狀態(tài)之間,向您的設(shè)置功能添加一個呼叫。
connectToWifi();
如果您想知道適合的位置,它應(yīng)該看起來像
在草圖頂部,將 ssid 和 password 變量替換為您的Wi-Fi憑據(jù)。保存您的草圖并將其上傳到板上。
現(xiàn)在,在板啟動時,它將返回到設(shè)置功能之前嘗試連接到Wi-Fi網(wǎng)絡(luò)。現(xiàn)在,讓我們設(shè)置IFTTT集成。
步驟6:設(shè)置IFTTT集成
IFTTT允許與各種Web服務(wù)集成。我們在Wi-Fi PC塔式LED教程中使用了它,以便在收到新電子郵件時發(fā)送警報(bào)。今天,我們將使用它來按一下按鈕發(fā)送一條推文。
導(dǎo)航到我的小程序頁面,然后選擇新小程序
點(diǎn)擊 +此并連接到 Webhooks 。選擇“接收網(wǎng)絡(luò)請求” 并命名您的活動。 保持簡單!記下事件名稱,稍后需要將其添加到NodeMCU代碼中。點(diǎn)擊“創(chuàng)建觸發(fā)器” 。
現(xiàn)在選擇 +那個。搜索 Twitter 服務(wù)并連接到該服務(wù)-您需要授權(quán)該服務(wù)才能發(fā)布到您的Twitter帳戶。選擇“發(fā)布推文” 并選擇您的消息。
下一個屏幕將要求您查看該小程序。單擊完成。就是這樣!
步驟7:將IFTTT憑據(jù)添加到代碼中
返回Arduino IDE,您需要將IFTTT API密鑰和事件名稱添加到定義的變量中。要查找API密鑰,請導(dǎo)航至我的小程序,然后在服務(wù)標(biāo)簽下選擇 Webhooks 。選擇文檔來訪問密鑰。
將密鑰和事件名稱復(fù)制到代碼中,替換為其設(shè)置的臨時名稱。
#define IFTTT_API_KEY “IFTTT_KEY_GOES_HERE”
#define IFTTT_EVENT_NAME “IFTTT_EVENT_NAME_HERE”
請注意,逗號必須保留,只能替換文本。
在調(diào)用 connectToWifi()并將板子送入睡眠之間,創(chuàng)建一個IFTTTWebhook庫對象的實(shí)例。 LED會在深度睡眠再次開始之前發(fā)出任務(wù)完成的信號。
//just connected to Wi-Fi
IFTTTWebhook hook(IFTTT_API_KEY, IFTTT_EVENT_NAME);
hook.trigger();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
//now sending board to sleep
hook 對象上的調(diào)用觸發(fā)器會觸發(fā)IFTTT小程序,并應(yīng)發(fā)布到您的Twitter帳戶。保存您的草圖并上傳。現(xiàn)在,您應(yīng)該有一個功能齊全的推文按鈕。
如果它似乎不起作用,請仔細(xì)檢查您的代碼和憑據(jù)是否有錯誤。如果您確實(shí)遇到困難,請從上方獲取完整的代碼,然后將其與您自己的代碼進(jìn)行比較。
完成!您如何進(jìn)一步改進(jìn)?
這是Wi-Fi按鈕的基本版本,但是可以通過多種方法進(jìn)行改進(jìn)。為簡單起見,此處使用USB連接供電。電池將使它完全可以移動,而裝有電路的盒子將是完美的初學(xué)者3D打印項(xiàng)目。
盡管使用了深度睡眠,您可能會發(fā)現(xiàn)電池很快就會用完。有許多Arduino省電技巧可幫助此類項(xiàng)目。雖然比本教程要難得多,但是如果您從頭開始制作自己的節(jié)能意識的Arduino,那么電池供電的Wi-Fi按鈕可能會持續(xù)數(shù)月!
該項(xiàng)目將是智能遙控器的完美之選。家庭應(yīng)用程序。 IFTTT上已經(jīng)有大量的家庭自動化小程序。一旦掌握了基礎(chǔ)知識,就可以使用幾乎任何傳感器或開關(guān)來觸發(fā)幾乎可以想象的任何服務(wù)。
責(zé)任編輯:wv
-
wi-fi
+關(guān)注
關(guān)注
14文章
2169瀏覽量
125026 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45338
發(fā)布評論請先 登錄
相關(guān)推薦
【AI技術(shù)支持】ESP32無線Wi-Fi常用調(diào)試API
![【AI技術(shù)支持】<b class='flag-5'>ESP</b>32無線<b class='flag-5'>Wi-Fi</b>常用調(diào)試API](https://file.elecfans.com/web2/M00/45/DA/poYBAGKPGziABtawAAAYlXODTds073.jpg)
esp32和esp8266代碼共用嗎
esp8266和esp32區(qū)別是什么
esp8266不燒錄可以使用嗎
esp8266wifi模塊怎么連接手機(jī)
請問ESP8266可以用于Wi-Fi Direct嗎?
Wi-Fi bee esp8266按Dfrobots的實(shí)例完成后,串口總是返回“connect AP timeout”,為什么?
如何記住ESP8266中的Wi-Fi憑據(jù)?
Wi-Fi輕度睡眠周期性喚醒時間比預(yù)期的要長,為什么?
ESP8266使用PWM庫時,它導(dǎo)致esp-homekit客戶端斷開連接,怎么解決?
為什么ESP8266沒有檢測到Wi-Fi的SSID?
開源項(xiàng)目!用ESP8266 DIY會爬墻的無人機(jī)
國產(chǎn)低成本Wi-Fi SoC解決方案芯片ESP8266與ESP8285對比差異
![國產(chǎn)低成本<b class='flag-5'>Wi-Fi</b> SoC解決方案芯片<b class='flag-5'>ESP8266</b>與<b class='flag-5'>ESP</b>8285對比差異](https://file1.elecfans.com/web2/M00/E6/5C/wKgZomZG0KiASP_yAAELgTM0cRs433.png)
使用Wi-Fi ESP8266方案模組接入云平臺
![使用<b class='flag-5'>Wi-Fi</b> <b class='flag-5'>ESP8266</b>方案模組接入云平臺](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
評論