November 2016

Band 31, Nummer 11

Dieser Artikel wurde maschinell übersetzt.

Azure IoT Hub: Erfassen und Analysieren von Gehirnwellen mit Azure IoT Hub

Durch Benjamin Perkins

Das Gehirn ist das Modul, das gleichzeitige Eingabe aus vielen Quellen und viele Schnittstellen interpretiert, und löst dann eine Art von Aktion oder Reaktion. Quellen wie eine Blume, Sun, oder Firecrackers und Schnittstellen wie Geruch, sichtbar und Sound Calmness, eine physische Bewegung in die Schattierung oder dummkopf Reaktion auf Sound lauter auslösen können. Derzeit ist ein zuverlässiger Algorithmus wie folgt noch aufgrund der großen Anzahl von Variablen zwischen der Quelle, die menschliche und die Schnittstelle nicht vorhanden.

Ableiten von dieser komplexen Algorithmus besteht darin, einen besseren Einblick wie das Gehirn fungiert und in zahlreichen Situationen, wie eine Blume smelling, wird in das Brennen von Sun und unerwartet hören Firecrackers reagiert. Dieser Artikel beschreibt, wie Sie weitere Einblicke in das Gehirn Funktionsweise in angegebenen Szenarien in der Hoffnung, definieren Sie einen Algorithmus, der reagiert, eines Tages zuverlässig in mehrere unerwartete Situationen.

Erfassen, speichern und Analysieren von Gehirn Wellen

Das Projekt, das in diesem Artikel beschriebenen verwendet zahlreiche Technologien zu erfassen, speichern und Analysieren von Gehirn Wellen, von denen jede sind in kurz beschrieben Abbildung 1. Die ersten beiden Komponenten – Gehirn Wellen erfassen und speichern sie in Azure IoT Hub – werden in den nächsten Abschnitten dieses Artikels beschrieben. Die verbleibenden drei Komponenten werden in Teil 2 dieses Artikels in einer zukünftigen Ausgabe des MSDN Magazins erläutert.

Abbildung 1 die Komponenten des Projekts Gehirn Problembehebung

Komponenten Rolle Kurze Beschreibung
Emotiv Insights-SDK Erfassen Eine Gehirn-Schnittstelle, die in Zahlen, Gehirn Wellen umwandelt
Azure IoT Hub Speicher Temporärer Speicher-Warteschlange für IoT-Geräts gerenderten Daten
SQL Azure Speicher Hochgradig skalierbare, kostengünstige und flexible-Datenbank
Stream Analytics Speicher Eine Schnittstelle zwischen Azure IoT und SQL Azure
Power BI Analyse Data Analysis-Tool mit Unterstützung für einfache Grafik-Basis

Die Abschnitte werden von Komponenten jeweils einschließlich einer funktionalen und technischen Beschreibung sowie die Details der Codierung oder Konfiguration Anforderungen aufgeschlüsselt. Die verschiedenen Teile der Lösung werden in die Art und Weise sortiert, erstellen; Allerdings ist es möglich, diese in vielen verschiedenen sortierte Sequenzen zu erstellen. Das technische Ziel ist hochladen Gehirn Wellen mithilfe einer Gehirn Schnittstelle (BCI) erfasst wurden, in eine SQL Azure-Datenbank zu speichern und Analysieren der Daten mit Power BI.

Erfassen von Gehirn Wellen

Wenn das Gehirn Eingaben empfängt und reagieren, entscheidet es beantworten durch Auslösen von elektrischen Strom zwischen Neuronen neuronalen ganze aufgerufen. Diese ganze neuronalen sind physische Bewegung von Artikeln, die echte, beschreibbare Vibrationen mit anderen Intensität und an verschiedenen Stellen in das Gehirn verursachen.

Ein Electroencephalograph erfasst diese Vibrationen, und nur in der Vergangenheit Jahren haben Unternehmen eine kostengünstige BCI zum Erfassen dieser Gehirn Aktivitäten erstellen. (Eine Liste vieler dieser Unternehmen und Geräte auf bit.ly/2c7j4fw.) Darüber hinaus haben einige dieser Unternehmen eine SDK für ihre Geräte erstellt, die in Echtzeit Visualisierung und Speicherung von Gehirn Aktivität zulassen.

