20. 場景4 : 智能物聯網家居

Level : level auto_fit

20.1. 介紹


智慧物聯網家居 利用眾多網路資源是物聯網設備的優勢,透過網路可以監控智慧家庭。

此方案整合了以下五個功能:

  • 智能數位鬧鐘(案例9)

  • 家居健康監察系統(案例 10)

  • 廚房火災警報系統(案例 11)

  • 智能手機彩色燈泡(案例 12)

  • 語音聲控風扇(案例 13)

20.2. 零件清單


pic_80

20.3. 物聯網技術應用


  • ThingSpeak

  • IFTTT

  • App Inventor

  • Alexa

  • IFTTT

  • Google 助理

  • Siri

20.4. 組裝步驟


請參閱案例 9, 10, 11, 12, 13

20.5. 硬體連接


  • 將 OLED 顯示器連接到 I2C。

  • 將溫度濕度傳感器 DHT11 連接到 P2。

  • 將多功能LED連接到P7。

  • 將火焰感應器連接到 P1。

  • 拉下蜂鳴器開關連接蜂鳴器。

  • 將馬達風扇連接到 P9。

auto_fit

20.6. 程式設計(MakeCode)

完整解決方案

MakeCode: https://makecode.microbit.org/S48632-70007-18098-20011

您也可以從以下網址下載程序:


20.7. 逐步教程


第一部分:設定智能數位鬧鐘(案例 9 修訂版)

1.1 硬體連接

  • 將 OLED 顯示器連接到 I2C。

    pic_60

1.2 編程(MakeCode)

步驟 1. 初始化 OLED、IoT:bit 並連接 WiFi,建立變數

  • 啟動時,拖動 LED 指示燈不會亮起。

  • 將 OLED 螢幕初始化為寬度 128,高度 64。

  • 拖動初始化 IoT:位元 TX P16 RX P8。

  • 設定 Wi-Fi 的 ssid 和密碼

pic_40

步驟 2. WiFi 連線後顯示裝置 ID

  • 將「已連接 WiFi」模組拖曳到編輯器中。

  • 在程式碼區塊內新增顯示字串 Device_ID。

pic_40

步驟 3. 取得 NTP 時間

  • 拖動取得香港目前 NTP 時間(UTC+8)以取得 NTP 時間。

  • 暫停 1 秒。

pic_40

步驟 4. 在顯示屏上顯示 NTP 時間

  • 將 當取得NTP網絡時間拖動到編輯器。

  • 取得到 NTP 時間後,此程式碼區塊中的程式將運行。

  • 清除顯示。

  • 拖動顯示字符串「ID: 」裝置 ID。

  • 使用 新行顯示字符串顯示格式化的時間字串組合:時間:小時:分鐘:秒。

pic_60

第一部分解答:

auto_fit

MakeCode: https://makecode.microbit.org/S87148-59257-05819-14544

您也可以從以下網址下載程序:

第一部分結果

連接到網路後,圖示將開啟並開始取得 NTP 時間。

auto_fit


第二部分:建立家庭健康資料監測系統(案例 10 修訂版)

2.1 硬體連接

  • 將溫度濕度傳感器 DHT11 連接到 P2。

pic_60

2.2 物聯網設定(ThingSpeak)

步驟 1. 建立 Thingspeak 頻道

  • 前往 ThingSpeak 建立帳戶並建立頻道。

auto_fit

步驟 2. 取得通道 API

  • 建立新頻道後,取得 API 寫入權限。

auto_fit

2.3 程式設計(MakeCode)

步驟 1. 設定 upload_thingspeak 函數

  • 建立一個名為 upload_thingspeak 的新函數。

  • 將 thingspeak_counter 的值增加 1。

  • 如果WiFi已連接,則,

  • 在 if 迴圈中,建立一個新的變數thingspeak_ counter,如果 thingspeak_counter > 15,則執行

  • 讀取引腳 P2 處的溫度和濕度傳感器。

  • 透過發送 Thingspeak 金鑰 XXXX 欄位 1 值 XXX 的方式將資料傳送到 Thingspeak…,填寫 Thingspeak 通道中的寫入 API 金鑰,並上傳所需值。

  • Snap 將 thingspeak_counter 設定為 0。

pic_40

步驟 2. 更新收到的 NTP 訊號

  • 接收到 NTP 時,拖動 顯示字串連線「溫度:」 取得溫度 °C。

  • 拖動 顯示字符串組合 “Humidity: ” 取得濕度。

  • 拖動顯示字符串組合 “IAQ: ” 取得 IAQ 分數。

pic_60

步驟 3. 呼叫 upload_thingspeak

  • 調用upload_thinkspeak

pic_60

第二部分完整解答:

auto_fit

MakeCode: https://makecode.microbit.org/S12665-25593-41211-03672

您也可以從以下網址下載程序:

第二部分結果

OLED螢幕顯示溫度、濕度、室內空氣品質評分以及基於室內空氣品質評分的環境狀況。上傳完成後,顯示上傳資訊。

auto_fit


第三部分:設定廚房火災警報系統(案例 11 修訂版)

3.1 硬體連接

  • 將火焰感應器連接到 P1。

  • 拉下蜂鳴器開關連接蜂鳴器。

  • 將多功能LED連接到P7。

pic_60

3.2 物聯網設定(IFTTT)

  • 造訪 https://ifttt.com/ , 建立小程式(如果啟用 Webhook,則啟用通知)

