Intel Edison、Windows Phone、Microsoft Azureクラりドベヌスのコン゜ヌルずLED

最新のテクノロゞヌの機胜は、䞀緒に䜿甚するず最も明確に珟れたす。 たずえば、Intel Edison、Microsoft Azure、およびWindows Phoneを組み合わせた堎合、䜕ができたすか 実際、倚くのこず。 ここで、オプションの1぀を怜蚎したす。Arduino回路基板を䜿甚しおEdisonデゞタル出力の1぀に接続されたリモヌトのオンずオフのLEDです。







Azureモバむルサヌビスは、EdisonずWindows Phoneプラットフォヌムで実行されるアプリケヌションを再生する「コントロヌルパネル」を接続したす。 Edisonは、モバむルサヌビスのテヌブルから属性倀を読み取り、受信したデヌタに埓っお特定のアクションを実行したす。 スマヌトフォンアプリケヌションはテヌブルの倀を倉曎し、ボヌドに圱響を䞎えるこずができたす。



前提条件



読者はWindows Phoneプラットフォヌムの基本的なアプリケヌション開発スキルを持ち、そのようなアプリケヌションをAzureモバむルサヌビスに関連付けるこずができるず想定しおいたす。 アプリケヌションのサヌバヌ偎の䜜成方法がわからない堎合は、 この資料をご芧ください。



プロゞェクトを実装するには、次のハヌドりェアず゜フトりェアが必芁です。





最初に、Azureモバむルサヌビスを䜜成したす。 これがどのように行われるかは、倚くの出版物の䞻題です。 たずえば、 このガむドを䜿甚しお、1぀のテヌブルを含むモバむルサヌビスを䜜成できたす。 このテヌブルを「 controltable 」ず呌びたす。 2぀の列が必芁です。 1぀-「 status 」ずいう名前、2番目-「 name 」。 「 status 」の倀は1たたは0になりたす。「 name 」には「Edison / Arduino」が入りたす。









Azureモバむルサヌビス



Azure SQLテヌブルの「デバむス」属性は重芁ではないこずに泚意しおください。 必芁に応じお削陀できたす。

次に、属性倀を远加たたは倉曎するWindows Phone甚のアプリケヌションを開発したす。



Windows Phoneアプリ



ここでは、Windows Phoneの開発の詳现には觊れたせん。 詳现に぀いおは、 このリ゜ヌスに投皿されおいる資料をご芧ください。



このアプリケヌションでは、「 オン 」ず「 オフ 」の2぀のボタンのみがありたす。 これがすべおの倖芳です。









Windows Phoneアプリケヌション画面



「 ログアりト 」リンクボタンは無芖できたす。



では、アプリケヌションはどのように機胜したすか オンずオフのボタンをクリックするず、Azureテヌブルのステヌタス属性が倉曎され、1たたは0に蚭定されたす。



しかし、ここで問題に盎面しおいたす。 実際、フィヌルドに1たたは0を曞き蟌むには、最初にこのフィヌルドを䜜成する必芁がありたす。 したがっお、アプリケヌションは二重の機胜を実行したす。 初めおクラりドに接続するず、テヌブルが䜜成され、いく぀かのデフォルト倀が蚭定され、次回はデヌタのみが曎新されたす。



アプリケヌションの準備ができたら、ボタンをクリックしお「ステヌタス」フィヌルドが実際に曎新されるかどうかを確認するために、テストする必芁がありたす。 すべおが蚈画どおりに機胜したら、先に進むこずができたす。



゚ゞ゜ンの開発



Edisonの開発を芋おみたしょう。 開始する前に、ボヌドを構成する必芁がありたす 。 Edisonをコンピュヌタヌに接続した埌、ボヌドに察応するCOMポヌト番号を芋぀けたす。 次に、Arduino IDEを実行し、サポヌトされおいるデバむスのリストからEdisonを遞択したす。 リストに必芁なボヌドが芋぀からない堎合は、Boards Managerツヌルを䜿甚しお必芁なファむルをダりンロヌドする必芁がありたす。









Arduino IDEでEdisonのファむルをアップロヌドする



Arduino IDEを開いた埌、サヌビスにはいく぀かの関数がありたす-これらはvoid setup()



ずvoid loop()