Schrieb ich einen kurzen Beitrag über meine ursprüngliche Absicht des Azure mein Gehirn Wellen Inbetriebnahme; Sie erhalten sie unter bit.ly/294Hi4R. Beachten Sie, dass ich die Emotiv Insight BCI für dieses Projekt ausgewählt haben. Dieses BCI verfügt über fünf Elektroden (AF3, AF4, T7, T8 und O1) mit jeweils Zustand der denken Messwerte auf fünf verschiedenen Gehirn Frequenzen, siehe Abbildung 2.

Abbildung 2 Emotiv Insight BCI Literatur

Brain Frequenzen Status der Beachten
ALPHA Gelockerte high Level Kreativität reflektierenden
LOWBETA Soziale Aktivitäten, Aufregung, Warnung
HIGHBETA Fokus, denken, arbeiten
GAMMA Optimale Häufigkeit für denken, aktiv betrachtet.
THETA Standbymodus, drowsy, meditative und glaube ich träume

Das Emotiv SDK ist zum Herunterladen von GitHub (github.com/Emotiv) und lässt sich leicht; in diesem Beispiel verwendet die Community-Sdk-Version. Beim Konfigurieren der C#-Version des SDK in Visual Studio ausführen, sind drei "Probleme", die nicht intuitive waren:

  1. Achten Sie sorgfältig durch, der "Bitness" der Visual Studio-Projekt und die Eigenschaft Bitanzahl die Bitanzahl der Komponenten in Nr. 3 ausgerichtet werden sollen.
  2. Stellen Sie sicher, dass die DotNetEmotivSDK.dll in der gleichen Bitanzahl wie Nr. 3 kompiliert wird.
  3. Müssen Sie die edk.dll und die glut32.dll/glut64.dll manuell in das Arbeitsverzeichnis, z. B. Lösungen kopieren: Webprojektvorlagen oder/Bin/Release.

Um zu beginnen, navigieren Sie zu dem C#-Projekt in der Community-Sdk-Master\examples\C-Ordner und öffnen Sie die Projektmappe DotNetEmotivSDK in Visual Studio. Festlegen Sie das DotNetEmotivSDK-Projekt als Startprojekt, mit der rechten Maustaste auf das Projekt, und wählen als Startprojekt festlegen, durch Drücken von STRG + UMSCHALT + B kompilieren Sie des Projekts. Achten Sie besonders auf die Zielplattform aus, und stellen Sie sicher, dass sie während der Konfiguration des SDK konsistent bleiben. Sie sollten entweder X86 oder X64 auswählen.

Als Nächstes erstellen Sie eine neue Konsolenanwendung in Visual Studio und fügen einen Verweis auf die DotNetEmotivSDK.dll, die während der Kompilierung des Projekts DotNetEmotivSDK erstellt wurde, indem Sie mit der rechten Maustaste auf Verweise, und navigieren Sie zu der Ex: \obj\x86\Release-Verzeichnis und genau auswählen kompilierten Binärdatei. Letzte, kopieren Sie die edk.dll und die glut*.dll-Datei zum selben Arbeitsverzeichnis, als die DotNetEmotivSDK.dll eingefügt wurde. Es gibt zahlreiche Kopien von edk.dll und glut*.dll. Wählen Sie die Binärdateien in diesen Speicherort im SDK enthaltenen Community-Sdk-master\bin\win32, wenn Sie alles in 32-Bit-kompiliert haben, wählen Sie andernfalls die 64-Bit-Version.

Sobald das SDK ist ordnungsgemäß konfiguriert, und die neue Konsolenanwendung bereit ist, setzen Sie Emotiv in der Datei Program.cs verwenden, um auf um die Funktionen in der Bibliothek zu verweisen. Falls gewünscht, zeigen Sie das BrainComputerInterface-Projekt im herunterladbaren Beispielcode an. Achten Sie besonders auf GetHeadsetInformation, da es sich handelt, in dem einige vor der Überprüfung des Geräts BCI ausgeführt wird.

