April 2016

Band 31, Nummer 4

Dieser Artikel wurde maschinell übersetzt.

Moderne Apps – Entwickeln von UWP-Apps für das Internet der Dinge

Durch Frank La La

Der am häufigsten verwendeten Ausdrücke in der Technologiebranche ist heute "des Internets der Dinge," oft als IoT abgekürzt. Das Internet der Dinge verspricht, die jedes Gerät in einem intelligenten Gerät aktivieren, indem Sie sie in die Cloud zu verbinden. Aus der Cloud kann ein Gerät eine Oberfläche und die unformatierten Daten bereitstellen. Kameras können Remote gesteuert werden. Daten können erfasst und nach Mustern und Einblicke analysiert werden.

Zwar gab es viele Artikel im MSDN Magazine zum Sammeln und Analysieren von Daten von diesen Geräten, noch nicht ausreichte jeder Diskussion von Hardware oder Verkabelung Perspektiven. IoT näher beschäftigen erfordern jedoch möglicherweise Entwicklern, neue Fähigkeiten wie z. B. Electronics Entwurf, Strom und in einigen Fällen Lötarbeiten abzurufen. Entwickler, die naturgemäß sind sehr gerne Code jedoch möglicherweise nicht ganz so vertraut der Verbindungen und alles in der virtuellen Welt hinter Elektronen fühlen. Viele Softwareentwickler möglicherweise selbst fragen sich, was mit solderless Breadboards, Überbrückungskabel und Widerstände zu tun. Diese Spalte wird ihre Verwendung erläutert.

Natürlich programmierbare Geräte seit vielen Jahren vorhanden gewesen sein. Schreiben von Code für diese Geräte erforderlich, jedoch häufig umfassende Kenntnisse der proprietären Toolsets und teure Prototypen Hardware. Der Raspberry Pi 2 Modell B können Windows 10 IoT Core, eine spezielle Version von Windows 10 ausführen. Windows 10 IoT Core ist kostenlos von der Windows Dev Center IoT-Website unter dev.windows.com/iot. Nun, dass Windows 10 IoT Core auf dem Raspberry Pi 2 ausgeführt wird, können Entwickler von universellen Windows-Plattform (UWP) ihren vorhandenen Code und Kenntnisse nutzen.

In dieser Spalte ich erstelle eine UWP-app, die auf dem Raspberry Pi 2 ausgeführt wird und leuchtet eine LED leuchtet, die anhand der Daten von einer Wetter-API. Ich werde IoT-Konzepte, die Hardware Raspberry Pi 2 Modell B und wie die Kontrolle von C#-Code führen.

Project (Projekt): Überwachung von Frost

Wie Spring wieder betriebsbereiten Wetter bringt, await viele vorzeitig die Chance, Gartenarbeit erneut starten. Frühen Frühjahr in vielen Bereichen kann jedoch auch ein paar kaltem Wetter Snaps nutzen. Frost ernsthaft Pflanzen, also als Gärtners beschädigen, möchte ich wissen, ob es sich bei kaltem Wetter in die Planung ist. Dazu werde ich eine Nachricht auf dem Bildschirm angezeigt, wenn geplante Tiefstwert unter 38 Grad Fahrenheit (3,3 Grad Celsius) fällt. Die app leuchtet als eine zusätzliche Warnung auch schnell eine LED.

Zusätzlich zu der Software, die normalerweise benötigt, UWP-apps zu schreiben muss ich einige zusätzlichen Hardware haben. Natürlich muss ich eine Raspberry Pi 2 Modell B auf dem meine Lösung bereitgestellt haben. Außerdem benötige ich eine MicroSD-Karte, eine LED leuchtet, 220 Ohm Widerstands, solderless steckplatine, Jumper-Kabel, USB-Maus und Tastatur und HDMI-Monitor.

Raspberry Pi 2 Modell B Raspberry Pi 2 Modell B ist der Computer, auf dem werde ich meine UWP-app bereitstellen. Der Raspberry Pi 2 enthält 40 Pins (finden Sie unter Abbildung 1), andere sind allgemeiner Pins (GPIO)-kompatible. Mithilfe von Code, wird es möglich sein, ändern oder den Status dieser Pins gelesen. Jede Pin verfügt über einen von zwei Werten: hohe oder niedrige – für die höhere Spannung hohen und niedrigen für untere Spannung. Dadurch kann ich das Aktivieren oder deaktivieren Sie die LED leuchtet.

