Azureã¢ãã€ã«ãµãŒãã¹ã¯ãEdisonãšWindows Phoneãã©ãããã©ãŒã ã§å®è¡ãããã¢ããªã±ãŒã·ã§ã³ãåçãããã³ã³ãããŒã«ããã«ããæ¥ç¶ããŸãã Edisonã¯ãã¢ãã€ã«ãµãŒãã¹ã®ããŒãã«ããå±æ§å€ãèªã¿åããåä¿¡ããããŒã¿ã«åŸã£ãŠç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã ã¹ããŒããã©ã³ã¢ããªã±ãŒã·ã§ã³ã¯ããŒãã«ã®å€ãå€æŽããããŒãã«åœ±é¿ãäžããããšãã§ããŸãã
åææ¡ä»¶
èªè ã¯Windows Phoneãã©ãããã©ãŒã ã®åºæ¬çãªã¢ããªã±ãŒã·ã§ã³éçºã¹ãã«ãæã¡ããã®ãããªã¢ããªã±ãŒã·ã§ã³ãAzureã¢ãã€ã«ãµãŒãã¹ã«é¢é£ä»ããããšãã§ãããšæ³å®ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ãµãŒããŒåŽã®äœææ¹æ³ãããããªãå Žåã¯ã ãã®è³æãã芧ãã ããã
ãããžã§ã¯ããå®è£ ããã«ã¯ã次ã®ããŒããŠã§ã¢ãšãœãããŠã§ã¢ãå¿ èŠã§ãã
- ArduinoãããããŒããåããIntel EdisonããŒã
- LED
- ããžã¥ã¢ã«ã¹ã¿ãžãª
- Arduino IDE
- 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ãç¹ç¯ãŸãã¯æ¶ç¯ããŸãã ããããåãã¢ãã«ã§ãã€ã³ã¿ãŒãããã«æ¥ç¶ãããã€ã³ããªãžã§ã³ããªãã¢ãããšãããã管çããã¢ãžã¥ãŒã«ã®çžäºäœçšã®ããã®ã¯ããã«è€éãªã¹ããŒã ãå®è£ ã§ããããšã«æ°ä»ãã®ã¯ç°¡åã§ãã