---
# System prepended metadata

title: 使用**Blynk Cloud**控制esp32
tags: [iot, Blynk]

---

# 使用**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有改變時便觸發

