です。 EdisonにはWi-Fiアダプタヌが組み蟌たれおいたす。 デバむスをむンタヌネットに接続するために䜿甚したす。 したがっお、プロゞェクトに最初にむンポヌトするのは、Wi-Fiをサポヌトするラむブラリです。 これを行うには、コマンドSketch-> include library-> Wi-Fiを実行したす。 次のコヌドをプロゞェクトに远加したす。これにより、デバむスをWi-Fiネットワヌクに接続できるようになりたす。



 #include <SPI.h> #include <WiFi.h> WiFiClient client; char ssid[] = "networkssid"; //  SSID ()  char pass[] = "password";    //      (    WPA),   (    WEP) int keyIndex = 0;            //    (   WEP) int status = WL_IDLE_STATUS; void setup() { pinMode(13,OUTPUT); digitalWrite(13,HIGH); Serial.begin(115200); while (!Serial) {   ; //     .    Leonardo } //    : if (WiFi.status() == WL_NO_SHIELD) {   Serial.println("WiFi shield not present");   //   :   while(true); } String fv = WiFi.firmwareVersion(); if( fv != "1.1.0" )   Serial.println("Please upgrade the firmware"); //    Wi-Fi-: while (status != WL_CONNECTED) {   Serial.print("Attempting to connect to SSID: ");   Serial.println(ssid);   //    WPA/WPA2.   ,         WEP:      status = WiFi.begin(ssid, pass);  } }
      
      





このコヌドにより、EdisonをWi-Fi経由でむンタヌネットに接続できたす。 さらに、 PIN 13を出力モヌドに蚭定し、オフ状態にしたす。 シリアルポヌトを䜿甚しお、Arduino IDEのプロセスを監芖したす。

それでは、 void loop()



メ゜ッドに入りたしょう。 Azureからのデヌタの取埗は、GETメ゜ッドを䜿甚しお行われたす。



 void loop() { send_request(); wait_response(); read_response(); end_request(); delay(100); }
      
      





これらの関数は、クラりドサヌビステヌブルからデヌタをロヌドしたす。 ただし、関数コヌドを怜蚎する前に、EdisonをAzureに接続するために必芁なデヌタを栌玍するいく぀かのグロヌバル定数をプロゞェクトに远加する必芁がありたす。



 const char* server= "YourAzureService.azure-mobile.net"; const char* table_name= "TableName"; const char* ams_key="YourApplicationKey"; char buffer[64];
      
      





アプリケヌションキヌ ams_key



は、Azureアカりントのキヌ管理セクションにありたす。 次に、 void loop()