Raspbery Pi 2 B Pinouts Modelldiagramm
Abbildung 1 Raspbery Pi 2 B Pinouts Modelldiagramm

MicroSD-Karte der MicroSD-Karte auf der Festplatte Raspberry Pi 2 fungiert. Dies ist, wo das Gerät die Startdateien und OS finden können. Außerdem ist es, in dem die UWP-app, die einmal bereitgestellt, gespeichert wird. Ich kann ausreichen SD-Karten so klein wie 4GB, aber es wird empfohlen, 8 GB verfügen. Bestimmen Sie die projektanforderungen natürlich die Größe der Karte erforderlich. Wenn Sie z. B. lokal speichern großer Mengen Sensordaten vor dem Hochladen werden musste, dann müsste eine größere SD-Karte zur Unterstützung einer größeren lokalen Dateispeicher ich.

Solderless Steckplatine und Jumperdrähten um Komponenten des Raspberry Pi 2 zu verbinden, muss ich einen Pfad für Elektronen von aus der Raspberry Pi 2 durch meine Komponenten und zurück in den Raspberry Pi 2 erstellen. Dies wird als eine Verbindung bezeichnet. Obwohl ich von eine beliebige Anzahl von Möglichkeiten mithilfe, die Teile miteinander zu verbinden, ist die schnellste und einfachste Möglichkeit der solderless steckplatine. Wie der Name schon sagt, brauchen ich ruinieren Komponenten zusammen, um die Verbindung zu erstellen. Ich werde Jumperdrähten für diese Verbindungen verwenden. Der Typ des solderless steckplatine für dieses Projekt verwendete hat 30 Zeilen und 10 Spalten des Sockets. Beachten Sie, dass die Spalten mit zwei Gruppen von fünf aufweisen: "a bis e" und "f bis j." Jedes Loch wird an alle anderen Loch in einer Gruppe von Zeilen und Spalten elektrisch verbunden. Der Grund Warum wird offensichtlich, kurz.

LED-Anzeige und Widerstand In diesem Projekt werde ich die LED leuchtet verbinden, an die Raspberry Pi 2. Die Pins auf dem Raspberry Pi 2 arbeiten auf 5 Volt. Die LED leuchtet, wird jedoch auf diese Spannung brennen. Die Resister reduziert zusätzliche Energie für die Verbindung für die LED leuchtet sicher zu gestalten.

Ethernet-Kabel, USB-Maus und Tastatur und HDMI-Monitor Raspberry Pi 2 Modell B verfügt über vier USB-Ports, ein Ethernet-Buchse und HDMI-Ausgabe, für andere Connectors. Sobald die UWP-Anwendung auf dem Gerät ausgeführt wird, kann ich mit sehr ähnlich interagieren, als es auf einem PC oder Tablet wurden, da ich eine Anzeige habe, und ziehen Sie die Planung für einen bestimmten Bereich eine Postleitzahl eingeben können.

Bereitstellen von Windows auf dem Raspberry Pi 2

Mit Windows 10 IoT Core, ich befolgen die Anweisungen unter bit.ly/1O25Vxl. Der erste Schritt ist die Kernkomponenten von Windows 10 IoT am herunterladen bit.ly/1GBq9XR. Die Kernkomponenten von Windows 10 IoT enthalten Dienstprogramme, WindowsIoTImageHelper und WindowsIoTWatcher, für die Arbeit mit IoT-Geräte. WindowsIoTImageHelper bietet eine Benutzeroberfläche, die eine SD-Karte mit Windows IoT-Core-Startdateien zu formatieren. WindowsIoTWatcher ist ein Dienstprogramm, das im lokale Netzwerk für Windows IoT Core Geräte prüft in regelmäßigen Abständen. Ich werde ihnen in Kürze verwenden.

Verbinden die Hardware