Die Methode GetHeadsetInformation abonniert die EmoStateUpdatedEventHandler, die ausgelöst wird, wenn die ProcessEvents-Methode der EmoEngine-Klasse aufgerufen wird. Die GetHeadsetInformation-Methode aufrufen, wird weiter ProcessEvents innerhalb einer While-Schleife bis Bool StopHeadsetInformation auf False festgelegt ist. Wenn die EmoStateUpdatedEventHandler ausgelöst wird, führt er die Engine_EmoStateUpdated-Methode, die Prüfung der Akku Ebene und die Signalstärke. Es ist wichtig, die Gültigkeit der gesammelten BCI Daten, dass der Akku eine akzeptable Belastung verfügt und dass es eine angemessene Bluetooth 4.0 LE-Verbindung zwischen BCI Kontakte und dem Computer.

Im Quellcode, das Erfassen der Daten BCI nicht erst beginnen, übergeben Sie diese zwei Messungen einen angemessenen Schwellenwert, z. B. ChargeLevel > 1 & & SignalStrength > EdkDll.IEE_SignalStrength_t.BAD_SIG. Solange die Signalstärke IEE_SignalStrength_t.NO_SIG, größer, in dem NO_SIG ist wird kein Signal, das Gerät funktionale gilt, jedoch nicht optimal, daher den SignalStrength muss gleich mindestens GOOD_SIG, bevor Sie fortfahren. Darüber hinaus die MaxChargeLevel werden fünf und aktuelle Akkuladung größer als eins gibt wieder funktionsfähig. Der Code Gehirn Wellen erfassen, wird die Akkukapazität, die Signalstärke und die Kontaktdaten Qualität für jeden der Elektroden hier gezeigt:

EmoState es = e.emoState;
EdkDll.IEE_SignalStrength_t signalStrength =
  es.GetWirelessSignalStatus(); es.GetBatteryChargeLevel(
  out chargeLevel, out maxChargeLevel);
WriteLine($"AF3: {(int)es.GetContactQuality(
  (int)EdkDll.IEE_InputChannels_t.IEE_CHAN_AF3)}");
WriteLine($"AF4: {(int)es.GetContactQuality(
  (int)EdkDll.IEE_InputChannels_t.IEE_CHAN_AF4)}");
WriteLine($"T7:  {(int)es.GetContactQuality(
  (int)EdkDll.IEE_InputChannels_t.IEE_CHAN_T7)}");
WriteLine($"T8 : {(int)es.GetContactQuality(
  (int)EdkDll.IEE_InputChannels_t.IEE_CHAN_T8)}");
WriteLine($"Pz : {(int)es.GetContactQuality(
  (int)EdkDll.IEE_InputChannels_t.IEE_CHAN_O1)}");

Vorsicht: Die BCI kann Messwerte aus der Elektroden zu erreichen, obwohl die Kontaktdaten Qualität schlecht ist. Wenn einige der Elektroden arbeiten und Sammeln von Daten, andere Elektroden möglicherweise nicht, die eine ideale Situation ist, da die Schlussfolgerungen später aus der Analyse erstellt der kann falsch interpretiert werden alle Elektroden während der Sitzung nicht voll funktionsfähig sind. Es gibt keinen Code im Beispiel zu messen und zu bestätigen, dass alle Elektroden ausgeführt werden; dies dennoch sollte der Fall sein, vor dem Speichern der Messungen. Eine Alternative zum Programmieren der Logik, um zu überprüfen, ob alle Elektroden sind voll funktionsfähig ist, vor dem Ausführen des Codes ist die Verwendung der online Emotiv CPANEL wird bit.ly/1LZge5T. Dort sehen Sie etwa Abbildung 3.

Überprüfen Sie die Elektroden für die Brain-Schnittstelle mit BCI
Abbildung 3 Überprüfen Elektroden für die Brain-Schnittstelle mit BCI

Nachdem die Engine_EmoStateUpdated Methode die BCI funktionsfähig ist bestätigt, setzt es StopHeadsetInformation = False, die While unterbricht-Schleife in der GetHeadsetInformation-Methode. Lesen Sie die Häufigkeiten aller die Elektroden der C#-Code wird veranschaulicht, Abbildung 4 und befindet sich in der GetBrainInterfaceMeasurements-Methode. Die Methode erstellt zunächst ein eindimensionales Array vom Typ EdkDll.IEE_DataChannel_t mit fünf Verweiselemente ein Reference-Element pro Elektrode auf dem Gerät. Abschließend Programm durchläuft jede der fünf Elektroden und die Häufigkeit Stärken in der Konsole ausgegeben. Beachten Sie, dass die GetAverageBandPowers-Methode der Klasse EmoEngine die Channel\electrode (channelList[i]) und die Häufigkeit-Variablen (Theta, Alpha, Low_beta, High_beta und Gamma akzeptiert), in denen die numerische Darstellung der Welle Gehirn ist, gespeichert werden. Jede Auflistung der Messwerte zusammen mit der Elektrode werden im Konsolenfenster mithilfe der statischen WriteLine-Methode finden Sie in der Systemklasse gerendert.

