éå§ããçç±
Microsoft Developer Tour Technology Expeditionã®äžç°ãšããŠãMicrosoftãšIntelãããžãããŽãŽããã§å®æœããããã«ãœã³ã«ã€ããŠã話ããããšæããŸãã çŽæ¥è©±ããŠãã ããã ã¡ã³ããŒãšããŠã äžçªé¢çœããšæããŸãã
IoT-ã¢ãã®ã€ã³ã¿ãŒãããïŒã¢ãã®ã€ã³ã¿ãŒãããïŒãããžãããŽãŽããã§éå¬ãããäºå®ã ã£ãããã«ãœã³ã®ããŒãã æ£çŽãªãšãããç§ã«ãšã£ãŠãã®çšèªã¯æ°ãããåºæ¬ååãç解ããããã«ã°ãŒã°ã«ã§æ€çŽ¢ããå¿ èŠããããŸããã ããã¯éåžžã«ç°¡åã§ããããšãå€æããŸãããããã€ãã®ã»ã³ãµãŒããæ å ±ãåéããã¢ã¯ã»ã¹ãšåŠçã®ããã«ã€ã³ã¿ãŒãããã«éä¿¡ããããã€ã¹ããããŸãã
ããã«ãœã³ããã¢ãŒã®äžç°ãšããŠéå¬ããããšããäºå®ã¯ãã€ãã³ãããéããªãåŠã³ãŸããã ããã«ãœã³ã§ã¯ãIntel GalileoããŒãã䜿çšããŠäœããäœæããå¿ èŠããããšæžãããŠããŸããã
ããã¯éåžžã«ããäžèŽããã®ã§ãçŽ1ãæåã«Intel GalileoãšIntel Edisonã«é¢ããIntelã«ã³ãã¡ã¬ã³ã¹ã«åå ããŸããã Intel Galileo Gen 2ããŒãã¯ã©ãã§å ¥æããŸãããïŒããããšãïŒ ãããã圌女ã®æã¯åœŒå¥³ã«å šãå±ããã圌女ã¯åã«ããŒãã«ã«æšªã«ãªããŸããã ãã¡ãããæåãªäžåœã®ãµã€ãã§ã»ã³ãµãŒãšã·ãŒã«ãã泚æããŸãããããŸã å±ããŸããã
Intel GalileoãšIntel Edisonã«ã€ããŠäžèšã ãããã¯ãArduino Uno R3ãšãã³äºææ§ã®ããããŒãã§ãã æšæºã®ã»ã³ãµãŒãšã·ãŒã«ããæ¿å ¥ã§ããŸãã arduinoããã¹ã±ãããå®è¡ããéçºããŒã«ããããŸãã ãããŠãããã§ããããã®ããŒããããé«äŸ¡ã§æ¶è²»éãå€ãå Žåããªããããã®ããŒããå¿ èŠãªã®ããšããçåãçãããããããŸããã åçœããŸãããæåããããæã£ãŠããŸããã ããããçèãããšããããã®ããŒãã®ç®çã¯å®å šã«ç°ãªããšããçµè«ã«éããŸããã Arduinoãš16 MHzãããã³Intel Galileo Gen 2ãš400 MHzãæ¯èŒããŠãã ããã 2 KB RAMã¡ã¢ãªãš256 MGB DDR3ã Intelã«ã¯ãçµã¿èŸŒã¿ã®100 Mbpsãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ãšåäœããLinuxããããŸãã ããããæ¯èŒããå¿ èŠã¯ãããŸããããããã¯ç°ãªãã¿ã¹ã¯ã®ããã§ãã
詳现ã¯ãã¡ãïŒ habrahabr.ru/company/intel/blog/248279
äžè¬çã«ãIntel Galileo Gen 2ããŒãããããããã¯ç®±ã®äžã«ãããŸããã Arduinoã®ããã«ããã®ããŒãã®çµéšã¯ãããŸããã§ããã ãããŠãããã¯ããã«ãœã³ã§ãã
ããã«ãœã³ã®æ°æ¥åããã®æ瀺ã«åŸã£ãŠããŒãã«Linuxãã€ã³ã¹ããŒã«ããããšã«ããŸããïŒ habrahabr.ru/company/intel/blog/248893
ããŒã«ã«ãããã¯ãŒã¯çµç±ã§SSHãä»ããŠããŒãã«æ¥ç¶ããŸãã æ®éã®LinuxããããŸãã ãã¹ãŠãããŸãããããã¹ãŠãæ©èœããŸãã ç§ã¯ã€ã³ã¿ãŒãããããç°¡åãªC ++ã®äŸãäœæããŸããããããã¯çµã¿èŸŒã¿ã®LEDã§ç¹æ» ããŸãã ããã«ã¯åäœããŸããã§ããïŒã³ã³ãã€ã«ãªãã·ã§ã³ã§-lmraaãæå®ããã®ãå¿ããŠããŸããïŒã ãã£ãïŒ ãã¹ãŠãæ©èœããç ãã«ã€ãããšãã§ããŸãã
ããŒããæ©èœããããäœããæ¥ç¶ããŠã¿ãããšãã§ããŸãã arduinoã®ããã«äœããè²·ãããã©ããã確ãããããã«ã©ãžãªåžå Žã«è¡ããŸããã ãã¬ããããŒããã¯ã€ã€ãŒãè²·ããŸããã 詳现ã®äžéšãäžéšã®ã»ã³ãµãŒã ããããç§ã¯äœããã¹ãããŸããã§ãããåã³ç§ã®æã¯å±ããŸããã§ããã
ã¢ã€ãã¢
ãã®æ°æ¥ã§ããã®ããŒãã«å®è£ ã§ãããã¬ãŒã³ã¹ããŒãã³ã°ã»ãã·ã§ã³ããããŸããã LEDãç¹æ» ãããããéšå±ã®æž©åºŠã枬å®ããããããããªåçŽãªãã®ã¯æãŸãªãã£ãã ããã¯ãã¹ãŠä»¥åã«æ¢ã«è¡ãããŠãããIntel Galileoã¯ãã®ãããªã¿ã¹ã¯ã«ã¯åŒ·åãããŸãã 倧ããªèšç®ãããŒã¿åŠçãããã«åŠçãŸãã¯åæã®ããã«ãµãŒããŒã«éä¿¡ãããã®ãå¿ èŠã§ããã
ãããŠã次ã®ã¢ã€ãã¢ãåŸã ã«æãæµ®ãã³ãŸããã äœå¹ŽãåãComputerraèªã«ãã·ã§ãããªã©ã®å€§é³éã®é³æºã®äœçœ®ãç¹å®ããããã®å®éšæè¡ã«é¢ãããã¥ãŒã¹ããããŸããã è·¯äžã«ã¯ãã€ã¯ããããŸãã 圌ãã¯é³ãç¥èŠããé³ããã¹ãŠã®ãã€ã¯ã«åæã«å°éããããã§ã¯ãªããšããäºå®ã®ããã«ãé ããŠãé³æºã®äœçœ®ãèŠã€ããããšãã§ããŸãã ãã®ãããªã·ã¹ãã ãäœæããããšã«ããŸããã
ã¢ã€ãã¢ããããŸããããªãã¯ã»ã³ãµãŒãè²·ãããã«ã©ãžãªåžå Žã«è¡ãããšãã§ããŸãã ã°ãŒã°ã«ããµãŠã³ãã»ã³ãµãŒã«ã¯2çš®é¡ããããšãããããŸããã æåã¯ããžã¿ã«åºåã§ããããå€ãè¶ ããããšã«å¿çãããããã3ã€ã®æ¥ç¹ïŒã°ã©ã³ãã+ 5ãä¿¡å·ãããå€ïŒãæã£ãŠããŸãã 2çªç®ã®ã»ã³ãµãŒã«ã¯ãããã«ã¢ããã°åºåããããããã«å¿ããŠ4ã€ã®æ¥ç¹ïŒã°ã©ã³ãã+ 5ãä¿¡å·ãããå€ãã¢ããã°ä¿¡å·ïŒããããŸãã ã¢ããã°ä¿¡å·ãçæãã2çªç®ã®ãã®ãå¿ èŠã§ããã è€æ°ã®ã»ã³ãµãŒããä¿¡å·ãåä¿¡ãããšãããããéãåãããŠãäžèŽãèŠã€ããŠé 延ãæ£ç¢ºã«æ±ºå®ããããšãã§ããŸãã ããŠãããªã¬ãŒãããå€ãåçã«æ€çŽ¢ããŸãã ã»ã³ãµãŒã«ã¯ã€ã€ãŒãå¿ èŠã§ãã å10ã¡ãŒãã«ã 念ã®ããã åžå Žã§ãµãŠã³ãã»ã³ãµãŒãèŠã€ããŸãããããªãŒãã¯3ã€ãããããŸããã ä»ã«ã¯ãããŸããã§ããã 売ãæã¯ã圌ãã®åºåãã¢ããã°ã§ããããšãä¿èšŒããŸããã ãŸããä¿¡ããŠãã ããããªããã¥ãŒãã³ã°æµæãããã®ã§ããïŒ 5ã€ã®ã»ã³ãµãŒãåããŸããã ä»ãã¯ã€ã€ãŒã 50ã¡ãŒãã«ã®èµ€é»ã®ãµãŠã³ãã¯ã€ã€0.25 mmãš30ã¡ãŒãã«ã®å ïŒ0.25 mmãããã«ïŒã ç§ã¯åã»ã³ãµãŒãé Œãã«ãé»æºçšã«èµ€é»ãéå§ããä¿¡å·çšã«å ã®ãã¢ã®1ã€ãéå§ããŸããã
OKããã¹ãŠãããã«ãããŸãã ããã¯ãã¹ãŠæšææ¥ã§ãåææ¥ã«ã¯ãã§ã«äŒè°ããããŸããã
èªå® ã§ã»ã³ãµãŒãæ¥ç¶ããããšããŸããã åããŠããŒãã«äœãã貌ãä»ããã®ãæããšããããã¯çªç¶çãå°œããŸãã ããããäœããç«ã¡åŸçãç ããªããã³ã³ãœãŒã«ãåäœããŠããŸãã ã»ã³ãµãŒããã¢ããã°å€ãååŸããããšããŠããŸãã é©ããããšã«ãã»ã³ãµãŒã¯ãã€ããªã§ããããšãããããŸããã ä¿¡å·ã¬ãã«ã®è¶ éã«ã®ã¿å¿çããŸãã ãããŠããã®ã¬ãã«ã¯ããŒãäžã®ãã¥ãŒãã³ã°æµæã«ãã£ãŠèšå®ãããŸãã ããïŒ éææ¥ã®ç¿æ¥ã¯ãåžå Žã«ãšã£ãŠæå³ããããŸããã æ£ããã»ã³ãµãŒãããã«ãããã©ããã¯ããããŸããã ã¯ãããã€ãŠãããããçš®é¡ã®ãã®ããŸãã©ãããããã眮ããŠã°ãªãããæ§æããVisual StudioããããŸãã åžå Žã¯ããã«åæ¥ããããŸãã ãããŠãåææ¥ã®åå9æããã®ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ããŸã ç ãæéããããŸãã
éææ¥ã®å€ã10æã«å®¶ã«çãããšããç§ã¯ãã¹ãŠãæºåãå§ããŸããã
ããã«ãœã³ã®å Žåãå¿ èŠãªãã®ããã¹ãŠçšæããããã ãã«æ±ºããŸããã å€ãã®åå è ãããããã延é·ã³ãŒããååãªãœã±ããããªãå¯èœæ§ããããŸãã ã«ãŒã¿ãŒ ããŒãã¯ãããã¯ãŒã¯ã±ãŒãã«ãä»ããŠæ¥ç¶ããå¿ èŠããããŸãã USBã¢ãã çµç±ã§ã€ã³ã¿ãŒãããã«æ¥ç¶ããã«ã¯ãã«ãŒã¿ãŒãå¿ èŠã§ãã äžè¬çã«ãå®å šãªèªåŸæ§ã æ°æéäŒããšæã£ãã Visual Studio 2013 Communityãã€ã³ã¹ããŒã«çšã«ã€ã³ã¹ããŒã«ããŸããã VC 2015ã®ã€ã³ã¹ããŒã«ãæåŠããŸããã ãããã£ãŠãããã«ãœã³ã«æã¡èŸŒãå¿ èŠããããã¹ãŠã®è ºã®æºåãšåéã¯ãèšç»ãããæ°æéã§ã¯ãªããåå4æãŸã§ç¶ããŸããã ã¯ãã8æã«èµ·ããŸãã
ãã®çµæã圌ã¯åœŒãšäžç·ã«åããŸããïŒå»¶é·ã³ãŒããç²çããŒããéãé»æ°ããŒãïŒã¯ããåããã®ïŒãé·ãã¯ã€ã€ãŒããã¬ããããŒããšã»ã³ãµãŒã®æ¥ç¶ã¯ã€ã€ãŒãã¯ãã¿ãã«ãŒã¿ãŒã5ã€ã®é³é¿ã»ã³ãµãŒãUSBã¢ãã ãæ¯åã»ã³ãµãŒã巻尺ã ãã¹ãŠãå¯ãæéã§ããç§ãã¡ã¯ããã§ç解ããŸãã
éæ³ã®ãã¹ããªãŒãã¢ãŒ
äŒè°ã§ã¯å€ãã®å ±åããããŸããã å€æ§ã§èå³æ·±ãã
WebGLãšBabylon JSã©ã€ãã©ãªã«ã€ããŠã®è¬æŒããããŸããããããã䜿çšãããšããã©ãŠã¶ã§3Dã§ç°¡åã«æç»ã§ããŸãã ã¢ã€ãã¢ã¯è¯ãã§ããåŸã§ããã«ãœã³ã§ãããžã§ã¯ãã«åºå®ããŠã¿ãŠãã ããã
äŒè°ã¯19:00ã«çµäºããããã«ãœã³ã¯ããªãã¯ããã¯ã®å»ºç©ã§20:00ã«å§ãŸããŸããã æ©ãããšãã§ããŸãã éäžãç§ã¯ãã¶ãè²·ã£ãŠã¹ããã¯ãé£ã¹ãŸããã
ããã«ãœã³
ã ãã20:00ãç§ã¯ãã®å Žã«ããŸãã ããŒã«ã¯åºãã§ãã 倧åŠã®æååã«åº§ã£ãŠããã®ã§ãäžå€®ã®æåã®ããŒãã«ãå æããŸãã ç§ã®éçã«ã¯ãããŒãã«å šäœãå¿ èŠã§ãã
hackathonããŒãžã®åçevents.techdays.ru/msdevtour/news#fe58625b-bcd9-498a-94e8-161ccc286f11
20:00ãã00:00ãŸã§ãMicrosoftããã³Intelã«ããIoTããã³Azureã«ã€ããŠã®è¬çŸ©ã
ã€ã³ãã«ããã¬ãªã¬ãªãšãšãžãœã³ã«ã€ããŠã®è¬çŸ©ããããŸããã 1ã€ã¯ãAzureã®äœ¿çšã«é¢ãããã®ã§ãã 圌ãç¥ã£ãŠããããšãšãã®äœ¿ãæ¹ã ãããæãéèŠãªããšã§ããããªããªãããã®ç¬éãŸã§ç§ã¯Azureã§åããããšããªãããã§ãã
Dmitry Soshnikovã¯ãMicrosoftãIoTãã©ã®ããã«èŠãŠããããèªã£ãã ããã¯ãã»ã³ãµãŒããäžéšã®ããŒã¿ãåéããŠã¯ã©ãŠãã«è»¢éããåä¿¡ããŠåæã§ããå°ããªããã€ã¹ã§ãã ç§ã®ãããžã§ã¯ãã¯ãããã®èŠä»¶ããã¹ãŠæºãããã°ããã§ããããå®è£ ããããã«æ®ããŸããã
è¬çŸ©ã¯ç¡é§ã«æéãç¡é§ã«ããªãããã«è¡ã£ãŠããŸããããä¿¡å·æºã®äœçœ®ã決å®ããããã«å¿ èŠãªåŒãå°ãåºãããšã«ããŸããã
ç§ãã¡ã®ã¿ã¹ã¯ã¯ãã»ã³ãµãŒããåä¿¡ããé 延æéã«æé©ãªç©ºéå ã®ãã€ã³ããèŠã€ããããšã§ãã ã€ãŸããæªç¥æ°ãããå€ãã®å€æ°ãããå¯èœæ§ãããæé©ååé¡ã§ãã ãã¶ããæå°äºä¹æ³ã®ãããªãã®ã§ãããã
äŸåé¢ä¿ãæžã蟌ã¿ãåºåãéå§ããŸããã 圌ã¯2ããŒãžãæžãçããŠãç§ã¯4床ã®æ¹çšåŒã解ãã®ãé¢åã§ããã¹ãŠã®æéãè²»ããããšãã§ããééãããããããããªãããšã«æ°ä»ããŸããã ãããŠãããã¯ãªããšãªãæ²ãããªããŸããã
ãã®çµæãç§ã¯æ®éçãªæ¹æ³ã培åºçãªæ€çŽ¢ã®æ¹æ³ã§è¡åããããšã«ããŸããã 芳客ã®å€§ããã¯ã10 x 10ã¡ãŒãã«ã10 x 10 x 10ç«æ¹äœã10 cmã®ç²ŸåºŠã§ã100äžãã€ã³ããç²åŸããŸããã ãããããããŸãããããããããã»ããµããããåŠçã§ããŸãã ãã®å Žåã粟床ãäœäžããå¯èœæ§ããããŸãã
ããã§ãè¬çŸ©ã¯çµãããŸããã誰ãããããžã§ã¯ããèãåºããããŒã ãç·šæããå¿ èŠããããŸãã ããŒã«ã«ã¯60人ãããŸããã
ããŒã ã®ãã¬ãŒã³ããŒã·ã§ã³ãå§ãŸããŸããã 3çªç®ã«è¡ããŸããã ç§ã®ãããžã§ã¯ããäœã§ããããç°¡åã«èª¬æãããã§ã«è²»çšãããã£ãŠãããšèšã£ãã®ã§ããããžã§ã¯ããäžäººã§è¡ãã€ããã§ãã ãµãŠã³ãã»ã³ãµãŒã¯è§Šæã®ãããªãã®ã§ãããããååã¯Audio sprutã§ãã
ãã¹ãŠã圌ãã®ãããžã§ã¯ãã«ã€ããŠèªã£ãã 人ã ã¯æ©ããŠãããžã§ã¯ãã«åå ãå§ããŸããã
ãããå§ããŸãããã æåã®ã¹ãããã¯ãæéãæ£ç¢ºã«æ±ºå®ããããšã§ããã æåã®ãªãã·ã§ã³ã¯ããµã€ã¯ã«ãå®äºããã¹ãããã®æ°ãã«ãŠã³ãããããšã§ãã ãã ããããã§ã¯ããµã€ã¯ã«ã®åã¹ãããã«ãããæéã決å®ããå¿ èŠããããããã¯ããŸãæ£ç¢ºã§ã¯ãããŸããã é«ç²ŸåºŠã®ã¿ã€ããŒãèŠã€ããå¿ èŠããããŸããã C ++ 11ã«ã¯äœããããããšãæãåºããŸããã ã€ã³ã¿ãŒãããæ€çŽ¢ã解決çãæäŸããŸããã
ãããã£ãŠãã»ã³ãµãŒãæäœããããã®ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã ããããã®ã»ã³ãµãŒã«ä¿¡å·ã衚瀺ããããŸã§ããã¹ãŠã®ã»ã³ãµãŒã«åãåãããŸãã 圌ã®æéããŒãã«ããŸãã 次ã«ãæ®ãã®ã»ã³ãµãŒã«åãåãããŠãããããã®ã»ã³ãµãŒã«ä¿¡å·ã衚瀺ããããšããã«ãçŸåšã®æå»ãèšé²ããŸãã ãã¹ãŠã®ã»ã³ãµãŒãä¿¡å·ãçºãããŸã§ããã®èª¿æ»ãå®è¡ããŸãã åã»ã³ãµãŒã§ååŸããæéã«åºã¥ããŠãè·é¢ã®ãã«ã¿ãæ±ããé³ã®é床ã«æéãæããŸãã
枬å®ã«ãããããžã¿ã«ã»ã³ãµãŒã¯83 kHzã®é床ã§å°åãããããšã瀺ãããŸããã ããã«ããã5ã€ã®ã»ã³ãµãŒã§çŽ2 cmã®ç²ŸåºŠãåŸãããŸãã èå³ã®ããã«ãã¢ããã°èªã¿åãã®é床ã枬å®ããŸããã çŽ4 kHzã
ç§ãè²·ã£ãã»ã³ãµãŒã¯ãç§ã欲ããã£ããã®ã§ã¯ãªãããç§ã®ä»äºãç°¡çŽ åããŠããããã ã 第äžã«ãã¢ããã°ä¿¡å·éã®å¯Ÿå¿ãæ¢ãå¿ èŠããªãã第äºã«ã粟床ãé«ããªããŸãã
ããããLinuxã¯ãªã¢ã«ã¿ã€ã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯ãªãããšã«ãçæããå¿ èŠããããŸãã ãããã£ãŠãã·ã¹ãã ãã³ãŒãã ãã§å æãããä»ã®ã·ã¹ãã ã«åãæ¿ããããšã¯ä¿èšŒãããŸããã ããã§ã¯ããã¡ããã2ã€ã®ã³ã¢ãæã€Intel Edisonã圹ç«ã¡ãŸãã ããããããã¯ããã§ãã
ãã¹ãã§ã¯ãçŽ15ã»ã³ãã¡ãŒãã«ãšããçãè·é¢ã«ãã2ã€ã®ã»ã³ãµãŒã䜿çšããäžæ¹ã®ã»ã³ãµãŒã®åŽé¢ããç·æ§ãã¯ãªãã¯ããããäžæ¹ã®ã»ã³ãµãŒããã¯ãªãã¯ããŸããã åæã«ãä¿¡å·ãé ããè·é¢ã®èšç®ããããã«ã¿ãçŸå®ãšäžèŽããŠããããšãã¯ã£ãããšèŠããŸããã
èªåã®ããŒããšæ§ææžã¿ã®ã«ãŒã¿ãŒããããããWiFiã®åäœã«äŸåããŸããã§ããã ãããã倧ããªåé¡ããããŸãããç§ã®ã€ã³ã¿ãŒãããã¯æã ã²ã©ããã®ã§ããã æã ãé床ã¯100 kBit / sã«äœäžããŸããã
ä»æ¥ã¯æãã®ã¯ã
ãããã£ãŠãããã°ã©ã ã¯é³æºã®äœçœ®ã決å®ãããã®æ å ±ãã¯ã©ãŠãã«éä¿¡ããŸãã
æãç°¡åãªãªãã·ã§ã³ã¯ãã€ãã³ããä»ããŠããŒã¿ãéä¿¡ããããšã§ãããšèšãããŸããã ãµãŒããŒã«äœããéä¿¡ããããã®Pythonã¹ã¯ãªãããèŠã€ããããšããŠããŸãïŒä»¥åã«pythonãå®è¡ããããšããããŸããïŒã æåã«ãã¹ã¯ãªããã¯ãµãŒããŒããã®å¿çã§ãšã©ãŒãã¹ããŒããŸãã è¿é£ã®ããŒã ãããŒã¿ãéä¿¡ããããšããŠããã䜿çšã§ããŸããã é·ãéæ¢ãåã£ãããçãã¯201ãªã®ã§ããšã©ãŒã¯ãªããããŒã¿ã転éãããŸããã Azureã«ã¢ã¯ã»ã¹ããŸãããããŒã¿ã¯è¡šç€ºãããŸããã ç³ãç«ãŠã¯ãããŸãããããŒã¿ã¯è¡šç€ºãããŸããã ç§ã¯é·ãéãããç解ããããšããŸããç§ã¯äž»å¬è ã«å°ããŸãããããŠããã¯ã€ãã³ããç§ã«åããªãããšãããããŸãã åé€ããããšèããããå Žåããããã¯äœ¿ãæšãŠã§ãã ãµãã©ã€ãºïŒ ãããŠãäœã䜿ãã¹ãã§ããïŒ ããŒãã«ã
çŽ æŽããããæåãããã¹ãŠã ããŒãã«ã§ã¯ããã»ã©åçŽã§ã¯ãããŸããã Azureã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããŸãçŽæçã§ã¯ãããŸããã 詳现ã¯ããèŠããŠããŸãããããµãŒããŒããããäœæããããŒãã«ãäœæããŸããã 次ã«ãããã«ããŒã¿ãæžã蟌ã¿ãŸãã ãããŠãå€æããããã«ãããã¯ããã»ã©äºçŽ°ãªäœæ¥ã§ã¯ãããŸããã ã¡ãã»ãŒãžã«äŒŒãã³ãŒãã¯æ©èœããŸããã é©ãã¹ãããšã«ããŒã éã§å®è¡ããŠå šå¡ãæ¯æŽããã¿ãã¢ãã»ã¹ã¡ã¿ãããšè©±ãããåŸãããŒã¿ããŒã¹ãæšæºã§ãããäœããã®MySQLãšåæ§ã«äœæ¥ã§ããããšãæããã«ãªããŸããã ããŒã¿ããŒã¹ã«æ¥ç¶ããŠINSERTãå®è¡ããŸãã å°ãæ®ã£ãŠããŸãã æ¥ç¶æ¹æ³ C ++ãããç§ã¯æ¬²æ±ããããŸããã Pythonç§ã¯ããŸãç¥ããŸããã ããããGagileoã«ã¯perlããããŸãã ãããïŒ å°ããªãã¹ãã¹ã¯ãªãããäœæããããšããŠããŸãã ãã ããDBIã¢ãžã¥ãŒã«ã¯ã€ã³ã¹ããŒã«ãããŠããŸããã cpanãéå§ããŸãã ç§ã®ã€ã³ã¿ãŒãããã¯æžéããŠããŸãããäœããæºãåããŠããŸããããã¯ãã§ã«çŽ æŽãããããšã§ãã ããããçŽ20ååŸã®ã€ã³ã¹ããŒã«ã®æåŸã«ãäžéšã®ã©ã€ãã©ãªãŸãã¯ã¢ãžã¥ãŒã«ãæ¬ èœããŠããããšãããããŸããã åæ§ã«ããã®ã©ã€ãã©ãªãé 眮ããããšããŸãã ä»ã®ãã®ãå ¥ããããšããŠããŸãã æéããªããªããäœãæ©èœããŸããã ããã¯æ®å¿µã§ãã ç§ãç解ããŠããããã«ãé£äººã¯äŒŒãŠããŸãã ãã¹ãŠãäœããã®åœ¢ã§è€éã§ãããããã¬ãŒã³ããŒã·ã§ã³ã¯æ°è¡ã§ã·ã³ãã«ã§ããã ãããŠãRESTãããã³ã«ãä»ããŠããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ã§ããããšãããããŸããããã®ããã«ã¯ãAzureã§ã¢ãã€ã«ã¯ã©ã€ã¢ã³ããäœæããå¿ èŠããããŸãã é 匵ã£ãŠ ç¹°ãè¿ãã«ãªããŸãããã€ã³ã¿ãŒãããäžã®æ€çŽ¢ã®æã pythonã§äŸãèŠã€ããŸããã ãããŠãèŠãã圌ã¯åºå°ã«æžããïŒ Azure Webãµã€ãã«ã¯ãGalileoãéä¿¡ããããŒã¿ã衚瀺ãããŸãã ãã°ããããC ++ããã®åŒã³åºããã·ã¹ãã é¢æ°ã«è¿œå ããŸãããã®é¢æ°ã¯ããã©ã¡ãŒã¿ãŒã䜿çšããŠpythonã¹ã¯ãªãããå®è¡ããŸãã ããã ãã§ã ãã®éšåã¯å¿ããŠãã ããã 次ã«ãJavaScriptã䜿çšããŠããŒã¿ããŒã¹ããããŒã¿ãèªã¿åãæ¹æ³ãåŠç¿ããå¿ èŠããããŸãã
ããŒã¹ãããŒã¿ãæäŸããŠãã ããïŒ
ãã©ãŠã¶ã®æååã«ããŒãã«ã®ã¢ãã¬ã¹ãå ¥åãããšããã©ãŠã¶ã¯ããŒã¿ä»ãã®JSONã衚瀺ããŸãã ãã¹ãŠãçŽ æŽãããã§ãã ããŒã¿ã解æããããã«æ®ããŸãã JavaScriptã§å°ããªããŒã«ã«html-kuãäœæããŠããŸããããã«ããããã¬ãŒããèªã¿èŸŒãŸããããŒãžã«è¡šç€ºãããŸãã åäœããŸããã å©çšå¯èœãªããŒã¿ã¯ãããŸããã äœããæ¥ãããããã¯æ確ã§ã¯ãªãã ç§ã¯ç解ãå§ããŠããŸãã ãã©ãŠã¶ã®ãããã¬ãŒã¯ãããã€ãã®æš©å©ã«ã€ããŠäœããæžããŸãã ãããšäœã®é¢ä¿ããããŸããïŒ éåžžã®ã¢ãã¬ã¹ã§ã¯ããã¹ãŠã衚瀺ãããŸãã çªã£ã€ããŠãæ¢ããŠãçªã£ã€ããŠãæ¢ããŠã ãªãæ©èœããªãã®ãã¯æ確ã§ã¯ãããŸããã ã©ã®ãããªè©Šã¿ãããããªãã£ãã®ã§ãã¢ãã€ã«ã€ã³ã¿ãŒãã§ã€ã¹ãæäœããããã«ãAzureããŒãžã«èšèŒãããŠããããšãã¹ãããããšã«å®è¡ããããšã«ããŸããã ããŒã«ã«WebãµãŒããŒãèµ·åããããšããå§ãããŸãã æ°è¡ã§Delovã§ãããã©ããããããç§ã¯ããŒã«ã«ã§ãµãŒããŒã奜ãã§ã¯ãããŸããã ããŠãä»ã®ãã¹ãŠã倱æããå Žåãæ瀺ããèªã¿ãã ããã æžãããŠãããšããã«ãã¹ãŠãè¡ãããã¹ãŠãæ©èœããŸãã ã¹ã¯ãªãããå«ãããŒã«ã«ããŒãžãããŒã¿ãåä¿¡ããç»é¢ã«è¡šç€ºããŸãã ãã£ãïŒ ãã¡ãããã€ã³ã¿ãŒãããäžã®Azureã«ããWebãµãŒããŒãå¿ èŠã§ãããããã§ã«ååã§ãã
ãããã³ãããã5ã§ã¯ãªãJS
ããŒã¿ããããŸããBabylonJSã«åºã¥ããŠ3DèŠèŠåãåºå®ããå¿ èŠããããŸãã
座ã£ãŠããããŒãã«ã®ãµã€ãºã枬å®ããŠãéšå±ã®æ£ãã3Dã¢ãã«ãäœæããŸãã é·ã106ã»ã³ãã®1ã»ã¯ã·ã§ã³ã ã€ãŸããããŒãã«å šäœã¯2ã¡ãŒãã«ã§ãã çŽ æŽãããã ããŒãã«ãšéè·¯ãåãã3ã€ã®ãããã¯ãããã¯10ã¡ãŒãã«ã«ãªããŸãã ããã£ã åå£ãæåã®åã®ããŒãã«ããªãŒã¬ãã€ã¶ãŒã®ããŒãã«ãã¹ããŒãžã«è¿œå ããŸãã éšéã ãã©ãŠã¶ã§ã¯ãã¹ãŠãæ£åžžã«èŠããŸãã ã»ã³ãµãŒãã©ãã«çœ®ãããèããŸãã èŠç©ãããããŠããéãäœããåæããªãããšãããããŸããã ããŒãã«ã¯ã1ã¡ãŒãã«ã®2ã€ã®ã»ã¯ã·ã§ã³ã§ã¯ãªãã4ã€ã®ã»ã¯ã·ã§ã³ã§æ§æãããŠããŸãã ãŸããããŒãã«ã®3ã€ã®ãããã¯ã¯10ã¡ãŒãã«ã«åãŸããŸããã å€ã®èŠ³å®¢ã®ãµã€ãºã枬å®ããŠãå»äžã«å·»å°ºãåããŸãã 16ã¡ãŒãã«ã ãã¹ãŠãåæç»ããå¿ èŠããããŸãã
æŒé£ ããããæŒé£ãªãã§ææ ¢ã§ããŸãã å°ãªããšã30åã§ããã圹ç«ã¡ãŸãã
ãã¹ãŠãæ©èœããŸãã ãã€ã³ãã®äœçœ®ãå«ãããŒã¿ãèªã¿åãããŸãããããŒã«ã«ããŒãžããã§ã¯ãªãããµã€ãããããŒã¿ãååŸããããšã«èŠåŽããå¯èœæ§ããããŸãã æ¢ããŠãããæ¢ããŠãããé·ãéæ¢ããŠããã 次ã«ãã»ãã¥ãªãã£èšå®ã®ã©ããã§ããµã€ããžã®ã¢ã¯ã»ã¹ãããŒã«ã«ãã¹ãã§ã®ã¿èš±å¯ãããŠããããšã«æ°ä»ããŸãã ã¯ãã確ãã«ãMySQLã«ã¯äŒŒããããªãã®ãããããšãæãåºããŸãã èš±å¯ããããã¹ãã«ãµã€ãã¢ãã¬ã¹ãè¿œå ãããšããã¹ãŠããã«æ©èœããŸããã ãã£ã㌠ãã¹ãŠã管çããŸããã ãŸã 1æé以äžãããŸãã
ïŒããŒã¿ã®è¿œå ãšåä¿¡ã®å®éšäžãã¢ã¯ã»ã¹ã¯ãã¹ãŠã®ãŠãŒã¶ãŒã«å¯ŸããŠå®å šã«ãªãããã«æ§æãããŠããããšã«æ³šæããå¿ èŠããããŸãããããã£ãŠãããŒã¿è¿œå ã¹ã¯ãªããã§ã¢ã¯ã»ã¹ããŒãæå®ãããŠããŸããã
æçµæºåãäžæ¬ã§ã®æé
ãã¹ãŠãæ©èœããã»ã³ãµãŒãããŒã¿ãåä¿¡ããããŒããäœçœ®ãèšç®ããã¯ã©ãŠãã«éä¿¡ãããµã€ããèŠèŠåãè¡ããŸãã é·ãã¯ã€ã€ãŒãã»ã³ãµãŒã«åãä»ããŠã芳客ã®äžã§äºãããé ãé¢ããŠé 眮ããèšå®ãã¡ã€ã«ã§ç©ºéå ã®çµ¶å¯Ÿäœçœ®ãèšå®ããããšã ããæ®ã£ãŠããŸããã ãã¹ã¯ã®ç«¯ã«2ã€ã®ã»ã³ãµãŒãé 眮ããã¬ããŒãçšã«éšéã«2ã€ã®ã»ã³ãµãŒãé 眮ãã1ã€ãã¡ã€ã³ããŒãã«ã®äžå€®ã«é 眮ããäºå®ã§ããã ããã«ã¯1æéããããŸããã 倧éã®æéãç§ã¯èãããããŠäºéç·ãåŒãè£ãå§ããŸããã æåã®2ã€ã®ã»ã³ãµãŒãžã®é ç·ã¯3ã¡ãŒãã«ã§ãªããã°ãªããŸããã§ããã
ã¯ã€ã€ãŒãç Žããã ãã¢ã¯ã€ã€ã3æ¬ã«ããããã«ããã¢ã¯ã€ã€ã1æ¬ã§æãç³ãå¿ èŠããããŸãã ç§ã¯ããããäžç·ã«ãããå§ããåã¡ãŒãã«ããšã«ããŒãã§åºå®ããŸãã ããã«ã¯ãã¹ãŠ10åããããŸããã ç§ã¯ãã®ãããªããŒã¹ã§éã«åããªãããšã¯æããã§ãã ã¯ã€ã€ã®æºåã¯ã§ããŠããŸãããã®ã£ããã®æ°ããã¯ã€ã€ãå«ããŠãã»ã³ãµããã¯ã€ã€ã䌞ã°ãå¿ èŠããããŸãã ããŒãããããã«ãããã£ãŠãå·»ãäžããŸãã ããŒãã«æ¥ç¶ãããšãã»ã³ãµãŒãåäœããŸãã OKã次ã®æé ã«é²ã¿ãŸãã ãã¹ãŠã«ååãªæéããªãããšã¯ééããªãã®ã§ãã»ã³ãµãŒã3ã€ã ãæ®ãããšã«ããŸãã ã¯ã€ã€ãŒã§3ã¡ãŒãã«ã3ã¡ãŒãã«ã8ã¡ãŒãã«ã æåŸã®8ã¡ãŒãã«ã¯ããããŒãã§åºå®ãããŠããããå°ãããããŠããŸãã ç§ã¯æ¥ãã§ãããããã¯éåžžã«æªãã§ãã ã¯ã€ã€ãŒããããã«ãããšãèªç¶ã«å£ããŸãã ä¿®æ£ããŸããã ãã£ã ã»ã³ãµãŒãæ¥ç¶ããŸãã LEDã¯ç¹ç¯ããŠããŸãããç¹ç¯ããŠã¯ãããŸããã ã¯ã€ã€ãŒãèŠãŠãã»ã³ãµãŒåºåã«+5ããããã«LEDã«é©çšããŸããã ãŸããç§ã¯ãããçãããããããªããšæãã ã¯ã€ã€ãŒãæ£ããå€æŽããŠããã»ã³ãµãŒã¯ãŸã èµ€ãå ããŸãã æ£ç¢ºã«çŒãããïŒ ç§ã¯ããäžã€åããŸãã äºåããããŸãã æ¥ç¶ããŸãã ãŸããèµ€ãå ããŸãã ãã¥ãŒãã³ã°æµæã¯åœ¹ã«ç«ã¡ãŸããã å æ°ïŒ ããã£ãã ããŒãã«æ£ããæ¥ç¶ãããŠããªãããšãããããŸãã ãŸããããŒãäžã®ããŒããçŒãããããããŸããã ããã§çµããã§ãããã¢ã§ã¯çµãããŸããã ããäžåºŠãã¹ãŠã確èªãããã¹ãŠãæ£ããæ¥ç¶ããŸãã ãããŠèŠãããã¹ãŠãæ©èœããŸãã ãããŠãã¬ããŒãã®å§ãŸãã§ãã16:00ã«ã äºçªç®ã
å ±åæž
Azure Webãµã€ãã§ãããžã§ã¯ãã管çã§ããã®ã¯è¯ãããšã§ãããã¬ãŒã³ããŒã·ã§ã³ã®ããã«ã©ããããããæ¥ç¶ããå¿ èŠã¯ãããŸããã ãŸããã«ãŒã¿ãŒãä»ããŠããŒãã«æ¥ç¶ãããŠãããããç¡å¹ã«ããããšã¯å°é£ã§ãã ç§ã¯ãããžã§ã¯ãã«ã€ããŠè©±ããŸãã ããŒã«ãä¿¡å·ãœãŒã¹ã®ä»¥åã®ãããã°äœçœ®ã䜿çšããŠã芳客ã®3Dã¢ãã«ã瀺ããŸãã ç§ã¯æãããããŸãã ã³ã³ãœãŒã«ããã®ãã°ã§ãããŒã¿ããªããªã£ãããšã確èªã§ããŸãããã©ãŠã¶ãåèµ·åããŸãã æ°ãããã€ã³ãã衚瀺ãããã¯ãã§ããããæ£çŽãªãšãããã©ã®ãã€ã³ããã©ã®ãã€ã³ãã§ãã©ããããã§ã¯ãªãã£ãããèŠããŠããŸããã ããã ãã§ã
æåã®1人ã§ããããšã¯éåžžã«çŽ æŽãããããšã§ãããã®åŸã座ã£ãŠä»ã®ã¬ããŒããéãã«èãããšãã§ããŸãã ã¬ããŒãã¯ç°ãªã£ãŠããŸããã
ããã ãã§ãã ãããããç§ã¯ããã«ãœã³ã®åè ã®äžäººã«ãªããè³ãåè³ããŸããã
äžè¬çãªå°è±¡
æ°ã«å ¥ã£ãã èå³ã®ãããã®ãããªå€§å¢ã®äººã ã ãã®ãã¡ã®ããã€ããšè©±ãããŸããã
ããã«ãœã³ã®ãããã§ãããã§ãªãå ŽåãIntel Galileoããã€éå§ãããã¯ããããŸããã ãããŠãAzureã«å°éããã«ã¯ãããã¯äžè¬ã«äžå¯èœã§ãã å€ãã®ããšãåŠã³ãŸããã
å šäœãšããŠãMicrosoftãšIntelã«æè¬ããŸãã
ãããŠçµè«ãšããŠãããã«ãœã³ã§æã£ãŠããã³ãŒããå€æŽããã«æã¡èŸŒã¿ãŸãã
ãã¡ã€ã«ïŒ
dist1.cpp
#include "mraa.h" #include <ctime> #include <ratio> #include <chrono> #include <vector> #include <iostream> #include <stdlib.h> #include "funcs.h" int main() { init(); int waitId = 0; const int numMics = NUM; // std::cout<<"Num sensors="<<numMics<<std::endl; // return 0; mraa_gpio_context gpio[numMics]; bool on[numMics]; int dist[numMics]; // std::chrono::high_resolution_clock::time_point times[numMics]; std::chrono::duration<double> times[numMics]; for( int k = 0; k < numMics; k++ ) { gpio[k] = mraa_gpio_init(k); mraa_gpio_dir(gpio[k],MRAA_GPIO_IN); } do { std::cout<<"Wait..."<<waitId<<std::endl; waitId++; for( int k = 0; k < numMics; k++ ) { on[k] = false; dist[k] = 0; } auto numOn = 0; int currStep = 0; std::chrono::high_resolution_clock::time_point startTime; do { for( int k = 0; k < numMics; k++ ) { if( ! on[k] ) { int v = mraa_gpio_read(gpio[k]); if( v == 0 ) { std::chrono::high_resolution_clock::time_point now = std::chrono::high_resolution_clock::now(); if( numOn == 0 ) { currStep = 0; startTime = now; } on[k] = true; dist[k] = currStep; times[k] = std::chrono::duration_cast<std::chrono::duration<double> >(now-startTime); numOn++; } } } currStep++; } while (numOn < numMics && (currStep < 8000 || numOn < 1) ); if( currStep >= 8000 ) continue; for( int k = 0; k < numMics; k++ ) { printf("%d ",dist[k]); } printf(" === time(s): "); for( int k = 0; k < numMics; k++ ) { printf("%f ",times[k].count()); } printf(" === dist(m): "); std::vector<float> L; for( int k = 0; k < numMics; k++ ) { float d = 300*times[k].count(); L.push_back(d); printf("%f ",d); } Point3 event = getPosition(L); std::cout<<"Event=("<<event.x<<","<<event.y<<","<<event.z<<")"<<std::endl; char str[300]; sprintf(str,"./test_rest_add.py %f %f %f",event.x,event.y,event.z); std::cout<<"send data"<<std::endl; system(str); std::cout<<"send ok"<<std::endl; // create dists sleep(1); } while (true); for( int k = 0; k < numMics; k++ ) { mraa_gpio_close(gpio[k]); } return 0; }
funcs.h
#include <vector> struct Point3 { float x,y,z; }; struct DistPos { Point3 p; float dist; }; struct Box { Point3 p1,p2; float step; }; void init(); Point3 getPosition(std::vector<float> &dists); extern int NUM;
funcs.cpp
#include <vector> #include <fstream> #include <iostream> #include "funcs.h" #include <math.h> std::vector<Point3> sensorPos; int NUM = 0; void readSensorPos() { if( sensorPos.size() > 0 ) { return; } std::ifstream file("positions.txt"); if( ! file ) { return; } int num = 0; file>>num; std::cout<<"Num="<<num<<std::endl; for( int k = 0; k < num; k++ ) { float x,y,z; file>>x>>y>>z; Point3 point; point.x = x; point.y = y; point.z = z; sensorPos.push_back( point ); std::cout<<"x="<<x<<" "; std::cout<<"y="<<y<<" "; std::cout<<"z="<<z<<std::endl; } NUM = num; } void init() { readSensorPos(); } Point3 getPosition( std::vector<DistPos> dists, Box box) { std::cout<<"Box=("; std::cout<<box.p1.x<<","<<box.p1.y<<","<<box.p1.z<<")-("; std::cout<<box.p2.x<<","<<box.p2.y<<","<<box.p2.z<<")"<<std::endl; std::cout<<"dists.size="<<dists.size()<<std::endl; Point3 bestPoint; bestPoint.x = 0; bestPoint.y = 0; bestPoint.z = 0; float minErr = 10e20; float normDist[NUM]; for( float tx = box.p1.x; tx <= box.p2.x; tx+= box.step ) { for( float ty = box.p1.y; ty <= box.p2.y; ty+= box.step ) { for( float tz = box.p1.z; tz <= box.p2.z; tz+= box.step ) { float currErr = 0; //std::vector<float> normDist(dists.size()); int kk = 0; for( auto iter = dists.begin(); iter != dists.end(); iter++, kk++ ) { float dx = iter->px - tx; float dy = iter->py - ty; float dz = iter->pz - tz; float d = sqrt(dx*dx + dy*dy + dz*dz); normDist[kk] = d; // float err = d - (iter->dist * iter->dist); // currErr += err*err; } float minVal = normDist[0]; for( int k = 1; k < NUM; k++ ) { if( normDist[k] < minVal ) minVal = normDist[k]; } for( int k = 0; k < NUM; k++ ) { normDist[k] -= minVal; } currErr = 0; for( int k = 0; k < NUM; k++ ) { float delta = normDist[k] - dists[k].dist; currErr = delta*delta; } if( currErr < minErr ) { minErr = currErr; Point3 p; px = tx; py = ty; pz = tz; bestPoint = p; } } } } return bestPoint; } Point3 getPosition(std::vector<float> &dists) { Point3 p1,p2; p1.x = -5; p1.y = 0; p1.z = -5; p2.x = 5; p2.y = 3; p2.z = 5; float step = 0.1; Box box; box.p1 = p1; box.p2 = p2; box.step = step; std::cout<<"DistPos="<<std::endl; std::vector<DistPos> distPos; for( int k = 0; k < dists.size(); k++ ) { DistPos dp; dp.p = sensorPos[k]; dp.dist = dists[k]; distPos.push_back(dp); std::cout<<"("<<dp.px<<","<<dp.py<<","<<dp.pz<<") d="<<dp.dist<<std::endl; } Point3 bestPoint = getPosition( distPos, box); return bestPoint; } //const int NUM = 3; //float dist[NUM];
position.txt
3 2 1 3 -2 1 3 0 1 5
test_rest_add.py
#!/usr/bin/python import urllib import urllib2 import sys x = sys.argv[1] y = sys.argv[2] z = sys.argv[3] #print x," ",y," ",z,"\n" url = 'https://audiosprut.azure-mobile.net/tables/pos' params = urllib.urlencode({ "x": x, "y": y, "z": z, "present" : "true" }) response = urllib2.urlopen(url, params).read()
ãªã³ã¯ïŒ audiosprut.azurewebsites.net