Um zu beginnen, erstellen eine Lösung für das Internet der Dinge, muss ich eine "Thing" an, mit denen Sie arbeiten. Dies ist der Teil eines IoT-Projekts, dass viele Entwickler die furchterregend finden. Die meisten Entwickler sind daran gewöhnt, verschieben Sie Bits über Code, nicht unbedingt Teilen zusammen für Elektronen auf Reisen zusammensetzen. Um dies zu vereinfachen, die ich Ausführen der einfachen blinkenden LED hellen Projekts (bit.ly/1O25Vxl), aber es mit Daten aus dem Internet in Echtzeit zu verbessern. Die grundlegende Hardware Netzteile sind identisch: LED-Anzeige, solderless steckplatine, Überbrückungskabel und 220 Ohm Widerstands.

Der Raspberry Pi 2 Modell B hat eine Reihe von GPIO-Pins. Der Status der viele Pins kann von Code bearbeitet werden. Allerdings einige dieser Pins haben Funktionen reserviert und kann nicht gesteuert werden, indem Code. Glücklicherweise sind praktisch Diagramme zum Zweck der einzelnen Pin. Im Diagramm angezeigt, Abbildung 1 wird als eine "Pinouts" bezeichnet und bietet eine Übersicht über die Platine-Schnittstelle.

Entwerfen eine Verbindung

Was muss ich erstellen Sie eine Verbindung für Elektronen fließen, wie in dargestellt, über im Grunde ist Abbildung 2. Die Elektronen beginnen Sie ihre Reise an Pin 1, mit der Bezeichnung 3,3 v PWR in Abbildung 1. Diese Pin stellt 3,3 v Spannung mit der Verbindung, und diese Leistungsfähigkeit, die die LED leuchtet, ist. In der Tat ist 3,3 v zu viel Energie für die LED leuchtet. Um zu verhindern brennen, positioniere ich ein Widerstand im Stromkreis, elektrische Energie zu absorbieren. Als Nächstes wird im Stromkreis GPIO-5, die gemäß dem Diagramm Pinouts physischen Pin 29 ist. Diese Pin, die durch Code gesteuert werden kann, macht die LED leuchtet "smart". Kann ich die Ausgabe Spannung dieser PIN entweder hoch (3,3 v) festgelegt oder Niedrig (0 Volt) und die LED leuchtet werden entweder aktiviert oder deaktiviert bzw..

Das Diagramm für die Verbindung
Abbildung 2: das Verbindung-Diagramm

Erstellen einer Verbindung

Jetzt ist es Zeit zum Erstellen der Verbindung im angezeigten Abbildung 2. Hierzu muss ich weibliche Ende ein Jumper-Kabel und verbinden Sie es mit Pin 29 auf dem Raspberry Pi 2. Ich platzieren Sie das andere Ende der Stecker in einen Steckplatz auf meinen solderless steckplatine. Ich habe in Zeile 7 Spalte e. Als Nächstes nehmen die LED Licht und setzen Sie die kürzere Bein in den Steckplatz in Zeile 7, Spalte a, beim Platzieren der LED für andere, mehr in das Einschubfach in Zeile 8 Spalte ein. Nehmen Sie nun kann ich den Widerstand und setzen Sie in Zeile 8, Spalte c und das andere in Zeile 15, Spalte c ein Ende. Abschließend den Stecker des zweiten Jumper-Kabels in das Einschubfach in Zeile 15 Stellen Spalte ein, und schließen Sie das Weiblich in Pin 1 auf dem Raspberry Pi 2. Sobald dies geschehen ist, ich habe etwas wie ähnliches Abbildung 3.

Der abgeschlossene Verdrahtung mit Raspberry Pi 2 in einem Fall aus Kunststoff
Abbildung 3: der abgeschlossenen Verdrahtung mit Raspberry Pi 2 in einem Fall aus Kunststoff

Starten Sie das Gerät

Nachdem ich Windows IoT Core auf eine MicroSD-Karte installiert haben, fügen Sie ich die SD-Karte der Raspberry Pi 2. Anschließend kann ich schließen Sie ein Netzwerkkabel, USB-Maus und HDMI-Monitor und schließen Sie den Raspberry Pi 2. Das Gerät startet bis und schließlich den Bildschirm in Abbildung 4 wird (ich Notieren Sie den Gerätenamen und die IP-Adresse) auf.

Der Standardbildschirm für die Informationen unter Windows IoT Core für Raspberry Pi 2
Abbildung 4: den Standardbildschirm für die Informationen unter Windows IoT Core für Raspberry Pi 2

Schreiben Sie die Software