Abbildung 4 die Häufigkeit Werte des Gehirns Schnittstelle Elektroden

EmoEngine engine = EmoEngine.Instance;
EdkDll.IEE_DataChannel_t[] channelList = new EdkDll.IEE_DataChannel_t[5]
{
EdkDll.IEE_DataChannel_t.IED_AF3,
EdkDll.IEE_DataChannel_t.IED_AF4,
EdkDll.IEE_DataChannel_t.IED_T7,
EdkDll.IEE_DataChannel_t.IED_T8,
EdkDll.IEE_DataChannel_t.IED_O1
};
while (true)
{
  for (int i = 0; i < 5; i++)
  {
  engine.IEE_GetAverageBandPowers(0, channelList[i],
    theta, alpha, low_beta, high_beta, gamma);
  WriteLine($"Channel: {channelList[i]}");
  WriteLine($"Alpha: {alpha[0].ToString()}, Low Beta: {low_beta[0].ToString()}, " +
    $"High Beta: {high_beta[0].ToString()}, Gamma: {gamma[0].ToString()}, " +
    $"Theta: {theta[0].ToString()}");
  }
}

Die Konsolenanwendung erfordert, dass Sie ein Emotiv Insight BCI und eine gültige Bluetooth-Verbindung mit. Unabhängig von der gewählten BCI entsprechen die Prinzipien auf folgende Weise:

  • Bevor Sie beginnen, stellen erfassen und Speichern von Daten sicher, dass das Gerät optimal und konsistent ist, damit alle aufgezeichnete Daten werden gesammelt, auf die gleiche Weise.
  • Verstehen, wie die Elektroden konfiguriert sind und was sie, messen Sie Zugriff auf die Maße und anzuzeigen, für die spätere Speicher und Analyse.

Wenn Sie die Konsolenanwendung arbeiten und die Ergebnisse an das Konsolenfenster geschrieben weiterhin im nächsten Abschnitt wird erläutert, wie Azure IoT Hub konfiguriert haben. Konfigurieren eine SQL Azure-Datenbank in die Stream Analytics BCI Daten für die Analyse und Learning einfügt werden in Teil 2 dieses Artikels erläutert.

Die Parallel zwischen Codierung und mit den

Ich glauben nicht, dass mir die einzige Person, die eine Verbindung zwischen dem Erstellen von Codestrukturen und "menschliche" Eigenschaften vorgenommen hat. Es scheint in vielerlei Hinsicht, dass das Erstellen eines Code-Plattformen mit unserer interaktiven Merkmale entworfen wurde, weil die Möglichkeit, uns im Code definieren, die so gut funktioniert erscheint es Datenflüsse fast ohne Gedanken. Betrachten Sie die objektorientierte Programmierung Begriff Vererbung, in denen eine untergeordnete Klasse einen Satz von Attributen und Eigenschaften von einer übergeordneten Klasse erhält. Im Kontext menschlichen erhalten die untergeordneten Elemente Attribute von ihren übergeordneten Elementen wie Augen und Haare Farbe. Darüber hinaus die Möglichkeit, blinken und Geruchssinn sind Beispiele für methodischen Merkmale, die Menschen in der Regel besitzen, wie meine Eltern. Diese Eigenschaften nicht direkt aus meinen Eltern stammen jedoch sie geerbt wurden über viele Generationen von der menschlichen Basisklasse selbst ab.

Würden Sie eine interaktive Workflowdienste-Klasse zu erstellen, würde wahrscheinlich dazu einschließlich aller Menschen grundlegende Attribute und Merkmale innerhalb dieser Klasse, z. B. Geschlecht, Essen, schlafen, Atmen und so weiter. Sie würde dann erstellen eine übergeordneten Klasse geerbt, die von der menschlichen Klasse, mit einige zusätzlichen eindeutigen oder erweiterten Eigenschaften wie der Reflektion, sprechen, schätzen und usw., oder nicht, vorausgesetzt, dass jede Generation von der geerbten Klasse anspruchsvollere, komplexere mit der Zeit wird. Vererbung wird in der Implementierung einer aktuelleren untergeordneten Klasse progressiv fortgesetzt.

