ChatWorkãšArduinoã§ãªãã£ã¹ãã㯠- å¿æ¥å®€ç·š
Continue Reading
æšå¹Žã«ç¶ããä»å¹Žãå§ãŸã£ãŠãŸãChatWork Advent Calendar2014!
æ¬æ¥6æ¥ç®ã®æ
åœã¯ããã¶ã€ã³éšã®è¥¿å£ã§ãã
æšå¹Žã®ããªãã£ã¹ãã㯠- ãã€ã¬ç·šãã§ãäžéšæ¹é¢ããäºæ³å€ã«ãŠã±ãçŸå³ãèŠããŠããŸããä»å¹ŽãïŒãŸãããšãã声ãããããã ãã©ïŒãã£ããã¯ãŒã¯APIã§ãªãã£ã¹ããã¯ãããããšã«ããŸããã
ããã§ã¯ãæåŸãŸã§ãä»ãåãã®ã»ã©ãããããé¡ãããŸãã
ãªãªãŒã¹ãåŸ
ã¡æã声ãéåžžã«å€ãã£ãã¡ãã»ãŒãžAPI ããå
æ¥ã€ãã«å
¬éãããŸããïŒïŒå€§å€ããŸããããŸããïŒ
å
¬éãããŠãã°ããçµã¡ãŸãã®ã§ããã§ã«æŽ»çšãããŠããæ¹ãããã£ããããšæããŸãã
ç§ããã£ãã䜿ã£ãŠã¿ãããŠããã®èšäºã®ãã¿çšã«ãšè¶£å³ãããžã§ã¯ãã§äœã£ãŠããããªãã£ã¹ã®å¿æ¥å®€ã®äœ¿çšç¶æ³ã調ã¹ãè£
眮ãšçµã¿åãããããšã«ããŸããã
åŒç€Ÿã¯ä»å¹Žã®æ¥ã«æ°ãããªãã£ã¹ã«ç§»è»¢ããŸããã
æ°ãªãã£ã¹ã®å¿æ¥å®€ã¯ãäžã«äººãããã®ãã©ããå€ããã§ã¯äŒºãç¥ããªãã»ã©é®é³æ§ãé«ããªã£ãŠããŸãã
éèŠãªè©±ãããããšããããããé®é³æ§ãé«ãããšã¯å€§äºãªããšã§ãã
ã§ãããããæ¥äºä»¶ã¯èµ·ãããŸããã
äžã«äººãããã®ãåãããªããããŠãèª°ãæ°ã¥ããã»ã³ã ãã»ããããŠéåºããŠããŸããäŒè°ãããŠããã¡ã³ããŒãå¿æ¥å®€ããåºãŠãããšããã»ã³ã ãåå¿ããèŠå ±ãçºç«ããŠããŸã£ãã®ã§ãïŒïŒ
éåžžã䜿çšããªãæã¯æãéãããã䜿ãæã¯å
±æã®Googleã«ã¬ã³ããŒã«äºå®ãå
¥ãããªã©ã®ã«ãŒã«ããããŸããããããªåºæ¥äºããã£ãã®ã§æ°ããªã€ãããŒã·ã§ã³ãå¿
èŠãšãããŠãããšæããå¿æ¥ã«äººãããããç°¡åã«ç¥ããè£
眮ãäœãããšæããã¡ãŸãããïŒãããªå€§ããªãªãã£ã¹ã§ããªãã®ã§ãããã«ç¢ºèªã§ããã£ã¡ããŒã§ãããã©ïŒ
äœãå§ããåœåã¯ãã»ã³ãµå
¥åãArduinoããJavaScriptã«éä¿¡ããããŒã¿ã«å¿ããŠHTMLã®è¡šç€ºãåãæ¿ãããã®ãèããŠããŸããã ãããiPhoneã§è¡šç€ºããã»ã³ã ã®æ©æ¢°ã®ãããã°ã«çœ®ããŠäœ¿ãã€ã¡ãŒãžã§ãããïŒiPhoneå€ïŒïŒ
ããã«ãã¡ãã»ãŒãžAPIãåãå
¥ããããšã«ãªããåè¿°ã®iPhoneã§èŠããã®ãšã¯å¥ã«ããã£ããã¯ãŒã¯ããå¿æ¥ã䜿çšäžããåãåããããšãããã«è¿äºãããŠãããBOTãäœãããšã«ããŸããã
ãã£ããã¯ãŒã¯ïŒãã£ããã¯ãŒã¯APIïŒ
人æã»ã³ãµïŒã¢ãžã¥ãŒã«ïŒ
ãã£ããã¯ãŒã¯APIã¯ãã£ããã¯ãŒã¯ã®ãåäœèšå®ã>ãAPIçºè¡ãã§ããŒã¯ã³ãçºè¡ããããšã§äœ¿ããããã«ãªããŸãã
人ããããã©ãããæ€ç¥ããã®ã«ãä»åã¯åååã®èµ€å€ç·äººæã»ã³ãµïŒPassive Infrared RayãPIRã»ã³ãµïŒã®ã¢ãžã¥ãŒã«ã䜿ãããšã«ããŸããã
ç©äœïŒäººãïŒã¯ãã®æž©åºŠã«ãã£ãŠç°ãªãæ³¢é·ã§èµ€å€ç·ãæŸå°ããŠããŸãã
人æã»ã³ãµ(PIRã»ã³ãµ)ã¯ãã®èµ€å€ç·ãæ€ç¥ãããã®æ³¢é·ïŒæž©åºŠïŒã«å€åãèµ·ãããšãããç©äœïŒäººïŒã®åããšããŠæ€ç¥ããŸãã
åçã®ãããªã»ã³ãµãŒã¢ãžã¥ãŒã«ã䜿ããšãã¯ã€ã€ãªã³ã°ããã ãã§ããã«äœ¿ããã®ã§ãæè»œã§ããïŒãã®åå°ããé«ãïŒ1,000åã»ã©ïŒãªããŸããïŒ
ã¬ããããã°ã©ãã³ã°
ArduinoåŽã¯ãããžã¿ã«I/Oã«æ¥ç¶ãã人æã»ã³ãµããã®å
¥åãããœã³ã³ã«åºåãããšããåŠçããããŸãã
ãã®ããã°ã©ã ã¯äžèšã®ããã«ãªããŸãã
13ã8ãšããã®ã¯ãArduinoã®I/Oçªå·ã§ãã©ã®ãã³ã䜿ãããæå®ããããã«ã»ã³ãµãŒããã®ä¿¡å·ç·ãæããŸããïŒäžã®æ¥ç¶å³ã§ã¯ããžã¿ã«2çªãã³ã«ã€ãªãã£ãŠããŸãïŒ
setup ã® Serial.begin(9600); ã§ããŒããéãïŒ9600ã¯è»¢éã¬ãŒã[bps]ã®æå®ã§ãïŒã
loop ã§0.1ç§ããã« Serial.println(pir_read); ã§pir_pinïŒäººæã»ã³ãµïŒããã®å
¥åå€ïŒ0ã1ïŒãéä¿¡ããŠããŸãã
å®éã«ããã°ã©ã ãArduinoã«æžã蟌ããšããã«å®è¡ãããArduino IDEã®ã·ãªã¢ã«ã¢ãã¿ã§éä¿¡ãããŠããããŒã¿ãèŠãããšãã§ããŸãã
JavaScriptãšArduinoã§ã·ãªã¢ã«éä¿¡
ã»ã³ãµå
¥åã«åå¿ããBOTãäœãã«ã¯ãArduinoããéãããŠããããŒã¿ãJavaScriptã§åãåãå¿
èŠããããŸãã
ãã®éä¿¡ã«ä»å㯠SerialPort Server ãå©çšããŸããã
SerialPort Serverã䜿ããšãJavaScriptãšArduinoéã§HTTPãWebSocketãTCP Socketã§ããŒã¿ã®ãããšããã§ããŸãã
% gem install serialport-server
ã§ã€ã³ã¹ããŒã«ããèµ·åã¯æ¬¡ã®ã³ãã³ããå®è¡ããŸãã
% serialport-server /dev/tty.{usb-device}
usb-device ã«ã¯ãArduinoãæ¥ç¶ããŠããUSBããŒããæå®ããŸãã USBããŒãã¯ãArduino IDEã®ãããŒã«ãã¡ãã¥ãŒ > ãã·ãªã¢ã«ããŒããã§èª¿ã¹ãããŸãã
èµ·åãããšããŒãçªå·:8783ã§ã·ãªã¢ã«éä¿¡çšã®ãµãŒããŒãç«ã¡äžãããŸãã
BOTã§ã¯ãç¹å®ã®ãã£ããã«ãŒã ã®ã¡ãã»ãŒãžãåãåãããã®ã¡ãã»ãŒãžãšã»ã³ãµå
¥åã«å¿ããè¿äºãæçš¿ãããšããåŠçããããŸãã
ã§ã¯ãã²ãšã€ã¥ã€èŠãŠãããŸãããã
ãŸãã¯ã»ã³ãµå
¥åãåãåãéšåã§ãã
0.1ç§ééã§ããŒã¿ãåãåããsensor_output ãæŽæ°ããŠããŸãã
次ã«ãã£ããã¯ãŒã¯ã®ã¡ãã»ãŒãžåä¿¡ãšæçš¿éšåã§ãã
room_id ã§ãã£ããã«ãŒã ãæå®ããŸãã
ãããŠãBOTã®åŠçéšåã§ãã
æªèªã¡ãã»ãŒãžãåä¿¡ãè¿ä¿¡ã¡ãã»ãŒãžãçæããæçš¿ãããšããåŠçãç¹°ãè¿ããŠããŸãã
ãã£ããã¯ãŒã¯APIã®ãªã¯ãšã¹ãæ°ã¯5åããã100åãŸã§ã«å¶éãããŠãããããã¡ãã»ãŒãžåä¿¡ééã«ã¯æ³šæãå¿
èŠã§ããããã§ã¯5ç§ééã«ããŠããŸãã
HTMLã§è¡šç€ºãããã¯ã©ã€ã¢ã³ãåŽã®ããã°ã©ã
ã¯ã©ã€ã¢ã³ãåŽã§ã¯ãã»ã³ãµå
¥åã $.getJSON ã§åãåãã®ã§ãããããã jQuery ãèªã¿èŸŒãã§ãããŸãã
ãããiPhoneãªã©ã§è¡šç€ºãããå ŽåãBOTã®æã®ããã« var serial_server = 'http://localhost:8783' ã®æå®ã§ã¯éä¿¡ã§ããŸããã
ããŒã«ã«ãããã¯ãŒã¯å
ã§ããã°ãSerialPort Serverãèµ·åããŠããããœã³ã³ã®IPã¢ãã¬ã¹ãæå®ããŸãã
ãããŠãåãåã£ãã»ã³ãµãŒããŒã¿ã«å¿ããŠãHTMLãæäœããåŠçãæžããŸãã
ããããŠäœã£ãŠããè£
眮ãã©ã®ããã«åããŠããã®ãããã¢åç»ã«æ®ããŸãããïŒã»ã³ãµãææãããŠããŸãæ®ããªãâŠïŒ
人æã»ã³ãµãŒã¢ãžã¥ãŒã«ãèµ€ãå
ã£ãŠããæãåå¿ïŒäººãããïŒããŠããæã§ãã ã»ã³ãµã®åå¿ã«é£åããŠãiPhoneã®ãã©ãŠã¶ã®è¡šç€ºãåãæ¿ãã£ãŠããã®ãåãããŸãã
ãããŠããã£ããã¯ãŒã¯ããããããïŒããšåãåããããšãã»ã³ãµãåå¿ããŠããæã¯ãããã§ããåå¿ããŠããªãæã¯ããããã§ããšããè¿äºãBOTãæçš¿ããŸãã
ãŸãããã»ã³ã ãããïŒããšèããšãã»ã³ã ããã§ããã»ã³ã ãŸã ãããã§ããšããè¿äºãã»ã³ãµã®åå¿ã«é£åããŠè¿ã£ãŠããŸãã
ChatWork APIãä»ã®WebãµãŒãã¹ãšçµã¿åãããäŸã¯ããããããšç޹ä»ãããŠãããšæããŸãããä»å玹ä»ãããããªããŒããšçµã¿åãããŠããè·å Žç°å¢ãè¯ããªã£ãããçæŽ»ã«æœ€ããäžããŠãããïŒæœ€ãâŠïŒã©ããªãã®ãå
šç¶æãã€ããŠãªããã©ïŒãããªãã®ãäœãããããããŸããã
3æ¥ç®ã®ãã³ãã€(@tinpay)ã®èšäºã§Beacon & ãã£ããã¯ãŒã¯ã§ãªã¬ãªã¬å€æ 管çãšãããããªãã®ã玹ä»ãããŠããŸãã
ãã²ãã¿ãªããããã£ããã¯ãŒã¯APIãæŽ»çšããŠãã ããïŒ
ããã§ã¯ãæåŸãŸã§ã芧ããã ãããããšãããããŸããã