2016 年 4 月

第 31 卷,第 4 期

本文章是由機器翻譯。

新式應用程式 - 為物聯網撰寫 UWP 應用程式

Frank La La

其中一個最常用的片語科技產業中現在是"Internet of Things,"通常縮寫為 IoT。IoT 承諾要變成智慧型裝置中的每個裝置,連接至雲端。從定域機組,裝置可以提供控制項的介面和未經處理資料。數位相機可以從遠端控制。您可以收集並分析的模式和深入了解資料。

雖然有許多文章 MSDN Magazine 中如何收集和分析資料,從這些裝置,有尚未從硬體或線路檢視方塊的任何討論。不過,使用這兩個英呎跳躍到 IoT,可能需要取得新的技術,例如電子產品設計,電力,以及在某些情況下,焊接的開發人員。開發人員,本質上,是很習慣撰寫的程式碼,但可能不熟,那麼而電路,轉移基礎虛擬世界中的所有項目。許多軟體開發人員可能會發現自己想要知道該怎麼處理 solderless breadboards 跳接器纜線,尢。本專欄將說明其用途。

當然,可程式化的裝置已存在多年。不過,撰寫程式碼,這些裝置,通常需要專屬的工具組和昂貴的原型硬體的廣泛知識。在 Raspberry Pi 2 的模型 B 可以執行 Windows 10 IoT 核心,Windows 10 的特殊版本。Windows 10 IoT 核心是從 Windows 開發人員中心 IoT 位於網站免費下載 dev.windows.com/iot。既然 Windows 10 IoT 核心在 Raspberry Pi 2 上執行,通用 Windows 平台 (UWP) 開發人員可以利用其現有的程式碼和技能。

在本專欄中,我將建立在 Raspberry Pi 2 執行的 UWP 應用程式,並會顯示閃爍的天氣 API 資料 LED 指示燈。我將介紹 IoT 概念、 Raspberry Pi 2 模型 B 硬體及控制從 C# 程式碼的方式。

專案 ︰ 監視 Frost

彈簧恢復暖的天氣,因為許多立即等候啟動 gardening 一次的機會。不過,在許多方面的早期彈簧也可帶來一些天氣冷貼齊。我想知道如果冷的天氣預測 Frost 都會嚴重破壞植物,因此 gardener。這麼做,我將在螢幕上顯示一則訊息,如果預測的低低於 38 華氏 (3.3 攝氏表示)。應用程式也很快便會閃爍 LED 為額外的警告。

除了一般撰寫 UWP 應用程式所需的軟體,我必須有一些額外的硬體。當然,我必須有可部署我的解決方案 Raspberry Pi 2 模型 B。我還需要 microsd 記憶卡、 LED 指示燈、 220 Ohm 反對、 solderless breadboard、 跳接器電線、 USB 滑鼠和鍵盤及 HDMI 監視。