Die Menschen Möglichkeit sprechen und Übermitteln von Änderungen in jeder Generation, also, wenn eine andere Programmiersprache Konzept der Polymorphie eintritt. Polymorphismus bedeutet, dass zwar die übergeordnete Eigenschaft Name, Zweck und die Absicht des untergeordneten Elements, es auf andere Weise und mit mehr Eingaben ausgeführt werden kann, damit das Ergebnis genauer ist. Beispielsweise zwar über das übergeordnete Element die Kapazität sprechen, haben das untergeordnete Element eine ähnliche Methode sprechen, die außerdem die Möglichkeit, eine umgekehrte in mehreren Sprachen enthält. Der zusätzliche Parameter an die Methode sprechen wäre Language-Typ. Diese Eingabe wird nicht in die Speak-Methode des übergeordneten Elements vorhanden sein. Die abgeleiteten oder überladene sprechen Merkmal konnte auch einige erweiterte Kommunikationsfunktionen wie Gesichtsausdruck Ausdruck oder einen Flexion enthalten.

Diese strukturierten Klassen erstellt, technisch ausgereifte Methoden und der eindeutigen Satz von Attributen ist eine faszinierende Reise in die Erkenntnissen unserer internen Self und vorhanden ist. Erstellen und Definieren von uns ist die beste Möglichkeit, um zu erfahren, was uns macht Wer wir sind. Ist eine Sache jedoch schnell erkannt, nachdem das Modell erstellt wird, ist: die Methoden auslösen, damit die untergeordneten etwas tun kann. Instanziieren der Klasse ist keine große Sache (untergeordnete untergeordneten = neue Child()), aber was das Modul ist, die dann Ruft die Methoden und die Attribute verwendet? Ohne das Modul vorhanden ist, eine Entität bewegungslos und thoughtless. Während der menschlichen Sinne wie Sight, Geruch und Toucheingabe eine geeignete Methode auslösen-Modul, wird eine Computer-Engine verwendet Daten und codierten Logik, um die Eingabe als Grundlage für eine Aktion zu interpretieren. Zu schreiben, die Logik ordnungsgemäß codiert wir zuerst müsste ein Verständnis der Menschen Funktionsweise der noch nicht. Das fehlende Stück ist das Gehirn.

Speichern die Gehirn Wellen

Um die Gehirn Wellen, die von den BCI gesammelt zu speichern, gibt es zahlreiche erforderliche Komponenten. Aus Sicht der einzelnen denkbar können eine einfache ADO.NET-Verbindung mit einer lokalen SQL­Datenbank und das ist schon alles. Wenn viele Personen mit vielen Geräten, die die Anwendung verwenden soll, ist jedoch ein Azure IoT Hub die beste Möglichkeit, aufgrund dessen Zuverlässigkeit und Skalierbarkeit zu wechseln. Die folgenden drei Komponenten sind erfolgreich hochladen und Speichern von Gehirn Wellen erforderlich:

  1. Azure IoT Hub
    1. Eine geräteidentität
    2. Code zum Hochladen der Gehirn Welle
  2. SQL Azure-Instanz und eine Datentabelle
  3. Stream Analytics-Schnittstelle

Nun besprochen im Detail die Erstellung von Azure IoT Hub.

Azure IoT Hub erstellen

Azure IoT Hub ähnelt einer Warteschlange, dass er vorübergehend speichert mehrere Datenzeilen in der Annahme, eine andere Entität, z. B. einen Reader oder, in diesem Fall wird ein Stream Analytics-Auftrag ist Überwachung der Warteschlange und einer Aktion einmal die Nachricht eingeht. Der Vorteil von Azure IoT Hub ist, dass es extrem stabil und kann sehr groß in kurzer Zeit zu skalieren. Beim Testen dieser Lösung, eingefügte drei Zeilen pro Sekunde und der clientseitige Datensatzanzahl die Anzahl die serverseitigen genau übereinstimmen. Drei Ereignisse pro Sekunde ist sehr klein. Azure IoT Hub kann Millionen Ereignisse pro Sekunde verarbeiten.