pic_80

  • 前往“我的服務”>“Webhooks”,選擇“文件”。如下複製您的 Webhooks 金鑰:

pic_80

可選:使用電子郵件作為通知方式

  • 在 THEN 欄位中,搜尋“電子郵件”,並用它來取代上一步驟中的“通知”。

pic_80

3.3 程式設計(MakeCode)

步驟 1. 設定多 LED

  • 啟動時,將燈條設定為 NeoPixel,接腳 P7 設定為 1 個 LED,RGB 格式為 (GRB 格式)。

  • 在「開始」事件中,建立一個新的變數 flame,並將變數flame設為 false。

pic_60

步驟 2.設定函數 flame_detection

  • 新增一個名為 flame_detection 的新函數。

  • 在函數內部,加入一個 if-else 語句,條件為 WiFi 已連線? ,以檢查連線狀態。

  • 在 if 迴圈中,加入一個 if 語句,條件為「在引腳 P1 處偵測到火焰」= true,以辨識火焰。

  • 彈奏高音B音半拍,直到結束。

  • strip顯示紅色。

  • 暫停 100 毫秒。

  • strip顯示顏色為黑色。

  • 暫停 100 毫秒。

  • 如果 flame = false,則 ,

  • 在 if 語句中,新增 發送到IFTTT事件名稱 fire。

  • 在 if 循環之外,將 flame 設為 true。

  • 在 else 語句中,將 flame 設定為 false。

pic_60

步驟 3. 呼叫 fire_detection 函數

  • 在重復無限次裡調用 fire_detection。

pic_40

第三部分完整解答:

auto_fit

MakeCode: https://makecode.microbit.org/S14841-45665-70694-83433

您也可以從以下網址下載程序:

第三部分結果

當火焰傳感器偵測到火焰源時,會觸發 LED 閃爍,發出警報聲,並將警告通知傳送到 IFTTT。

auto_fit

auto_fit


第四部分:智能手機彩色燈泡(案例 12 修訂版)

物聯網設定(App Inventor 2)

步驟 1. 建立 APP 項目

  • 在以下位置建立 APP inventor 帳戶:http://ai2.appinventor.mit.edu/ 。

  • 建立一個新專案。

auto_fit

步驟二:設計應用程式佈局

  • 在設計頁面中,將佈局元素從左側拖曳到編輯器中。

  • 在這個範例中,使用了不同的按鈕、文字方塊、標籤和佈局控制項。

  • 將該元素放置在你的路徑上。

  • 每個元素都有自己的屬性,您可以根據自己的想法進行更改,例如背景顏色、字體大小、寬度、高度、對齊方式。

  • 請記住將 Web 元素新增到編輯器中,它將用於發送命令。

auto_fit

步驟 3. 在應用程式中對元素進行編程

  • 點擊右上角的按鈕切換到「模組」頁面。

pic_40

  • 根據功能需求目錄,在左側找到所需功能並將其放入編輯器中。

  • 前往 buttonX 元素,找到 when buttonX.Click do 函數,將其放入編輯器(X 代表按鈕編號)。

  • 前往 Web1 元素,找到設定 Web1.URL 的位置,放入 when buttonX.Click do 中。

  • 到文字目錄,找到 join 和 「 「 元素,開始建立控制項 API。

  • 控制 API 為:https://control.smarthon.cc/publish?id=ID&msg=MSG,其中 ID 和 MSG 分別表示 IoT:bit ID 和指令。

  • 正確使用 join 函數將 API 的各個部分連接起來。

  • 完成 API URL 後,使用 Web1 呼叫 Web1.Get 發送 API 指令。

auto_fit

4.2 編程(MakeCode)

步驟 1. 接收指令

  • 在「收到 WiFi 訊號」事件中,放入一個嵌套的 if-else 語句,其中包含不同的條件。

  • 將第一個條件設為 WAN_Command = Red,並將strip顯示為紅色。

  • 在下一個 if 條件中,使用 WAN_Command = Green,並將strip顯示顏色設為綠色。

  • 在下一個 if 條件中,使用 WAN_Command = Blue,並顯示藍色strip。

pic_40

第四部分完整解答:

auto_fit

MakeCode: https://makecode.microbit.org/S84631-72656-71417-43792

您也可以從以下網址下載程序:

第四部分結果

透過APP發送顏色訊息後,燈光顏色會改變。

auto_fit


第五部分:設定智慧風扇語音控制(案例 13 修訂版)

5.1 硬體連接

  • 將馬達風扇連接到 P9。

pic_60

5.2 物聯網設定(Alexa / Google Assistant / Siri、雲端控制、IFTTT)

對於此案例,您可以使用三種不同的方法來設定物聯網部分:

5.3 編程(MakeCode)

步驟 1. 更新接收 WiFi 指令

  • 在「收到 WiFi 訊號」代碼區塊中,如果 WAN_Command = turn_on_fan,則執行下列操作:

  • 然後,將馬達風扇連接至 P9 端口,風速為 1023。

  • 如果 WAN_Command = turn_off_fan,則,

  • 將馬達風扇連接至 P9 端口,風速為 0

pic_40

第五部分完整解答:

auto_fit

MakeCode: https://makecode.microbit.org/S48632-70007-18098-20011

您也可以從以下網址下載程序:

第五部分結果

您可以使用語音控制風扇,透過 Alexa/ Google Assistant/ Siri 來開啟或關閉風扇。

auto_fit