Mit der Hardwaresetup abgeschlossen ist kann ich jetzt auf die Software Teil meiner IoT-Projekt arbeiten. Erstellen eines IoT-Projekts in Visual Studio ist einfach. Es ist im Wesentlichen identisch mit einem anderen UWP-Projekt. Wie üblich, ich mein Projekt erstellen, indem Sie die Datei auswählen | Neues Projekt in Visual Studio 2015 und Auswählen der Option leere App (universelle Windows) wie die Vorlage. Mein Projekt "WeatherBlink." aufgerufen werden sollen Einmal das Projekt geladen wird, kann ich müssen einen Verweis auf die Windows-IoT-Erweiterungen für die UWP hinzufügen. Kann ich mit der rechten Maustaste auf Verweise in meiner Projektmappe im Projektmappen-Explorer und im Dialogfeld, folgt, überprüfen Sie die Windows-IoT-Erweiterungen für die UWP unter Extensions in der universellen Windows-Struktur (siehe Abbildung 5). Abschließend klicke ich auf OK.

Hinzufügen eines Verweises auf Windows IoT-Erweiterungen für die UWP in Visual Studio 2015
Abbildung 5: Hinzufügen eines Verweises auf Windows IoT-Erweiterungen für die UWP in Visual Studio 2015

Nun, da ich den richtigen Verweis zum Projekt hinzugefügt haben, füge ich die folgende using-Anweisung am Anfang der Datei "MainPage.Xaml.cs":

using Windows.Devices.Gpio;

Der Windows.Devices.Gpio-Namespace enthält alles, was die Funktionalität, die ich auf die GPIO zugreifen müssen, auf dem Raspberry Pi 2 fixiert. Festlegen des Status einer bestimmten PIN ist einfach. Beispielsweise wird der folgende Code den Wert der Pin 5 hoch:

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

Lesen eine Pin-Wert ist ebenso einfach:

var currentPinValue = gpioPin.Read();

Da GPIO-Pins Ressourcen, die sind für die Anwendung freigegeben werden müssen, ist es einfacher, diese über Variablen im Bereich einer Klasse zu verwalten:

private GpioPin gpioPin;
private GpioPinValue gpioPinValue;

Und in eine gemeinsame Methode zu initialisieren:

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

Einfache Benutzeroberfläche erstellen

Da dies eine UWP-app ist, habe ich den Zugriff auf sämtliche Windows 10 UWP-Benutzeroberflächen-Steuerelemente. Dies bedeutet, dass meine IoT eine vollständig interaktive Benutzeroberfläche ohne zusätzlichen Aufwand von mir. Viele IoT-Implementierungen sind "headless", was bedeutet, dass sie keine Benutzeroberfläche haben.

Dieses Projekt muss eine einfache Benutzeroberfläche, die basierend auf der Wettervorhersage eine Meldung angezeigt wird. Tastatur und Maus des Raspberry Pi 2 verbunden, Endbenutzer wird in der Lage, eine Postleitzahl eingeben und die Wettervorhersage Informationen siehe entsprechend aktualisieren Abbildung 6.

Die Benutzeroberfläche der WeatherBlink UWP-App
Abbildung 6: die Benutzeroberfläche der WeatherBlink UWP-App

Machen das Gerät Smart

Um meine IoT-Geräts der Wettervorhersage aufmerksam zu machen, muss Sie Wetterdaten aus dem Internet abrufen. Da dies eine UWP-app ist, habe ich die Bibliotheken und Tools, die mir zugegriffen werden kann. Ich habe meine Wetterdaten abrufen openweathermap.org/api, die Wetterdaten für eine angegebene Position im JSON-Format zur Verfügung stellt. Alle Temperaturergebnisse in Kelvin erhalten. Abbildung 7 wird mein Code für das Wetter überprüfen und ändern die Rate der blinkt, basierend auf den Ergebnissen. In der Regel werden Frost Warnungen ausgegeben, sobald die Lufttemperatur etwa 38 Grad Fahrenheit (3,3 Grad Celsius) erhält. Wenn besteht die Möglichkeit von Frost, möchte ich die LED blinkt schnell zum Benachrichtigen, dass mein Garten unmittelbare Gefahr wird. Andererseits möchte ich die LED blinkt langsam, lassen Sie mich wissen, dass die Stromversorgung des Geräts ist. Da REST-API aufrufen und Analysieren von JSON-Antwort in UWP ein Thema gut abgedeckt ist, habe ich diesen bestimmten Code aus Gründen der Übersichtlichkeit weggelassen.

