How to Connect a Raspberry running Windows 10 to Azure IoT Hub

Source code on GitHub repository: 
https://github.com/emanbuc/Win10_IoT_Hub_Demo

Azure IoT Hub permette di connettere i dispositivi utilizzando diverse modalità e protocolli. Un dispositivo può comunicare direttamente con un endpoint del gateway cloud oppure, se il dispositivo non può usare i protocolli di comunicazione supportati dal gateway cloud, è possibile connettersi tramite un gateway intermedio, come il gateway del protocollo hub IoTche esegue la conversione del protocollo.  In alcuni casi è invece conveniente collegare più sensori ed attuatori ad un gateway locale (field gateway) in grado di eseguire il client nativo e connettersi all’hub.  Un Raspberry Pi 2 0 3 con Windows 10 può svolgere  facilmente il ruolo field gateway e funzonare da collettore per la rete di sensori locali.

iot-reference-architecture
Azure IoT Reference Architecture

Fase1: Setup ambiente di sviluppo

Ambiente di sviluppo per per applicazioni Win10 IoT (vedi vedi setup ambiente di sviluppo)

  • Windows 10
  • Visual Studio 2015
  • Windows IoT Core Project Template

Setup  Azure IoT Hub 

  • Creare un account Azure e configurare il servizio IoT Hub(vedi setup Azure IoT Hub)
  • Scaricare ed installare l’utility Device Explorer (vedi How To Use Device Explorer )

Fase 2: Registrare il dispositivo

Per inviare o ricevere informazioni dall’hub è prima necessario registrare il dispositivo sul “device identity registry“. LA registrazione può essere completa utilizzando Device Explorer

1._ Avviare Device Explorer ed inserire la “Hub Connection String” associata al ruolo “IoT Hub Owner” Open the Device Explorer app (C:\Program Files (x86)\Microsoft\DeviceExplorer\DeviceExplorer.exe) and fill the IoT Hub Connection String field with the connection string of the IoT Hub you created in previous steps and click on Update.

azure031
IoT HuB Connection String in Azure web Portal
azure04
Configurazione connessione in Device Explorer

 

2._ Clicaare su “Update”

3._ Aprire la tab “Management” e cliccare sul pulsante “create”. Nella finestra di dialogo inserire il nome del dispositivo nella stringa “DeviceId”. e poi cliccare su “create” nel dialogo.

azure05
Creazione dispositivo da Device Explorer

4._ Dopo la creazione nella griglia sarà aggiunto un nuova riga con le chiavi di accesso associate al dispositivo. Queste chiavi serviranno in seguito per la connessione all’hub.

azure06

Fase3 – Creare Una applicazione UWP per Windows 10 IoT Core

azure08
Visual Studio 2015 -Create New UWP application project

Nota: la libreria “IoT Extention” non è inclusa nel templat standard UWP. Sarà necessario aggiungere manualmente il reference.

  1. click destro sul progetto
  2. selezionare “Add Reference”
  3. cercare  e selezionare “Universal Windows->Extensions->Windows IoT Extensions for the UWP”
azure09
Visual Studio 2015 – Add IoT Extention to standard UWP application project

Ora realizziamo un’interfaccia utente minimale aggiungiamo una stringa di testo ed un pulsante al file  MainPage.xaml del template predefinito.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
 <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
 <TextBox x:Name="HelloMessage" Text="Hello, World!" Margin="10" IsReadOnly="True"/>
 <Button x:Name="ClickMe" Content="Click Me!" Margin="10" 
          HorizontalAlignment="Center" Click="ClickMe_Click"/>
 </StackPanel>
</Grid>

Nel file MainPage.xaml.cs modificare il metodo collegato al click sul pulsante:

private void ClickMe_Click(object sender, RoutedEventArgs e)
{
    this.HelloMessage.Text = "Hello, Windows 10 IoT Core!";
   //TODO: send message to IoT Hub
}

Compilare e testare l’applicazione facendo un deploy sul Raspberry. (vedi sviluppo applicaizioni Windows 10 su Raspberry)

Se tutto funziona correttamente possiamo andare avanti e connettere l’applicazione al servizio IoT Hub.

Fase 4: Connessione ad Azure IoT Hub

Ora che la nostra applicazione viene eseguita correttamente su Raspberry è necessario includere un reference alla libreria Microsoft.Azure.Devices.Client per utilizzare il client fornito da Microsoft. Questo componente contiene tutte le funzionalità per connettere il nostra applicaizone all’IoT Hub.

  1. In Solution Explorer click destro sul progetto (o sulla solution) e poi scegliere “Manage NugetPakages”
manage_nuget
Visual Studio 2015 – Open NuGet Packages manager

2. Si apriraà “NuGet Package Manager”. Cercare il pacchetto denominato Microsoft.Azure.Devices.Client  e cliccare su “Install”

azure10
Install Azure Device Client from NuGet

NuGet provvederà a selezionare ed installare anche tutte gli altri pacchetti richiesti se non sono già presenti nell’ambiente di sviluppo.

Per utilizzare il client sono sufficienti poche righe di codice nel file MainPage.xaml.cs

Alcuni “using”

 

using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.Devices.Client;

Due semplici metodi per ricevere ed inviare dati da e verso l’hub:

private async Task SendDataToAzure()
{
 DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("<replace>", TransportType.Http1);

  var text = "Hellow, Windows 10!";
  var msg = new Message(Encoding.UTF8.GetBytes(text));

  await deviceClient.SendEventAsync(msg);
}
public async static Task ReceiveDataFromAzure()
{
 DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("<replace>",
 TransportType.Http1);

Message receivedMessage;
 string messageData;

while (true)
 {
  receivedMessage = await deviceClient.ReceiveAsync();

  if (receivedMessage != null)
  {
    messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
    await deviceClient.CompleteAsync(receivedMessage);
  }
 }
}

Nota: nel codice dovete inserire la stringa diconnessione del dispositivo al posto di “<replace>”.La stringa di connessione può essere copiata da Device Explorer.

 

azure11
Get connection string from Device Explorer

Il metodo ReceiveDataFromAzure() deve essere aggiunto al costruttire MainPage()

public MainPage()
{
    this.InitializeComponent();
    ReceiveDataFromAzure();
}

Fase5: Test invio e ricezione messaggi

Device Explorer può essere utilzzato anche per inviare messaggi che saranno visualizzati sullo schermo connesso al Raspberry e per ricevere  messaggi inviati dal client in esecuzione sul raspberry.

azure12azure13

 

 

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...