###### 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**: ![](https://i.imgur.com/rEm4xj2.png) 1. 請依照以下設定後按 **Done**: ![](https://i.imgur.com/jQqE8s5.png) 1. 切換到 **Datastreams** 頁次再按一下 **+ New Datastream** 後選 **Virtual Pin**: ![](https://i.imgur.com/jjkA5jn.png) 依照以下設定後按 **Create** 完成: ![](https://i.imgur.com/ipufIOp.png) 1. 重複上述步驟新增以下資料流: ![](https://i.imgur.com/JyiUI58.png) 1. 重複上述步驟新增以下資料流: ![](https://i.imgur.com/f53SoLi.png) 1. 確認共新增以下 3 個資料流無誤後按上方的 **Save** 儲存樣板: ![](https://i.imgur.com/d4dfT6K.png) ## 新增裝置 設計好樣板後, 下一步驟就是新增裝置: 1. 按一下放大鏡圖示的搜尋鈕, 切換到 **My Devices** 頁次: ![](https://i.imgur.com/uPgr09T.png) :::info 由於免費帳號的 Blynk 只能擁有 2 個裝置, 因此若您已經建立過 2 個裝置, 就必須先移除 1 個裝置才能建立新的裝置。請先勾選裝置後按右側 **Action** 欄位的 **...** 鈕再選 **Delete**: ![](https://i.imgur.com/PE3i4eq.png) 在確認交談窗中再按一次 **Delete** 刪除裝置: ![](https://i.imgur.com/nUxORGl.png) ::: 1. 按一下 **+ New Device** 新增裝置: ![](https://i.imgur.com/FVXyXkE.png) 選取 **From Template** 從樣板產生裝置: ![](https://i.imgur.com/IF1zVog.png) 在 **TEMPLATE** 欄位選取剛剛設計好的樣板後按 **Create** 完成: ![](https://i.imgur.com/QEF8IZw.png) 1. 按右上角的 **×** 關閉提示訊息: ![](https://i.imgur.com/rsUc6Jv.png) 1. 切換到 **Device Info** 頁次, 將認證權杖複製起來, 稍後撰寫程式時需要用到: ![](https://i.imgur.com/zDfvQvD.png) ## 設計 App 畫面 新增裝置後, 接下來就是要設計手機 App 上的使用者操作畫面了: 1. 請開啟手機 App, 按一下剛剛新增的裝置: ![](https://i.imgur.com/2XaFDK5.png =360x800) :::info 如果你的 App 上仍舊顯示之前的裝置: ![](https://i.imgur.com/J09Dtnj.png =360x800) 只要將 Blynk App 強制結束後再重新開啟, 即可看到新的裝置。在大部分的 Android 手機上, 只要先按一下 App 切換按鈕, 然後將 Blynk 畫面往上滑出畫面即可強制退出: ![](https://i.imgur.com/JSlMtfw.png =360x800) ::: 1. 按 **Setup Dashboard**: ![](https://i.imgur.com/O5VqjoZ.png =360x800) 1. 按右上角 **☰** 鈕展開元件清單: ![](https://i.imgur.com/rcIK7Fj.png =360x800) 往下捲動按一下 Gauge 元件: ![](https://i.imgur.com/3ZCS9HI.png =360x800) 調整大小及位置: ![](https://i.imgur.com/0gZdFAK.png =360x800) 按一下元件進入設定畫面後依照以下內容設定: ![](https://i.imgur.com/R767sc6.png =360x800) 設定完成請按左上角的 **←** 回前頁。 1. 依照相同步驟再新增一個 Gauge 元件, 並調整大小及位置如下圖右: ![](https://i.imgur.com/B3eBMNx.png =360x800) 按一下元件後依照下圖設定: ![](https://i.imgur.com/64AS6g0.png =360x800) 設定完成請按左上角的 **←** 回前頁。 1. 依照相同步驟再新增一個 Button 元件, 並調整大小及位置如下圖: ![](https://i.imgur.com/LpR4VA4.png =360x800) 按一下元件後依照下圖設定: ![](https://i.imgur.com/M68Tw3n.png =360x800) 設定完成請按左上角的 **←** 回前頁。 1. 設計完成按一下左上角逃生門按鈕後進入執行畫面: ![](https://i.imgur.com/OTgiytg.png =360x800) ## 撰寫程式 請依照手冊上第 60 頁接好硬體線路: ![](https://i.imgur.com/EgQrx7v.png) 以下是完整程式: ```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 介面: ![](https://i.imgur.com/HnbPk61.png =360x800) ![](https://i.imgur.com/6BPPNJP.png =360x800)