Um ein Azure IoT Hub erstellen, benötigen Sie ein Azure-Abonnement und Zugriff auf Azure-Portal auf bit.ly/2bA4vAn. Klicken Sie auf das + neues Menü Element, navigieren Sie zum Internet der Dinge, und wählen Sie IoT Hub aus. Geben Sie die erforderlichen Daten ein, und drücken Sie die Schaltfläche erstellen. Es ist möglich, dass nur eine Ebene IoT Hub pro Abonnement frei. Free-Tarif unterstützt 8.000 Ereignisse pro Tag. Free-Tarif ist dasjenige, das für dieses Projekt ausgewählt. jedoch wenn Sie weitere Ereignisse einfügen möchten, wählen Sie dann die entsprechende Ebene. Sobald erstellt, die anzeigen, siehe Abbildung 5.

Die Detailseite des BCI Azure IoT Hub
Abbildung 5: die Detailseite des BCI Azure IoT Hub

Sobald Azure IoT Hub erstellt wurde, besteht der nächste Schritt zum Erstellen einer eindeutige Identität für die Verbindung und zum Hochladen von Daten in Azure IoT Hub erforderlich. Die herunterladbare Quelle enthält ein Konsole mit dem Namen BrainComputerInterface-CreateIdentity, die diese Aktivität ausführt. Um Ihr eigenes Projekt zu erstellen, starten Sie durch das Erstellen einer leeren Konsole-Anwendung in Visual Studio. Nach der Erstellung mit der rechten Maustaste auf das Projekt und wählen Sie NuGet-Pakete verwalten und suchen und Hinzufügen des Microsoft.Azure.Devices-Pakets mit dem bereitgestellten Beispielcode; Version 1.0.11 wird verwendet.

Zugriffsrichtlinien Sie bevor Sie beginnen, die Erstellung der Geräteentität code Zugriff auf Azure IoT Hub und Abrufen der Verbindungszeichenfolge durch Auswählen von Shared auf dem Blatt Einstellungen. Wählen Sie dann die entsprechende Richtlinie, die in der Tabelle erläutert Abbildung 6. Wählen Sie eine der in der Tabelle aufgeführten Richtlinien öffnet ein Fenster mit der Berechtigungen und Shared Zugriffstasten. Kopieren Sie die Verbindung string - Primärschlüssel und verwenden, um den Wert der ConnectionString Siehe festgelegt Abbildung 7.

Abbildung 6 Zeichenfolge Verbindungsrichtlinien, Berechtigungen und Verwendungen

Richtlinie Berechtigung Verwendung
Iothubowner Registrierung Lese-/Schreibzugriff, Service-Gerät eine Verbindung herstellen Verwaltung
des Diensts Dienst verbinden Senden und empfangen für die Endpunkte für Cloud-Seite
Gerät Gerät verbinden Senden und empfangen für das geräteseitige-Endpunkte
RegistryRead Lesen der Registrierung Lesezugriff auf die Identity-Registrierung
RegistryReadWrite Registrierung Lese-/Schreibzugriff Lese-/Schreibzugriff auf die Registrierung der Identität

Abbildung 7 erstellen Sie einen Schlüssel für jede eindeutige Geräte-ID des Geräts

static RegistryManager _registryManager;
static string _connectionString = "the iothubowner connection string";
static void Main(string[] args)
{
_registryManager = RegistryManager.CreateFromConnectionString(_connectionString);
AddDeviceAsync().Wait();
ReadLine();
}
private static async Task AddDeviceAsync()
{
string deviceId = "ADD UNIQUE DEVICE ID";
Device device;
try
{
  device = await _registryManager.AddDeviceAsync(new Device(deviceId));
}
catch (DeviceAlreadyExistsException)
{
  device = await _registryManager.GetDeviceAsync(deviceId);
}
WriteLine($"Generated device key: {device.Authentication.SymmetricKey.PrimaryKey}");
}

Um eine geräteidentität zu erstellen, benötigen Sie eine Verbindungszeichenfolge für eine Richtlinie, die in der Registrierung Identität über Schreibzugriff verfügt. Dies bedeutet, dass Sie entweder die Iothubowner oder RegistryReadWrite Richtlinie verwenden würden. Es wird dringend empfohlen, mithilfe von Richtlinien mit den geringsten Berechtigungen erforderlich, um die gewünschte Aufgabe auszuführen. Dies reduziert die Möglichkeit unbeabsichtigter Aktionen wie z. B. globale löschen oder aktualisieren. Schützen Sie Iothubowner Parameter für Verbindungszeichenfolgen, und geben Sie es nur, wenn die Erstellung von Gerät Identitäten oder andere administrative Aktivitäten erforderlich sind.

