Rpi 3 的 Windows 10 IoT Core 已經寫了兩篇了,該是來點應用的時候了。本篇要介紹如何利用 Raspberry Pi3 上的 GPIO 來控制一組LED紅綠燈,開發環境使用 Visual Studio 2015
回顧資料:
[Raspberry Pi 3 與 Windows 10 IoT Core] Part 1 – 下載映像檔與開機]
[Raspberry Pi 3 及 Win 10 IoT Core] Part2:應用程式學習編寫環境設定
作者:李少峰
實驗目標及應用環境簡介:
實驗目標
利用 Raspberry Pi3 上的 GPIO 來控制一組LED紅綠燈
程式執行環境
建置在 Raspberry Pi3 及 Windows 10 IoT Core for Raspberry Pi3 的系統上
編寫控制程式
在本次實驗中,控制紅、黃、綠燈號的改變功能,是使用微軟公司的產品 Visual Studio 2015 軟體中的 C# 語言進行編寫應用程式。不一定要使用 C# 進行程式的編寫,您也可以使用其他語言如 VB、C++ 等。
燈號的轉換控制點
紅、黃、綠燈號的切換機制是以秒為單位進行轉換。這次實驗的預設燈號運作周期總共三階段,『1』程式按“啟用”後直接亮綠 58 秒,『2』接著轉成黃燈共 2 秒,『3』轉成 60 秒的紅燈,所以一個週期總共 120 秒,運作週期或紅燈倒數秒數可依需要調整長短。
想跟上物聯網的火熱尾巴,感受到一點溫度?
本次實驗只是分享如何對一組 LED 的紅綠燈進行控制,還算不上物聯網。如果將燈號控制的機制擴充,使用遠端控制方式對燈號進行改變時,嗯,這樣運用的方式就有那麼一丁點像 IoT 的運作 味道喔,其實是還早的呢!要再好好好努力再努力,會有實現的那一天。現在先把基本功學習好再來實現吧…..。
上面提及,本實驗的程式是在 Windows 10 及使用 MS Visual Studio 2015 Community 版本的工具來運行的,可能有朋友會問在其他如 Win8 或 Win7 可以嗎?雖然尚未實際試過,但在下認為是可以的,因為 Visual Studio 2015 比 Win 10 早出現在市場接受下載及銷售不是嗎?只是在不同作業系統的版本下使用 Visual Studio 2015 Community,可能需要局部調整。以下實驗內容分享中不包含如何安裝 Visual Studio 2015 Community。本文中各系統畫面的截圖僅供參,進一步了解內容,請詳閱下面解說。
實驗建立步驟:
-
於 Visual Studio 2015 工具中建立 MyLedRyG(紅綠燈)專案
1: 開啟 Visual Studio 2015 工具如下圖之畫面後,點選新增專案。
點選新增專案後,再選取所要編寫程式的類別(通用的 Windows 程式)及使用編寫的語言(C#)、應用程式型態(空白的應用程式),接著是本實驗的專案名稱 MyLedRyG 及儲存位置,點選【確定】建立專案。 打開檔案總管檢視專案內容,點選 MyLedRyG 名稱,打開目錄內容會看到一個 MyLedRyG.sln 檔案及一個 MyLedRyG 目錄,如果少了一個 《.sln》的檔案,這樣該專案無法直接使用 Visual Studio 2015 工具打開專案。
2: 由於專案是執行在 Windows 10 IoT Core for Raspberry Pi3 上,需要在專案加入設定,好讓系統知道這個應用程式是需要使用 IoT 的特殊功能 (Windows IoT Extension for the UWP),另外也要設定應用程式的作業版本環境中(下圖中,設定應用程式至少要在 Windows 10 10240 的版本上)執行,執行目標是什麼(下圖中設定是在遠端名叫 minwinpc 的設備上),程式部署的驗證模式為 ─ 通用(沒有加密的協定)。
請注意,驗證模式這設定若錯誤,則會造成應用程式無法從編寫環境(開發的電腦)部署到 Raspberry Pi3 上喔。
3: 空白專案建立後,接下來是建立應用程式的版面。請打開工具列,拉出如下圖的物件,分別是1個標題文字方塊, 3個圓形,各代表紅、黃、綠的燈號。1個“啟用”按鈕,1個紅燈秒數倒數的文字方塊,另一個則是GPIO 的狀態顯示方塊。左圖是圖形介面的排版內容,右側圖為文字模式的排版內容。
4: 版面排好之後要編寫各個燈號的控制碼。下左圖為紅黃綠燈號的變數、各燈號使用 GPIO 腳位編號,如 RED_LED_PIN -> 紅燈、YELLOW_LED_PIN -> 黃燈、GREEN_LED_PIN -> 綠燈的定義,紅(redBrush)、黃(yellowBrush)、綠(greenBrush)、灰(grayBrush) 共 4 色的代碼。右圖是設定程式開始時要執行的命令,時間間隔以1秒為單位(紅色圈處),當各個燈號沒有運作時則呈現為灰色的狀態(藍色圈處)。
5: 下左圖是定義『啟用』文字方塊被按下後要執行的事 ─ 啟動計時器並將綠燈亮起來。右圖則是定義各燈號 GPIO 腳位代碼 r_gpio (紅燈用)、y_gpio (黃燈用)、g_gpio (綠燈用) 及檢查GPIO控制器的狀態是否正常,如果正常,在GPIO狀態方塊會顯示“正常的啟用”,反之則會顯示“沒有找到這個設備上 GPIO 控制器”,這樣使用者可以了解各元件的運作狀態設定。greenPin 是定義綠燈控制器、yellowPin 是黃燈控制器 、redPin 是紅燈控制器。
6: 下左圖是定義計時器到達預設時間要執行的內容,實驗簡介有提到燈號轉換標準是 ─ 綠燈亮 58 秒,黃燈亮 2 秒,紅燈亮 60 秒,因此計時跑到 58 秒將綠燈轉為黃燈時,跑到 60 秒時將黃燈轉為紅燈,當紅燈亮足 60 秒( 即120秒後)轉為綠燈,繼續開始另一個周期。
7: 下圖內容是定義當紅燈亮起後,將倒數秒顯示在《倒數文字方塊》中。
-
Raspberry Pi3 GPIO 腳位圖
下左圖是 Raspberry Pi3 的GPIO 位置圖,右側是本次實驗所使用到 GPIO 的腳位圖。本次實驗一共使用了四個腳位,腳位 1 電源(Power – 圖中灰色線)、 腳位 29 (GPIO 5 – 圖中紅色線)控制紅燈,33 腳位(GPIO 13 – 圖中黃色線)控制黃燈,37腳位 (GPIO 26 – 圖中綠色線)控制綠燈
-
程式部署成功
程式(MyLedRyG)被部署到 Windows 10 IoT Core for Raspberry Pi3 的系統後,可以在 Windows 10 IoT Core 的管理畫面上,點選左側功能表的 Apps 選項,此時右側的畫面中可以找到 MyLedRyG 應用程式(下圖紅圈位置)。
-
從管理畫面執行程式
要執行程式(MyLedRyG),點選應用程式左側的三角形即可執行。當程式執行時,原來的三角形會變成一個正方形,點選即可停止執行。此外,管理頁上不會有什麼改變。要停止執行應用程式,同樣點選應用程式(MyLedRyG)左側的正方形即可,停止執行程式前,系統會跳出確認視窗,確認後程式才會結束。
-
程式執行記錄
程式在 Windows 10 IoT Core for Raspberry Pi3 的系統被執行時的畫面,圖1->系統被執行的畫面,圖2->點選『啟用』執行程式,圖3->綠燈亮起 58 秒後轉為黃燈,圖4->紅燈亮起開始 60 秒倒數,當倒數到 0 轉為綠燈並開始另一個循環。
後記:
在本次實驗中發現,不管是在管理頁面或系統頁面執行關機,當顯示螢幕(使用 HDMI 連接)變黑後,Raspberry Pi3 的電源及無線網路指示燈是不會關閉的,但登入管理頁面時會顯示頁面找不到。
本實驗之程式可以在 Windows 10 IoT Core 14328 及 14342 版本下運行。