# 使用**Blynk Cloud**控制esp32 ###### tags: `Blynk` `iot` [登入]([https://](https://blynk.cloud/dashboard/login)) ![](https://i.imgur.com/uIAL5g3.png) **達到目的** 用手機Blynk app的Switch控制esp32內置燈的開關 **要做什麼?(模板的使用)** ![](https://i.imgur.com/eE7Kot7.png) 模板是讓其他的裝置共用的*設定*,例如在一個模板裡指定了一個Virtual Pin,設定**開**的時候代表1,**關**的時候代表0。那麼**全部**使用這模板的裝置也會是這樣被設定。 ## 步驟﹕ (1) 先要加入Template(模板)。 ![](https://i.imgur.com/lAIqVqn.png) New Template->填寫資料 ![](https://i.imgur.com/QvYEW6i.png) Datastreams來設定(設備上)傳送資料的結構 ![](https://i.imgur.com/ZaPS7MS.png) ![](https://i.imgur.com/4sD1FmQ.png) 最重要是pin的選擇,這是設計Blynk app與iot裝置通訊的橋樑。 ![](https://i.imgur.com/X4dKni6.png) 一定要記得Save ![](https://i.imgur.com/nndWW1y.png) **Blynk App連接WIFI** 有開發過iot程式的人也知道要hardcode wifi的SSID及密碼到裝置以使之連上互聯網。是次Blynk App用WIFI provisioning便解決了hardcode的問題。 在app透過連按接裝置(例如ESP32)去引導使用者輸入WIFI資料令不同的使用者連接自己的網絡。 ![](https://i.imgur.com/RVeLGjL.png) (2) 需要使用特別的library﹕ 在Arduino使用相關的[library]([https://](https://github.com/blynkkk/blynk-library/releases/tag/v1.0.0-beta.3)) ![](https://i.imgur.com/H5hOH7I.png) Include library ![](https://i.imgur.com/NipPSyL.png) ![](https://i.imgur.com/dua3iCO.png) 改名為->"blynk" ![](https://i.imgur.com/PV52FRn.png) 使用範例檔 ![](https://i.imgur.com/ALLZ3kc.png) ![](https://i.imgur.com/Oq6nrgZ.png) 有兩項資料必須填入 #define BLYNK_TEMPLATE_ID "" #define BLYNK_DEVICE_NAME "" 就是用那一個template的資料。我們會用剛新增template的內容 ![](https://i.imgur.com/1yMTQtO.png) ![](https://i.imgur.com/gLjxhxA.png) 填好上載程式到esp32 esp32連上電源 (2) 把esp32接駁WIFI的步驟﹕ ![](https://i.imgur.com/W1NDlUV.jpg) 開啟esp32 ![](https://i.imgur.com/hX8wAbQ.jpg) 選擇WIFI ![](https://i.imgur.com/Y65pzu0.jpg) 輸入密碼 ![](https://i.imgur.com/1jmzyHZ.jpg) esp32成功連接WIFI(不是手機連接esp32) ![](https://i.imgur.com/rf6MsDb.jpg) ## 在Blynk裡設計app以控制esp32 選擇已連接WIFI的設備 ![](https://i.imgur.com/ERHQAk8.jpg) 新增Switch Switch的Datastreams就是我們在template裡已計好的vinpin0 ![](https://i.imgur.com/BI6GDCq.png) ![](https://i.imgur.com/fv1Kxmt.png) 加畢後現在的狀況就是這個 **Switch的開關觸發V0 pin的的開關** App Switch ON -> V0 (1) App Switch OFF -> V0 (0) **最後要將相關邏輯放回esp32的設備** ```cpp= void setup() { Serial.begin(115200); delay(100); BlynkEdgent.begin(); pinMode(2, OUTPUT); // Initialise digital pin 2 as an output pin Blynk.syncVirtual(V0); //取得V0 pin最後的狀態 } BLYNK_WRITE(V0) // Executes when the value of virtual pin 0 changes { if(param.asInt() == 1) { // execute this code if the switch widget is now ON digitalWrite(2,HIGH); // Set digital pin 2 HIGH Serial.println("ON"); } else { // execute this code if the switch widget is now OFF digitalWrite(2,LOW); // Set digital pin 2 LOW Serial.println("OFF"); } } void loop() { BlynkEdgent.run(); } ``` 解說﹕ BLYNK_WRITE(V0) 當V0有改變時便觸發