Zeigen Sie den Beispielcode Abbildung 7. Da es sich um ein einfaches Programm handelt, werden die _connectionString und die Microsoft.Azure.Devices.RegistryManager _registryManager als statische Klassenvariablen erstellt. Es ist auch gut in die Main-Methode erstellen und diese als Methodenparameter übergeben werden, falls gewünscht. Die Variable _registryManager durch Aufrufen von CreateFromConnectionStringMethod zu instanziieren und dann die Program.AddDeviceAsync-Methode asynchron aufrufen.

Die Program.AddDeviceAsync-Methode ruft die Microsoft.Azure.Devices.RegistryManager.AddDeviceAsync-Methode und übergeben eine neue Microsoft.Azure.Devices.RegistryManager.Device. Wenn eine Identität nicht bereits vorhanden ist, wird er erstellt. Andernfalls wird der Microsoft.Azure.Devices.Common.Exceptions.DeviceAlreadyExistsException ausgelöst. Die Ausnahme wird verarbeitet, da der Code in einen Try {} Catch {} Codeblock ausgeführt wird. Innerhalb des Catch-Blocks {} wird die Microsoft.Azure.Devices.RegistryManager.GetDeviceAsyncmethod aufgerufen und, in beiden Fällen, ob die hinzufügen oder Get-Methoden aufgerufen wird, den Schlüssel des Geräts wird gerendert an die Konsole.

Wenn der Code abgeschlossen ist, und kompiliert, führen Sie den Code und notieren Sie den Schlüssel des Geräts, bei Bedarf die DeviceClient-Klasse zu erstellen, die enthält die Logik zum Verbinden und zum Senden von Daten an Azure IoT Hub im nächsten Abschnitt verwendet, wurde. Außerdem betrachten Sie noch einmal Abbildung 5 und achten Sie darauf, die der Geräte-Link anfänglich deaktiviert ist. Nachdem ein Gerät erstellt wird, ist der Geräte-Link im Fenster Azure IoT Hub aktiviert. Klicken Sie auf erlaubt Ihnen Aktivieren/Deaktivieren des Geräts und der Schlüssel des Geräts, den Fall, dass Sie in der Konsole beim verpasst haben.

Der Code zum Erfassen Gehirn Wellen wurde bereits im vorherigen Abschnitt geschrieben. Was muss geschehen ist, dass anstelle des Schreibens von die BCI Ausgabe an die Konsole, es in Azure IoT Hub schreiben, die gerade erstellt wurde. Im Beispielcode, es wird ein Projekt namens BrainComputerInterface, in dem die While {} Schleife erwähnten Abbildung 2 wird geändert, um eine neue Methode SendBrainMeasurementToAzureAsync, rufen Sie wie gezeigt in Abbildung 8, der BCI Daten sendet, mit dem Azure IoT Hub, anstatt die Ausgabe der Gehirn Computer-Schnittstelle, die in der Konsole lesen.

Abbildung 8 Gehirn Welle in Azure IoT Hub eingefügt.

