# 使用**Blynk Cloud**控制esp32
###### tags: `Blynk` `iot`
[登入]([https://](https://blynk.cloud/dashboard/login))

**達到目的**
用手機Blynk app的Switch控制esp32內置燈的開關
**要做什麼?(模板的使用)**

模板是讓其他的裝置共用的*設定*,例如在一個模板裡指定了一個Virtual Pin,設定**開**的時候代表1,**關**的時候代表0。那麼**全部**使用這模板的裝置也會是這樣被設定。
## 步驟﹕
(1) 先要加入Template(模板)。

New Template->填寫資料

Datastreams來設定(設備上)傳送資料的結構


最重要是pin的選擇,這是設計Blynk app與iot裝置通訊的橋樑。

一定要記得Save

**Blynk App連接WIFI**
有開發過iot程式的人也知道要hardcode wifi的SSID及密碼到裝置以使之連上互聯網。是次Blynk App用WIFI provisioning便解決了hardcode的問題。
在app透過連按接裝置(例如ESP32)去引導使用者輸入WIFI資料令不同的使用者連接自己的網絡。

(2) 需要使用特別的library﹕
在Arduino使用相關的[library]([https://](https://github.com/blynkkk/blynk-library/releases/tag/v1.0.0-beta.3))

Include library


改名為->"blynk"

使用範例檔


有兩項資料必須填入
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_DEVICE_NAME ""
就是用那一個template的資料。我們會用剛新增template的內容


填好上載程式到esp32
esp32連上電源
(2) 把esp32接駁WIFI的步驟﹕

開啟esp32

選擇WIFI

輸入密碼

esp32成功連接WIFI(不是手機連接esp32)

## 在Blynk裡設計app以控制esp32
選擇已連接WIFI的設備

新增Switch
Switch的Datastreams就是我們在template裡已計好的vinpin0


加畢後現在的狀況就是這個 **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有改變時便觸發