###### tags: `Blynk` `FM617A`
# \[Blynk 新版\]《用 Python 學物聯網》
由於 Blynk 改版, 因此《[用 Python 學物聯網](https://www.flag.com.tw/maker/FM617A)》的〈Lab14 智慧空調手機 APP 雲端感測遙控〉操作也要隨之更改, 本文就說明如何使用 Blynk 新版實作同樣的實驗。
## 更新 MicroPython 韌體
由於新版本的 Blynk 程式庫會跟本產品預設的 MicroPython v1.12 不相容, 請依照《[燒錄 MicroPython 韌體](/Rnn9Neh0RXSBO0FWi1DN9A)》這一篇說明, 將 MicroPython 韌體更新至 v1.17。
## Blynk 註冊帳號與 App 安裝
本文假設您已先閱讀並實作過〈[Blynk 新版使用說明](/N7YOLBKNTNyTPWejuK5Eqw)〉, 所以您應該已經註冊好新版的 Blynk 帳號, 也在您的 D1 mini 控制板上安裝好 Blynk 相關的程式庫, 如果您尚未完成, 請立刻閱讀〈[Blynk 新版使用說明](/N7YOLBKNTNyTPWejuK5Eqw)〉。
## 下載範例檔
使用原[下載網址](https://www.flag.com.tw/DL.asp?FM617D)即可以下載包含程式庫等檔案在內的範例檔。
:::info
如果您有舊版的 Blynk Legacy 仍在運作, 要使用原始的程式碼搭配執行, 可以在這裡[下載舊版的範例檔與程式庫](https://github.com/FlagTech/FM617C/releases/tag/FM617D)。
:::
## 建立新的樣板
在這個實驗中, 我們需要以下資料流讓控制板與 Blynk 可以相互傳送資料:
- V1 虛擬腳位:D1 mini 會將溫度值送給 Blynk
- V2 虛擬腳位:D1 mini 會將濕度值送給 Blynk
- V3 虛擬腳位:Blynk 會將按鈕開關狀態送給 D1 mini
以下我們就針對上述需求設計新的樣板:
1. 請登入 Blynk 網站, 切換到 **Templates** 頁次後按右上角的 **+ New Template**:

1. 請依照以下設定後按 **Done**:

1. 切換到 **Datastreams** 頁次再按一下 **+ New Datastream** 後選 **Virtual Pin**:

依照以下設定後按 **Create** 完成:

1. 重複上述步驟新增以下資料流:

1. 重複上述步驟新增以下資料流:

1. 確認共新增以下 3 個資料流無誤後按上方的 **Save** 儲存樣板:

## 新增裝置
設計好樣板後, 下一步驟就是新增裝置:
1. 按一下放大鏡圖示的搜尋鈕, 切換到 **My Devices** 頁次:

:::info
由於免費帳號的 Blynk 只能擁有 2 個裝置, 因此若您已經建立過 2 個裝置, 就必須先移除 1 個裝置才能建立新的裝置。請先勾選裝置後按右側 **Action** 欄位的 **...** 鈕再選 **Delete**:

在確認交談窗中再按一次 **Delete** 刪除裝置:

:::
1. 按一下 **+ New Device** 新增裝置:

選取 **From Template** 從樣板產生裝置:

在 **TEMPLATE** 欄位選取剛剛設計好的樣板後按 **Create** 完成:

1. 按右上角的 **×** 關閉提示訊息:

1. 切換到 **Device Info** 頁次, 將認證權杖複製起來, 稍後撰寫程式時需要用到:

## 設計 App 畫面
新增裝置後, 接下來就是要設計手機 App 上的使用者操作畫面了:
1. 請開啟手機 App, 按一下剛剛新增的裝置:

:::info
如果你的 App 上仍舊顯示之前的裝置:

只要將 Blynk App 強制結束後再重新開啟, 即可看到新的裝置。在大部分的 Android 手機上, 只要先按一下 App 切換按鈕, 然後將 Blynk 畫面往上滑出畫面即可強制退出:

:::
1. 按 **Setup Dashboard**:

1. 按右上角 **☰** 鈕展開元件清單:

往下捲動按一下 Gauge 元件:

調整大小及位置:

按一下元件進入設定畫面後依照以下內容設定:

設定完成請按左上角的 **←** 回前頁。
1. 依照相同步驟再新增一個 Gauge 元件, 並調整大小及位置如下圖右:

按一下元件後依照下圖設定:

設定完成請按左上角的 **←** 回前頁。
1. 依照相同步驟再新增一個 Button 元件, 並調整大小及位置如下圖:

按一下元件後依照下圖設定:

設定完成請按左上角的 **←** 回前頁。
1. 設計完成按一下左上角逃生門按鈕後進入執行畫面:

## 撰寫程式
請依照手冊上第 60 頁接好硬體線路:

以下是完整程式:
```python=
# 因為 Thonny 開發環境近期版本更新, 所以操作步驟已經和手冊上不同了
# 為了避免學習時遇到操作上的問題, 請從下面網址下載和手冊上一樣的版本:
# https://github.com/thonny/thonny/releases/tag/v3.1.2
from machine import Pin
import dht, BlynkLib, network # 匯入 Blynk 模組
from BlynkTimer import BlynkTimer
sta_if = network.WLAN(network.STA_IF) # 取得無線網路介面
sta_if.active(True) # 取用無線網路
sta_if.connect('無線網路名稱', '無線網路密碼') # 連結無線網路
while not sta_if.isconnected(): # 等待連上無線網路
pass
print("Wifi已連上") # 顯示連上網路的訊息
token = '裝置的認證權杖' # 裝置的認證權杖
blynk = BlynkLib.Blynk(token) # 取得 Blynk 物件
sensor = dht.DHT11(Pin(0)) # 使用 D3 腳位取得溫溼度物件
relay = Pin(14, Pin.OUT, value = 0) # 使用 D5 腳位控制繼電器
def v3_handler(value): # 從 V3 虛擬腳位讀取手機按鈕狀態的函式
relay.value(int(value[0]))
def temp_huni_handler(): # 提供溫/濕度到 V1/V2 虛擬腳位的函式
sensor.measure()
blynk.virtual_write(1, sensor.temperature())
blynk.virtual_write(2, sensor.humidity())
timer = BlynkTimer() # 建立計時器管理物件
timer.set_interval(3, temp_huni_handler) # 建立週期性計時器, 定時傳送溫濕度
blynk.on("V3", v3_handler) # 註冊由 v3_handler 處理 V3 虛擬腳位
while True:
blynk.run() # 持續檢查是否有收到 Blynk 送來的指令
timer.run() # 持續檢查是否觸發計時器
```
執行後看到連接 Blynk 訊息:
```
>>> %Run -c $EDITOR_CONTENT
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ for Python v1.0.0 (esp8266)
Wifi已連上
Connecting to blynk.cloud:443...
```
即可操作 Blynk 介面:
 