while (true)
{
for (int i = 0; i < 5; i++)
{
  engine.IEE_GetAverageBandPowers(0, channelList[i],
    theta, alpha, low_beta, high_beta, gamma);
  SendBrainMeasurementToAzureAsync(channelList[i].ToString(), theta[0].ToString(),
    alpha[0].ToString(), low_beta[0].ToString(),
    high_beta[0].ToString(), gamma[0].ToString());
  }
}
private static async void SendBrainMeasurementToAzureAsync(string channel,
  string theta, string alpha, string lowbeta, string highbeta,
  string gamma)
{
  // ...
  try
  {
   var brainActivity = new
    { ManufacturerId, HardwareId, ActivityId, ChannelId,
      DeviceId, UserName, MeasurementDateTime, theta,
      alpha, lowbeta, highbeta, gamma };
  var messageString = JsonConvert.SerializeObject(brainActivity);
  var message = new Message(Encoding.ASCII.GetBytes(messageString));
  await deviceClient.SendEventAsync(message);
catch (Exception ex)
{ //...}
}

Beachten Sie, dass die SendBrainMeasurementToAzureAsync-Methode der Microsoft.Azure.Devices.Client.DeviceClient verwendet, wie bereits erwähnt, und Newtonsoft.Json-Klassen, die Daten formatieren und Hinzufügen der BCI Lesen in der Cloud. Wenn Sie ein neues Projekt erstellen, fügen Sie diese zwei NuGet-Pakete, indem Sie mit der rechten Maustaste auf das Projekt, und wählen NuGet-Pakete verwalten.

Nun, dass der Code für das Schreiben der Ausgabe BCI in Azure IoT Hub abgeschlossen ist, können Sie die BCI auf den Kopf zu platzieren und den Upload starten. Beim Starten des BrainComputerInterface-Programms ausgeführt wird, fragt das System Sie das Szenario auszuwählen, in dem die Wellen Gehirn gespeichert werden. Beispiele für die sind eine Blume, in die Sonne, hören eine Knallfrosch usw. smelling. Wählen Sie das Szenario aus, überprüfen Sie, ob die Elektroden/Kontakte grün dargestellt werden (siehe Abbildung 3) und wenn die Leistungsfähigkeit und Sensor Module bereit sind, Gehirn Wellen gestartet wird erfasst und in der Cloud hochgeladen.

Beachten Sie, dass zu diesem Zeitpunkt das Messgerät Nutzung über die Änderung der IoT-Blatt angezeigt würde als Daten gesendet werden (siehe Abbildung 5), die Daten würden jedoch nach ca. 24 Stunden gelöscht werden, da es zu diesem Zeitpunkt keine Datenbank zum Speichern der Daten noch ein Programm ist, um die Nachrichten aus dem Azure IoT Hub zu einem dauerhaften Speicherort zu verschieben. In Teil 2 wird eine SQL Azure-Datenbank erstellt, gefolgt vom Stream Analytics-Auftrag, damit können Sie die Daten analysieren und ermitteln die neue Dinge.

Zusammenfassung

Der Pfad, dem dieser Artikelserie, sollten Sie in Richtung letztlich dazu, ist zwei. Die erste ist hinsichtlich der kognitive, je mehr Sie lernen selbst und Ihr Gehirn, wie funktioniert, desto können Sie beginnen, zu replizieren oder zu erweitern, wird zur Verbesserung der Qualität aus der Praxis. Computer sind besser und schneller am Ende mathematischer Berechnungen und können zeichnen, ein allgemeinerer Wissensdatenbank für Entscheidungen ohne Emotionen, als der, die das menschliche Gehirn fähig ist. Wenn Sie aus irgendeinem Grund diese integrieren können in Ihren eigenen kognitive wird, wird eine Art der künstlichen Intelligenz mit, Ihrer Fähigkeit, schneller und genauer arbeiten größer.

Das andere Konzept ist die Fähigkeit, Gedanken zum Steuern von Elementen in Ihrer täglichen Arbeit verwenden. Die Kenntnisse zu erfassen und Analysieren von Gehirn Wellen erhöht, erhöht sich auch die Möglichkeit, sie mit Zuversicht zu verwenden. Sobald eine oder mehrere Gedankengänge Push zufrieden sind, Pull oder Drehfeld fehlerlos definiert ist, sie können zum Steuern von Objekten oder Ausführen von Aktivitäten wie das Ändern des TV-Kanal oder den Kanal verwendet werden. Es kann auch möglich, einen erfassen und eine Aktion ausgelöst wird, bevor Ihre eigenen erkennt, dass Sie zu diesem Zweck haben. Die Möglichkeiten sind unbegrenzt.


Benjamin Perkins ist ein Escalation Engineer bei Microsoft und Autor von vier Büchern zu c#, IIS, NHibernate und Microsoft Azure.  Er kürzlich abgeschlossener Mitverfasser "6 Anfang C#-Programmierung mit Visual Studio 2015" (Wrox). Sie erreichen ihn unter benperk@microsoft.com.

Unser Dank gilt dem folgenden technischen Experten bei Microsoft für die Durchsicht dieses Artikels: Sebastian Dau
Sebastian Dau ist eine eingebettete Escalation Engineer im Azure-IaaS-Team