2017 年 5 月

第 32 卷,第 5 期

此文章由机器翻译。

物聯網 - 使用 Raspberry Pi 及 Windows 10

Bruno sonnino sonnino

雖然我先前使用軟體的一段時間,我已經永遠不會互動直接與硬體。開發了很多軟體適用於接近硬體,但我從未用過實體面板,還有什麼完成的完整控制權限。因此,當我有機會使用 Raspberry Pi,尤其使用 Windows 10 及 Visual Studio 中,我再有機會。

Raspberry Pi 2 和 3 版中可以使用 Windows 10 做為其作業系統 (雖然不是完整的版本,它可讓您執行來控制其裝置的通用 Windows 平台 [UWP] 應用程式)。這是成本較低的電腦,您可以取得另一個用於小於 $35 美元 — 而且功能強大。Raspberry Pi 3 有四核心、 64 位元的 ARM 處理器、 HDMI 影片、 乙太網路和 Wi-fi 網路、 Bluetooth、 和四個 USB 連接埠。您肯定有許多方式可以使用它。

硬體

若要開始,您可以使用在 Raspberry Pi 面板,但是會有些限制。如果您使用只在面板,會與開發電腦或智慧型手機相同的。您也需要使用某些額外的硬體。有些製造商已建立套件,以補充它︰ 原型面板、 尢、 Led、 potentiometers、 感應器和記憶卡。您可以購買電腦的案例,但並不需要,您應該保留在電腦開啟進行連線。

了解硬體