Raspberry Pi 2 模型 B Raspberry Pi 2 模型 B 是的部署我的 UWP 應用程式的電腦。Raspberry Pi 2 包含 40 pin (請參閱 [圖 1),部分的這是一般用途輸入/輸出 (GPIO) pin。使用程式碼,我就能夠操作或讀取這些連接的狀態。每個連接具有兩個值之一 ︰ 高或過低 ︰ 高伏特高和較低的電壓低。這可讓我開啟或關閉的 LED 燈號。

Raspbery Pi 2 的模型 B Pinout 圖表
[圖 1 Raspbery Pi 2 的模型 B Pinout 圖表

Microsd 記憶卡 microsd 記憶卡是在 Raspberry Pi 2 硬碟機。這是裝置以便找到其開機檔案和作業系統。它也是一次部署,UWP 應用程式所在的位置。我可以僥倖 SD 卡為 4 GB,但建議您先有 8 GB。當然,專案需求會決定所需的卡片大小。必要時,比方說,我必須大量的感應器資料儲存在本機上傳之前,我會需要較大的 sd 記憶卡可支援較大的本機檔案存放區。

Solderless Breadboard 和跳接器電線 才能連接到 Raspberry Pi 2 的元件,我必須建立轉移到我的元件,再回到 Raspberry Pi 2 Raspberry Pi 2 中的路徑。這就是所謂的電路。雖然我可以使用數種方式來將組件連接在一起,最快最簡單的方法是 solderless breadboard。正如其名,我不需要焊接一起以建立電路的元件。我將使用跳接器線路來進行連線。使用此專案的 solderless breadboard 類型有 30 個資料列和通訊端的 10 個資料行。請注意,資料行具有五個兩個群組: 「 a 到 e"和"f 到 j"。 每個漏洞是電動連線到其資料列和資料行群組中的每個其他漏洞。原因原因即將揭曉短時間內。

LED 燈和反對 在此專案中,我要連接的 LED 燈號 Raspberry Pi 2 版。在 Raspberry Pi 2 pin 會在 5 伏特的漏地運作。LED 燈,不過,將燒錄在此電壓。登錄將會減少讓電路的 LED 燈安全額外的能源。

乙太網路纜線、 USB 滑鼠和鍵盤及監視器 HDMI Raspberry Pi 2 模型 B 具有四個 USB 連接埠、 Ethernet 插座和 HDMI 輸出,在其他連接器。當 UWP 應用程式在裝置上執行時,我可以互動方式幾乎相同,就好像電腦或平板電腦因為我能夠顯示,以及會在輸入郵遞區號,以提取特定區域的預測。

將視窗放到 Raspberry Pi 2

若要開始使用 Windows 10 IoT 核心,我會遵循的指示進行 bit.ly/1O25Vxl。第一個步驟是下載 Windows 10 IoT 核心工具,在 bit.ly/1GBq9XR。Windows 10 IoT 核心工具包含公用程式,WindowsIoTImageHelper 和 WindowsIoTWatcher,使用 IoT 裝置。WindowsIoTImageHelper 提供 GUI 來格式化為具有 Windows IoT 核心開機檔案到 SD 卡。WindowsIoTWatcher 是公用程式會定期掃描 Windows IoT 核心裝置的本機網路。我將使用它們很快。

連接硬體

若要開始建立適用於 IoT 的解決方案,我需要 「 thing 」 來進行工作。這是許多開發人員尋找最令人卻步的 IoT 專案的一部分。大部分的開發人員都習慣以透過程式碼,將位元不一定如轉移至到處移動,一起組建組件。若要讓這個簡單明瞭,我採取非常基本的閃爍 LED 淺專案 (bit.ly/1O25Vxl),但是增進與來自網際網路的即時資料。提供的基本硬體都相同 ︰ LED 燈、 solderless breadboard、 跳接器纜線和 220 Ohm 反對。

在 Raspberry Pi 2 的模型 B 的 GPIO 連接數目。程式碼可以管理許多 pin 的狀態。不過,某些這些 pin 保留函式,且無法控制的程式碼。幸好,有一些好用圖表的每個連接的目的。圖表中看到 [圖 1 稱為 「 pinout 」,提供電路板介面的對應。

設計電路

基本上,我需要建立是透過,如所示流動轉移電路 [圖 2。轉移開始標示為在 pin 1,其之旅 3.3V 中的 PWR [圖 1。此 pin 提供的電源電路 3.3 伏特的漏地,這項功能會燈 LED。事實上,3.3 伏特的漏地是太多的 LED 燈的能力。若要防止它燒錄,我對反對吸收一些電能電路。接下來電路是 GPIO 5,根據 pinout 圖表中,這是實體 pin 29。此 pin,可以控制的程式碼,讓 LED 指示燈 「 智慧 」。 我可以設定為 [高 (3.3 伏特的漏地) 輸出電壓這個指針或低 (0 伏特的漏地) 和 LED 指示燈值將是開啟或關閉,分別。

循環圖表
[圖 2 循環圖表

建置電路

現在,就可以開始建置所示的電路 [圖 2。為此,我需要採取女性跳接器纜線的結尾,並將它連接釘選 29 Raspberry Pi 2 上。然後,我會將另一端男性結束時,放我 solderless breadboard 上的位置。我選擇,第 7 列資料行 e。接下來,取得 LED 淺,並在較短的階段放的位置,第 7 列在資料行,而其他,不得 LED 放在第 8 列的位置資料行。現在,我採取反對並放置於第 8 列、 資料行 c 和 15 日資料行 c 資料列到另一端。最後,我將第二個跳線纜線的男性結尾放入在 15 日的資料列的位置資料行,並連接到 Raspberry Pi 2 上的 pin 碼 1 女性結束。這一切都完成之後,我有類似 [圖 3

與 Raspberry Pi 2 在塑膠的情況下完成的配置功能
圖 3 與 Raspberry Pi 2 在塑膠的情況下完成的配置功能

開機裝置

我有 Windows 安裝到 microsd 記憶卡上的 IoT 核心之後,我會將插入 Raspberry Pi 2 的 sd 記憶卡。然後,我連接網路纜線、 USB 滑鼠和 HDMI 監視器,並插入 Raspberry Pi 2。裝置會開機啟動並,最後顯示的畫面 [圖 4 將會顯示最多 (我記下的裝置名稱和 IP 位址)。

適用於 Raspberry Pi 2 的 Windows IoT 核心上的預設資訊] 畫面
圖 4] Windows IoT 核心適用於 Raspberry Pi 2 上的預設資訊畫面

撰寫軟體

完成硬體安裝程式,我現在可以在我的 IoT 專案的軟體部份工作。在 Visual Studio 中建立 IoT 專案很容易。它基本上是任何其他的 UWP 專案相同。像往常一樣,我建立我的專案選擇 [File |在 Visual Studio 2015,並選擇空白應用程式 (Windows 通用) 做為範本的新專案。我選擇呼叫我的專案"WeatherBlink"。 一次載入的專案,我必須將參考加入至 Windows IoT 延伸模組的 UWP。我以滑鼠右鍵按一下 [參考我的解決方案,在 [方案總管],並在對話方塊中,如下所示,檢查 Windows IoT Extensions 之下 UWP Windows 通用樹狀目錄中 (請參閱 [圖 5)。最後,我按一下 [確定]。

在 Visual Studio 2015 UWP 加入 Windows IoT 延伸模組的參考
[圖 5 將參考加入至 Windows IoT 擴充功能的 Visual Studio 2015 UWP

現在,我有正確的參考加入至我的專案,我會新增下列 using 陳述式,在 MainPage.xaml.cs 檔案的頂端 ︰

using Windows.Devices.Gpio;

Windows.Devices.Gpio 命名空間包含所有 Raspberry Pi 2 的連接,我需要存取的 GPIO 的功能。將指定的 pin 碼的狀態設定很簡單。例如,下列程式碼會將 pin 5 的值設定為高 ︰

var gpioController = GpioController.GetDefault();
gpioPin = gpioController.OpenPin(5);
  gpioPin.Write(GpioPinValue.High);

讀取的 pin 值也一樣簡單 ︰

var currentPinValue = gpioPin.Read();

GPIO 連接都是需要在應用程式之間共用的資源,因為它是您更輕鬆地管理這些透過類別範圍的變數 ︰

private GpioPin gpioPin;
private GpioPinValue gpioPinValue;

並且將它們初始化中常見的方法 ︰

private void InitializeGPIO()
{
  var gpioController = GpioController.GetDefault();
  gpioPin = gpioController.OpenPin(5);
  gpioPinValue = GpioPinValue.High;
  gpioPin.Write(gpioPinValue);
  gpioPin.SetDriveMode(GpioPinDriveMode.Output);
}

建立簡單的 UI

因為這是 UWP 應用程式,我有存取權的 Windows 10 UWP 介面控制項。這表示我 IoT 可以有任何額外的工作,我的具全面互動性介面。許多 IoT 實作的 「 遠端 」,也就是說它們沒有任何 UI。

這個專案會有一個簡單的 UI 會顯示一則訊息根據氣象預報。如果鍵盤和滑鼠會附加到 Raspberry Pi 2,讓使用者能夠輸入郵遞區號,然後依照所示更新天氣預報資訊 [圖 6

WeatherBlink UWP 應用程式的 UI
圖 6 WeatherBlink UWP 應用程式的 UI

進行智慧型裝置

為了讓我的 IoT 裝置感知的氣象預報,我需要從網際網路提取天氣資料。因為這是 UWP 應用程式,我有所有的程式庫和工具存取給我。我選擇取得我的天氣資料,從 openweathermap.org/api, ,可提供以 JSON 格式的特定位置天氣資料。提供開氏溫度的所有結果。[圖 7 顯示我的程式碼來檢查天氣和變更的閃爍的結果為基礎的速率。一般而言,一旦氣溫取得大約 38 華氏 (3.3 攝氏表示),會發出 frost 警告。如果有可能會造成 frost,我想 led 即會閃爍快速的提醒我處理序區處於即將發生的危險。否則,我想 LED 閃爍速度很慢,讓我知道還有的電力給裝置。因為 REST API 呼叫和剖析 JSON 回應 UWP 中的完整涵蓋的主題,我也省略了該特定程式碼以求簡單明瞭。

[圖 7 檢查天氣和閃爍的速率

private async void LoadWeatherData()
{
  double minTempDouble = await GetMinTempForecast();
  // 38F/3.3C = 276.483 Kelvin
  if (minTempDouble <= 276.483)
  {
   Blink(500);
   txtStatus.Text = "Freeze Warning!"
  }
  else
  {
    Blink(2000);
    txtStatus.Text = "No freezing weather in forecast."
  }

閃爍方法很簡單 — 它會將設定傳送給它的參數為基礎的分派計時器的間隔 ︰

private void Blink(int interval)
{
  blinkingTimer = new DispatcherTimer();
  blinkingTimer.Interval =
    TimeSpan.FromMilliseconds(interval);
  blinkingTimer.Tick += BlinkingTimer_Tick;
}

BlinkingTimer_Tick 方法是開啟或關閉 LED 的程式碼所在的位置。它會讀取指針的狀態,並接著將狀態設定為其相反的值 ︰

private void BlinkingTimer_Tick(
  object sender, object e)
{
  var currentPinValue = gpioPin.Read();
  if (currentPinValue == GpioPinValue.High)
  {
    gpioPin.Write(GpioPinValue.Low);
  }
  else
  {
    gpioPin.Write(GpioPinValue.High);
  }
}

完整原始程式碼位於 bit.ly/1PQyT12

部署應用程式

將應用程式部署至 Raspberry Pi 2 時我的電腦上的初始安裝。首先,我必須將我的架構變更為 ARM,然後在 [播放] 圖示旁的下拉式清單,我將選擇遠端電腦。[遠端連線] 對話方塊 (請參閱 [圖 8) 隨即出現,其中我可以手動輸入我的裝置 IP 位址或從自動偵測到裝置的清單中選取。在任一情況下,不需要啟用的驗證。最後,我按一下 [選取和現在我可以將我的解決方案部署到裝置。

遠端連線] 對話方塊
[圖 8 的遠端連線] 對話方塊

設計考量

IoT 世界開啟新的機會和挑戰的開發人員。在建置 IoT 裝置原型時,務必納入將會部署它的執行階段環境。將裝置有電源和網路功能可供存取嗎? 家用控溫器肯定,但是天候觀測站放在遠端樹系中可能不會。很明顯地,大部分的這些挑戰會規定如何我建置我的裝置,例如,新增防水容器戶外的案例。將我的解決方案是無周邊或需要使用者介面? 這些挑戰會規定我會撰寫程式碼的方式。例如,如果我的裝置透過 4g 網路傳輸資料然後我需要在資料傳輸成本因素。我當然會想要最佳化的我的裝置所傳送的資料量。是純粹軟體的任何專案,記住使用者需求相當重要。

總結

雖然控制 LED 指示燈,從程式碼可能不會變更世界,有許多其他可能的應用程式。除了的天氣預報 API,我無法連接到 Raspberry Pi 2 溫度感應器,並將它放置於或我的處理序區附近。如果它在我的家用的特定部分中偵測到 moisture,提醒無法傳送電子郵件的裝置呢? 想像一下安裝空氣品質感應器各地大城市,或只是在網路上的芳鄰。想像一下來判斷是否足夠 snow 降到判斷是否有風險的摺疊屋頂上放置權重感應器。有無限的可能性。

就建置更精彩的內容 !


Frank La Vigne是 Microsoft 技術和民事參與小組的技術推廣者,可協助使用者充分利用技術,以便建立更好的社群。定期在他的部落格 FranksWorld.com 和已製作成 YouTube 頻道呼叫的 Frank 世界電視。(youtube.com/FranksWorldTV)。

衷心感謝以下技術專家對本文的審閱: Rachel Appel、 Robert 伯、 Andrew Hernandez