Abbildung 7 Wetter und die Geschwindigkeit des blinkt überprüfen

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."
  }

Blink-Methode ist einfach – das Intervall eines Zeitgebers Verteilung basierend auf dem Parameter gesendet wird:

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

Die BlinkingTimer_Tick-Methode ist der Code zum Aktivieren oder deaktivieren Sie der LED sich befindet. Liest den Status des Stifts und legt dann den Status auf den entgegengesetzten Wert:

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);
  }
}

Der vollständige Quellcode ist verfügbar unter bit.ly/1PQyT12.

Bereitstellen der App

Bereitstellen der app für den Raspberry Pi 2 erfordert eine Erstinstallation auf meinem PC. Zunächst muss ich meine Architektur Arm zu ändern, und klicken Sie dann in der Dropdownliste neben dem Symbol für die Wiedergabe, wähle ich Remotecomputer. Das Dialogfeld "Remoteverbindungen" (siehe Abbildung 8) wird angezeigt, in dem ich können entweder die IP-Adresse des Geräts manuell eingeben oder aus einer Liste der Geräte automatisch erkannt. In beiden Fällen muss Authentifizierung nicht aktiviert werden. Abschließend klicke ich auf Select, und jetzt kann ich meine Lösung bereitstellen, mit dem Gerät.

Dialogfeld für Remoteverbindungen
Abbildung 8 Remoteverbindungen Dialogfeld

Entwurfsaspekte

Die Welt der IoT öffnet neue Möglichkeiten und Herausforderungen für Entwickler. Wenn Sie einen Prototyp der IoT-Geräte zu erstellen, ist es wichtig, in der Common Language Runtime-Umgebung berücksichtigen, in denen es bereitgestellt werden muss. Haben das Gerät bereit Zugriff auf Power und Netzwerke? Ein home Thermostat sicherlich wird, aber ein Wetterstationen, die in einer anderen Gesamtstruktur platziert möglicherweise nicht. Natürlich bestimmen die meisten dieser Probleme, wie ich mein Gerät, z. B. erstellen wetterfest Container für outdoor Szenarien hinzufügen. Meine Lösung werden ohne Kopfinformationen oder eine Benutzeroberfläche erforderlich? Einige dieser Probleme bestimmen, wie ich Code schreiben würden. Z. B. wenn das Gerät Daten über ein Netzwerk 4 G überträgt müssen ich Kosten für die Übertragung von Daten berücksichtigen. Ich möchten sicherlich die Menge der Daten zu optimieren, die das Gerät sendet. Wie bei jedem Projekt, das ausschließlich Software ist, ist es wichtig, halten die Endbenutzer-Anforderungen berücksichtigen.

Nachbereitung

Steuern einer LED leuchtet aus Code die Welt möglicherweise nicht ändern, gibt es viele andere Clientanwendungen, die konnte. Statt auf einem Wetterbericht API, konnte ich verbinden ein Temperatursensors Raspberry Pi 2 und platzieren Sie es in oder in der Nähe von meinem Garten. Was ist ein Gerät, das eine E-mail senden konnte warnen, wenn er in einem bestimmten Teil meines Hauses Feuchtigkeit erkannt? Stellen Sie sich per Funk Qualität Sensoren auf einer größeren Stadt oder lediglich in einer Umgebung installieren. Stellen Sie sich vor, platzieren Gewichtung Sensoren auf Dächer, um festzustellen, ob genügend Schnee gefallen ist, um festzustellen, ob ein Risiko reduzieren besteht. Die Möglichkeiten sind unbegrenzt.

Wechseln Sie aus, und erstellen Sie die Vorteile!


Frank La Vigneist ein IT-Experte im Microsoft Technology and Civic Engagement-Team. Sein Ziel ist es, Benutzern bei der Nutzung von IT-Technologie zu helfen, um für eine bessere Erfahrung zu sorgen. Er stellt regelmäßig auf FranksWorld.com und verfügt über eine YouTube namens Frank World-TV-Kanal. (youtube.com/FranksWorldTV).

Dank der folgenden technischen Experten für die Überprüfung dieses Artikels: Rachel Appel, Robert Bernstein, Andrew Dressler