一旦在面板和套件,就先了解硬體。一開始,您應該瀏覽 Raspberry Pi 以及它所提供。[圖 1顯示面板。

具有 GPIO raspberry Pi 3 模型 B
[圖 1 Raspberry Pi 3 模型 B 具有 GPIO

中的面板右邊**[圖 1**,您可以看到四個 USB 連接埠 (1) 以及乙太網路連接器 (2)。在底部,從左到右,您有電源插座的迷你 USB (3),視訊 HDMI 形式 (4)、 數位相機連接埠 (5) 和聲音輸出 (6)。左邊的面板,您必須微 SD 卡插槽 (7) 和顯示 (8) 的 LCD 的連接器。您也可以查看 Wi-fi 和藍芽介面卡 (9)。中間的面板,您可以看到處理器 (10) 和網路控制站 (11)。在右上方面,您有一般用途輸入/輸出 (GPIO) 區塊 (12),您用來進行所有連接。每個 pin 有不同的用途,您可以看到圖表的頂端。

Raspberry Pi 會使用兩個供應懂得︰ 5V 和 3.3V。黑色的連接都是基本和黃色的 GPIO pin,您將使用您的程式設計。請注意,pin 編號不排序。因此,除非您有完美的記憶體,讓圖表類似的附近 (有一個可在 bit.ly/1WcBUS2)。

第二步是研究此套件。我不會討論所有的內容,因為,可能會變更太多,視製造商而定 (或從您想要購買)。此專案中,您將需要 breadboard、 三個 Led、 尢和線路。若要深入了解這些元件以及如何與它們互動,請參閱 Frank La Vigne 的 2016 年 4 月現代化應用程式資料行中,「 寫入 UWP 應用程式的物聯網,「 在 msdn.com/magazine/mt694090

掛上第一個循環

了解面板和這些簡單的元件,您可以掛接第一次循環。通常,"Hello World"的系統也就是要讓 LED 閃爍的程式。若要讓額外簡單,您一開始先建立亮 LED 閃爍不電路。為此,您不需要任何類型的程式,才能了解您即將建立的電路。

如果您的 LED 直接連接到 3.3V pin 的 Raspberry Pi 會可能燒錄 LED,因為它不支援目前傳址方式傳遞它。使用 Ohm 的法律 (V = R * 我),您必須新增 220 Ω (紅色/紅色/黑色) 反對電路。如果您沒有可用的 220 Ω 反對,您可以使用較大 – 較大的反對,會有較目前在循環,因此 LED 未損毀。反對無法大得多,因為如果目前太小,不會開啟,LED。在我的案例中,我會使用 330 Ω 毫無問題的。

若要查看在 breadboard 綜覽的外觀,請參閱**[圖 2**。映像建立稱為 「 Fritzing 」 可在下載開放原始碼程式 fritzing.org

掛接的循環
[圖 2 裝載電路

在裝載 (應該這麼 Raspberry Pi 電源與關閉不燒錄的任何元件) 的電路之後, 連接電源來源。如果您正確地掛接它,LED 應該開啟。如果 LED 沒有開啟,請檢查如果您正確地將 LED 南北 — 正柵欄 (較長的纜線),且已連線到 3.3V Raspberry Pi 的 pin 碼應該在相同的水平列。負柵欄和反對 (在此情況下,沒有任何極化) 必須在同一行。反對的第二個網路必須連接到地面 pin Raspberry Pi 的那一行。如果一切都是正確的如果 LED 燒錄時,請核取,並取代另一個。時,LED 已開啟時,您可以移至下一個步驟︰ 建立程式控制 LED。

安裝和使用 Windows 10

到目前為止,您不需要的作業系統,因為您不需要程式 Raspberry Pi,但是您也必須繼續使用您的瀏覽一些程式設計。為此,您將使用 Windows 10。您可以下載並安裝 Windows 10 Raspberry pi 免費的成本,雖然不是完全在桌上型電腦和平板電腦執行相同的版本,它可讓您執行且不會變更 UWP 程式。

第一個步驟是下載並安裝 Windows 10 的 SD 卡。為此,下載並安裝 Windows 10 物聯網 (IoT) 核心的儀表板的工具,位於 bit.ly/2lPXrRc

若要安裝 Windows 10 上 Raspberry Pi,您必須擁有相容的微 sd 記憶卡,以及至少 8 GB。接下來,選取 [儀表板上下載並安裝 Windows 10 sd 記憶卡中的 「 Setup 新裝置 」。您必須有某個方式,這張介面卡寫入您的電腦上。如果您沒有可用的卡讀取裝置,您可以購買 USB 卡讀取裝置。

選取裝置、 作業系統和 sd 記憶卡所在的磁碟機類型。提供電腦的名稱,然後選取 [系統管理員密碼。按一下方塊以接受授權條款,然後按一下 [安裝] 按鈕。下載並錄製卡片上的資料之後, 您必須已安裝且可供使用的 Windows 10。移除電腦卡讀取裝置,並將它放在 Raspberry Pi 的位置。將它連接到網路使用乙太網路纜線或 Wi-fi,如果您正在使用 Wi-fi 盜用 Raspberry Pi 3 或 2。開啟裝置。

Windows 10 已開機之後, 您可以看到我 IoT 核心儀表板中的裝置在連線的裝置。

您可以使用連接的裝置,連接埠 8080 上顯示的 IP 位址的瀏覽器中開啟裝置的入口網站。在我的案例中,我可以使用位址 http://192.168.1.199:8080 開啟它。它會要求您已經設定之前開啟入口網站,如所示的系統管理員密碼**[圖 3**。

裝置入口網站
[圖 3 裝置入口網站

在這裡,您可以設定裝置,請檢查安裝的應用程式,並確認它的效能和儲存體。最後一個選項時,遠端的可讓您啟用裝置的遠端控制。這個選項非常有用,如果裝置沒有連接到它,監視器,您可以控制其遠端從您的電腦。請檢查標示為 「 啟用 Windows IoT 遠端伺服器 」 上啟用遠端控制的裝置,並從存放區的 Windows 10 下載遠端控制應用程式的方塊。

您一次安裝和執行 Windows IoT 遠端控制應用程式,您可以控制和從遠端與裝置互動。

現在,您可以開始開發使用 Windows 10 的 Raspberry pi。

適用於使用 Visual Studio Raspberry Pi 開發

若要使用 Visual Studio 的 Raspberry pi 開發,您必須確定您已安裝的工具。您可以選取 [自訂安裝],然後檢查功能選取範圍中通用的 Windows 應用程式開發工具來檢查這。

如此一來,您必須安裝的工具,您可以開始開發使用 Windows 10 的 Raspberry pi。建立新的專案並選取 「 空白 」 的 UWP 應用程式。

這會建立空白的應用程式,而且您將建立的應用程式,在主畫面會顯示目前的電腦名稱。在 MainPage.xaml 中新增下列程式碼︰

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  <TextBlock FontSize="32" x:Name="MachineText"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"/>
</Grid>

然後,在 MainPage.xaml.cs 中,將下列程式碼來取得並顯示電腦名稱︰

public MainPage()
  this.InitializeComponent();
  Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation eas =
    new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
  MachineText.Text = eas.FriendlyName;
}

如果您在本機電腦上執行此應用程式,它會顯示您的電腦名稱的視窗。

然後,執行 Raspberry Pi。在 [方案平台下拉式清單中,選取 arm 系統來說,並在 [裝置] 下拉式清單中,選取 [遠端電腦。若要選取遠端電腦會開啟對話方塊。

選取 Raspberry Pi 裝置並執行應用程式。應用程式將會部署到 Raspberry Pi,您可以看到它在 [遠端控制] 視窗中執行。請注意,視窗中顯示的電腦名稱應該是一個您設定當您格式化 sd 記憶卡,並在其上安裝 Windows 10。

您可以進行偵錯此應用程式中所做的本機應用程式的相同方式,設定中斷點、 分析變數,依此類推。如果您結束 Visual Studio 中的應用程式,您會看到應用程式會關閉與主畫面會出現在 Raspberry Pi。如果您移至瀏覽器入口網站,您會看到應用程式仍然安裝,並可以使用 [執行] 按鈕,執行中所示**[圖 4**。

顯示已安裝的應用程式的應用程式入口網站
[圖 4 顯示已安裝的應用程式的應用程式入口網站

我很訝異達到 UWP 應用程式的相容性層級。若要顯示的可能性,我要使用未對 Raspberry Pi 的應用程式。我將使用範例應用程式的 UWP 社群工具組,由 Microsoft 和社群,絕對是值得參考在開發元件的工具組 bit.ly/2b1PAJY

如果您下載套件,並編譯它,您可以將它部署到 Raspberry Pi,並且執行它 (是的您可以執行程式完全相同的方式在桌面上)。順便一提,您應該嘗試使用中裝置的控制項,它們可以正常運作。

互動使用面板

執行程式之後,您必須啟動使用面板進行互動。您將建立號誌燈控制站。有三種 LED (紅色、 黃色和綠色),而且不可以有不同的時間,為每個輕。

若要操作上的 Led 面板中,您必須取得 GPIO 控制器,並開啟您想要控制,並將它設定為您想要的方式的 pin 碼。在**[圖 1**,您會看到第八個 pin 的 GPIO 封鎖 (第二個資料列) 是 pin 22。您將使用 pin 22、 9 和 19,而且產生的電路會如下所示**[圖 5**。

交通號誌的電路
[圖 5 電路交通號誌燈

這個循環中的位置,建立新的空白 UWP 應用程式。在 MainPage.xaml 中輸入顯示的程式碼**[圖 6**。

[圖 6 主頁面 xaml 程式碼中,顯示交通號誌燈

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  <Border BorderBrush="Black" BorderThickness="3" HorizontalAlignment="Center"
      VerticalAlignment="Center" CornerRadius="5">
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
      <Ellipse Width="50" Height="50" Fill="Red" Opacity="0.5"
        Margin="20,20,20,10" x:Name="RedLed" Stroke="Black"
        StrokeThickness="1"/>
      <Ellipse Width="50" Height="50" Fill="Yellow" Opacity="0.5"
        Margin="20,10,20,10" x:Name="YellowLed" Stroke="Black"
        StrokeThickness="1"/>
      <Ellipse Width="50" Height="50" Fill="LimeGreen" Opacity="0.5"
         Margin="20,10,20,20" x:Name="GreenLed" Stroke="Black"
         StrokeThickness="1"/>
    </StackPanel>
  </Border>
</Grid>

您會看到交通號誌在面板上,在螢幕上顯示,因此您也可以查看檢視遠端顯示的事情。在 Mainpage.xaml.cs 中的原始碼所示**[圖 7**。

[圖 7 原始程式碼,以開啟指定的間隔交通號誌燈

private int _currentLight;
private DispatcherTimer _timer;
private int[] _pinNumbers = new[] { 22, 9, 19 };
private GpioPin[] _pins = new GpioPin[3];
public MainPage()
{
  this.InitializeComponent();
  if (InitGPIO())
    InitTimer();
}
private void InitTimer()
{
  var intervals = new[] { 6000, 2000, 6000 };
  var lights = new[] { RedLed, YellowLed, GreenLed };
  _currentLight = 2;
  _timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(500) };
  _timer.Tick += (s, e) =>
  {
    _timer.Stop();
    lights[_currentLight].Opacity = 0.5;
    _pins[_currentLight].Write(GpioPinValue.High);
    _currentLight = _currentLight == 2 ? 0 : _currentLight + 1;
    lights[_currentLight].Opacity = 1.0;
    _pins[_currentLight].Write(GpioPinValue.Low);
    _timer.Interval = TimeSpan.FromMilliseconds(intervals[_currentLight]);
    _timer.Start();
  };
  _timer.Start();
}

若要執行此程式碼,您必須加入 IoT 延伸模組的參考。在 [方案總管] 中的 [參考] 節點按一下滑鼠右鍵按一下 [加入參考],然後延伸模組,請 UWP 加入 Windows IoT 延伸模組。

您建立的計時器間隔陣列 (在您的案例,6s 2 秒,6s) 所設定的間隔中的每個 LED 將會開啟。在螢幕中的省略符號有其設定為 0.5,所以呈現暗灰色,而且每個將設為 1,輕時的不透明度。計時器才會設定如果您可以設定面板的 GPIO InitGPIO 函式中所示**[圖 8**。

[圖 8 的程式碼,以初始化 GPIO 並設定輸出導致 Pin

private bool InitGPIO()
{
  var gpio = GpioController.GetDefault();
  if (gpio == null)
    return false;
  for (int i = 0; i < 3; i++)
  {
    _pins[i] = gpio.OpenPin(_pinNumbers[i]);
    _pins[i].Write(GpioPinValue.High);
    _pins[i].SetDriveMode(GpioPinDriveMode.Output);
  }
  return true;
}

您開啟輸出三個 pin,而且設定為高,Led 已關閉。當您為 [低] 設定 pin 碼時,目前流動電路,LED 將會開啟。當您執行程式時,您會看到使用交通燈號,其中像真正的一個,燈號移開啟和關閉,而在面板的外觀中的相片螢幕**[圖 9**。

號誌燈面板有程式正在執行
[圖 9 號誌燈面板有程式正在執行

總結

如您所見,它只使用 Raspberry Pi 建立互動的程式。了解 Windows 10 程式設計,您已經有您需要程式設計 Raspberry Pi (沒錯,互動面板是另一回事,但它已經差不多快完成了) 的所有知識。您可以建立您的程式相同的方式建立 (事實上,且不會變更 Raspberry Pi 中執行的 UWP 程式) 的任何 Windows 10 程式。唯一的差別是您已設定資料,並取得資料的 GPIO 控制站。如果您想要擴充您的知識,然後再試其他專案,有許多範例試用bit.ly/2llecFZ。這會開啟許多機會,您可以結合絕佳和生產力軟體的功能強大的硬體。這是所向無敵的組合。


Bruno sonnino 在此將自 2007年已經是 Microsoft MVP。他是開發人員、 顧問和作者,不必撰寫許多書籍和文章有關 Windows 開發。您也可以關注他的 Twitter: @bsonnino或閱讀他的部落格blogs.msmvps.com/bsonnino

感謝下列 Microsoft 技術專家人員檢閱這份文件︰ Rachel Appel