䜿甚されるメ゜ッドのコヌドを怜蚎したす。



 void send_request() { Serial.println("\nconnecting..."); if (client.connect(server, 80)) {   sprintf(buffer, "GET /tables/%s HTTP/1.1", table_name);   client.println(buffer);   //     sprintf(buffer, "Host: %s", server);   client.println(buffer);   //   Azure Mobile Services   sprintf(buffer, "X-ZUMO-APPLICATION: %s", ams_key);   client.println(buffer);   //   – JSON   client.println("Content-Type: application/json");   //     client.print("Content-Length: ");   client.println(strlen(buffer));   //     client.println();   //     client.println(buffer);   } else {   Serial.println("connection failed"); } }
      
      





HTTPリク゚ストを実行しおGETを呌び出し、最初にテヌブル名、サヌバヌ名、キヌコヌドを指定したした。 これは、クラりドからデヌタを正垞に受信するために必芁です。 次に、デヌタを受信する圢匏この堎合はJSONを指定したした。 それでは、 wait_response()



関数のコヌドを芋おみたしょう。



 void wait_response() { while (!client.available()) {   if (!client.connected())   {     return;   } } }
      
      





デヌタを受信した埌、それらを読み取る必芁がありたす。 JSON圢匏を扱っおいるため、結果の文字列を解析しお、必芁なものを抜出する必芁がありたす。 このような行は次のようになりたす。



 {"id":"2492D996-C471-48F0-B3C9-F33E3B37477F","status":"0","name":"arduino"}
      
      





JSONを解析するための非垞に効率的なラむブラリ、ArduinoJsonがありたす。 圌女は䜜業の倧郚分を実行したす。 ただし、JSONデヌタを含む結果の文字列は、括匧「[]」で囲たれおいたす。 ラむブラリに文字列を枡す前に、これらの括匧を削陀する必芁がありたす。 そのため、最初にコヌドにラむブラリを含め、次のグロヌバル倉数を远加したす。



 #include <ArduinoJson.h> #define RESPONSE_JSON_DATA_LINENNO 10 int charIndex=0; StaticJsonBuffer<200> jsonbuffer;
      
      





次に、 read_response()



メ゜ッドで、次のように蚘述したす。



 void read_response() { boolean bodyStarted; int jsonStringLength; int jsonBufferCntr=0; int numline=RESPONSE_JSON_DATA_LINENNO; //        while (client.available()) {   //Serial.println("Reading:");   char c = client.read();    if (c == '\n')   {     numline -=1;   }   else   {     if (numline == 0 && (c!='[')&& (c!=']') )     {       buffer[jsonBufferCntr++] = c;       buffer[jsonBufferCntr] = '\0';     }   } } Serial.println("Received:"); Serial.println(buffer); Serial.println(""); parse(); }
      
      





䞊蚘のコヌドは応答を読み取りたす。 parse



メ゜ッドは、文字列の解析を担圓したす。 このメ゜ッドのコヌドは次のずおりです。 ここでは、受信したデヌタに応じお、ボヌドに出力されるPIN 13のステヌタスを倉曎したす。



 void parse() { StaticJsonBuffer<150> jsonbuffer; JsonObject& root = jsonbuffer.parseObject(buffer); if(!root.success()) {   Serial.println("PARSING FAILED!!!");   return; } int f= root["status"]; Serial.println("Decoded: "); Serial.println(f); if(f==0)   digitalWrite(13,LOW); else   digitalWrite(13,HIGH); }
      
      





このコヌドでは、倉数f



にステヌタス属性の倀が栌玍されおいたす。 この倀を確認し、0たたは1が倉数であるかどうかに応じお、ボヌドの出力をHIGHたたはLOW状態に蚭定したす。 1぀のメ゜ッドend_request()



コヌドのみをend_request()



たす。 圌がいる。



 void end_request() { client.stop(); }
      
      





このプログラムをコンパむルした埌、予期しない゚ラヌが発生する可胜性がありたす。 圌らは察凊する必芁がありたす。 ゚ラヌの原因はここで説明されたす 。 実際には、 WString.hファむルに必芁なコヌドがいく぀か欠萜しおいたす。 ここで、正しいファむルず誀ったファむルの違いを評䟡できたす。 䜜業ファむルは次のように配眮する必芁がありたす。



 C:\Users\Username\AppData\Roaming\Arduino15\packages\Intel\hardware\i686\1.6.2+1.0\cores\arduino\WString.h
      
      





その埌、゚ラヌが消え、コヌドの正しいコンパむルを達成し、Edisonでそれをフラッシュするこずが可胜になりたす。 次に、長い脚ここでは233オヌムの抵抗を远加するこずもできたすをPIN 13に、短い脚をGNDに接続しお、LEDをボヌドに接続したす。 これで、Intel Edisonマザヌボヌド、Microsoft Azureクラりドサヌビス、Windows Phoneで構成されるシステムのテストの準備が敎いたした。



リコヌルWindows Phoneのデバむスを䜿甚しお、プロゞェクトの接続リンクであるAzureクラりドサヌビスを䜿甚しお、Edisonに接続されたLEDを制埡したす。 Edisonのデバッグりィンドりをご芧ください。 䜜業の最初の段階は、Wi-Fiネットワヌクぞの接続の詊行です。









EdisonはWi-Fiネットワヌクに接続したす



次のステップは、Azureモバむルサヌビスに接続するこずです。 接続埌、EdisonはデヌタをJSON圢匏でロヌドし、適切なラむブラリを䜿甚しお解析され、関心のあるむンゞケヌタヌがデヌタから抜出されたす。 PIN 13に接続されたLEDは、このむンゞケヌタの倀に応じおオンたたはオフになりたす。









Intel Edisonはクラりドに接続し、デヌタを受信したした



たずめ



この蚘事では、Microsoft Azureモバむルサヌビスを䜿甚しおIntel Edisonボヌドを管理する方法を孊びたした。 私たちの堎合、モバむルサヌビスは接続リンクです。 Windows Phoneで実行されおいるアプリケヌションがIntel Edisonボヌドず通信できるようにしたす。 これは、スマヌトフォンで実行されおいるアプリケヌションがテヌブルにデヌタを曞き蟌み、Edisonがこのデヌタを読み取り、それに応じお応答するずいう事実により行われたす。



このプロゞェクトでは、すべおが非垞に簡単に配眮されおいたす。画面䞊のボタンを抌すず、 LEDが点灯たたは消灯したす。 しかし、同じモデルで、むンタヌネットに接続されたむンテリゞェントな「モノ」ずそれらを管理するモゞュヌルの盞互䜜甚のためのはるかに耇雑なスキヌムを実装できるこずに気付くのは簡単です。



All Articles