IoT

2018ǯ04·î04Æü

ÅÅÇÈˡŬ¹ç¤Î NFC ¥â¥¸¥å¡¼¥ë¤Ç°Â²Á¤Ê NFC ¥¿¥°¤òÍøÍѤ¹¤ë

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

¤Ï¤¸¤á¤Ë

Åö¥Ö¥í¥°¤Îµ­»ö¡ÖNFC ¥¿¥°¤ÇÈëÌ©¾ðÊó¤ò°ÂÁ´¤Ë·È¹Ô¤¹¤ë»î¤ß¡×¤Ç¤Ï MIFARE Ultralight ½àµò¤Î NXP À½¡ÖNTAG21x¡×¥·¥ê¡¼¥º¤ËÌܤò¸þ¤±¤Þ¤·¤¿¡£¤½¤³¤Ç¤Ï»Ô¾ì¤Ç¸½ºß¼çή¤Î¤³¤Î NFC ¥¿¥°À½Éʤε¡Ç½Ì̤Ǥαü¤Î¿¼¤µ¤ò Android ¥Ç¥Ð¥¤¥¹¤ò»È¤Ã¤Æ»î¤·¤Æ¤ß¤Þ¤·¤¿¤¬¡¢ÃÍÃʤâ°Â¤¯¤¹¤Ã¤«¤êµ¤¤ËÆþ¤Ã¤¿ NTAG21x ¤ò¼«ºî¤ÎÁõÃ֤ǤâÍøÍѤ·¤¿¤¤¤È¹Í¤¨¤Þ¤·¤¿¡£·ÈÂÓüËö¤Î²ÄÈÂÀ­¡¢¿ø¤¨ÃÖ¤­·¿ÁõÃ֤γÈÄ¥À­¡¢¤É¤Á¤é¤âÆü¾ïÀ¸³è¤Ç¤Î NFC ¤Î¼ÂÍÑÀ­¤ò»Ù¤¨¤Æ¤¤¤ëÅÚÂæÅª¤ÊÍ×ÁǤǤ¹¤Í¡£

NFC ¥ê¡¼¥À/¥é¥¤¥¿¥â¥¸¥å¡¼¥ëÀ½Éʤòõ¤¹

¤½¤ó¤Ê¤ï¤±¤Ç¤Þ¤º¤ÏÅŻҹ©ºî¸þ¤­¤Î NFC ¥ê¡¼¥À/¥é¥¤¥¿¥â¥¸¥å¡¼¥ë¤òõ¤¹¤³¤È¤«¤é»Ï¤á¤Þ¤·¤¿¡£¥Í¥Ã¥È¤ò¸«ÅϤ·¤Æ¤ß¤ë¤ÈÍÍ¡¹¤Ê¤â¤Î¤¬½Ð²ó¤Ã¤Æ¤ª¤ê¡¢°Ê²¼¤ÎÀ½Éʤʤɤ¬ÌܤˤȤޤê¤Þ¤·¤¿¡£¤¤¤º¤ì¤â¤Ê¤«¤Ê¤«Îɤµ¤½¤¦¤Ç¤¹¡£

¹ñ³°¤Î¥á¡¼¥«¡¼¤Ë¤è¤ë¤³¤ì¤é¤Î¥â¥¸¥å¡¼¥ë¤Ï¸Ä¿Í¤Ç¤â´Êñ¤Ë¹ØÆþ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£°ìÊý¡¢¹ñÆâ¥á¡¼¥«¡¼¤ÎÀ½ÉʾðÊó¤òõ¤·¤¿¤È¤³¤í¤Ç¤Ï¡¢¤¤¤¯¤Ä¤â¤Î´ë¶È¤¬ NFC ¥ê¡¼¥À/¥é¥¤¥¿¥â¥¸¥å¡¼¥ë¤ÎÀ½Â¤¡¦ÈÎÇä¤ò¹Ô¤Ã¤Æ¤Ï¤¤¤ë¤â¤Î¤Î¤½¤Î¤Û¤È¤ó¤É¤¬Ë¡¿Í¸þ¤±¤ÎÁȤ߹þ¤ßÍѤǤ¢¤ë¤³¤È¤òÃΤê¤Þ¤·¤¿¡£ ¤½¤ÎÃæ¤Ç¡¢»ä¼«¿È¤¬º£²óÄ´¤Ù¤¿ÈϰϤǤϡ¢2018ǯ3·î»þÅÀ¤Ç¸Ä¿Í¤¬°ìÈ̤Υǥ£¥¹¥È¥ê¥Ó¥å¡¼¥¿¤«¤éÆþ¼ê²Äǽ¤Ê¹ñÆâÀ½Éʤϥ½¥Ë¡¼³ô¼°²ñ¼ÒÍͤˤè¤ë¡ÖRC-S620/S¡×¤Î¤ß¤Ç¤·¤¿¡£¤â¤·Â¾¤Ë¤âÆþ¼ê¤·¤ä¤¹¤¤¹ñÆâÀ½Éʤ¬¤¢¤ì¤Ð¤¼¤Ò¤´¶µ¼¨²¼¤µ¤¤¡£

¤µ¤Æ¡¢¤³¤³¤Çµ¤¤Ë¤Ê¤ë¤Î¤¬¤³¤ì¤é¤ÎÀ½ÉʤÈÅÅÇÈË¡¤È¤Î´Ø·¸¤Ç¤¹¡£

ÅÅÇÈË¡¤È NFC ¥â¥¸¥å¡¼¥ë¤È¤Î´Ø·¸¤Ë¤Ä¤¤¤Æ

¤´¾µÃΤΤ褦¤Ë¡¢ÆüËܹñÆâ¤Ç¡Öµ»Å¬¥Þ¡¼¥¯¡×¤Î¤Ê¤¤ÌµÀþµ¡¤ò»ÈÍѤ¹¤ë¤ÈÅÅÇÈË¡°ãÈ¿¤È¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¡¢³°¹ñÀ½¤Îµ¡´ï¤ò»È¤¤¤¿¤¤¾ì¹ç¤Ê¤É¤Ë¤Ï¤³¤Î¤³¤È¤¬ºÇ½é¤Ë³Îǧ¤¹¤Ù¤­¥Ý¥¤¥ó¥È¤È¤Ê¤ê¤Þ¤¹¡£¤Ç¤Ï¡¢¤ä¤Ï¤êÅż§ÇȤòȯÀ¸¤µ¤»¤ë NFC ¥ê¡¼¥À/¥é¥¤¥¿¤ÏÅÅÇÈË¡¤Ë¤ª¤¤¤Æ¤É¤Î¤è¤¦¤Ë°·¤ï¤ì¤Æ¤¤¤ë¤Î¤Ç¤·¤ç¤¦¡£µ»Å¬¾ÚÌÀ¤¬É¬ÍפʤΤ«¡¢¤½¤ì¤È¤â¼þ°Ï¤Ø¤Î±Æ¶Á¤¬Èù¼å¤Ç¤¢¤ë¤¿¤áÆÃ¤Ëµ¬Äꤵ¤ì¤Æ¤¤¤Ê¤¤¤Î¤«¡£¤³¤ÎÅÀ¤Ë¤Ä¤¤¤ÆÄ´¤Ù¤Æ¤ß¤Þ¤·¤¿¡£

¤Þ¤È¤á

·ëÏÀ¤È¤·¤Æ¡¢ÅÅÇÈË¡¤Ë¤Ï NFC ¥ê¡¼¥À/¥é¥¤¥¿¤Ë´Ø¤¹¤ëÌÀ³Î¤Êµ¬Ä꤬¤¢¤ê¡¢¤½¤ì¤ËŬ¹ç¤·¤Ê¤¤À½ÉÊ¤ÎÆüËܹñÆâ¤Ç¤Î»ÈÍÑ¤Ï NG ¤Ç¤¢¤ë¤³¤È¤òÃΤê¤Þ¤·¤¿¡£Í×ÅÀ¤òÀ°Íý¤·¤Æ¤ß¤Þ¤¹¡£

  • ¤¤¤ï¤æ¤ëµ»Å¬¾ÚÌÀ¤ÏÆÃÄê̵ÀþÀßÈ÷¤òÂоݤȤ¹¤ë¤â¤Î¤À¤¬¡¢NFC ¥ê¡¼¥À/¥é¥¤¥¿¤ÏÅÅÇÈË¡¤Ë¤ª¤¤¤ÆÆÃÄê̵ÀþÀßÈ÷¤Ë¤Ï¤¢¤¿¤é¤º¡Ö¹â¼þÇÈÍøÍÑÀßÈ÷¡×¤Ë³ºÅö¤·¡¢¤½¤³¤Ë´Þ¤Þ¤ì¤ë¡ÖͶƳ¼°ÆÉ¤ß½ñ¤­ÄÌ¿®ÀßÈ÷¡×¤ËʬÎव¤ì¤ë
    • ¤Ä¤Þ¤ê NFC ¥ê¡¼¥À/¥é¥¤¥¿¤Ïµ»Å¬¥Þ¡¼¥¯¤È¤Ï´Ø·¸¤¬¤Ê¤¤
  • ͶƳ¼°ÆÉ¤ß½ñ¤­ÄÌ¿®ÀßÈ÷¤Ï¡¢¤½¤ÎÅų¦¶¯ÅÙ¤¬½êÄê¤Î¾ò·ï¤òËþ¤¿¤·¤Æ¤¤¤ë¾ì¹ç¡¢¤Þ¤¿¤Ï¡¢Áí̳Âç¿Ã¤Ë¤è¤ë·¿¼°»ØÄê¤ò¼õ¤±¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¸ÄÊ̤εö²Ä¤Ê¤·¤ËÀßÃÖ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë
    • ·¿¼°»ØÄê¤Î¿½ÀÁ¼Ô¤ÏÆüËܿͤޤ¿¤ÏÆüËܹñÆâ¤ÎË¡¿Í¤Ç¤¢¤ê¤«¤ÄÀ½Â¤¶È¼Ô¤Þ¤¿¤ÏÍ¢Æþ¶È¼Ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤
  • Åų¦¶¯ÅÙ¾ò·ï¤È¤ÎÀ°¹çÀ­¤Î³Îǧ¤Ë¤â·¿¼°»ØÄê¤ò¼õ¤±¤ë¤Ë¤âŬÀµ¤ÊÊýË¡¤Ç¤ÎÀ­Ç½»î¸³¤¬É¬¿Ü

¾ÜºÙ

·¿¼°»ØÄêɽ¼¨¤Î¼ÂÎã

¼ê¸µ¤Ë¤¢¤ë¤Õ¤¿¤Ä¤ÎÀ½ÉʤǤη¿¼°»ØÄêɽ¼¨¤È¸ø¼°¥µ¥¤¥È¤«¤é¤Î°úÍѤò¼¨¤·¤Þ¤¹¡£Á°·Ç¤Î RC-S620/S ¤Ë¤â¤·¤Ã¤«¤ê°õºþ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¡¡¢¨¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨

RC-S620/S ¤Ë¤Ä¤¤¤Æ

µ®½Å¤ÊÁªÂò»è¤È¤·¤Æ

º£²ó¼ê¸µ¤ÇÄ´¤Ù¤¿ÈϰϤǤϡ¢ÆüËܤÎÅÅÇÈË¡¤Ë½à¤¸¤¿·¿¼°»ØÄêɽ¼¨¤Î¤¢¤ë¹ñ³°¥á¡¼¥«¡¼¤Î NFC ¥â¥¸¥å¡¼¥ë¤Ï¸«Åö¤¿¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡¢¤Þ¤¿¡¢¡Ö£³m¤Îµ÷Î¥¤Ë¤ª¤¤¤ÆÅų¦¶¯ÅÙ¤¬500¦ÌV/m¡×¤Ê¤É¤È¤¤¤¦À­Ç½¾ðÊó¤òÌܤˤ¹¤ë¤³¤È¤â¤¢¤ê¤Þ¤»¤ó¡£ ¤½¤Î¤¿¤á¡¢¤¤¤Þ¤Î»þÅÀ¤Ç¼ê¶á¤Ê¼Â¸³¤äÅŻҹ©ºî¤òŬˡ¤Ë¹Ô¤¦¤¿¤á¤Ë¤ÏÆþ¼ê¤¬ÍưפÇÅÅÇÈˡŬ¹ç¤Î RC-S620/S ¤Ïµ®½Å¤ÊÁªÂò»è¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

¸Ä¿ÍŪ¤Ë¤Ï¡¢ÅÅÇÈË¡¤ÎɬÁ³À­¤È½ÅÍ×À­¤ò½½Ê¬¤ËÍý²ò¡¦Ç¼ÆÀ¤·¤Ê¤¬¤é¤â¡¢°ìÊý¤Ç¡¢¤È¤ê¤ï¤± IoT ÊýÌ̤Ǥιñ³°¥á¡¼¥«¡¼¤Ë¤è¤ë¹ñºÝŪ¤Ë¥á¥¸¥ã¡¼¤ÊÀ½Éʤò¸øÁ³¤È»î¤¹¤³¤È¤Î¤Ç¤­¤Ê¤¤¥±¡¼¥¹¤¬È¯À¸¤¹¤ë¤³¤È¤ò¤â¤É¤«¤·¤¯»×¤¦¤³¤È¤â¤¢¤ê¤Þ¤¹¡£¼ê¶á¤Ê¼Â¸³¤ä»îºî¤Î¤¿¤á¤Ë¤ï¤¶¤ï¤¶ÅÅÇȰż¼¤ò¼Ú¤ê¤¿¤êÅϹҤ·¤¿¤ê¤¹¤ë¤ï¤±¤Ë¤â¤¤¤­¤Þ¤»¤ó¤·¤Í¡£¡£ ¡Ê^^¡¨
¤µ¤Ã¤½¤¯¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹ÍͤΥµ¥¤¥È¤«¤é RC-S620/S ¤ò¹ØÆþ¤·¤Þ¤·¤¿¡£ ËÜÍèÁȤ߹þ¤ßÍÑÅӤΤ³¤Î¥â¥¸¥å¡¼¥ë¤ÎÆþ½ÐÎÏü»Ò¤Ï FFC ¥³¥Í¥¯¥¿¤Ç°ìÈÌŪ¤ÊÅŻҹ©ºî¤Ç¤Ï²¿¤«¤È¼è¤ê²ó¤·¤Ë¤¯¤¤¤Î¤Ç¤¹¤¬¡¢Æ±¼Ò¥ª¥ê¥¸¥Ê¥ë¤Î¥Ö¥ì¡¼¥¯¥¢¥¦¥È´ðÈĤÈÀìÍÑ¥±¡¼¥Ö¥ë¤Î¥»¥Ã¥È¤¬¤¢¤ï¤»¤ÆÈÎÇ䤵¤ì¤Æ¤¤¤ë¤¿¤á¤È¤Æ¤â½õ¤«¤ê¤Þ¤¹¡£

ÍøÍѼԸþ¤±¤Î¸ø¼°¥ê¥½¡¼¥¹

ÍøÍѼԸþ¤±¤Ë°Ê²¼¤Î¥ê¥½¡¼¥¹¤¬¸ø¼°¥µ¥¤¥È¤Ç¸ø³«¤µ¤ì¤Æ¤¤¤Þ¤¹¡£³Æ¥À¥¦¥ó¥í¡¼¥É¥Ú¡¼¥¸¤Ëµ­ºÜ¤µ¤ì¤¿µ¬Ì󡦻ÈÍѵöÂú·ÀÌó¤ÎÆâÍÆ¤ò½½Ê¬¤Ë³Îǧ¤·¤¿¾å¤Ç¤³¤ì¤é¤òÍøÍѤ·¤Þ¤¹¡£

  • Sony Japan | FeliCa | Ë¡¿Í¤Î¤ªµÒÍÍ | ¥À¥¦¥ó¥í¡¼¥É
    • RC-S620/SÀ½ÉÊ»ÅÍͽñ¡ã´Ê°×ÈÇ¡ä
    • RC-S620/S¥³¥Þ¥ó¥É¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë¡ã´Ê°×ÈÇ¡ä
      µ¬Ìó
             :
      Âè3¾ò¡Ê»ÈÍѸ¢¡Ë

      1. ¥½¥Ë¡¼¤Ï¡¢ÍøÍѼԤËÂФ·¤Æ¡¢ÍøÍѼԤ¬ÂоÝʸ½ñ¤ò»ÈÍÑÌÜŪ¤Î¤¿¤á¤ËËÜ¥¦¥§¥Ö¥µ¥¤¥È¤«¤éÊ£À½¤¹¤ë¤³¤È¤¬¤Ç¤­¤ëÈóÆÈÀêŪ¤Ê¸¢Íø¤ò̵½þ¤Ë¤ÆÍøÍѼԤ˵öÂú¤·¤Þ¤¹¡£
      2. ÍøÍѼԤϡ¢ÂоÝʸ½ñ¤ÎÁ´Éô¤Þ¤¿¤Ï°ìÉô¤ò¡¢¤µ¤é¤ËÊ£À½¤·¤¿¤ê¡¢¤³¤ì¤ËÂФ¹¤ë½¤Àµ¡¢ÄɲÃÅù¤Î²þÊѤò¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤Þ¤¿¡¢ÂоÝʸ½ñ¤ª¤è¤Ó¤½¤ÎÊ£À½Êª¤ò¡¢Âè»°¼Ô¤ËÈÒÉÛ¤·¤¿¤ê¡¢¥¦¥§¥Ö¥µ¥¤¥È¤Ë¥¢¥Ã¥×¥í¡¼¥É¤¹¤ë¤Ê¤É¤·¤ÆÂè»°¼Ô¤¬¼èÆÀ²Äǽ¤Ê¾õÂ֤ˤ·¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£
             :
  • Arduino¸þ¤±RC-S620/SÀ©¸æ¥é¥¤¥Ö¥é¥ê¤ÎÄó¶¡
    • ¡ÖArduino¸þ¤±RC-S620/SÀ©¸æ¥é¥¤¥Ö¥é¥ê¡×¥À¥¦¥ó¥í¡¼¥É¥Ú¡¼¥¸
      RC-S620/SÀ©¸æ¥é¥¤¥Ö¥é¥ê »ÈÍѵöÂú·ÀÌó
             :
      Âè1¾ò¡ÊÁí§¡Ë
      ¡¡1.¥½¥Ë¡¼¤Ï¡¢Ëܵ¬Ìó¤ËÄê¤á¤ë³Æ¾ò¹à¤Ë½¾¤¤¡¢ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ª¤è¤Ó´ØÏ¢»ñÎÁ¤Ë´Ø¤¹¤ëÈóÆÈÀêŪ¤«¤Ä¾ùÅÏÉÔǽ¤Ê¼¡¤Î¸¢Íø¡Ê⤷ÆÃµö¸¢¤Ï½ü¤¯¡£°Ê²¼¡Ö»ÈÍѸ¢¡×¤È¤·¤Þ¤¹¡Ë¤ò¡¢¤ªµÒÍͤ˵öÂú¤·¤Þ¤¹¡£
      ¡¡¡¡(1)¤ªµÒÍͤ¬¡¢¥½¥Õ¥È¥¦¥§¥¢»ÈÍѼԤò¤·¤Æ¡¢ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ª¤è¤Ó´ØÏ¢»ñÎÁ¤ÎÁ´Éô¤â¤·¤¯¤Ï°ìÉô¤ò»ÈÍÑ¡¢Ê£À½¡¢Ê£¼Ì¤Þ¤¿¤Ï²þÊѤ·¤Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥½¥Õ¥È¥¦¥§¥¢¤ò³«È¯¤¹¤ë¸¢Íø¡£ ¤Ê¤ª¡¢Ëܵ¬Ìó¤Ë¤ª¤¤¤Æ¡¢¥½¥Õ¥È¥¦¥§¥¢»ÈÍѼԤª¤è¤Ó¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥½¥Õ¥È¥¦¥§¥¢¤È¤Ï¡¢¤½¤ì¤¾¤ì¡¢¼¡¤Î°ÕÌ£¤òÍ­¤·¤Þ¤¹¡£
      ¡¡¡¡¡¡­¡¥½¥Õ¥È¥¦¥§¥¢»ÈÍѼԡ§ËÜ¥½¥Õ¥È¥¦¥§¥¢¤òÆþ¼ê夤¤¿¤ªµÒÍÍ1̾¤ÎÊý¡£
      ¡¡¡¡¡¡­¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥½¥Õ¥È¥¦¥§¥¢¡§¥½¥Ë¡¼À½ÈóÀÜ¿¨IC¥«¡¼¥É¥ê¡¼¥À¡¿¥é¥¤¥¿¡¼À½ÉÊ¡ÖRC-S620/S¡×¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î¥½¥Õ¥È¥¦¥§¥¢¥×¥í¥°¥é¥à¡£
      ¡¡¡¡(2)¤ªµÒÍͤ¬¡¢ËܹàÂè1¹æ¤Ë´ð¤Å¤­³«È¯¤µ¤ì¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥½¥Õ¥È¥¦¥§¥¢¤òÊ£À½¤·¤¿¤¦¤¨¡¢¥½¡¼¥¹¥³¡¼¥É·Á¼°¤Þ¤¿¤Ï¥Ð¥¤¥Ê¥ê·Á¼°¤Ë¤Æ¡¢Âè»°¼Ô¤ËÈÒÉÛ¤¹¤ë¸¢Íø¡£
      ¡¡2.¤ªµÒÍͤϡ¢Á°¹à¤ÇÄê¤á¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ª¤è¤Ó´ØÏ¢»ñÎÁ¤ÎÁ´Éô¤â¤·¤¯¤Ï°ìÉô¤ò»ÈÍÑ¡¢Ê£À½¡¢Ê£¼Ì¤Þ¤¿¤Ï²þÊѤ·¤Æ¤Ï¤Ê¤é¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£
             :

¸ø¼°¥ê¥½¡¼¥¹¤Î¥«¥Ð¡¼¤¹¤ëÈϰÏ

¤³¤Î¤è¤¦¤Ë¥É¥­¥å¥á¥ó¥È¤Ë²Ã¤¨¥µ¥ó¥×¥ë¥³¡¼¥É¤¬¸ø¼°¤ËÄ󶡤µ¤ì¤Æ¤¤¤ë¤³¤È¤ÏÍøÍѼԤˤȤäƤȤƤâ´ò¤·¤¤ÇÛθ¤Ç¤¹¤¬¡¢¤³¤ì¤é¤Î»²¾È¡¦»ÈÍѤ˺ݤ·¤Æ¤Ï°Ê²¼¤Î»ö¾ð¤ò¤¢¤é¤«¤¸¤áÍý²ò¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£

  • RC-S620/S ¤Ï¤¢¤¯¤Þ¤Ç¤âÁȤ߹þ¤ßÍÑÀ½ÉʤǤ¢¤êËÜÍè¤Î¸ÜµÒ¤ÏË¡¿Í¤Ç¤¢¤ë
  • ³Æ»ÅÍͽñ¤ÏËÁƬ¤Î¥Ú¡¼¥¸¤ÎÃí¼á¤Î¤È¤ª¤ê¡ÖÄ´ºº¡¢»îºî¤ª¤è¤Óɾ²Á¡×¤òÌÜŪ¤È¤¹¤ë¡Ö´Ê°×ÈǡפǤ¢¤ê¡¢¡Ö¾¦ÍѸþ¤±¡×¤ÎÈǤϸܵҤ¬¡ÖÀµ¼°¤Ë RC-S620/S ¤òƳÆþ¡×¤¹¤ë¾ì¹ç¤ËÄ󶡤µ¤ì¤ë
  • ¡ÖÀ½ÉÊ»ÅÍͽñ¡ã´Ê°×ÈÇ¡ä¡× 1, 2 ¹à¤Ëµ­ºÜ¤Î¤¢¤ë¤è¤¦¤Ë RC-S620/S ¤Ï FeliCa ¤Ë²Ã¤¨ ISO/IEC 14443 ¡ÊType A, Type B¡Ë ¤Ë¤âÂбþ¤·¤Æ¤¤¤ë¤¬¡¢¼ç´ã¤Ï¤¢¤¯¤Þ¤Ç¤âÁ°¼Ô¤Ç¤¢¤ë
  • ³Æ»ÅÍͽñ¤ª¤è¤Ó¥µ¥ó¥×¥ë¥³¡¼¥É¤Ï FeliCa ¤Þ¤ï¤ê¤Î°ìÉô¤Îµ¡Ç½¤ËÆÃ²½¤·¤¿ÆâÍÆ¤Ç¤¢¤ë

»×¤¤¤¬¤±¤Ê¤¤±ç·³¤Î¸ºß

¤µ¤Æ¡¢ËÁƬ¤Ç¿¨¤ì¤¿¤è¤¦¤Ë¼ê¸µ¤Ç¼Â¸½¤·¤¿¤¤¤Î¤Ï MIFARE Ultralight NTAG21x ¤Ø¤Î¥¢¥¯¥»¥¹¤Ç¤¹¡£RC-S620/S ¤¬ ISO/IEC 14443 Type A¡ÊMIFARE¡Ë¤ËÂбþ¤·¤Æ¤¤¤ë¤³¤È¤Ï¾åµ­¤ÎÄ̤ê»ÅÍͽñ¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Î¡¢¸ø¼°¤Î¥ê¥½¡¼¥¹¤Ç¤Ï¤½¤Î¤¿¤á¤Î¶ñÂÎŪ¤ÊÊýË¡¤ä¼ê½ç¤¬¤ï¤«¤ê¤Þ¤»¤ó¡£

¤Þ¤º¤½¤â¤½¤â MIFARE ¤Î¶áÀܤò¸¡ÃΤ¹¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤¤¤¤¤Î¤«¡£¡ÖArduino¸þ¤±RC-S620/SÀ©¸æ¥é¥¤¥Ö¥é¥ê¡×¤Î polling() ´Ø¿ô¤Ï FeliCa ¤ò¸¡ÃΤ¹¤ë¤¿¤á¤Ë¡Ö¥³¥Þ¥ó¥É¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë¡ã´Ê°×ÈÇ¡ä¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ë¡ÖInListPassiveTarget¡×¤È¤¤¤¦¥³¥Þ¥ó¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¤¤¤Þ¤¹¡£
¤¿¤á¤·¤Ë¡ÖInListPassiveTarget ISO/IEC 14443 Type A¡×¤Î¥­¡¼¥ï¡¼¥É¤Ç¾ðÊó¤ò¸¡º÷¤·¤¿¤È¤³¤í¼¡¤Î¶½Ì£¿¼¤¤»ñÎÁ¤¬ÌܤˤȤޤê¤Þ¤·¤¿¡£

¡ÖPN532¡×¤Ï NXP ¤Ë¤è¤ë NFC ¥â¥¸¥å¡¼¥ë¤Ç¤¹¡£¤³¤Î»ñÎÁ¤ÎÃæ¤Î InListPassiveTarget ¤Îµ­½Ò²Õ½ê¤òõ¤¹¤È Page 115 ¡Ê¾å¿Þ¡Ë¤Ë¤½¤Î¤â¤Î¤º¤Ð¤ê¤Î¥³¥Þ¥ó¥ÉÀâÌÀ¤¬¤¢¤ê¤Þ¤·¤¿¡£

¡ÖRC-S620/S¥³¥Þ¥ó¥É¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë¡ã´Ê°×ÈÇ¡ä Version 2.11¡× Page 80 ¤Î InListPassiveTarget ¤ÎÀâÌÀ¤ÈÆÉ¤ß¹ç¤ï¤»¤Æ¤ß¤ë¤È¡¢¥¿¡¼¥²¥Ã¥È¤¬ FeliCa ¤Î¾ì¹ç¤Î¥Ñ¥é¥á¡¼¥¿ÀâÌÀ¤Ï°ìÃפ·¤Æ¤ª¤ê¡¢¤µ¤é¤Ë¡Ö´Ê°×Èǡפˤϵ­ºÜ¤µ¤ì¤Æ¤¤¤Ê¤¤ ISO/IEC 14443 Type A, B ¤Ø¤ÎÂбþÊýË¡¤ò´Þ¤á 7 ¥Ú¡¼¥¸¤ËÅϤê¾Ü¤·¤¤ÀâÌÀ¤¬·ÇºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤Î¾¤Î¥³¥Þ¥ó¥É¤Ë¤Ä¤¤¤Æ¤âƱÍͤǡ¢CommunicateThruEx ¤Ê¤É RC-S620/S ¦¤Î¤ß¤Ë¸ºß¤¹¤ë¤¤¤¯¤Ä¤«¤Î¥³¥Þ¥ó¥É¤Ï¤¢¤ë¤â¤Î¤Î¡¢Á´ÂΤȤ·¤Æ¤Ï¤¤¤ï¤Ð¥¹¡¼¥Ñ¡¼¥»¥Ã¥È¤Î¥Þ¥Ë¥å¥¢¥ë¤Î¤è¤¦¤Ë¸«¼õ¤±¤é¤ì¤Þ¤·¤¿¡£¼ÂºÝ¤Ë¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤Ëź¤Ã¤Æ¡ÖArduino¸þ¤±RC-S620/SÀ©¸æ¥é¥¤¥Ö¥é¥ê¡×¤Î polling() ´Ø¿ô¤ò°Ê²¼¤ÎÍ×ÎΤǽñ¤­´¹¤¨¤Æ¤ß¤ë¤È ISO/IEC 14443 Type A ¤Î¶áÀܤò¸¡ÃΤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤·¤¿¡£

FeliCa Âбþ¤Î¥ª¥ê¥¸¥Ê¥ë¥³¡¼¥É

/* InListPassiveTarget */
memcpy(buf, "\xd4\x4a\x01\x01\x00\xff\xff\x00\x00", 9);
buf[5] = (uint8_t)((systemCode >> 8) & 0xff);
buf[6] = (uint8_t)((systemCode >> 0) & 0xff);

ret = rwCommand(buf, 9, response, &responseLen);

ISO/IEC 14443 Type A ÍÑ

ret = rwCommand((const uint8_t *)"\xd4\x4a\x01\x00", 4,
                 response, &responseLen);

¤³¤Î¤è¤¦¤Ë¡¢¥á¡¼¥«¡¼¤Î°Û¤Ê¤ë RC-S620/S ¤È PN532 ¤È¤Î´Ö¤Ë¥³¥Þ¥ó¥É¥ì¥Ù¥ë¤Ç¤Î¶¦ÄÌÀ­¤¬¤¢¤ëÍýͳ¤Ï NFC ¥Õ¥©¡¼¥é¥à»ÅÍͤΤɤ³¤«¤Ë¤¢¤ë¤Î¤«¤âÃΤì¤Þ¤»¤ó¤¬¼ê¸µ¤Ç¤Ïº£¤Î¤È¤³¤í³ºÅö¤¹¤ë¾ðÊó¤ÎÆÃÄê¤Ë»ê¤Ã¤Æ¤¤¤Þ¤»¤ó¡£ ¤¢¤ë¤¤¤Ï¡¢Î¾¼Ò¤¬¤È¤â¤Ë¡Ö¥Ç¥Ð¥¤¥¹¤ä¥µ¡¼¥Ó¥¹´Ö¤Î¿·µ¡Ç½¤È¸ß´¹À­¤ò¼Â¸½¤¹¤ë¤¿¤á¤Îµ¬³ÊºöÄê¡×¤ò¥ß¥Ã¥·¥ç¥ó¤Î¤Ò¤È¤Ä¤È¤¹¤ë NFC ¥Õ¥©¡¼¥é¥à¤Î¥³¥¢¥á¥ó¥Ð¡¼¤Ç¤¢¤ë¤³¤È¤Ë´Ø·¸¤¬¤¢¤ë¤Î¤«¤âÃΤì¤Þ¤»¤ó¡£¤¤¤º¤ì¤Ë¤»¤è PN532 ¤Î¥Þ¥Ë¥å¥¢¥ë¤Î¤ª¤«¤²¤ÇÀ褬¸«¤¨¤Æ¤­¤Þ¤·¤¿¡£

NTAG21x ¥Í¥¤¥Æ¥£¥Ö¥³¥Þ¥ó¥É¤Îȯ¹Ô¤Ë¤Ä¤¤¤Æ

ÀèÈ̤ε­»ö¤Ç¤Ï¡¢NTAG21x ¤Î¥á¥â¥ê¥¢¥¯¥»¥¹¤ËɬÍפʼ¡¤Î¤è¤Ã¤Ä¤Î¥Í¥¤¥Æ¥£¥Ö¥³¥Þ¥ó¥É¤òµó¤²¤Þ¤·¤¿¡£

  • GET_VERSION
    NTAG À½ÉʤΥС¼¥¸¥ç¥ó,¥¹¥È¥ì¡¼¥¸¥µ¥¤¥ºÅù¤òÆÀ¤ë
  • READ
    ½êÄê¤Î¥Ú¡¼¥¸¥¢¥É¥ì¥¹¤«¤é»Ï¤Þ¤ë 4 ¥Ú¡¼¥¸Ê¬¡Ê16 ¥Ð¥¤¥È¡Ë¤Î¥Ç¡¼¥¿¤òÆÀ¤ë
  • WRITE
    ½êÄê¤Î¥Ú¡¼¥¸¥¢¥É¥ì¥¹¤Ø 1 ¥Ú¡¼¥¸Ê¬¡Ê4 ¥Ð¥¤¥È¡Ë¤Î¥Ç¡¼¥¿¤ò½ñ¤­¹þ¤à
  • PWD_AUTH
    ¥Ñ¥¹¥ï¡¼¥É¤ÇÊݸ¤ì¤¿ÎÎ°è¤Ø¤Î¥¢¥¯¥»¥¹Í×µá¤ËÀè¹Ô¤·¤Æ¥Ñ¥¹¥ï¡¼¥Éǧ¾Ú¤òÍ׵᤹¤ë

¤³¤ì¤é¤ò RC-S620/S ·Ðͳ¤Ç¥¿¡¼¥²¥Ã¥È¤ØÁ÷½Ð¤·¤Æ¤ä¤ì¤Ð NTAG21x ¤Î¥á¥â¥ê¤ò¼«Í³¤ËÁàºî¤Ç¤­¤ë¤Ï¤º¤Ç¤¹¡£

RC-S620/S ¤Ë¤Ï¤³¤Î¤è¤¦¤Ë¥¿¡¼¥²¥Ã¥È¤È¤¹¤ë PICC ¸ÇÍ­¤Î¥³¥Þ¥ó¥É¤òȯ¹Ô¤¹¤ë¤¿¤á¤Î CommunicateThruEX ¥³¥Þ¥ó¥É¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£¤¿¤À¤·¡¢¡Ö¥³¥Þ¥ó¥É¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë¡ã´Ê°×ÈÇ¡ä Version 2.11¡× Page 71 ¤Î¡ÖËÜ¥³¥Þ¥ó¥É¤Ï 212/424 kbps ¤Î RF ¥Ñ¥±¥Ã¥È¤ÎÁ÷¼õ¿®¤ò¹Ô¤¤¤Þ¤¹¡×¤Îµ­½Ò¤Î¤È¤ª¤ê¤³¤Î¥³¥Þ¥ó¥É¤Ï FeliCa ÀìÍѤǡ¢ÄÌ¿®Â®ÅÙ 106 kbps ¤Î ISO/IEC 14443 ¸þ¤±¤Ë¤Ï»È¤¨¤Þ¤»¤ó¡£

°ìÊý¡¢¡ÖPN532 User Manual Rev.02¡×¤Ë¤Ï¤½¤ì¤ÈƱÍͤε¡Ç½¤ÇÈÆÍÑÀ­¤Î¤¢¤ë InDataExchange, InCommunicateThru ¤Î¤Õ¤¿¤Ä¤Î¥³¥Þ¥ó¥É¤Î¾ðÊ󤬷Ǻܤµ¤ì¤Æ¤¤¤Þ¤¹¡£Æ±¥Þ¥Ë¥å¥¢¥ë¤Î InListPassiveTarget ¥³¥Þ¥ó¥É¤Î¥Ú¡¼¥¸¤Ë¤Ï MaxTg ¥Õ¥£¡¼¥ë¥É¤Ë¤Ä¤¤¤Æ¡ÖThe PN532 is capable of handling 2 targets maximum at once, so this field should not exceed 0x02.¡×¤Èµ­½Ò¤µ¤ì¤Æ¤ª¤ê¡¢InDataExchange ¤Ë¤ª¤¤¤Æ¤Ï target ¡ÊTg¡Ë ¤òÌÀ¼¨Åª¤Ë»ØÄꤹ¤ë¤Î¤ËÂФ·¡¢InCommunicateThru¤Ç¤Ï¡Öit is assumed that a target has been first activated.¡×¤È¤¤¤¦°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£

  • PN532 User Manual Rev.02 - 7.3.5 InListPassiveTarget
  • PN532 User Manual Rev.02 - 7.3.8 InDataExchange
  • PN532 User Manual Rev.02 - 7.3.9 InCommunicateThru

¤Õ¤¿¤¿¤Ó RC-S620/S ¦¤ËÌܤò¸þ¤±¤ë¤È¡¢¡Ö¥³¥Þ¥ó¥É¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë¡ã´Ê°×ÈÇ¡ä Version 2.11¡× Page 50 ¤Î InListPassiveTarget ¥³¥Þ¥ó¥ÉÀâÌÀ¤Ç MaxTg ¥Õ¥£¡¼¥ë¥É¤Ë¤Ä¤¤¤Æ¤Ï¡ÖTarget ID ¤ò¼èÆÀ¤¹¤ë Target ¤ÎºÇÂç¿ô. 01h ¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡×¤Èµ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Ä¤Þ¤ê¤³¤ÎÉôʬ¤Î»ÅÍÍ¤Ï PN532 ¤È°Û¤Ê¤ëÍͻҤǤ¢¤ê¡¢¤³¤ÎÍ×ÁǤαƶÁ¤ò¼õ¤±¤ë InDataExchange, InCommunicateThru ¤Îµóư¤Ï¡¢Î¾¥³¥Þ¥ó¥É¤Î¸ºß̵ͭ¤Î³Îǧ¤ò´Þ¤á RC-S620/S ¾å¤Ç¼ÂºÝ¤Ë»î¤·¤Æ¤ß¤ëɬÍפ¬¤¢¤ê¤½¤¦¤Ç¤¹¡£

Á°·Ç¤Î¤è¤Ã¤Ä¤Î NTAG21x ¥Í¥¤¥Æ¥£¥Ö¥³¥Þ¥ó¥É¤Îȯ¹Ô¤ò RC-S620/S ·Ðͳ¤Ç»î¤ß¤¿¤È¤³¤í¡¢InListPassiveTarget ¤Ë¤è¤ë¥¿¡¼¥²¥Ã¥È¤ÎÊ᪸å¤Ë°Ê²¼¤ÎÁȤ߹ç¤ï¤»¤¬Í­¸ú¤Ç¤¢¤ë¤³¤È¤ò¼ê¸µ¤Ç³Îǧ¤·¤Þ¤·¤¿¡£¤Þ¤¿¡¢¤³¤Î·ë²Ì¤«¤é RC-S620/S ¤Ë¤ª¤¤¤Æ¤â InDataExchange, InCommunicateThru ¤Îξ¥³¥Þ¥ó¥É¤òÍøÍѲÄǽ¤Ç¤¢¤ë¤³¤È¤¬ÌÀ¤é¤«¤Ë¤Ê¤ê¤Þ¤·¤¿¡£

  • NTAG: GET_VERSION ¥³¥Þ¥ó¥É ¡Ê0x60¡Ë
    • InCommunicateThru ¥³¥Þ¥ó¥É¡Ê0x42¡Ë·Ðͳ¤Ç¤Îȯ¹Ô¤Î¤ßÍ­¸ú
      • rwCommand((const uint8_t*)"\xd4\x42\x60", 3, response, &responseLen); ¤ÎÍ×ÎÎ
  • NTAG: READ ¥³¥Þ¥ó¥É ¡Ê0x30¡Ë
    • InDataExchange ¥³¥Þ¥ó¥É¡Ê0x40¡Ë¡¢InCommunicateThru ¥³¥Þ¥ó¥É¡Ê0x42¡Ë¤¤¤º¤ì¤ò·Ðͳ¤·¤Æ¤âÍ­¸ú
      • rwCommand((const uint8_t*)"\xd4\x40\x01\x30[³«»Ï¥Ú¡¼¥¸ÈÖ¹æ 1byte]", 5, response, &responseLen); ¤ÎÍ×ÎÎ
      • rwCommand((const uint8_t*)"\xd4\x42\x30[³«»Ï¥Ú¡¼¥¸ÈÖ¹æ 1byte]", 4, response, &responseLen); ¤ÎÍ×ÎÎ
  • NTAG: WRITE ¥³¥Þ¥ó¥É ¡Ê0xA2¡Ë
    • InDataExchange ¥³¥Þ¥ó¥É¡Ê0x40¡Ë·Ðͳ¤Ç¤Îȯ¹Ô¤Î¤ßÍ­¸ú
      • rwCommand((const uint8_t*)"\xd4\x40\x01\xA2[Âоݥڡ¼¥¸ÈÖ¹æ 1byte][½ñ¤­¹þ¤ß¥Ç¡¼¥¿ 4byte]", 9, response, &responseLen); ¤ÎÍ×ÎÎ
  • NTAG: PWD_AUTH ¥³¥Þ¥ó¥É ¡Ê0x1B¡Ë
    • InCommunicateThru ¥³¥Þ¥ó¥É¡Ê0x42¡Ë·Ðͳ¤Ç¤Îȯ¹Ô¤Î¤ßÍ­¸ú
      • rwCommand((const uint8_t*)"\xd4\x42\x1b[¥Ñ¥¹¥ï¡¼¥É 4byte]", 7, response, &responseLen); ¤ÎÍ×ÎÎ

¥é¥¤¥Ö¥é¥ê¤Ø¤Î²ÃÉ®¤È¥Æ¥¹¥È¥×¥í¥°¥é¥à¤ÎºîÀ®

¤³¤³¤Þ¤Ç¤Î·Ð°Þ¤Ç¤ª¤ª¤à¤ÍºàÎÁ¤¬Â·¤Ã¤¿¤È¤³¤í¤Ç¡¢¡ÖArduino¸þ¤±RC-S620/SÀ©¸æ¥é¥¤¥Ö¥é¥ê¡×¤Ø¼«Ê¬¤Î¤Û¤·¤«¤Ã¤¿µ¡Ç½¤òÄɲä·¡¢¤¢¤ï¤»¤ÆÆ°ºî³ÎǧÍѤ˥ƥ¹¥È¥×¥í¥°¥é¥à¤ÎºîÀ®¤ò¹Ô¤¤¤Þ¤¹¡£

ÁÛÄꤷ¤¿ÆâÍÆ

°Ê²¼¤ÎÆâÍÆ¤òÁÛÄꤷ¤Þ¤·¤¿¡£NDEF ¥á¥Ã¥»¡¼¥¸¤Î²ò¼á¤ä ISO/IEC 14443 Type B ¤Î ID ¼èÆÀ¤Ê¤É¼ã´³¤ÎÍ×ÁǤòÄɲ䷤Ƥ¤¤Þ¤¹¡£¤µ¤·¤¢¤¿¤ê¼ê¸µ¤ÇÍÑÅӤΤʤ«¤Ã¤¿ NTAG21x ¥Í¥¤¥Æ¥£¥Ö¤Î WRITE, PWD_AUTH ¥³¥Þ¥ó¥É¤Ïº£²ó¤ÏÍøÍѤ·¤Æ¤¤¤Þ¤»¤ó¡£º£¸åɬÍפˤʤ俤Ȥ­¤Ë¼ÂÁõ¤òÄɲ䷤褦¤È»×¤¤¤Þ¤¹¡£

  • ¥é¥¤¥Ö¥é¥ê¤ØÄɲä¹¤ë´Ø¿ô¤Î¥¤¥á¡¼¥¸
    • ISO/IEC 14443 Type A ¤Î¶áÀܸ¡ÃÎ¤È ID ¤Î¼èÆÀ
    • ISO/IEC 14443 Type B ¤Î¶áÀܸ¡ÃÎ¤È ID ¤Î¼èÆÀ
    • NTAG21x ÀìÍÑ¡§ ¥á¥â¥ê¤ÎÁí¥Ú¡¼¥¸¿ô¤ò¼èÆÀ
    • MIFARE Ultralight ÍÑ¡§ ½êÄê¤Î¥á¥â¥ê¥Ú¡¼¥¸¤ÎÆâÍÆ¤òÆÉ¤ß½Ð¤¹
  • ¥Æ¥¹¥È¥×¥í¥°¥é¥à¤Î¥¤¥á¡¼¥¸
    • ¥¿¡¼¥²¥Ã¥È¤¬ ISO/IEC 14443 Type A (MIFARE) ¤Î¾ì¹ç
      • ID ¤ò¼èÆÀ¤·¥·¥ê¥¢¥ë¤Ø½ÐÎÏ
        • MIFARE Ultralight ¤Î¾ì¹ç
          • ¥á¥â¥êÆâÍÆ¤Î¥À¥ó¥×¤ò¥·¥ê¥¢¥ë¤Ø½ÐÎÏ
            • NDEF ¥á¥Ã¥»¡¼¥¸¤¬µ­Ï¿¤µ¤ì¤Æ¤¤¤ë¾ì¹ç
              • NDEF ¥ì¥³¡¼¥ÉÆâÍÆ¤ò½ç¼¡¼èÆÀ¤·¥·¥ê¥¢¥ë¤Ø½ÐÎÏ
    • ¥¿¡¼¥²¥Ã¥È¤¬ ISO/IEC 14443 Type B ¤Î¾ì¹ç
      • µ¼»÷ ID ¤Ç¤¢¤ë PUPI (Pseudo-Unique PICC Identifier) ¤ò¼èÆÀ¤·¥·¥ê¥¢¥ë¤Ø½ÐÎÏ
    • ¥¿¡¼¥²¥Ã¥È¤¬ FeliCa (Standard / Lite / Lite-S) ¤Î¾ì¹ç
      • IDm ¤ò¼èÆÀ¤·¥·¥ê¥¢¥ë¤Ø½ÐÎÏ

µ¡´ï¤ÎÀܳ

¼ê¸µ¤Ç¤Ï¤³¤ì¤Þ¤Ç Arduino IDE ¤òÍøÍѤ¹¤ëµ¡²ñ¤Ï¤¢¤ê¤Þ¤·¤¿¤¬ Arduino ¼Âµ¡¤ò°·¤¦¤Î¤Ïº£²ó¤¬½é¤á¤Æ¤Ç¤·¤¿¡£

RC-S620/S ¤È Arduino UNO ¤ò¥·¥ê¥¢¥ëÀܳ¤·¤ÆÀ©¸æ¤ò¹Ô¤¤¡¢¾åµ­¤Î¤è¤¦¤Ë½èÍý¾õ¶·¤ò UNO ¤«¤é USB ·Ðͳ¤Ç PC ¾å¤Î¥·¥ê¥¢¥ë¥¿¡¼¥ß¥Ê¥ë¤Ø¿ï»þ½ÐÎϤ¹¤ë¤³¤È¤òÁÛÄꤷ¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡¢UNO ¤Î¥Ï¡¼¥É¥¦¥§¥¢¥·¥ê¥¢¥ë¤¬°ì·ÏÅý¤Î¤ß¤Ç¤¢¤ë¤³¤È¤òÃΤꡢÊÌΩ¤Æ¤Î USB ¥·¥ê¥¢¥ëÊÑ´¹¥â¥¸¥å¡¼¥ë¡ÊFT231X¡Ë¤È Arduino ɸ½à¤Î SoftwareSerial ¥é¥¤¥Ö¥é¥ê¤òÊ»ÍѤ¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

Ʊ¤¸Íýͳ¤Ç¡¢Arduino IDE ¤«¤é UNO ËÜÂΤΠUSB ¥·¥ê¥¢¥ë·Ðͳ¤Ç¥×¥í¥°¥é¥à¤ò½ñ¤­¹þ¤àºÝ¤Ë¤Ï [RC-S620/S ¦ TXD] <--> [RX ¥Ô¥ó] ¤Î·ëÀþ¤ò³°¤·¤ÆÇÓ¾¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¤¢¤¿¤ê¤Î»ö¾ð¤Ï Arduino ¥æ¡¼¥¶¤Ë¤ÏÅöÁ³¤Î¤³¤È¤Ê¤Î¤Ç¤·¤ç¤¦¤¬¥Ó¥®¥Ê¡¼¤Ë¤Ï¤Á¤ç¤Ã¤È¿·Á¯¤Ç¤·¤¿¡£

  

¥½¡¼¥¹¥³¡¼¥É

ưºî¤ÎÍÍ»Ò

ư²è¡§3ʬ19ÉÃ

  


(tanabe)
klab_gijutsu2 at 08:38¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)
2017ǯ08·î31Æü

micro:bit ¤È ESP32 ¤Ç¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥Ü¥¿¥ó¤òºî¤ë

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

º£·î¡Ê2017ǯ8·î¡Ë5Æü¤Ë¹ñÆâ¤ÇÀµ¼°ÈÎÇä¤Î»Ï¤Þ¤Ã¤¿ BBC micro:bit ¤ò³Ú¤·¤ó¤Ç¤¤¤Þ¤¹¡£ÃÙ¤ì¤Ð¤»¤Ê¤¬¤é¡¢À¤³¦Ãæ¤Î»Ò¤É¤â¤ÈÂç¿Í¤Ë¿Íµ¤¤Î¤³¤ÎÁÇŨ¤Ê¥³¥ó¥Ô¥å¡¼¥¿¤Î¥Õ¥¡¥ó¤Ë¤Ê¤ê¤Þ¤·¤¿¡£


http://www.bbc.com/
http://www.kitronik.co.uk/

»ä¤¬ micro:bit ¤Ë´Ø¿´¤ò»ý¤Ã¤¿¤Î¤ÏºÇ¶á°·¤Ã¤Æ¤¤¤¿ÏÃÂê¤Ë¤Á¤ç¤¦¤É¤Ô¤Ã¤¿¤ê¤Î¥Ç¥Ð¥¤¥¹¤À¤Ã¤¿¤³¤È¤¬¤­¤Ã¤«¤±¤Ç¤·¤¿¡£º£²ó¤Ï¤½¤ÎÆâÍÆ¤È¼ê¸µ¤Ç¤Î»îºî¤ò½ç¤ò¤ª¤Ã¤Æ¾Ò²ð¤·¤Þ¤¹¡£

BLE ¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤ò¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥Ü¥¿¥ó¤È¤·¤Æ»È¤¦¤³¤È

Amazon Dash Button ¤ÎÀ®¸ù¤¬¤Ò¤È¤Ä¤Î·Àµ¡¤Ë¤â¤Ê¤ê ¤³¤Î¿ôǯ¤Î´Ö¤Ë¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥Ü¥¿¥ó¤ÎÍøÍѤÈÉáµÚ¤¬¿Ê¤ß¤Þ¤·¤¿¡£¼ê·Ú¤µ¤È¤¤¤¨¤Ð²¿¤«¤È¥¹¥Þ¥Û¤¬°ú¤­¹ç¤¤¤Ë½Ð¤µ¤ì¤ë¤³¤È¤Î¿¤¤¾õ¶·¤¢¤Ã¤Æ¤è¤êñ½ã¤ÊÁàºî¤Ç¤è¤ê´Êñ¤Ë½êÄê¤Î½èÍý¤ò¸Æ¤Ó½Ð¤»¤ë¤³¤È¤¬ÀìÍѤε¡´ï¤Ç¤¢¤ë¤³¤È¤ÎºÇÂç¤Î¶¯¤ß¤Ç¤·¤ç¤¦¡£

¤¿¤À¤½¤Î°ìÊý¤Ç¡¢µ¡´ï¤ÎÀ­¼Á¾å¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤Î¿¤¯¤¬ÅÅÃÓ¶îÆ°¼°¤Ç¤¢¤ë¤³¤È¤¬º£¸å¤ÎÍÑÅÓ¡¦Í×·ï¤Î³ÈÂç¤Ëȼ¤¤¤è¤êǺ¤Þ¤·¤¤Í×ÁǤȤʤë²ÄǽÀ­¤â¹Í¤¨¤é¤ì¤Þ¤¹¡£¸Â¤é¤ì¤¿µ®½Å¤ÊÅÅÎϤò»È¤Ã¤Æ¼«ÎϤǥ¤¥ó¥¿¡¼¥Í¥Ã¥È¾å¤Î½êÄê¤Î¥µ¡¼¥Ó¥¹¤ò᤭¤Ë¹Ô¤¯¤Î¤Ïɬ¤º¤·¤â¸úΨ¤ÎÎɤ¤¤ä¤êÊý¤Ç¤¢¤ê¤Þ¤»¤ó¤«¤é¡¢¤³¤ÎÅÀ¤Ø¤ÎÂн褬º£¸å¤Î²ÝÂê¤È¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£

½éÂå¤Î Amazon Dash Button ¤Ë¹âÍÆÎ̤ǤϤ¢¤ë¤â¤Î¤Î˵Ìܤˤ⥳¥¹¥È¥Ð¥é¥ó¥¹¤Î´í¤Ê¤²¤ÊÊÆ¥¨¥Ê¥¸¥ã¥¤¥¶¡¼¼ÒÀ½¤Î¹â²Á¤Ê¥ê¥Á¥¦¥à°ì¼¡ÅÅÃÓ¤¬Æâ¢¤µ¤ì¤Æ¤¤¤¿¤³¤È¤Ï¾ÝħŪ¤Ç¤¹

°ì°Æ¤È¤·¤Æ¡¢¾ÊÅÅÀ­¤ËÍ¥¤ì¤¿ BLE ¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤ÈÃç²ðÌò¤Î¥¨¡¼¥¸¥§¥ó¥È¥Ç¥Ð¥¤¥¹¤òÁȤ߹ç¤ï¤»¤Æ¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥Ü¥¿¥ó¤ò¹½À®¤¹¤ë·Á¤òÁÛÄꤷ¤Þ¤·¤¿¡£¿Þ¤Ë¤·¤Æ¤ß¤Þ¤¹¡£

¤³¤Î¤è¤¦¤Ë¹Í¤¨Êý¤Ï¤È¤Æ¤â¥·¥ó¥×¥ë¤Ç¤¹¡£¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤ÏÅÅÃÓ¶îÆ°¡¢¿ø¤¨ÃÖ¤­¤Î¥¨¡¼¥¸¥§¥ó¥È¥Ç¥Ð¥¤¥¹¤Ï AC ÅŸ»¤«¤é¤ÎµëÅŤòÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£ ¥Ü¥¿¥ó¦¤Ï BLE ÄÌ¿®¤ÇɬÍ׺Ǿ®¸Â¤ÎÄÌÃΤò¥¨¡¼¥¸¥§¥ó¥È¤ØÁ÷¤ê¡¢¥¨¡¼¥¸¥§¥ó¥È¦¤Ï¤½¤ì¤ò¥È¥ê¥¬¡¼¤Ë½êÄê¤Î¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥µ¡¼¥Ó¥¹¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥Ü¥¿¥ó¤ÏÄ̾ﲰÆâ¶õ´Ö¤Ç¤ÎÍøÍѤ¬Á°Äó¤Ç¤¹¤«¤é¡¢BLE ¤È WiFi ¤ÎÄÌ¿®µ÷Î¥¤Î°ã¤¤¤Ëα°Õ¤·¤Æµ¡´ï¤ÎÀßÃÖ¡¦±¿ÍѤò¹Ô¤¨¤Ð¤³¤Î¹½À®¤Ë¤ÏÁê±þ¤Î¹çÍýÀ­¤¬¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¾®¤µ¤Ê¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤Ò¤È¤Ä¤ËÊ£»¨¤Ê½èÍý¤òÆþ¤ì¹þ¤à¤³¤È¤ËÈæ¤Ù¡¢µ¡´ï¤ÎÁȤ߹ç¤ï¤»¤Ë¤è¤Ã¤ÆÉ¬Íפʵ¡Ç½¤ò¼Â¸½¤¹¤ë¤ä¤êÊý¤Ë¤Ï½ÀÆðÀ­¤¬¸«¹þ¤Þ¤ì¤ë¤Ç¤·¤ç¤¦¡£

ÄÌÃΤÎÊýË¡¤ÈÆ»¶ñΩ¤Æ

ÄÌÃÎÊýË¡¤Ë¤Ä¤¤¤Æ

Ä̾BLE ¥Ú¥ê¥Õ¥§¥é¥ë¤«¤é¥»¥ó¥È¥é¥ë¤Ø¤ÎÄÌÃΤϥǥХ¤¥¹´Ö¤ÎÀܳ³ÎΩ¸å¤Ë½êÄê¤Î¼ê³¤­¤Ë¤è¤ê¥»¥Ã¥È¥¢¥Ã¥×¤ò¹Ô¤¦¤³¤È¤Ç¼Â»Ü²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£¤³¤ÎÀßÄê¤Ïξ¼Ô¤ÎÀܳ¤¬°Ý»ý¤µ¤ì¤Æ¤¤¤ë´Ö¤Î¤ßÍ­¸ú¤Ç¤¹¡£

¤â¤Á¤í¤ó¤½¤ì¤Ï BLE ¤Î»ÅÍ;å¤Î¤Þ¤Ã¤È¤¦¤Êµ¬Ìó¤Ê¤Î¤Ç¤¹¤¬¡¢Á°·Ç¤Î°Æ¤Ø¤ÎŬÍѤˤϤ¢¤Þ¤êµ¤¤¬¿Ê¤Þ¤º¤Ë¤¤¤Þ¤·¤¿¡£Íýͳ¤Ï°Ê²¼¤Î»°ÅÀ¤Ç¤¹¡£

  1. ¡ÖÀܳ¤Î°Ý»ý¡×¤¬É¬¿Ü¤Ç¤¢¤ë¤³¤È¤Ï BLE ¤Î¾ÊÅÅÀ­¤òºÇÂç¸Â¤Ë³è¤«¤½¤¦¤È¤¹¤ë¼ç»Ý¤Èɬ¤º¤·¤âÀÞ¤ê¹ç¤ï¤Ê¤¤
  2. ¥¨¡¼¥¸¥§¥ó¥È¤Ø¤ÎÄÌÃΤÏɬÍ׺Ǿ®¸Â¤Î¹ç¿Þ¤Î¤ß¤Ç¤è¤¤¤Ë¤â¤«¤«¤ï¤é¤º»Å³Ý¤±¤¬¹ë²Ú¤¹¤®¤ë
  3. µ»½Ñ¾ðÊó¤ä SDK ¤Î¸ø³«¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤òÍøÍѤ·¤¿¤¤¾ì¹ç¤Ë¤Ï¥°¥ì¡¼¤Ê²òÀϤ¬É¬Í×

Âå¤ï¤ê¤Ë ¥Ç¥Ð¥¤¥¹¤«¤é¤Î¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Ñ¥±¥Ã¥È¤ò¹ç¿Þ¤È¤·¤ÆÍøÍѤ¹¤ë¤³¤È¤ò¹Í¤¨¤Þ¤·¤¿¡£¤³¤ÎÊýË¡¤Ê¤é¤è¤ê¥³¥¹¥È¤¬Ä㤯¥Ç¥Ð¥¤¥¹´Ö¤ÎÀܳ¤Ë¹´Â«¤µ¤ì¤ë¤³¤È¤â¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢¥¢¥É¥Ð¥¿¥¤¥º¤ÎÆâÍÆ¤Ïʸ»úÄ̤ꥪ¡¼¥×¥ó¤Ê¤Î¤Ç°ìÈÌŪ¤Ê¥Ä¡¼¥ë¤ÇÉáÄÌ¤ËÆÉ¤á¤ë¤È¤¤¤¦´Ö¸ý¤Î¹­¤µ¤âÍøÅÀ¤Ç¤¹¡£
Ãí°Õ¤ÎɬÍפÊÅÀ¤È¤·¤Æ¤Ï¡¢Ï¢Â³¤·¤ÆÈ¯À¸¤¹¤ë¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Ñ¥±¥Ã¥È¤Ë¥¨¡¼¥¸¥§¥ó¥È¦¤¬²á¾ê¤ËÈ¿±þ¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤È¡¢Åö³º¥Ç¥Ð¥¤¥¹¤òËÜ·ïÀìÍѤȤ·¤Æ°·¤¦¤Ù¤­¤Ç¤¢¤ë¤³¤È¤¬µó¤²¤é¤ì¤ë¤Ç¤·¤ç¤¦¡£

¥¨¡¼¥¸¥§¥ó¥È¤Ë¤Ä¤¤¤Æ

Á°·Ç¤Î°Æ¤Î¥Ý¥¤¥ó¥È¤Ï BLE ÄÌ¿®¤È¥¤¥ó¥¿¡¼¥Í¥Ã¥ÈÄÌ¿®¤ÎξÊý¤ò¥«¥Ð¡¼¤¹¤ë¥¨¡¼¥¸¥§¥ó¥È¤òÍѰդ¹¤ëÅÀ¤Ë¤¢¤ê¤Þ¤¹¡£BLE ¤Ä¤­¤ÎÍ·¤ó¤Ç¤¤¤ë¥¹¥Þ¥Û¤òÍøÍѤ¹¤ë¼ê¤â¤¢¤ê¤Þ¤¹¤¬¡¢¡Ö¿ø¤¨ÃÖ¤­¡×¡Ö¾ï»þ²ÔƯ¡×¤òÁ°Äó¤È¤¹¤ë IoT ÁõÃ֤Ȥ·¤ÆÍøÍѤ¹¤ë¤Ë¤Ï¤¤¤µ¤µ¤«¥ª¡¼¥Ð¡¼¥¹¥Ú¥Ã¥¯¤Î´¶¤¬¤¢¤ê¡¢¤Þ¤¿¡¢»ëÅÀ¤Ï°Û¤Ê¤ë¤â¤Î¤Î¥¹¥Þ¥Û·Ï¤È¥Ü¥¿¥ó¤ÎÏ¢·È¤Ë´Ø¤·¤Æ¤Ï¡ÖFlic¡×¤ä¡ÖPochiru¡×¤Î¤è¤¦¤ÊÀèÎã¤â¤¢¤ë¤¿¤á¤â¤¦¤Ò¤È¤Ä¿©»Ø¤¬Æ°¤­¤Þ¤»¤ó¡£

¤½¤³¤Ç ESP32 ¥â¥¸¥å¡¼¥ë¤ò»È¤¦¤³¤È¤Ë¤·¤Þ¤·¤¿¡£ESP-WROOM-32 ¤Ïº£²ó¤ÎÍ×·ï¤òñÂΤǤ¹¤Ù¤ÆËþ¤¿¤·¤Æ¤¤¤ë¤¿¤á¤Þ¤µ¤ËŬÌò¤Ç²Á³ÊÌ̤ǤÎÌ¥ÎϤ⤢¤ê¤Þ¤¹¡£

  • BLE ¥Ú¥ê¥Õ¥§¥é¥ë / ¥»¥ó¥È¥é¥ëÂбþ
  • WiFi Âбþ
  • ¥×¥í¥°¥é¥Þ¥Ö¥ë¤«¤ÄñÂÎ¤Ç²ÔÆ¯²Äǽ
  • ESP32-DevKitC ESP-WROOM-32³«È¯¥Ü¡¼¥É - ½©·îÅÅ»Ò ¡ï1,480 ¡Ê2017ǯ8·î»þÅÀ¡Ë

¥Ü¥¿¥ó¤Ë¤Ä¤¤¤Æ

²áµî¤Ë¤³¤Î¥Ö¥í¥°¤Ç¥Ô¥Ã¥¯¥¢¥Ã¥×¤·¤¿¤â¤Î°Ê³°¤Ë¤â¼ê¸µ¤Ë¤ÏÊ£¿ô¤Î BLE ¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤¬¤¢¤ê¤Þ¤¹¡£¤½¤ì¤¾¤ì¤Ë¸ÄÀ­¤¬¤¢¤êʤ٤ƻȤäƤߤë¤È¤Ê¤«¤Ê¤«ÌÌÇò¤¤¤Î¤Ç¤¹¤¬¡¢¾å½Ò¤Î¤è¤¦¤Ë¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Ñ¥±¥Ã¥È¤òÍøÍѤ¹¤ë¤³¤È¤òÁÛÄꤹ¤ë¤È¼¡¤Î¤è¤¦¤Êµ¡Ç½¡¦µ¡¹½¤¬¤Û¤·¤¤¤È¹Í¤¨¤Þ¤·¤¿¡£

  1. µëÅÅÃæ¤Ë¥¢¥É¥Ð¥¿¥¤¥º¤Î³«»Ï¡¦Ää»ß¤òǤ°Õ¤ËÀ©¸æ¤Ç¤­¤ë¤³¤È
  2. Ê£¿ô¤Î¥Ü¥¿¥ó¤¬ÁõÈ÷¤µ¤ì¤Æ¤¤¤ë¤³¤È
    ¡Ê¡Ö¤Ò¤È¤Ä¤Î¥Ç¥Ð¥¤¥¹¤Ç¤Ò¤È¤Ä¤Î½èÍý¡×¤Ç¤Ï¤Á¤ç¤Ã¤È¼ä¤·¤¤¡£¥¢¥É¥Ð¥¿¥¤¥º¤ò¹ç¿Þ¤È¤¹¤ë°Ê¾å¡¢¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤¬ËÜÍè¤ÎÄÌÃε¡Ç½¤Ë¤ª¤¤¤Æ¥À¥Ö¥ë¥×¥Ã¥·¥å¤äĹ²¡¤·¤È¤¤¤Ã¤¿¥Ü¥¿¥ó¥¢¥¯¥·¥ç¥ó¤Î¶èÊ̤ËÂбþ¤·¤Æ¤¤¤Æ¤â¤½¤ì¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¤È¤¤¤¦»ö¾ð¤â¤¢¤ë¡Ë
  3. ¾åµ­ 2. ¤Ë´ØÏ¢¤·¤Æ¡¢¥¢¥É¥Ð¥¿¥¤¥º¥Ç¡¼¥¿¤ÎÆâÍÆ¤òÊѹ¹²Äǽ¤Ç¤¢¤ë¤³¤È

»Äǰ¤Ê¤¬¤é¤³¤ì¤é¤ÎÍ×·ï¤òËþ¤¿¤¹¤â¤Î¤Ï¼ê¸µ¤Ë¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¤¬¡¢¥×¥í¥È¥¿¥¤¥Ô¥ó¥°¤Ç¤¢¤ì¤³¤ì»î¤·¤¿¤È¤³¤í¤Ç¤Ï¤É¤Î¥Ü¥¿¥ó¤â¤½¤ì¤Ê¤ê¤Ë»È¤¨¤ë¤Î¤Ç¤Þ¤¢¤³¤ì¤Ï¤³¤ì¤Ç¡¦¡¦¤È¤â»×¤Ã¤Æ¤¤¤Þ¤·¤¿¡£¤½¤³¤Ç¤¿¤Þ¤¿¤ÞÌܤˤ·¤¿¤Î¤¬ micro:bit ¹ñÆâÈÎÇä¤Î¥Ë¥å¡¼¥¹¤Ç¤¹¡£

¤½¤ì¤Þ¤Ç¤³¤ÎÀ½ÉʤΤ³¤È¤Ï̾Á°¤·¤«ÃΤ餺¤Ë¤¤¤Þ¤·¤¿¡£¤¢¤é¤¿¤á¤Æ¼Ì¿¿¤ò¤ß¤Æ¤Õ¤¿¤Ä¤Î¥¿¥¯¥È¥¹¥¤¥Ã¥Á¤¬ÌܤˤȤޤꡢ¤µ¤é¤Ëµ­»öÃæ¤Î¡Öµ»Å¬¡×¤Îʸ»ú¤¬µ¤¤Ë¤Ê¤Ã¤Æ¾ðÊó¤òÄ´¤Ù¤¿¤È¤³¤í¼Â¤Ï¾å¤Î¤ß¤Ã¤Ä¤ÎÍ×·ï¤ò¤¹¤Ù¤ÆËþ¤¿¤·¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤Ã¤¿¤¿¤á̤鷺¤³¤ì¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£
¤Á¤Ê¤ß¤Ë¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹¤µ¤ó¤¬µîǯ 12·î¤Ë¥ê¥ê¡¼¥¹¤·¤¿ chibi:bit ¤Î¤³¤È¤â¤³¤Î»þ¤ËÃΤê¤Þ¤·¤¿¡£¥·¥ç¥Ã¥×¤Ë¤Ï¤è¤¯¤ªÀ¤ÏäˤʤäƤ¤¤ë¤Î¤Ç¤¹¤¬¡¢°ì¸«¤¢¤Þ¤ê´Ø·¸¤Î¤Ê¤µ¤½¤¦¤Ê¤È¤³¤í¤Ë¤·¤Ã¤«¤êÎɤ¤¤â¤Î¤¬¤¢¤Ã¤¿¤ê¤¹¤ë¤â¤Î¤Ç¤¹¤Í¡£

micro:bit ÍѤËÄÉ²Ã¹ØÆþ¤·¤¿¥Ñ¡¼¥Ä

micro:bit ¥Ü¡¼¥É¤ò¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤È¤·¤Æ°·¤¦¤¿¤á¤Ë·ç¤«¤»¤Ê¤¤¤Õ¤¿¤Ä¤Î¥Ñ¡¼¥Ä¤òĴ㤷¤Þ¤·¤¿¡£ ¤¤¤º¤ì¤â±Ñ Kitronik ¼Ò¤ÎÀ½Éʤǡ¢¥Ü¥¿¥óÅÅÃÓ¤«¤éµëÅŤ¹¤ë¤¿¤á¤Î¥ª¥×¥·¥ç¥ó¥Ü¡¼¥É¡ÖMI:power¡×¡ÊľÈβÁ³Ê ¡ò4.16¡Ë¤È¡¢Æ±¥Ü¡¼¥É¤òÁõÃ夷¤¿¾õÂÖ¤ÎÁ´ÂΤò¤¹¤Ã¤Ý¤êʤ¤¦¤³¤È¤Î¤Ç¤­¤ë¡ÖMI:pro Protective Case¡×¡ÊľÈβÁ³Ê ¡ò4.10¡Ë¤Ç¤¹¡£¼Ì¿¿¤Ï¥±¡¼¥¹¤Ë¼ý¤á¤¿¾õÂ֤γ°´Ñ¤Ç¤¹¡£


Á°ÌÌ
ÇØÌÌ
¤Þ¤¿¡¢º£²ó¤Ï»È¤Ã¤Æ¤¤¤Þ¤»¤ó¤¬¡¢³ÈÄ¥¥³¥Í¥¯¥¿ÍѤΡÖEdge Connector Breakout Board¡×¡ÊľÈβÁ³Ê ¡ò4.15¡Ë¤â¤¢¤ï¤»¤ÆÆþ¼ê¤·¤Þ¤·¤¿¡£

;Ã̤ʤ¬¤é Kitronik ¼Ò¤ÏľÈΤò¹Ô¤Ã¤Æ¤Ï¤¤¤ë¤â¤Î¤ÎÆüËܤؤÎÁ÷ÎÁ¤¬ºÇ°Â¤Ç¤â ¡ò30.95 ¤È¹â¤¤¤¿¤á¡¢Á÷ÎÁ¤Î°Â¤¤¥·¥ç¥Ã¥×¤òõ¤·¤Æ±Ñ¹ñÆâ¤Î Pimoroni ¤Ë¤¿¤É¤êÃ夭¡¢¤½¤³¤Ç¡ÖMI:power¡×¤È¡ÖEdge Connector Breakout Board¡×¤ò¹ØÆþ¤·¤Þ¤·¤¿¡£Á÷ÎÁ¤Ï ¡ò5.50¡£8·î7Æü¤ËȯÃí¤· 1½µ´Ö¤ÇÅþÃ夷¤Þ¤·¤¿¡£¤Ê¤ª¡¢¤³¤Î¤Õ¤¿¤Ä¤ÎÀ½Éʤϥ¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹¤µ¤ó¤Î¥µ¥¤¥È¤Ë¤â·ÇºÜ¤µ¤ì¤Æ¤ª¤ê 8·î21Æü¤ËƱ¼Ò¤«¤é¡Ö¤´Ãíʸ¤¤¤¿¤À¤±¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡×¥á¡¼¥ë¤¬ÆÏ¤­¤Þ¤·¤¿¡£

¤É¤¦¤·¤Æ¤âÍߤ·¤«¤Ã¤¿¡ÖMI:pro Protective Case¡×¤Ï Pimoroni ¤Ë¤â¸«Åö¤¿¤é¤º¡¢¤·¤Ä¤³¤¤¸¡º÷¤ò·Ð¤Æ·ë¶É¤½¤Î»þÅÀ¤ÇÁ÷ÎÁ¤ò´Þ¤áºÇ¤â°Â¤¯ÈÎÇ䤷¤Æ¤¤¤¿ ebay ½ÐÉÊ´ë¶È¤«¤éÇ㤤¤Þ¤·¤¿¡£¤½¤ì¤Ç¤âÁí³Û¤¬ÆüËܹñÆâ¤Ç¤Î micro:bit ËÜÂβÁ³Ê¤è¤ê¤â¹â³Û¤Ç¤Ï¤¢¤ê¤Þ¤·¤¿¤¬¡¢¤Á¤ç¤¦¤É 2½µ´Ö¸å¤Î 8·î25Æü¤ËÆÏ¤­´ò¡¹¤È¤·¤Æ»È¤Ã¤Æ¤¤¤Þ¤¹¡£

¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹¤µ¤ó¡¢¤¼¤Ò¤³¤Î¡ÖMI:pro Protective Case¡×¤â°·¤Ã¤Æ²¼¤µ¤¤¡ªPimoroni ¤µ¤ó¤âº£¤Î¤È¤³¤í°·¤Ã¤Æ¤¤¤Ê¤¤¤è¤¦¤Ç¤¹¤¬¡¢¤â¤·Æþ²Ù¤µ¤ì¤¿¤é¾¯¤Ê¤¯¤È¤â»ä¤Ï³Î¼Â¤ËÇ㤤¤Þ¤¹¡ª¡Ê^^;

¼ÂÁõ

micro:bit ¦

micro:bit ¦¤Î¥×¥í¥°¥é¥à¤Ï Microsoft MakeCode ¤Ç¼êÁ᤯ºîÀ®¤·¤Þ¤·¤¿¡£°Ê²¼¤ÎÆâÍÆ¤È¤·¤Æ¤¤¤Þ¤¹¡£

  • ÅŸ»¤¬Æþ¤ë¤ÈºÇ¾åÃÊÃæ±û¤Î LED ¤ò 2Éôֳ֤ÇÅÀÌdz«»Ï ¡ÊµëÅžõÂ֤γÎǧÍÑ¡Ë
  • º¸Â¦¤Î¥Ü¥¿¥ó A ¤¬²¡¤µ¤ì¤ë¤È¥Ü¥¿¥ó±¦¤Î LED ¤òÅÀÅô¤· Eddystone-URL ¥Ñ¥±¥Ã¥È¤Ë¥À¥ß¡¼ URL "http://A" ¤ò¤Î¤»¤Æ 4Éô֥¢¥É¥Ð¥¿¥¤¥º¤¹¤ë
  • ±¦Â¦¤Î¥Ü¥¿¥ó B ¤¬²¡¤µ¤ì¤ë¤È¥Ü¥¿¥óº¸¤Î LED ¤òÅÀÅô¤· Eddystone-URL ¥Ñ¥±¥Ã¥È¤Ë¥À¥ß¡¼ URL "http://B" ¤ò¤Î¤»¤Æ 4Éô֥¢¥É¥Ð¥¿¥¤¥º¤¹¤ë

¥¢¥É¥Ð¥¿¥¤¥º¤Ë Eddystone-URL ¥Ñ¥±¥Ã¥È¤ò»ÈÍѤ·¤Æ¤¤¤ë¤Î¤Ï MakeCode ¾å¤Î¡ÖBluetooth¡×¤Î¹à¤Ë¾¤ÎÁªÂò»è¤¬¸«Åö¤¿¤é¤Ê¤«¤Ã¤¿¤¿¤á¤Ç¤¹¡£¤³¤ì¤È¸À¤Ã¤ÆÊÀ³²¤âÁÛÄꤵ¤ì¤º¡¢¤Þ¤¿¡¢¤É¤Î¤è¤¦¤Ê·Á¼°¤Ç¤¢¤ì¥Ç¡¼¥¿¤ÎÆâÍÆ¤Ç A, B ¥Ü¥¿¥ó¤ò¶èÊ̤Ǥ­¤ì¤Ð»ö­¤ê¤ë¤Î¤Ç¤³¤ì¤Ï¤³¤ì¤Ç¤è¤·¤È¤·¤Þ¤·¤¿¡£¿Þ¤Ï¥¨¥Ç¥£¥¿²èÌ̤Υ¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤Ç¤¹¡£¤¹¤Ç¤Ë¤³¤¦¤¤¤¦»þÂå¤Ê¤Î¤Ç¤¹¤Í¡£ ¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

ESP-WROOM-32 ¦

ESP32 ¥â¥¸¥å¡¼¥ë¦¤Î¥×¥í¥°¥é¥à¤Ï ESP-IDF ´Ä¶­¤ÇºîÀ®¤·¤Þ¤·¤¿¡£

½èÍý¤Î³µÍ×

  1. ½êÄê¤Î WiFi ¥¢¥¯¥»¥¹¥Ý¥¤¥ó¥È¤ØÀܳ
  2. ½êÄê¤Î URL ¤Ø HTTPS ¥¢¥¯¥»¥¹¤ò¹Ô¤¦¤¿¤á¤Î¥¿¥¹¥¯¤òÀ¸À®¤·¤ÆÂÔµ¡
    ¡Á ²¼µ­ 3. ¤Ç¤ÎÍ×µáȯÀ¸»þ¤Ë¥ê¥¯¥¨¥¹¥ÈÁ÷½Ð¤È¥ì¥¹¥Ý¥ó¥¹¼õ¿®¤ò¹Ô¤¤½ª¤ï¤ì¤ÐºÆ¤ÓÂÔµ¡¾õÂÖ¤Ø
  3. ±Ê³¥ë¡¼¥×¤Ç BLE ¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Ñ¥±¥Ã¥È¤Î¥¹¥­¥ã¥ó¤ò³«»Ï
    ¡Á ÂоݤȤ¹¤ë MAC ¥¢¥É¥ì¥¹¤Î¥Ç¥Ð¥¤¥¹¤«¤é¤ÎÂоݤȤ¹¤ëÉäÃú¤ò´Þ¤à Eddystone-URL ¥Ñ¥±¥Ã¥È¤ò¸¡ÃΤ¹¤ë¤È¾åµ­ 2. ¤Î¥¿¥¹¥¯¤Ø½êÄê¤Î URL ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤òÍ×µá

¥½¡¼¥¹¥³¡¼¥É

¤³¤³¤Ç¤Ï°ìÂæ¤Î micro:bit ¤Î¤ß¤òÂоݤȤ·¤Æ¤¤¤Þ¤¹¤¬¡¢¥½¡¼¥¹¥³¡¼¥ÉÃæ¤Î Entries ¥Æ¡¼¥Ö¥ë¤ØÅ¬µ¹¥¨¥ó¥È¥ê¤òÄɲ乤뤳¤È¤ÇÊ£¿ô¤Î micro:bit ¤òÂоݤȤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£

A, B ¥Ü¥¿¥ó¤Î²¡²¼¤Ë¸Æ±þ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤Î¥µ¥ó¥×¥ë¤È¤·¤Æ Gmail ȯ¿®, ·ÈÂÓÅÅÏäΥ³¡¼¥ë¤Î¤Õ¤¿¤Ä¤Î½èÍý¤òɳÉÕ¤±¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤é¤Ï¤¤¤º¤ì¤â Microsoft Flow ¾å¤ËºîÀ®¤·¤¿¥Õ¥í¡¼¤Î URL ¤Ø¤Î GET Í×µá¤Ë¤è¤Ã¤Æ¼Â¸½¤·¤Æ¤¤¤Þ¤¹¡£¤Õ¤¿¤Ä¤Î¥Õ¥í¡¼¤Î¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£ ¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

Gmail ȯ¿®

ÅÅÏõ¡¤ò¥³¡¼¥ë¡ÊTwilio API ¤òÍøÍÑ¡Ë

ưºî¤ÎÍÍ»Ò

ư²è¡§1ʬ18Éá¡¡ÊÅÓÃæ¤ÇÅÅÏÃÃå¿®²»¤¬ÌĤê¤Þ¤¹¡£²»Î̤ËÃí°Õ¤·¤Æ²¼¤µ¤¤¡Ë


(tanabe)
klab_gijutsu2 at 09:06¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(2)
2017ǯ06·î23Æü

²»¤òÍøÍѤ¹¤ë 5 ¡Ámbed ¥Þ¥¤¥³¥ó¤Ç¤Î±þÍÑ¡§¼ÂÁõÊÔ¡Á ¡Ê½ª¡Ë

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

¤³¤Îµ­»ö¤ÎÆâÍÆ

Á°²ó¤Îµ­»ö¤Ç¤Ï mbed LPC1768 ¤ò»È¤Ã¤Æ²»À¼¿®¹æ¤ÎÆþ½ÐÎϤÈʬÀϤò»î¤ß¤Þ¤·¤¿¡£º£²ó¤Ï¤½¤ÎÆâÍÆ¤ò¤â¤È¤Ë¼ÂÍÑÀ­¤Î¸«¹þ¤á¤ë¤â¤Î¤òºî¤Ã¤Æ¤ß¤Þ¤¹¡£

¢¨µ­»ö¤Ç¤Ï²»¤ÎʬÀϤ˰ʲ¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹

1. ²»¤ò¥È¥ê¥¬¡¼¤ËÄÌÃΤò¹Ô¤¦¤·¤¯¤ß¤òºî¤ë

¤Þ¤º¡¢½êÄê¤Î²»¤òÌĤ餹¤È¤½¤ì¤ËÈ¿±þ¤·¤Æ½êÄê¤ÎÏ¢ÍíÀè¤ØÄÌÃΤò¹Ô¤¦¤·¤¯¤ß¤òÁÛÄꤷ¤Þ¤·¤¿¡£ÁõÃÖ¤¬²°Æâ¤Ç¾ï»þ½¸²»¤ÈʬÀϤò¹Ô¤¤¡¢½êÄê¤Î¼þÇÈ¿ô¤ÎϢ³À­¤Î¤¢¤ë²»À¼¿®¹æ¤ò¸¡ÃΤ¹¤ë¤È¥¤¥ó¥¿¡¼¥Í¥Ã¥È·Ðͳ¤Ç½êÄê¤ÎÂоݤØÄÌÃΤòÁ÷¤ë¥¤¥á¡¼¥¸¤Ç¤¹¡£¼¡¤Î¤è¤¦¤Ë¹Í¤¨¤Þ¤·¤¿¡£

  • ²»¤ÏÅż§ÇȤËÈæ¤Ù¤è¤ê¾®¤µ¤Ê¥¨¥Í¥ë¥®¡¼¤ÇȯÀ¸¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¤¿¤á²¿¤é¤«¤Î½èÍý¤ò»Ø¼¨¤¹¤ë¤¿¤á¤Î¥È¥ê¥¬¡¼¤È¤·¤Æ¤ÎÍ­ÍÑÀ­¤¬¸«¹þ¤Þ¤ì¤ë
  • ²»¤Ï¿Í´Ö¤Î´±Ç½¤Ëľ·ë¤·¤Æ¤ª¤ê°·¤¤¤¬Èæ³ÓÅªÍÆ°×¤Ç¤¢¤ë¤¿¤á¾¤ÎÁªÂò»è¤¬ÊĤ¶¤µ¤ì¤¿¾õ¶·¤Ë¤ª¤¤¤Æ°Õ»×¤òÅÁ¤¨¤ë¤¿¤á¤ÎºÇ¸å¤Î¼êÃʤȤʤêÆÀ¤ë
  • ¥Þ¥¤¥³¥ó¤Ï¾ï»þ²ÔƯ¤òÁ°Äó¤È¤¹¤ë¾ðÊó½èÍýÁõÃ֤ι½À®Í×ÁǤȤ·¤Æ¹¥Å¬¤Ç¤¢¤ê¤³¤¦¤·¤¿»È¤¤Êý¤Ï¡ÖIoT¡×¤½¤Î¤â¤Î¤Ç¤â¤¢¤ë

»ÈÅӤϤ¤¤í¤¤¤í¹Í¤¨¤é¤ì¤½¤¦¤Ç¤¹¤¬¡¢¤¿¤È¤¨¤ÐÆü¾ïŪ¤Ë´í¸±¤ÎÀøºß¤¹¤ë¹âÎð¼ÔÀ¤ÂÓ¤äÆÈµïÀ¤ÂӤˤª¤¤¤ÆÈó¾ï»þ¤Ë SOS ¤òȯ¿®¤¹¤ë¤¿¤á¤ÎÍÑ¿´ËÀ¤È¤·¤Æ¤âÍ­ÍѤǤ·¤ç¤¦¡£

¤É¤Î¤è¤¦¤Ê²»¤ò»È¤¦¤«

ÄÌÃΤΥȥꥬ¡¼¤È¤¹¤ë²»¤Ë¤Ï½êÄê¤Î¼þÇÈ¿ô¤È¿¶Éý¤Î°Ý»ý¤¬µá¤á¤é¤ì¤Þ¤¹¡£¤â¤Ã¤È¤â´Êñ¤Ë¤½¤Î¤è¤¦¤Ê²»¤ò½Ð¤»¤ë¿È¶á¤ÊÆ»¶ñ¤È¤·¤Æ¡ÖÅ«¡×¤ËÌܤò¸þ¤± 5 ¼ïÎà¤ÎÀ½Éʤò»î¤·¤Æ¤ß¤Þ¤·¤¿¡£¤½¤ì¤¾¤ì¤ËÆÃŤ¬¤¢¤ê¤³¤ì¤é¤ÎÅ«À½Éʤ⻤ò¤¹¤Ù¤Æ¥È¥ê¥¬¡¼¤È¤·¤ÆÍøÍѤ·¤¿¤¤¤È¹Í¤¨¤Þ¤·¤¿¡£

A&F ¼ÒÀ½ ¥µ¥¤¥ì¥ó¥È¥Û¥¤¥Ã¥¹¥ë¡¡¸¤Å«

  • A&F ¥¨¥¤¥¢¥ó¥É¥¨¥Õ ¥µ¥¤¥ì¥ó¥È¥Û¥¤¥Ã¥¹¥ë - www.aandfstore.com
    ¿Í¤Ëʹ¤³¤¨¤ë²ÄİÎΰè¤ÎÄã²»¤È¸¤¤Ë¤·¤«Ê¹¤³¤¨¤Ê¤¤Ä¶²»ÇÈÎΰè(16000¡Á22000Hz°Ê¾å)¤Î ¹â²»¤ò½Ð¤¹¤³¤È¤¬¤Ç¤­¤ë·ÚÎ̤ʥ¢¥ë¥ß¹ç¶â¤«¤éºï¤ê½Ð¤·¤Æºî¤Ã¤¿¡¢¤¿¤Ã¤¿7g¤Î¸¤Å«¤Ç¤¹
  • A&F ¥¨¥¤¥¢¥ó¥É¥¨¥Õ ¥µ¥¤¥ì¥ó¥È ¥Û¥¤¥Ã¥¹¥ë - www.yodobashi.com
  • Ĺ½ê
    • Æü¾ïŪ¤Ê´Ä¶­²»¤È¤Ï¤Û¤È¤ó¤É¶¥¹ç¤·¤Ê¤¤¹â¼þÇȤ⻤ò´Êñ¤Ë½ÐÎϤǤ­¤ë
    • ¿¶Éý¤ÎÂ礭¤Ê²»¤ò¡ÖÀŤ«¡×¤ËÌĤ餹¤³¤È¤¬²Äǽ
    • ¾¯¤Ê¤¤Â©¤ÇÂ礭¤¯Ä¹¤¯²»¤ò½Ð¤»¤ë
    • º£²ó¤ÎÃæ¤Ç¤Ï¤â¤Ã¤È¤â±ó¤¯¤Þ¤Ç²»¤¬ÅÁ¤ï¤ë
  • È÷¹Í
    • ²Á³Ê¤¬¹â¤á¡Ê¼ÂÇä¡ï2,000Á°¸å¡Ë
    • ¸¤Å«¤Ï²»¤¬¿Í´Ö¤Ëʹ¤³¤¨¤Ë¤¯¤¤À­¼Á¾å°ìÈÌŪ¤ÊËɺҡ¦ÈòÆñÍÑÅӤˤÏŬ¤µ¤Ê¤¤¡¡¢¨¤³¤ÎÀ½Éʼ«ÂΤϲÄݲ»°è¤ØÀÚ¤êÂØ¤¨¤¬²Äǽ
¥µ¥ó¥×¥ë¡Ê¶¯¤¤Â©¡§²»ÎÌÃí°Õ¡Ë
¥Ô¡¼¥¯¤Ï 10000Hz ÉÕ¶á
¼þÇÈ¿ôʬÉÛ

¥³¥¯¥è¼ÒÀ½ ËɺÒÍѵ߽õÅ«

  • ËɺÒÍѵ߽õÅ«¥Ä¥¤¥ó¥¦¥§¡¼¥Ö - µß½õ¡¦ÈòÆñÍÑÉÊ - www.kokuyo-st.co.jp
    ¥Ä¥¤¥ó¥¦¥§¡¼¥Ö¤Ï¿Í¤Î¼ª¤ËºÇ¤âÎɤ¯Ê¹¤³¤¨¤ëÌó3000Hz¡Á5000Hz¤Î¼þÇÈ¿ô¤ÎÃæ¤Ç¡¢2¼ïÎà¤ÎÇÈŤò½Ð¤¹¤¿¤á¡¢¤è¤ê¹­ÈϰϤʿͤؤÎÃí°Õ´­µ¯¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£ ¾®¤µ¤Ê©¤Ç¤âÂ礭¤Ê²»¤ò½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
  • ¥³¥¯¥è ËɺÒÍѵ߽õÅ« ËɺҤÎã¿Í ¥Ä¥¤¥ó¥¦¥§¡¼¥Ö ¥ª¥ì¥ó¥¸ DRK-WS1YR - www.amazon.co.jp
  • ÆÃÊÌÂÐÃÌ¡¡»³Â¼Éðɧ»á¡ßÎëÌÚ¾¾Èþ»á¡ÊÄó¶¡¡§¥³¥¯¥è £Ó¡õ£Ô ³ô¼°²ñ¼Ò¡Ë - www.webside.jp
    »³Â¼»á¡¡¤³¤Î¡Ö¥Ä¥¤¥ó¥¦¥§¡¼¥Ö¡×¤Ç¤¹¤¬¡¢°ì¸«¡¢Å«¤È¤Ï¤ï¤«¤ê¤Þ¤»¤ó¤Í¡£¡¦¡¦¡¦
    ¤¤¤Ä¤Ç¤â¡¢¤É¤³¤Ç¤â¡¢Ã¯¤Ç¤â¤¬»ý¤ÁÊ⤱¤ë¤È¤¤¤¦¤Î¤Ï¡¢Èó¾ï¤ËÂ礭¤Ê¥Ý¥¤¥ó¥È¤À¤È»×¤¤¤Þ¤¹¡£¡¦¡¦¡¦
    ÎëÌڻᡡ¤Ò¤È¤Ä¤Î²»¤À¤±¤Ç¤Ï¤Ê¤¯¡¢£²¼ïÎà¡¢£³¼ïÎà¤Î²»¤¬½Ð¤»¤ì¤Ð¡¢¤è¤ê½õ¤±¤òµá¤á¤ä¤¹¤¤¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ ¥Ä¥¤¥ó¥¦¥§¡¼¥Ö¤Ï¡¢3200¥Ø¥ë¥Ä¤È4800¥Ø¥ë¥Ä¤Î²»¤òƱ»þ¤Ë½Ð¤·¤Þ¤¹¡£¡¦¡¦¡¦
    ÎëÌڻᡡ¥Ä¥¤¥ó¥¦¥§¡¼¥Ö¤Ï¡¢Ä̾ï¤Ç700¡Á800¥á¡¼¥È¥ëÀè¤Þ¤Ç¤Ï²»¤¬ÆÏ¤­¤Þ¤¹¤«¤é¡¢¥¨¥ì¥Ù¡¼¥¿¤ÇÊĤ¸¹þ¤á¤é¤ì¤¿¾ì¹ç¤Ê¤É¤âÍ­¸ú¤Ç¤¹¡£ ¤µ¤é¤Ë¡¢·Ú¤¤Â©¤ÇÂ礭¤Ê²»¤òÌĤ餻¤ë¤Î¤Ç¡¢¤ªÇ¯´ó¤ê¤Ë¤âºÇŬ¤Ç¤¹¡£ÎϤ¬¤Ê¤¯¤Æ¤âƱ¤¸¼þÇÈ¿ô¤¬½Ð¤»¤ë¤è¤¦¤Ë¡¢¤º¤¤¤Ö¤ó¶ìÏ«¤·¤Þ¤·¤¿¡£Â©¤Î¥¨¥Í¥ë¥®¡¼¤ò¤Û¤È¤ó¤É²»¤ËÊÑ´¹¤·¤Æ¡¢Èó¾ï¤Ë¸úΨ¤¬¤¤¤¤¤ó¤Ç¤¹¡£ »³Â¼»á¡¡¤³¤ÎÅ«¤Î¸ú²Ì¤Ï¡¢¤³¤ì¤«¤é¤ÎËɺÒÂкö¤Ë·ç¤«¤»¤Ê¤¤¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£¹âÎð¼Ô¤Ç¤â¡¢ ¿²¤¿¤­¤ê¤Î¿Í¤Ç¤â¡¢Å«¤µ¤¨¿á¤±¤ì¤Ð¼«¤é¤Îµï¾ì½ê¤òÃΤ餻¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
  • Ĺ½ê
    • ¾¯¤Ê¤¤Â©¤Ç¤è¤êÂ礭¤Ê²»¤ò½Ð¤»¤ë
    • ¥×¥é¥¹¥Æ¥£¥Ã¥¯À½¤«¤Ä³¸¤Ä¤­¤Ç¾®¤µ¤¯·ÈÂÓÀ­¤ËÍ¥¤ì¤ë
    • ¥³¥¹¥È¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬¹â¤¤¡Ê¼ÂÇä¡ï400Á°¸å¡Ë
  • È÷¹Í
    • ¼ê¸µ¤Ç¤Î³Îǧ¤Ç¤ÏÀ½ÉÊ̾¤ÎͳÍè¤Ç¤â¤¢¤ë¡Ö2¼ïÎà¤ÎÇÈĹ¡×¤Ï¤¢¤Þ¤ê¤Ï¤Ã¤­¤ê¤È´Ñ»¡¤Ç¤­¤Ê¤«¤Ã¤¿¡£¿á¤­Êý¤Î±Æ¶Á¡©
¥µ¥ó¥×¥ë¡Ê¶¯¤¤Â©¡§²»ÎÌÃí°Õ¡Ë
¥Ô¡¼¥¯¤Ï 3200Hz ÉÕ¶á
¼þÇÈ¿ôʬÉÛ

¥â¥ë¥Æ¥ó¼ÒÀ½ ÅŻҥۥ¤¥Ã¥¹¥ë

¥µ¥ó¥×¥ë¡Ê²»ÎÌÃí°Õ¡Ë
¥Ô¡¼¥¯¤Ï 3800Hz ÉÕ¶á
¼þÇÈ¿ôʬÉÛ

¥ì¥â¥ó¼ÒÀ½ ¶ÛµÞÍѸƻÒÅ«

  • ¶ÛµÞÍѸƻÒÅ« - lemon.gr.jp
  • ¶ÛµÞÍÑ ¸Æ»ÒÅ« 885800 - www.amazon.co.jp
    ·ÈÂÓ¤ËÊØÍø¤Ê¥Ú¥ó¥À¥ó¥È¥¿¥¤¥×¤Î¶ÛµÞÍѸƻÒÅ«¤Ç¤¹¡£ ¿È¸µ³Îǧ¤Î¤¿¤á¤ÎID¥«¡¼¥É¤¬ÉÕ¤¤¤Æ¤¤¤Þ¤¹¡£
  • Ĺ½ê
    • ¾¯¤Ê¤¤Â©¤ÇÂ礭¤¯Ä¹¤¯²»¤ò½Ð¤»¤ë
    • ¥¹¥ê¥à¤Ç·Ú¤¯·ÈÂÓ¤·¤ä¤¹¤¤
    • ¥³¥¹¥È¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬¤­¤ï¤á¤Æ¹â¤¤¡Ê¼ÂÇä¡ï100¡Á200ÄøÅÙ¡Ë
  • È÷¹Í
    • ¡Ö¥¢¥ë¥ßÀ½¡×¤À¤¬¹äÀ­¤Ë¼ã´³¤ÎÉ԰¤¢¤ê
¥µ¥ó¥×¥ë¡Ê¶¯¤¤Â©¡§²»ÎÌÃí°Õ¡Ë
¥Ô¡¼¥¯¤Ï 4300Hz ÉÕ¶á
¼þÇÈ¿ôʬÉÛ

°ìÈÌŪ¤Ê¥Û¥¤¥Ã¥¹¥ë¡Ê¥á¡¼¥«¡¼ÉÔÌÀ¡Ë

  • Ĺ½ê
    • É´¶ÑʤÇÇ㤨¤ë¤Ê¤ÉÆþ¼êÀ­¤¬¤è¤¯Ê¶¼º¤·¤Æ¤â¥À¥á¡¼¥¸¤¬¾¯¤Ê¤¤
    • ¥¹¥¿¥ó¥À¡¼¥É¤Ç¤¢¤ë¤¿¤á°ì¸«¤·¤ÆÅ«¤Èǧ¼±¤Ç¤­Ã¯¤Ç¤â´Êñ¤Ë°·¤¨¤ë
  • È÷¹Í
    • ²»Î̤γÎÊݤȻý³¤Ë¿¤¯¤Î©¤¬É¬Í×
¥µ¥ó¥×¥ë¡Ê¶¯¤¤Â©¡§²»ÎÌÃí°Õ¡Ë
¥Ô¡¼¥¯¤Ï 2300Hz ÉÕ¶á
¼þÇÈ¿ôʬÉÛ

¤É¤Î¤è¤¦¤ËÄÌÃΤò¹Ô¤¦¤«

¶ÛµÞÏ¢ÍíÍÑÅÓ¤òÁÛÄꤹ¤ë¤ÈÄÌÃΤÏÊ£¿ô¤ÎÊýË¡¤òÊ»ÍѤ¹¤ë¤³¤È¤¬¹¥¤Þ¤·¤¤¤È¹Í¤¨¤Þ¤·¤¿¡£º£²ó¤Ï°Ê²¼¤Î¤ß¤Ã¤Ä¤ÎÊýË¡¤òÁÛÄꤷ¥µ¡¼¥Ó¥¹¤ÎÁªÄê¤ò¹Ô¤¤¤Þ¤·¤¿¡£

ÅÅÏõ¡¤Ø¤ÎÄÌÃÎ

ÅÅÏäϤâ¤Ã¤È¤â¼êÁᤤÄÌÃμêÃʤǤ·¤ç¤¦¡£ÅÅÏÃÏ¢Íí¤ò¼ê¶á¤Ë°·¤¨¤ë¥µ¡¼¥Ó¥¹¤È¤·¤ÆÊƹñȯ¤Î¡ÖTwilio¡×¤òÃΤꤳ¤ì¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£½êÄê¤ÎÁê¼ê¤ËÂФ·½êÄê¤Î²»À¼¥á¥Ã¥»¡¼¥¸¤òή¤¹¤³¤È¤â´Êñ¤Ë¼Â¸½¤Ç¤­¤Þ¤¹¤¬¡¢¤³¤³¤Ç¤ÏÅÅÏõ¡¤ò¥³¡¼¥ë¤¹¤ë¤À¤±¤Ç¼õ¤±¼ê¤Ï²¿¤´¤È¤«¤ÎȯÀ¸¤ò»¡ÃΤǤ­¤ë¤¿¤á¥³¥¹¥È¤Î¤«¤«¤ë²»À¼ÄÌÏõ¡Ç½¤òÍøÍѤ¹¤ëɬÍפϤʤ¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£

Twilio

  • Twilio - APIs for Text Messaging, VoIP & Voice in the Cloud - www.twilio.com
  • Twilio for KDDI Web Communications | ¥¯¥é¥¦¥ÉÅÅÏÃAPI - twilio.kddi-web.com
    Twilio ¤Ï³«È¯¼Ô¸þ¤±¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¥µ¡¼¥Ó¥¹¡¢¤¿¤Ã¤¿¿ô¹Ô¤Î¥³¡¼¥É¤ò½ñ¤¯¤À¤±¤Ç¥Í¥Ã¥È¤ÈÅÅÏá¦SMS ¤ò¤Ä¤Ê¤®¤Þ¤¹¡£¥Í¥Ã¥È¾å¤Î»ÅÁȤߤòÅÅÏ䫤éÁàºî¤·¤¿¤ê¡¢¥Í¥Ã¥È¾å¤Î¾ðÊó¤òÅÅÏää SMS ¤ËÄÌÃΤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
  • API ¥ê¥Õ¥¡¥ì¥ó¥¹ - Á´Twilio API¤ª¤è¤ÓSDK¤Î¾ÜºÙ¥ê¥Õ¥¡¥ì¥ó¥¹ - jp.twilio.com
    Twilio ¤Î REST API ¤ò»È¤Ã¤Æ¡¢¥æ¡¼¥¶¡¼ ¥¢¥«¥¦¥ó¥È¡¢ÅÅÏÃÈֹ桢ÄÌÏᢠ¥Æ¥­¥¹¥È ¥á¥Ã¥»¡¼¥¸¡¢Ï¿²»¤Î¥á¥¿¥Ç¡¼¥¿¤Ë¥¯¥¨¥ê¤òÁ÷¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ȯ¿®ÄÌÏäò³«»Ï¤·¤¿¤ê¥Æ¥­¥¹¥È ¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
           :
  • ÎÁ¶â - twilio.kddi-web.com
    ÅÅÏÃÈÖ¹æÎÁ 1¥ö·î¤¢¤¿¤ê
    050 ÈÖ¹æ 100 ±ß¡ÊÀÇÊÌ¡Ë 108 ±ß¡ÊÀǹþ¡Ë
           :
    ȯ¿®ÎÁ 1 ʬ¤¢¤¿¤ê
           :
    ·ÈÂÓÅÅÏð¸¡Ê070 / 080 / 090 ÈÖ¹æ¡Ë 15 ±ß¡ÊÀÇÊÌ¡Ë 16.2 ±ß¡ÊÀǹþ¡Ë
           :

¥µ¥¤¥ó¥¢¥Ã¥×¤¹¤ë¤È¥È¥é¥¤¥¢¥ë¥¢¥«¥¦¥ó¥È¤È¤·¤Æ»îÍѥݥ¤¥ó¥È¤¬Ä󶡤µ¤ì¡Ê³Û¤ÏÈó¸ø³«¡Ë¡¢Æ±¥Ý¥¤¥ó¥È¤¬¿Ô¤­¤ë¤È¥Õ¥ë¥¢¥«¥¦¥ó¥È¤Ø¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É¤È¥¯¥ì¥¸¥Ã¥È¥«¡¼¥ÉÈÖ¹æ¤ÎÅÐÏ¿¤òÂ¥¤µ¤ì¤ë¤·¤¯¤ß¤Ç¤¹¡£¤³¤Î¥Ý¥¤¥ó¥È¤Ç 050 ÈÖ¹æ¤ò°ì·ï¼èÆÀ¤·¤Þ¤·¤¿¡£¥×¥í¥°¥é¥à¤«¤é´Êñ¤ËÅÅÏÃÏ¢Íí¤ò°·¤¨¤ë¤Î¤ÏÊØÍø¤Ê¤Î¤Ç¥È¥é¥¤¥¢¥ë½ªÎ»¸å¤âÍøÍѤò·Ñ³¤·¤¿¤¤¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£¤Á¤Ê¤ß¤Ë¥³¡¼¥ë¤À¤±¤Ê¤é¾åµ­¤Î¡Öȯ¿®ÎÁ¡×¤ÏȯÀ¸¤·¤Þ¤»¤ó¡£

¥á¥Ã¥»¡¼¥¸¥×¥Ã¥·¥å¤Ë¤è¤ëÄÌÃÎ

¥¹¥Þ¥Û¡¦¥Ç¥¹¥¯¥È¥Ã¥×¡Ê¥Ö¥é¥¦¥¶¡Ë¤Ø¤Î¥×¥Ã¥·¥åÄÌÃΤâ¹Ô¤¤¤Þ¤¹¡£¥á¥¸¥ã¡¼¤Ê Pushover ¤ä Pushbullet ¤Ï¤½¤ì¤¾¤ì IFTTT ¤ËÀìÍÑ¥Á¥ã¥Í¥ë¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤â¤¢¤êÊØÍø¤Ë°·¤¨¤Þ¤¹¡£Pushover ¤ÏÀìÍÑ¥¢¥É¥ì¥¹¤Ø¤Î¥á¡¼¥ëÁ÷¿®¤Ë¤è¤Ã¤ÆÄÌÃνèÍý¤ò¥­¥Ã¥¯¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£

¥á¡¼¥ë¤Ç¤ÎÄÌÃÎ

¼ê¸µ¤Ç»È¤¤´·¤ì¤¿ SendGrid ¤òÍøÍѤ·¤Æ¥á¡¼¥ë¤Ç¤ÎÄÌÃΤò¹Ô¤¤¤Þ¤¹¡£

»îºî 1

°Ê²¼¤ÎÍ×ÎΤǻîºî¤ò¹Ô¤¤¤Þ¤·¤¿¡£

  • »ÈÍѤ·¤¿¥½¥Õ¥È¥¦¥§¥¢»ñ»º
  • ¥¤¥ó¥¿¡¼¥Í¥Ã¥ÈÀܳ¤ÎÍøÍѤËȼ¤¤ÁõÃ֤˰ʲ¼¤Î¥¢¥À¥×¥¿¤òÄɲÃ
  • ½èÍý¤Îή¤ì
    1. ¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È 33330Hz, FFT ¥µ¥¤¥º 1024 ¤Ç½¸²»¤È¼þÇÈ¿ôʬÀϤò¥ë¡¼¥×¼Â¹Ô¤¹¤ë
    2. FFT ½èÍý¤Ë¤ª¤¤¤Æ¼¡¤ÎÂÓ°è¤Î¥Ô¡¼¥¯¼þÇÈ¿ô¤¬¸¡ÃΤµ¤ì¤ì¤Ð 1. ¤òÃæÃǤ· 3. ¤Ø°Ü¹Ô¤¹¤ë
      ¤¿¤À¤·¥Î¥¤¥º¤Ë¤è¤ë±Æ¶Á¤òÍÞ¤¨¤ë¤¿¤á½êÄê¤Î²ó¿ô°Ê¾å¤ÎϢ³¸¡ÃΤò¾ò·ï¤È¤¹¤ë
      • 9800Hz¡Á16000Hz¡Ê¸¤Å«·Ï¡Ë
      • 2000Hz¡Á4500Hz¡Ê¥Û¥¤¥Ã¥¹¥ëÁ´ÈÌ¡Ë
    3. Á°²ó¤ÎÄÌÃΤ«¤é½êÄê¤Î»þ´Ö¤¬·Ð²á¤·¤Æ¤¤¤ì¤Ð 4. ¤Ø¡£
      ·Ð²á¤·¤Æ¤¤¤Ê¤±¤ì¤Ð 1. ¤Ø¡ÊÄÌÃΤÎÉÑȯ¤ò²óÈò¡Ë
    4. Google ¥É¥é¥¤¥Ö¾å¤Î½êÄê¤Î¥¨¥ó¥È¥ê¤ËÂФ¹¤ë GET ¥ê¥¯¥¨¥¹¥È¤ò»î¹Ô¡£
      ¥ì¥¹¥Ý¥ó¥¹¥³¡¼¥É¤¬ 200 ¤Ê¤é 5. ¤Ø
      ¤½¤ì°Ê³°¤Ê¤é 1. ¤Ø¡ÊÄÌÃΤÎ̵¸ú²½¤ò¥ê¥â¡¼¥È¤«¤é²Äǽ¤È¤¹¤ë¤¿¤á¤ÎÁ¼ÃÖ¡Ë
      • ½êÄê¤Î¥¢¥«¥¦¥ó¥È¤Î Google ¥É¥é¥¤¥Ö¾å¤Î¥¨¥ó¥È¥ê¤Ø¤ÎÂè»°¼Ô¤«¤é¤Î¥¢¥¯¥»¥¹¤Ë¤ª¤¤¤Æ¤Ï¡¢Åö³º¥¨¥ó¥È¥ê¤Î¶¦Í­¤¬¥ª¥ó¤Î¾õÂ֤ʤé 200 ¤¬ÊÖ¤µ¤ì¡¢¶¦Í­¥ª¥Õ¤Î¾õÂ֤ʤé 302 ¤¬ÊÖ¤µ¤ì¤ë¡£¤³¤Î»ÅÍͤòÄ㥳¥¹¥È¤Ç¼è¤ê²ó¤»¤ë´Ê°×¥Õ¥é¥°¤È¤·¤ÆÍøÍÑ
    5. Twilio ¤Ø¼ê»ý¤Á¤ÎÅÅÏäΥ³¡¼¥ë¤ò¥ê¥¯¥¨¥¹¥È
      • º£²ó¤Ï¥³¡¼¥ë¤Î¤ß¤òÌÜŪ¤È¤·Ã»»þ´Ö¤Ç¥¿¥¤¥à¥¢¥¦¥È¤µ¤»¤ë
    6. SendGrid ¤Ø¼ê»ý¤Á Gmail ¥¢¥É¥ì¥¹¤Ø¤Î¥á¡¼¥ëÄÌÃΤò¥ê¥¯¥¨¥¹¥È
      • Gmail ¤Î¥Õ¥£¥ë¥¿ÀßÄê¤Ë¤è¤êÅö³º¥á¡¼¥ë¤Ï Pushover ÄÌÃÎ¥­¥Ã¥¯ÍѤΥ¢¥É¥ì¥¹¤ØÅ¾Á÷
    7. ¤Õ¤¿¤¿¤Ó 1. ¤Ø

ưºî¤ÎÍÍ»Ò

ư²è¡§2ʬ31Éá¡¡¡¢¨²»ÎÌÃí°Õ

¥½¡¼¥¹¥³¡¼¥É

Sonic06_FFT3

  • main.cpp
    
    // ½êÄê¤Î¼þÇÈ¿ô¿®¹æ¤ò½êÄê¤Î²ó¿ô°Ê¾åϢ³¸¡ÃΤ¹¤ë¤ÈÄÌÃΤò¹Ô¤¦
    
    #include "mbed.h"
    #include "rtos.h"
    #include "EthernetInterface.h"
    #include "HTTPClient.h"
    #include "FastAnalogIn.h"
    
    #define DEVELOP
    #ifdef DEVELOP
    #define dbg(...) printf(__VA_ARGS__)
    #else
    #define dbg(...)
    #endif
    
    //#define USE_DHCP
    #if !defined(USE_DHCP)
    #define IP      "192.168.0.113"
    #define GATEWAY "192.168.0.1"
    #define MASK    "255.255.255.0"
    #endif
    
    #define SAMPLE_RATE 33330
    // n >= 2, n = power of 2
    #define FFTSIZE 1024
    // length of ip >= 2+sqrt(n/2)
    const int IP_LEN = 4 + sqrt((double)(FFTSIZE/2));
    // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö
    const float SEC_PER_SAMPLEPOINT = 1.0 / SAMPLE_RATE;
    
    // ÄÌÃΤκÇû´Ö³ÖÉÃ
    #define INTERVAL_NOTIFICATION 180
    
    // ¸¤Å«·Ï¼þÇÈ¿ôÂÓ
    #define FREQ_LOW1   9800
    #define FREQ_HIGH1 16000
    
    // ¥Û¥¤¥Ã¥¹¥ë·Ï¼þÇÈ¿ôÂÓ
    #define FREQ_LOW2  2000
    #define FREQ_HIGH2 4500
    
    // ÂоݼþÇÈ¿ôϢ³¸¡Ãβó¿ôïçÃÍ
    #define MAXHITCOUNT 20
    
    // for Twilio
    #define TWILIO_SID  "AC1f7aa23e****************"
    #define TWILIO_AUTH "ef3638ca7*****************"
    #define URL_POSTDATA_TWILIO \
      "https://api.twilio.com/2010-04-01/Accounts/" TWILIO_SID "/Calls"
    #define REQUEST_HEADER_FOR_TWILIO \
      "Content-Type: "       "application/x-www-form-urlencoded"   "\r\n"
    #define POSTDATA_TWILIO \
      "To=%2B8190********" "&" \
      "From=%2B8150********" "&"  \
      "Url=http://demo.twilio.com/docs/voice.xml"  "&" \
      "Timeout=5"
    
    // for SendGrid
    #define SENDGRID_APIKEY "SG.UNFbQr_DQRmu8J********"
    #define REQUEST_HEADER_FOR_SENDGRID \
      "Authorization: Bearer " SENDGRID_APIKEY "\r\n" \
      "Content-Type: application/x-www-form-urlencoded\r\n"
    #define URL_POSTDATA_SENDGRID "https://api.sendgrid.com/api/mail.send.json"
    #define MAILTO    "********@gmail.com"
    #define MAILFROM  "mkttanabe2012@gmail.com"
    #define MAILSUBJECT "** ALERT [%s] **"
    #define MAILBODY  "%dHz"
    
    // Google ¥É¥é¥¤¥Ö¾å¤Î¥Õ¥é¥°¥¨¥ó¥È¥ê URL
    #define URL_FLAGFILE \
      "https://docs.google.com/spreadsheets/d/1FR_RaR_AsyPAsIYU****************"
    
    Ticker tick;
    double *recBufp = NULL;
    int countTick = 0;
    FastAnalogIn mic(p20);
    AnalogOut speaker(p18);
    DigitalOut led(LED4);
    
    osThreadId mainThreadID;
    EthernetInterface eth;
    HTTPClient http;
    
    void rdft(int n, int isgn, double *a, int *ip, double *w);
    
    void setDummyTime() {
      struct tm t;
      t.tm_sec = t.tm_min = t.tm_hour = t.tm_mday = t.tm_mon = 1;
      t.tm_year = 100;
      time_t seconds = mktime(&t);
      set_time(seconds);
    }
    
    int initNetwork() {
      int sts;
      led = 1;
      dbg("start eth.init\r\n" );
    #ifdef USE_DHCP
      sts = eth.init();
    #else
      sts = eth.init(IP, MASK, GATEWAY);
    #endif
      if (sts != 0) {
        dbg("ech.init error!\r\n" );
        return -1;
      }
      dbg("start eth.connect\r\n" );
      sts = eth.connect();
      if (sts != 0) {
        dbg("eth.connect error!\r\n" );
        return -2;
      }
      dbg("my IP Address = %s\r\n", eth.getIPAddress());
      led = 0;
      return 0;
    }
    
    // Google¥É¥é¥¤¥Ö¾å¤Î½êÄê¤Î¥Õ¥é¥°¥¨¥ó¥È¥ê¤ò¥Á¥§¥Ã¥¯
    int checkFlagFile() {
      char buf[8];
      for (int i = 0; i < 6; i++) {
        int sts = http.get(URL_FLAGFILE, buf, sizeof(buf),
              HTTP_CLIENT_DEFAULT_TIMEOUT);
        if (sts == HTTP_OK) {
          int rc = http.getHTTPResponseCode();
          // ¶¦Í­¥ª¥ó¤Ê¤é 200, ¥ª¥Õ¤Ê¤é 302
          dbg("Flag is %s\r\n", 
            (rc == 200) ? "enabled" :
            (rc == 302) ? "disabled" : "?????");
          return rc;
        }
        dbg("sts=%d retrying..\r\n", sts);
        wait(5);
      }
      return -1;
    }
    
    int httpsPost(const char *targetUrl,
          const char *postData,
          const char *optHeader,
          const char *authId,
          const char *authPass) {
      int sts;
      char buf[64];
      HTTPText dataToPost((char*)postData);
      HTTPText resData(buf, sizeof(buf));
      http.setHeader(optHeader);
    
      for (int i = 0; i < 3; i++) {
        dbg("request to [%s]..\r\n", targetUrl);
        http.basicAuth(authId, authPass);
        sts = http.post(targetUrl, dataToPost, &resData, HTTP_CLIENT_DEFAULT_TIMEOUT);
        if (sts == HTTP_OK) {
          dbg("received HTTPS response OK\r\n");
          dbg("head of data [%s]\r\n", buf);
          dbg("done\r\n\r\n");
          break;
        } else {
          dbg("HTTPS request error=%d, status=%d\r\n", sts, http.getHTTPResponseCode());
          dbg("head of data [%s]\r\n", buf);
          dbg("sts=%d retrying..\r\n", sts);
          wait(5);
        }
      }
      return sts;
    }
    
    int doFFT(double *FFTBuffer) {
      int ip[IP_LEN];
      double *w = (double*)malloc(sizeof(double) * (FFTSIZE / 2));
      ip[0] = 0;
      rdft(FFTSIZE, 1, FFTBuffer, ip, w);
    
      double maxAmp = 0;
      int index = 0;
      int endIdx = FFTSIZE/2;
      for (int i = 0; i < endIdx ; i++) {
        double a = FFTBuffer[i*2]; // ¼ÂÉô
        double b = FFTBuffer[i*2 + 1]; // µõÉô
        // a+ib ¤ÎÀäÂÐÃÍ ¢å a^2 + b^2 = r ¤¬¿¶ÉýÃÍ
        double r = sqrt(a*a + b*b);
        if (r > maxAmp) {
          maxAmp = r;
          index = i;
        }
      }
      float freq = index * SAMPLE_RATE / FFTSIZE;
      free(w);
      return (int)freq;
    }
    
    // ¥µ¥ó¥×¥ê¥ó¥°
    void flip() {
      // AnalogIn.read() ¤ÎÃÍÈÏ°Ï¤Ï 0¡Á1.0 ¤Ë¤Ä¤­Ãæ¿´Ãͤò 0 ¤Ë
      recBufp[countTick++] = mic.read() - 0.5;
      if (countTick == FFTSIZE) {
        tick.detach();
        countTick = 0;
        osSignalSet(mainThreadID, 1); // ½¸²»´°Î»ÄÌÃÎ
      }
    }
    
    // ÄÌÃÎ
    int checkAndNotify(int freq, time_t *lastNotificationTime) {
      int pastSeconds = time(NULL) - *lastNotificationTime;
      // Á°²ó¤ÎÄÌÃΤ«¤é½êÄê¤Î»þ´Ö¤¬·Ð²á¤Î¾ì¹ç¤Î¤ß¼¡½èÍý¤Ø
      if (pastSeconds > INTERVAL_NOTIFICATION) {
        // ÄÌ¿®½èÍý¤Î¤¿¤á¤Ë ½¸²»¡¦FFTÍѥХåե¡¤ò°ìö³«Êü
        free(recBufp);
        recBufp = NULL;
        // Google ¥É¥é¥¤¥Ö¾å¤Î½êÄê¤Î¥Õ¥é¥°¥¨¥ó¥È¥ê¤ò¥Á¥§¥Ã¥¯
        // ¶¦Í­¤¬¥ª¥ó¤Ê¤é 200 ¤¬ÊÖ¤ê ¥ª¥Õ¤Ê¤é ¤¬ÊÖ¤ë
        dbg("checking flagFile..\r\n");
        int rc = checkFlagFile();
        dbg("rc=%d\r\n", rc);
        if (rc == 200) {
          for (int i = 0; i < 8; i++) {
            led = !led;
            wait_ms(200);
          }
          // Twilio ¤Ç·ÈÂÓÅÅÏäò¥³¡¼¥ë
          httpsPost(URL_POSTDATA_TWILIO, POSTDATA_TWILIO,
            REQUEST_HEADER_FOR_TWILIO, TWILIO_SID, TWILIO_AUTH);
    
          // SendGrid ¤Ç¥á¡¼¥ëÁ÷¿®
          char b[256];
          snprintf(b, sizeof(b), "from=" MAILFROM
              "&to=" MAILTO "&subject=" MAILSUBJECT
              "&text=" MAILBODY, eth.getIPAddress(), freq);
          dbg("mes=[%s]\r\n", b);
          
          httpsPost(URL_POSTDATA_SENDGRID, b,
            REQUEST_HEADER_FOR_SENDGRID, NULL, NULL);
    
          // º£²óÄÌÃλþ¹ï¤òÊÝ»ý
          *lastNotificationTime = time(NULL);
        }
        recBufp = (double*)malloc(sizeof(double) * FFTSIZE);
        return 1;
      }
      // Á°²ó¤Îȯ¸Æ¤«¤é½êÄê¤Î»þ´Ö¤¬·Ð²á¤·¤Æ¤¤¤Ê¤¤
      dbg("pastSeconds=%d..\r\n", pastSeconds);   
      return 0;
    }
    
    int main()
    {
      mainThreadID = osThreadGetId();
      setDummyTime();
      initNetwork();
      // ½¸²»ÍÑ·óFFTÍѥХåե¡
      recBufp = (double*)malloc(sizeof(double) * FFTSIZE);
      time_t lastNotificationTime = 0;
      dbg("sampleRate=%dHz interval=%fsec\r\n", SAMPLE_RATE, SEC_PER_SAMPLEPOINT);
      
      tick.attach(&flip, SEC_PER_SAMPLEPOINT);
      // ÂоݼþÇÈ¿ô¿®¹æ¸¡½Ð¿ô
      int hitCount = 0;
    
      while (1) {
        // ¥µ¥ó¥×¥ê¥ó¥°´°Î»¤Þ¤ÇÂÔµ¡
        osSignalWait(1, osWaitForever);
        // ¥Ô¡¼¥¯¼þÇÈ¿ô¤òÆÀ¤ë
        int freq = doFFT(recBufp);
        if (freq > FREQ_LOW1 && freq <= FREQ_HIGH1 ||
          freq > FREQ_LOW2 && freq <= FREQ_HIGH2) {
          dbg("detected! %dHz\r\n", freq);
          led = 1;
          // ½êÄê²ó¿ô°Ê¾åϢ³¸¡ÃΤξì¹ç¤Î¤ßÄÌÃνèÍý¤Ø
          if (hitCount++ > MAXHITCOUNT) {
            hitCount = 0;
            checkAndNotify(freq, &lastNotificationTime);
          }
        } else {
          if (hitCount > 0) {
            dbg("ignored..\r\n");
          }
          hitCount = 0;
          led = 0;
        }
        tick.attach(&flip, SEC_PER_SAMPLEPOINT);
      }
      if (recBufp) {
        free(recBufp);
      }
      return 0;
    }
    
    

»îºî 1 ¤ÎÌäÂêÅÀ¤Ë¤Ä¤¤¤Æ

»îºî 1 ¤Ç¤Ï½¸²»¤·¤¿¿®¹æ¤ÎÃæ¤Ç¤â¤Ã¤È¤â¿¶Éý¤ÎÂ礭¤¤¼þÇÈ¿ô¡Ê¥Ô¡¼¥¯¼þÇÈ¿ô¡Ë¤òɾ²Á¤·¤Æ¤ª¤ê¡¢¤Þ¤¿¡¢ÂоÝÈϰϤμþÇÈ¿ô¤¬ FFT ½èÍý¤Ë¤ª¤¤¤Æ½êÄê¤Î²ó¿ô°Ê¾å "Ϣ³¤·¤Æ" ¸¡ÃΤµ¤ì¤ë¤³¤È¤òȽÄê¾ò·ï¤È¤·¤Æ¤¤¤Þ¤¹¡£¤½¤Î¤¿¤á¼þÊÕ²»¤ÎÂ礭¤Ê´Ä¶­¤Ç¤ÏÂоݲ»¤ò¼è¤ê¤³¤Ü¤¹²ÄǽÀ­¤¬¤¢¤ê¡¢ÁõÃÖ¡¦²»¸»´Ö¤Îµ÷Î¥¤¬È½Äê¤Ë±Æ¶Á¤òµÚ¤Ü¤¹Åٹ礤¤â¾¯¤Ê¤¯¤¢¤ê¤Þ¤»¤ó¡£¤³¤ÎÅÀ¤Î²þÁ±¤¬É¬Íפȹͤ¨¤Þ¤·¤¿¡£

²¼¤Îư²è¤Ë¤ÏÀŤ«¤Ê¾õ¶·¤ÈÁû¤¬¤·¤¤¾õ¶·¤Ç¤ÎÁõÃÖ¤ÎÈ¿±þ¤ò³Îǧ¤·¤¿ÍͻҤò¼ý¤á¤Æ¤¤¤Þ¤¹¡£¤³¤Î¤è¤¦¤Ë¼þ°Ï¤Î²»¤¬Â礭¤¤¤ÈÉ餱¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

ư²è¡§41Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¡Ê»÷¤¿Ïá§Amazon Echo ¤¬È¿±þ¤·¤Ê¤¤¤Î¤ÇÂçÀ¼¤ÇÅÜÌĤë¿Í¡§Youtube ¤è¤ê¡Ë

»îºî 2

°Ê²¼¤ÎÆâÍÆ¤Ç¥×¥í¥°¥é¥à¤Î½¤Àµ¤ò¹Ô¤¤¤Þ¤·¤¿¡£

  1. ¥Ô¡¼¥¯¼þÇÈ¿ô¥Ù¡¼¥¹¤ÎȽÄê¤òÊѹ¹
    • ¥Ô¡¼¥¯¼þÇÈ¿ô¤Î»²¾È¤ËÂ夨¿®¹æ¤Ë´Þ¤Þ¤ì¤ëÂоÝÈϰϤμþÇÈ¿ôÀ®Ê¬¤òǽưŪ¤Ë¥Á¥§¥Ã¥¯¤¹¤ë¡£¤³¤ì¤Ë¤è¤ê¼þÊÕ²»¤Ë¤è¤ë´³¾Ä¤òÍÞ¤¨¤é¤ì¤ë
  2. ¸¡ÃΤιͤ¨Êý
    • ¾åµ­¤Î¥Á¥§¥Ã¥¯¤Ë¤ª¤¤¤Æ½êÄê¤Î¥ì¥Ù¥ë°Ê¾å¤Î¿¶ÉýÃͤòȼ¤¦¤â¤Î¤Îȯ¸«¤ò¤â¤Ã¤Æ¸¡ÃΤȤߤʤ¹¡£¤³¤ì¤Ë¤è¤êÂоݲ»¤¬Èù¼å¤Ç¤â¥Ô¥Ã¥¯¥¢¥Ã¥×¤¬²Äǽ¤È¤Ê¤ë
  3. Ϣ³À­¤ÎȽÄêÊýË¡
    • ²»¤ÎϢ³À­¤ÎȽÄê¤Ï¡ÖÂоݼþÇÈ¿ô¤¬½êÄê¤Î²ó¿ô°Ê¾å³¤±¤Æ¥Ô¡¼¥¯¸¡½Ð¤µ¤ì¤ë¤³¤È¡×¤ò¾ò·ï¤È¤·¤Æ¤¤¤¿¤¬¡¢¤³¤ì¤ò¡ÖÁ°²ó¤Î¸¡½Ð¤«¤é½êÄê»þ´ÖÆâ¤ÎºÆ¸¡½Ð¤¬½êÄê¤Î²ó¿ô°Ê¾å·«¤êÊÖ¤µ¤ì¤ë¤³¤È¡×¤ËÊѹ¹¤¹¤ë¡£¤³¤ì¤Ë¤è¤êÂоݲ»¤¬ÅÓÀڤ줬¤Á¤Ç¤âÀÚ¤ê¼Î¤Æ¤Î²ÄǽÀ­¤òÍÞ¤¨¤é¤ì¤ë
  4. ÂоݼþÇÈ¿ôÈϰϤθ«Ä¾¤·
    • ½¾Íè¤Ï 2000Hz¡Á4500Hz¡Ê¥Û¥¤¥Ã¥¹¥ëÁ´È̡ˤª¤è¤Ó 9800Hz¡Á16000Hz¡Ê¸¤Å«·Ï¡Ë¤Î¤Õ¤¿¤Ä¤Î¥ì¥ó¥¸¤òÂоݤȤ·¤Æ¤¤¤¿¤¬¡¢Á°¼Ô¤Ï ´ð²»¤È¤·¤ÆÆü¾ïÀ¸³è¤ËÅо줹¤ëµ¡²ñ¤¬¾¯¤Ê¤¯¤Ê¤¤¤¿¤áº®Íð¤Ë¤Ä¤Ê¤¬¤ë¥±¡¼¥¹¤âÁÛÄꤵ¤ì¤ë¡£¤½¤³¤Ç¡Ö¾å²»¡×¤Î¸ºß¤ËÃíÌܤ·¤¿
      • Çܲ» - wikipedia
        ¾å²» ²»¤òÀµ¸¹ÇȤËʬ²ò¤·¤¿¤È¤­¤Ë¡¢ºÇ¤âÄ㤤¼þÇÈ¿ô¤Ç¤¢¤ë´ð²»°Ê³°¤ÎÀ®Ê¬¤ò ¾å²»¡Ê¤¸¤ç¤¦¤ª¤ó¡¢overtone¡Ë¤È¤¤¤¦¡£¤³¤Î¾å²»¤Ë¤ÏÇܲ»¤Ç¤Ê¤¤²»¤â´Þ¤Þ¤ì¤ë¡£ Çܲ»¤Ï¡¢´ð²»¤Î¡Ê2°Ê¾å¤Î¡ËÀ°¿ôÇܤμþÇÈ¿ô¤Î¾å²»¤Ç¤¢¤ë¤È¸À¤¤´¹¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
      • ¡Ö¤É¤Î¤è¤¦¤Ê²»¤ò»È¤¦¤«¡×¹à¤Ë·ÇºÜ¤Î³Æ²»¸»¤Î¼þÇÈ¿ôʬÉÛ¡Ê¥¹¥Ú¥¯¥È¥ë¡Ë¿Þ¤ò»²¾È¤¹¤ë¤ÈÇܲ»¤ò´Þ¤à¾å²»¤¬¹â¼þÇÈÎΰè¤Þ¤ÇË­¤«¤ËÌĤäƤ¤¤ëÍͻҤ¬¸«¤Æ¤È¤ì¤ë¡£È´¿è¤ò°Ê²¼¤Ë¼¨¤¹¡£¢¨¿Þ¤Î½Ä¼´ºÇÂçÃÍ¤Ï 15kHz
      • ¾åµ­ 1, 2 ¤ÎÁ¼Ã֤ˤè¤ê¿¶Éý¤Î¾®¤µ¤ÊÀ®Ê¬¤Ç¤¢¤Ã¤Æ¤âºÙ¤«¤¯¸¡ÃβÄǽ¤È¤Ê¤ëÇØ·Ê¤â¤¢¤ê¡¢¼Â¸³Åª¤Ë 10000Hz °Ê¾å¤Î²»¤òÂоݤȤ¹¤ë²þÄû¤ò²Ã¤¨¤¿¡£¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È 33330Hz ¤Ç½¸²»¤·¤Æ¤¤¤ë¤¿¤áÍýÏÀ¾å 16600Hz ÉÕ¶á¤Þ¤Ç½¦¤¦¤³¤È¤¬²Äǽ¡¡ →¥µ¥ó¥×¥ê¥ó¥°ÄêÍý
        ¡Ê»ÈÍѤ·¤Æ¤¤¤ë¥Þ¥¤¥¯¥â¥¸¥å¡¼¥ë¤Î¥«¥Ð¡¼¤¹¤ë²»°è¤Ï¸ø¾Î¡Ö100Hz¡Á15kHz¡× →¥Ç¡¼¥¿¥·¡¼¥È¡Ë
      • ¤à¤í¤ó¼þ°Ï¤ÎÀ¸³è²»Åù¤¬ 10000Hz °Ê¾å¤Î¾å²»¤òȯÀ¸¤µ¤»¤ë¤³¤È¤â¤¢¤ë¤¬¡¢°Õ¿ÞŪ¤Ê¤â¤Î¤Ç¤Ê¤¤¸Â¤ê¾åµ­ 3 ¤ÎϢ³À­¥Á¥§¥Ã¥¯¤ò¤¹¤êÈ´¤±¤ë²ÄǽÀ­¤Ï¼ÂÍѾåÄ㤤¤È¹Í¤¨¤é¤ì¤ë

ưºî¤ÎÍÍ»Ò

ư²è¡§2ʬ3Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¥½¡¼¥¹¥³¡¼¥É

¡ÊÍøÍѤ¹¤ë¥×¥Ã¥·¥åÄÌÃÎ¥µ¡¼¥Ó¥¹¤ò Pushover ¤«¤é Pushbullet ¤ËÊѹ¹¤·¤Æ¤¤¤Þ¤¹¡Ë

Sonic06_FFT3

  • main.cpp
    
    // ½êÄê¤Î¼þÇÈ¿ô¿®¹æ¤ò½êÄê¤Î²ó¿ô°Ê¾åϢ³¸¡ÃΤ¹¤ë¤ÈÄÌÃΤò¹Ô¤¦
    // ²þÄûÈÇ¡§Ï¢Â³À­¤Î¤¢¤ë 10kHz °Ê¾å¤Î¼þÇÈ¿ôÀ®Ê¬¤ò¥¿¡¼¥²¥Ã¥È¤È¤¹¤ë
    
    #include "mbed.h"
    #include "rtos.h"
    #include "EthernetInterface.h"
    #include "HTTPClient.h"
    #include "FastAnalogIn.h"
    
    #define DEVELOP
    #ifdef DEVELOP
    #define dbg(...) printf(__VA_ARGS__)
    #else
    #define dbg(...)
    #endif
    
    //#define USE_DHCP
    #if !defined(USE_DHCP)
    #define IP      "192.168.0.113"
    #define GATEWAY "192.168.0.1"
    #define MASK    "255.255.255.0"
    #endif
    
    #define SAMPLE_RATE 33330
    // n >= 2, n = power of 2
    #define FFTSIZE 1024
    // length of ip >= 2+sqrt(n/2)
    const int IP_LEN = 4 + sqrt((double)(FFTSIZE/2));
    // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö
    const float SEC_PER_SAMPLEPOINT = 1.0 / SAMPLE_RATE;
    
    // ÄÌÃΤκÇû´Ö³ÖÉÃ
    #define INTERVAL_NOTIFICATION 180
    
    #define MAXHITCOUNT 30
    short indexOf10000Hz;
    
    // for Twilio
    #define TWILIO_SID  "AC1f7aa23e****************""
    #define TWILIO_AUTH "ef3638ca7****************""
    #define URL_POSTDATA_TWILIO \
        "https://api.twilio.com/2010-04-01/Accounts/" TWILIO_SID "/Calls"
    #define REQUEST_HEADER_FOR_TWILIO \
      "Content-Type: "       "application/x-www-form-urlencoded"   "\r\n"
    #define POSTDATA_TWILIO \
      "To=%2B8190********"" "&" \
      "From=%2B8150********"" "&"  \
      "Url=http://demo.twilio.com/docs/voice.xml"  "&" \
      "Timeout=5"
    
    // for SendGrid
    #define SENDGRID_APIKEY "SG.UNFbQr_DQRmu8J********"
    #define REQUEST_HEADER_FOR_SENDGRID \
      "Authorization: Bearer " SENDGRID_APIKEY "\r\n" \
      "Content-Type: application/x-www-form-urlencoded\r\n"
    #define URL_POSTDATA_SENDGRID "https://api.sendgrid.com/api/mail.send.json"
    #define MAILTO    "********@gmail.com"
    #define MAILFROM  "mkttanabe2012@gmail.com"
    #define MAILSUBJECT "** ALERT [%s] **"
    #define MAILBODY  "%dHz"
    
    // for IFTTT
    #define IFTTT_KEY "dSIwDguVEYfZ1SgiISL"********@"
    #define IFTTT_EVENT_NAME "ALERT"
    #define REQUEST_HEADER_FOR_IFTTT \
      "Content-Type: application/json\r\n"
    #define URL_POSTDATA_IFTTT  "https://maker.ifttt.com/trigger/" \
          IFTTT_EVENT_NAME "/with/key/" IFTTT_KEY
    
    // Google ¥É¥é¥¤¥Ö¾å¤Î¥Õ¥é¥°¥¨¥ó¥È¥ê URL
    #define URL_FLAGFILE \
      "https://docs.google.com/spreadsheets/d/1FR_RaR_AsyPAsIYU****************"
    
    Ticker tick;
    double *recBufp = NULL;
    int countTick = 0;
    FastAnalogIn mic(p20);
    AnalogOut speaker(p18);
    DigitalOut led(LED4);
    
    osThreadId mainThreadID;
    EthernetInterface eth;
    HTTPClient http;
    
    void rdft(int n, int isgn, double *a, int *ip, double *w);
    
    void setDummyTime() {
      struct tm t;
      t.tm_sec = t.tm_min = t.tm_hour = t.tm_mday = t.tm_mon = 1;
      t.tm_year = 100;
      time_t seconds = mktime(&t);
      set_time(seconds);
    }
    
    int initNetwork() {
      int sts;
      led = 1;
      dbg("start eth.init\r\n" );
    #ifdef USE_DHCP
      sts = eth.init();
    #else
      sts = eth.init(IP, MASK, GATEWAY);
    #endif
      if (sts != 0) {
        dbg("ech.init error!\r\n" );
        return -1;
      }
      dbg("start eth.connect\r\n" );
      sts = eth.connect();
      if (sts != 0) {
        dbg("eth.connect error!\r\n" );
        return -2;
      }
      dbg("my IP Address = %s\r\n", eth.getIPAddress());
      led = 0;
      return 0;
    }
    
    // Google¥É¥é¥¤¥Ö¾å¤Î½êÄê¤Î¥Õ¥é¥°¥¨¥ó¥È¥ê¤ò¥Á¥§¥Ã¥¯
    int checkFlagFile() {
      char buf[8];
      for (int i = 0; i < 6; i++) {
        int sts = http.get(URL_FLAGFILE, buf, sizeof(buf),
              HTTP_CLIENT_DEFAULT_TIMEOUT);
        if (sts == HTTP_OK) {
          int rc = http.getHTTPResponseCode();
          // ¶¦Í­¥ª¥ó¤Ê¤é 200, ¥ª¥Õ¤Ê¤é 302
          dbg("Flag is %s\r\n", 
            (rc == 200) ? "enabled" :
            (rc == 302) ? "disabled" : "?????");
          return rc;
        }
        dbg("sts=%d retrying..\r\n", sts);
        wait(5);
      }
      return -1;
    }
    
    int httpsPost(const char *targetUrl,
          const char *postData,
          const char *optHeader,
          const char *authId,
          const char *authPass) {
      int sts;
      char buf[64];
      HTTPText dataToPost((char*)postData);
      HTTPText resData(buf, sizeof(buf));
      http.setHeader(optHeader);
      
      for (int i = 0; i < 3; i++) {
        //dbg("postData=[%s]\r\n", postData);
        dbg("request to [%s]..\r\n", targetUrl);
        http.basicAuth(authId, authPass);
        sts = http.post(targetUrl, dataToPost, &resData, HTTP_CLIENT_DEFAULT_TIMEOUT);
        if (sts == HTTP_OK) {
          dbg("received HTTPS response OK\r\n");
          dbg("head of data [%s]\r\n", buf);
          dbg("done\r\n\r\n");
          break;
        } else {
          dbg("HTTPS request error=%d, status=%d\r\n", sts, http.getHTTPResponseCode());
          dbg("head of data [%s]\r\n", buf);
          dbg("sts=%d retrying..\r\n", sts);
          wait(5);
        }
      }
      return sts;
    }
    
    int doFFT(double *FFTBuffer) {
      int ip[IP_LEN];
      double *w = (double*)malloc(sizeof(double) * (FFTSIZE / 2));
      ip[0] = 0;
      rdft(FFTSIZE, 1, FFTBuffer, ip, w);
      bool found = false;
      float freq;
      int endIdx = FFTSIZE/2;
      for (int i = endIdx - 1; i >= indexOf10000Hz; i--) {
        freq = i * SAMPLE_RATE / FFTSIZE;
        double a = FFTBuffer[i*2];
        double b = FFTBuffer[i*2 + 1];
        double mag = sqrt(a*a + b*b);
        if (mag > 0.2) {
          dbg("freq=%f mag=%f\r\n", freq, mag);
          found = true;
          break;
        }
      }
      free(w);
      return (found) ? (int)freq : 0;
    }
    
    // ¥µ¥ó¥×¥ê¥ó¥°
    void flip() {
      // AnalogIn.read() ¤ÎÃÍÈÏ°Ï¤Ï 0¡Á1.0 ¤Ë¤Ä¤­Ãæ¿´Ãͤò 0 ¤Ë
      recBufp[countTick++] = mic.read() - 0.5;
      if (countTick == FFTSIZE) {
        tick.detach();
        countTick = 0;
        osSignalSet(mainThreadID, 1); // ½¸²»´°Î»ÄÌÃÎ
      }
    }
    
    // ÄÌÃÎ
    int checkAndNotify(int freq, time_t *lastNotificationTime) {
      int pastSeconds = time(NULL) - *lastNotificationTime;
      // Á°²ó¤ÎÄÌÃΤ«¤é½êÄê¤Î»þ´Ö¤¬·Ð²á¤Î¾ì¹ç¤Î¤ß¼¡½èÍý¤Ø
      if (pastSeconds > INTERVAL_NOTIFICATION) {
        // ÄÌ¿®½èÍý¤Î¤¿¤á¤Ë ½¸²»¡¦FFTÍѥХåե¡¤ò°ìö³«Êü
        free(recBufp);
        recBufp = NULL;
        // Google ¥É¥é¥¤¥Ö¾å¤Î½êÄê¤Î¥Õ¥é¥°¥¨¥ó¥È¥ê¤ò¥Á¥§¥Ã¥¯
        // ¶¦Í­¤¬¥ª¥ó¤Ê¤é 200 ¤¬ÊÖ¤ê ¥ª¥Õ¤Ê¤é ¤¬ÊÖ¤ë
        dbg("checking flagFile..\r\n");
        int rc = checkFlagFile();
        dbg("rc=%d\r\n", rc);
        if (rc == 200) {
          for (int i = 0; i < 8; i++) {
            led = !led;
            wait_ms(200);
          }
          // Twilio ¤Ç·ÈÂÓÅÅÏäò¥³¡¼¥ë
          httpsPost(URL_POSTDATA_TWILIO, POSTDATA_TWILIO,
            REQUEST_HEADER_FOR_TWILIO, TWILIO_SID, TWILIO_AUTH);
    
          // SendGrid ¤Ç¥á¡¼¥ëÁ÷¿®
          char b[256];
          snprintf(b, sizeof(b), "from=" MAILFROM
              "&to=" MAILTO "&subject=" MAILSUBJECT
              "&text=" MAILBODY, eth.getIPAddress(), freq);
          dbg("mes=[%s]\r\n", b);
          httpsPost(URL_POSTDATA_SENDGRID, b,
            REQUEST_HEADER_FOR_SENDGRID, NULL, NULL);
    
          // IFTTT ·Ðͳ¤Ç Pushbullet ÄÌÃΤò¥­¥Ã¥¯
          snprintf(b, sizeof(b),
            "{\"value1\":\"ALERT [%s]\", \"value2\":\"%dHz\", \"value3\":\"\"}\r\n",
            eth.getIPAddress(), freq);
          httpsPost(URL_POSTDATA_IFTTT, b,
            REQUEST_HEADER_FOR_IFTTT, NULL, NULL);
    
          // º£²óÄÌÃλþ¹ï¤òÊÝ»ý
          *lastNotificationTime = time(NULL);
        }
        recBufp = (double*)malloc(sizeof(double) * FFTSIZE);
        return 1;
      }
      // Á°²ó¤Îȯ¸Æ¤«¤é½êÄê¤Î»þ´Ö¤¬·Ð²á¤·¤Æ¤¤¤Ê¤¤
      dbg("pastSeconds=%d..\r\n", pastSeconds);   
      return 0;
    }
    
    int main()
    {
       dbg("**** TARGET FREQUENCY MODE ****\r\n");
       int endIdx = FFTSIZE/2 - 1;
       for (int i = 0; i <= endIdx; i++) {
        float freq0 = i * SAMPLE_RATE / FFTSIZE;
        // 10kHz °Ê¾å¤Î¹â¼þÇȲ»¤ò¥¿¡¼¥²¥Ã¥È¤È¤¹¤ë
        if (freq0 >= 10000) {
          indexOf10000Hz = i;
          float freq1 = endIdx * SAMPLE_RATE / FFTSIZE;
          dbg("idx0=%d freq=%f\r\nidx1=%d freq=%f\r\n",
              i, freq0, endIdx, freq1);
          break;
        }
      }
      mainThreadID = osThreadGetId();
      setDummyTime();
      initNetwork();
      // ½¸²»ÍÑ·óFFTÍѥХåե¡
      recBufp = (double*)malloc(sizeof(double) * FFTSIZE);
      time_t lastNotificationTime = 0;
      
      dbg("sampleRate=%dHz interval=%fsec\r\n", SAMPLE_RATE, SEC_PER_SAMPLEPOINT);
      
      tick.attach(&flip, SEC_PER_SAMPLEPOINT);
      // ÂоݼþÇÈ¿ô¿®¹æ¸¡½Ð¿ô
      int hitCount = 0;
      time_t prevHitTime = 0;
      while (1) {
        osSignalWait(1, osWaitForever);
        // ´Æ»ëÂоݤȤ¹¤ë¼þÇÈ¿ôÎΰè¤ÎÀ®Ê¬¤¬½êÄê¥ì¥Ù¥ë°Ê¾å¤Î¿¶Éý¤Ê¤é¤½¤Î¼þÇÈ¿ô¡¢
        // ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð 0 ¤¬ÊÖ¤ë
        int freq = doFFT(recBufp);
        if (freq != 0) {
          // Á°²ó¸¡½Ð¤«¤é1ÉÃ°ÊÆâ¤ÎºÆ¸¡½Ð¤Ê¤é¥«¥¦¥ó¥È¥¢¥Ã¥×
          if (time(NULL) - prevHitTime <= 1) {
            // ½êÄê¤Î²ó¿ô°Ê¾å¸¡ÃΤξì¹ç¤ÏÄÌÃνèÍý¤Ø
            if (++hitCount >= MAXHITCOUNT) {
              dbg("checkAndNotify\r\n");
              checkAndNotify(freq, &lastNotificationTime);
              hitCount = 0;   
            }
          } else {
            hitCount = 1;
            dbg("restart\r\n");
          }
          prevHitTime = time(NULL);
        }
        tick.attach(&flip, SEC_PER_SAMPLEPOINT);
      }
      if (recBufp) {
        free(recBufp);
      }
      return 0;
    }
    
    

2. Ãå¿®²»¤Ç±ó³ÖÁàºî¤ò¹Ô¤¦¤·¤¯¤ß¤òºî¤ë

¼«Âð¤Î¸ÇÄêÅÅÏõ¡¤ÎÃå¿®²»¤ò¥È¥ê¥¬¡¼¤Ë½èÍý¤ò¹Ô¤¦¤·¤¯¤ß¤ò¹Í¤¨¤Þ¤·¤¿¡£¼¡¤Î¥¤¥á¡¼¥¸¤Ç¤¹¡£

  • ¼ê»ý¤Á¤Î·ÈÂÓÅÅÏäʤɽêÄê¤ÎÅÅÏÃÈֹ椫¤é¤Î¥³¡¼¥ë¤ËÂФ¹¤ë¸ÇÍ­¤ÎÃå¿®²»¤ò¼«Âð¸ÇÄêÅÅÏäØÀßÄꤷ¤Æ¤ª¤¯
  • ÅÅÏõ¡¤Î¦¤ËÀßÃÖ¤·¤¿ÁõÃÖ¤ÏÅö³ºÃå¿®²»¤Ë¤è¤ë¥³¡¼¥ë¤òÂÔ¤Á³¤±¤ë
  • ÁõÃ֤ϽêÄê²ó¿ô¤Î¥³¡¼¥ë¤òϢ³¤·¤Æ¸¡ÃΤ¹¤ë¤È½êÄê¤Îµ¡´ï¤Ø¤ÎÄÌÅŤò¥ª¥ó¡¿¥ª¥Õ¤¹¤ë
»ÈÅӤȤ·¤ÆËÉÈÈÌÜŪ¤Ç¤Î²°Æâ¾ÈÌÀ¤Î±ó³ÖÁàºî¤Ê¤É¤¬¹Í¤¨¤é¤ì¤ë¤Ç¤·¤ç¤¦¡£

²áµî¤Î»î¤ß¤È¤ÎÈæ³Ó

¼ê¸µ¤Ç²áµî¤Ë²¿ÅÙ¤«Æ±Íͤαó³ÖÁàºî¤ò»î¤ß¤¿¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¤¤¤º¤ì¤â¥¤¥ó¥¿¡¼¥Í¥Ã¥È¾å¤Î¥µ¡¼¥Ó¥¹¤òÍøÍѤ·¤ÆÁõÃÖ¤ØÄÌÃΤò¹Ô¤¤¡¢¤½¤ì¤ò¥È¥ê¥¬¡¼¤Ë½èÍý¤ò¹Ô¤¦¤â¤Î¤Ç¤¹¡£

¤³¤ì¤é¤Ï¤¤¤º¤ì¤â¤ª¤ª¤à¤Í´üÂÔÄ̤ê¤Ëư¤­¤Þ¤·¤¿¤¬¡¢°ìÊý¤Ç¼¡¤Î¤è¤¦¤Ê¥¸¥ì¥ó¥Þ¤â¤¢¤ê¤Þ¤·¤¿¡£

  • ³°Éô¥µ¡¼¥Ó¥¹Â¦½èÍý¤ÎÃÙ±äȯÀ¸¤ä°ì»þÄä»ß¤Î²ÄǽÀ­¤ò²óÈò¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡§ÌäÂê Âç
  • ±ó³ÖÁàºî¤Ë¤Ï¥¤¥ó¥¿¡¼¥Í¥Ã¥ÈÀܳ´Ä¶­¤¬É¬¿Ü¡§ÌäÂê Ãæ
  • ¥¯¥é¥¤¥¢¥ó¥È¥¢¥×¥ê¡ÊWeb¥Ö¥é¥¦¥¶¤ò´Þ¤à¡Ë¤ÎÁàºî¤Ë¼ê´Ö¤¬¤«¤«¤ë¡§ÌäÂê ¾®

¤½¤ì¤ËÂФ·¤Æ¡¢ÁõÃ֤ؤÎÄÌÃΤˡֲ»¡×¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤Ï¼¡¤Î¥á¥ê¥Ã¥È¤¬µó¤²¤é¤ì¤Þ¤¹¡£

  • ºÒ³²»þÅù¤ÎÆÃ¼ì¤Ê¾õ¶·°Ê³°¤Ç¤ÎȯÃå¿®¾å¤Î¥È¥é¥Ö¥ë¤Î²ÄǽÀ­¤Ï¤Û¤ÜÅÙ³°»ë¤Ç¤­¤ë
  • ȯÃå¿®¤Ë¤Ï¥Í¥Ã¥ÈÀܳ´Ä¶­¤âÆÃÊ̤ʥ¢¥×¥ê¥±¡¼¥·¥ç¥ó¤âÉÔÍ×
  • ȯ¿®ÅÅÏÃÈÖ¹æ¤Ë¤³¤À¤ï¤é¤Ê¤±¤ì¤Ð·ÈÂÓÅÅÏõ¡¤ò·È¹Ô¤¹¤ëɬÍפâ¤Ê¤¤

¤³¤¦¤¤¤Ã¤¿ÆÃŤò³è¤«¤·¤¦¤Þ¤¯»È¤¨¤ÐÍ­ÍѤʥġ¼¥ë¤È¤Ê¤ê¤½¤¦¤Ç¤¹¡£

½àÈ÷

¸½ºß¼«Âð¤Ç¤Ï¸ÇÄêÅÅÏõ¡¤È¤·¤Æ¥æ¥Ë¥Ç¥ó¼ÒÀ½¤Î¡ÖUCT-002¡×¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£

¥È¥ê¥¬¡¼¤È¤¹¤ëÃå¿®²»¤È¤·¤Æ¡¢¤³¤Î UCT-002 ¤Î¡Ö¥Ñ¥¿¡¼¥ó2¡×¤òÁª¤Ó¤Þ¤·¤¿¡£¼¡¤Î¤è¤¦¤Ê²»¤Ç¤¹¡£

  • ²»¤ÎÍÍ»Ò
  • ÇÈ·Á¤Î³µ´Ñ¡ÊAudacity ¤Ë¤è¤ë¡Ë
  • ¼þÇÈ¿ôʬÉÛ
ÆÃħ¤ò¤Þ¤È¤á¤Æ¤ß¤Þ¤¹¡£

  • 1ÉôÖȯ¿¶ ¡Á 2ÉôÖ̵²» ¤ò·«¤êÊÖ¤¹
  • Ê£¿ô¤Î¼þÇÈ¿ô¤Î²»¤ò¾®¹ï¤ß¤Ëȯ¿¶
  • mbed ¾å¤ÇÁ°½Ð¤Î¥×¥í¥°¥é¥à¤ò»È¤Ã¤Æ¥Ô¡¼¥¯¼þÇÈ¿ô¤ò³Îǧ¤¹¤ë¤È°Ê²¼¤ÎÀ®Ê¬¤¬¸¡½Ð¤µ¤ì¤¿
    • 1204Hz
    • 1009Hz
    • 976Hz
    • 813Hz
    • 781Hz

»îºî

°Ê¾å¤ÎÆâÍÆ¤ò¤â¤È¤Ë¼¡¤ÎÍ×ÎΤǻîºî¤ò¹Ô¤¤¤Þ¤·¤¿¡£

  • ¤³¤ÎÅÅÏõ¡¤ÏÁõÃ֤ؤÎÌ©Àܤ¬²Äǽ¤Ç¤¢¤ë¤¿¤á¤³¤³¤Ç¤Ï¾ï¤Ë¥Ô¡¼¥¯¼þÇÈ¿ô¤ËÃíÌܤ¹¤ë
  • ¾å¤Ëµó¤²¤¿ 5¼ïÎà¤Î¼þÇÈ¿ôÀ®Ê¬¤ò´Æ»ëÂоݤȤ¹¤ë
  • ¡ÖÂоݼþÇÈ¿ô¤ò½êÄê²ó¿ô°Ê¾åϢ³¸¡ÃΤ¹¤ë¤³¤È¡×¤È¡Ö¤½¤Î¸å¤Ë 2ÉÃÄøÅÙ¤ÎÈó¸¡ÃΤ¬Â³¤¯¤³¤È¡×¤ò¤â¤Ã¤Æ°ì²ó¤Î¥³¡¼¥ë¤ÈȽÃǤ¹¤ë
  • ¥³¡¼¥ë¤ò 3²óϢ³¤·¤ÆÇ§¼±¤·¤¿¸å¤Ë¤â¤¦°ìÅÙÂоݼþÇÈ¿ô¤ò¸¡ÃΤ¹¤ë¤È¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë
  • ¥¢¥¯¥·¥ç¥ó¤ÎÆâÍÆ¤Ï ACÅŸ»µ¡´ï¤Ø¤ÎÄÌÅÅ¡£Á°¤Ëºî¤Ã¤¿¥ê¥ì¡¼¤Ä¤­ÅŸ»¥±¡¼¥Ö¥ë¤ò mbed LPC1768 ¤Î p10 ¤ËÀܳ¤· Hi / Low ¤Çµ¡´ï¤Ø¤ÎÄÌÅÅ̵ͭ¤òÀÚ¤êÂØ¤¨¤ë
  • ¥¢¥¯¥·¥ç¥óȯÀ¸»þ¤Ë¤Ï¥á¡¼¥ë¤ÇÄÌÃΤ¹¤ë

ưºî¤ÎÍÍ»Ò

ư²è¡§1ʬ40Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¤³¤Îư²è¤Ç¤Ï·ÈÂÓÅÅÏ䫤鼫Âð¸ÇÄêÅÅÏäò¥³¡¼¥ë¤·¤Æ¾ÈÌÀ¤Î ON/OFF ¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£

ư²è¡§1ʬ24Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

PC ¾å¤ÇÂоÝÃå¿®²»¤ò¥µ¥ó¥×¥ê¥ó¥°¡Á²þÊѤ·¤¿¤â¤Î¤ò¿ô¼ïÎàÌĤ餷¡¢ÁõÃÖ¤¬¤½¤ì¤é¤Ë¤Ï±þ¤¸¤Ê¤¤ÍͻҤò¼ý¤á¤Æ¤¤¤Þ¤¹¡£

¥½¡¼¥¹¥³¡¼¥É

Sonic09_FFT4

  • main.cpp
    
    // ½êÄê¥Ñ¥¿¡¼¥ó¤ÎÅÅÏÃÃå¿®²»¤ËÈ¿±þ¤·¤Æ¥¢¥¯¥·¥ç¥ó¤òµ¯¤³¤¹
    // ¥æ¥Ë¥Ç¥ó¼ÒÀ½ UCT-002 ¤ÎÃå¿®²»¡Ö¥Ñ¥¿¡¼¥ó2¡×¤Ø¤ÎÂбþÈÇ
    // 1ÉÃȯ¿¶¡Á2ÉÃ̵²» ¤Î·«¤êÊÖ¤·
    
    #include "mbed.h"
    #include "rtos.h"
    #include "EthernetInterface.h"
    #include "HTTPClient.h"
    
    #define DEVELOP
    #ifdef DEVELOP
    #define dbg(...) printf(__VA_ARGS__)
    #else
    #define dbg(...)
    #endif
    
    //#define USE_DHCP
    #if !defined(USE_DHCP)
    #define IP      "192.168.0.113"
    #define GATEWAY "192.168.0.1"
    #define MASK    "255.255.255.0"
    #endif
    
    #define SAMPLE_RATE 33330
    // n >= 2, n = power of 2
    #define FFTSIZE 1024
    // length of ip >= 2+sqrt(n/2)
    const int IP_LEN = 4 + sqrt((double)(FFTSIZE/2));
    
    // ȯ¿¶²»¤Ë´Þ¤Þ¤ì¤ë¼þÇÈ¿ôÀ®Ê¬¡Ê´Æ»ëÂоݡË
    int tgtF[] = {1204, 1009, 976, 813, 781};
    #define isTargetFreq(F) \
      (F == tgtF[0] || F == tgtF[1] || F == tgtF[2] || F == tgtF[3] || F == tgtF[4])
    
    // for SendGrid
    #define SENDGRID_APIKEY "SG.UNFbQr_DQRmu8J********"
    #define REQUEST_HEADER_FOR_SENDGRID \
      "Authorization: Bearer " SENDGRID_APIKEY "\r\n" \
      "Content-Type: application/x-www-form-urlencoded\r\n"
    #define URL_POSTDATA_SENDGRID "https://api.sendgrid.com/api/mail.send.json"
    #define MAILTO    "********@gmail.com"
    #define MAILFROM  "mkttanabe2012@gmail.com"
    #define MAILSUBJECT "** Power %s **"
    #define MAILBODY  "callCount:%d"
    
    Ticker tick;
    double *recBufp = NULL;
    int countTick;
    Timer timer;
    bool recDone;
    AnalogIn mic(p20);
    DigitalOut led(LED4);
    DigitalOut relay(p10); // ¥ê¥ì¡¼¤Ä¤­ÅŸ»¥±¡¼¥Ö¥ë¤òÀܳ
    
    EthernetInterface eth;
    HTTPClient http;
    osThreadId mainThreadID;
    
    // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö
    const float SEC_PER_SAMPLEPOINT = 1.0 / SAMPLE_RATE;
    // ²»À¼¿®¹æ¤Ï¼Â¿ô¥Ç¡¼¥¿¤Ë¤Ä¤­¼ÂÎ¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹¡ÊReal DFT¡Ë´Ø¿ô¤ò»È¤¦
    void rdft(int n, int isgn, double *a, int *ip, double *w);
    
    void setDummyTime() {
      struct tm t;
      t.tm_sec = t.tm_min = t.tm_hour = t.tm_mday = t.tm_mon = 1;
      t.tm_year = 100;
      time_t seconds = mktime(&t);
      set_time(seconds);
    }
    
    int initNetwork() {
      int sts;
      led = 1;
      dbg("start eth.init\r\n" );
    #ifdef USE_DHCP
      sts = eth.init();
    #else
      sts = eth.init(IP, MASK, GATEWAY);
    #endif
      if (sts != 0) {
        dbg("ech.init error!\r\n" );
        return -1;
      }
      dbg("start eth.connect\r\n" );
      sts = eth.connect();
      if (sts != 0) {
        dbg("eth.connect error!\r\n" );
        return -2;
      }
      dbg("my IP Address = %s\r\n", eth.getIPAddress());
      led = 0;
      return 0;
    }
    
    int httpsPost(const char *targetUrl,
          const char *postData,
          const char *optHeader,
          const char *authId,
          const char *authPass) {
      int sts;
      char buf[64];
      HTTPText dataToPost((char*)postData);
      HTTPText resData(buf, sizeof(buf));
      http.setHeader(optHeader);
      
      for (int i = 0; i < 3; i++) {
        //dbg("postData=[%s]\r\n", postData);
        dbg("request to [%s]..\r\n", targetUrl);
        http.basicAuth(authId, authPass);
        sts = http.post(targetUrl, dataToPost, &resData, HTTP_CLIENT_DEFAULT_TIMEOUT);
        if (sts == HTTP_OK) {
          dbg("received HTTPS response OK\r\n");
          dbg("head of data [%s]\r\n", buf);
          dbg("done\r\n\r\n");
          break;
        } else {
          dbg("HTTPS request error=%d, status=%d\r\n", sts, http.getHTTPResponseCode());
          dbg("head of data [%s]\r\n", buf);
          dbg("sts=%d retrying..\r\n", sts);
          wait(5);
        }
      }
      return sts;
    }
    
    int doFFT(double *FFTBuffer) {
      int ip[IP_LEN];
      double *w = (double*)malloc(sizeof(double) * (FFTSIZE/2));
      ip[0] = 0;
      rdft(FFTSIZE, 1, FFTBuffer, ip, w);
    
      double maxAmp = 0;
      int index;
      for (int i = 0; i < FFTSIZE/2; i++) {
        double a = FFTBuffer[i*2]; // ¼ÂÉô
        double b = FFTBuffer[i*2 + 1]; // µõÉô
        double r = sqrt(a*a + b*b);
        if (r > maxAmp) {
          maxAmp = r;
          index = i;
        }
      }
      double freq = index * SAMPLE_RATE / FFTSIZE;
      if (freq > 0 && maxAmp > 1.0) {
        //dbg("freq=%d mag=%f\r\n", (int)freq, maxAmp);
      }
      free(w);
      return (int)freq;
    }
    
    // ¥µ¥ó¥×¥ê¥ó¥°
    void flip() {
      // AnalogIn.read() ¤ÎÃÍÈÏ°Ï¤Ï 0¡Á1.0 ¤Ë¤Ä¤­Ãæ¿´Ãͤò 0 ¤Ë
      recBufp[countTick++] = mic.read() - 0.5;
      if (countTick == FFTSIZE) {
      tick.detach();
      osSignalSet(mainThreadID, 1); // ½¸²»´°Î»ÄÌÃÎ
      }
    }
    
    // ¥á¡¼¥ëÁ÷¿®
    void sendMail(int callCount) {
      char b[128];
      snprintf(b, sizeof(b), "from=" MAILFROM
            "&to=" MAILTO "&subject=" MAILSUBJECT
            "&text=" MAILBODY, (relay == 1) ? "ON" : "OFF", callCount+1);
      httpsPost(URL_POSTDATA_SENDGRID, b,
            REQUEST_HEADER_FOR_SENDGRID, NULL, NULL);
    }
    
    int main() {
      time_t lastDetectedTime = 0, lastActionTime = 0;
      time_t lastNonDetectedTime = 0;
      int blankPeriod = 0, ringCount = 0, callCount = 0;
    
      relay = 0;
      setDummyTime();
      mainThreadID = osThreadGetId();
      initNetwork();
      recBufp = (double*)malloc(sizeof(double) * FFTSIZE);
      dbg("start\r\n");
    
      while (1) {
        countTick = 0;
        tick.attach(&flip, SEC_PER_SAMPLEPOINT);
        osSignalWait(1, osWaitForever);
        if (time(NULL) - lastDetectedTime >= 4) {
          // 4ÉðʾåÂоݲ»¤òÈó¸¡ÃΤʤ饳¡¼¥ë¥«¥¦¥ó¥¿¤ò¥ê¥»¥Ã¥È
          callCount = 0;
        }
        int freq = doFFT(recBufp);
        if (isTargetFreq(freq)) {
          // Á°²ó¤Î¥¢¥¯¥·¥ç¥ó¤«¤é½êÄê¤Î»þ´Ö¤¬·Ð²á¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¼õ¤±Î®¤¹
          if (lastActionTime > 0) {
            int w = time(NULL) - lastActionTime;
            if (w < 30) {
              dbg("pending.. %dsec\r\n", w);
              continue;
            }
          }
          ringCount++;
          if (callCount >= 3) {
            // ¥¢¥¯¥·¥ç¥ó¼Â¹Ô
            relay = !relay;
            dbg("Power %s\r\n", (relay == 1) ? "On" : "Off");
            free(recBufp);
            sendMail(callCount);
            recBufp = (double*)malloc(sizeof(double) * FFTSIZE);
            callCount = ringCount = 0;
            lastActionTime = time(NULL);
          }
          lastDetectedTime = time(NULL);
        } else { // ÈóÂоݲ»
          blankPeriod += (time(NULL) - lastNonDetectedTime);
          if (blankPeriod > 30) {
            blankPeriod = 0;
          }
          lastNonDetectedTime = time(NULL);
          if (ringCount > 7) {
            if (callCount == 0 ||
              blankPeriod >= 2 && blankPeriod < 4) {
              callCount++;
              dbg("call count=%d\r\n", callCount);
              blankPeriod = 0;
            }
          }
          ringCount = 0;
        }
      }
      if (recBufp) {
        free(recBufp);
      }
      return 0;
    }
    
    

¤ª¤ï¤ê¤Ë

²»¤òÂêºà¤Ë¼ê¸µ¤Ç¹Ô¤Ã¤Æ¤­¤¿¼Â¸³¤È»îºî¤ÎÆâÍÆ¤ò 5 ²ó¤Ëʬ¤±¤Æ¾Ò²ð¤·¤Þ¤·¤¿¡£²»¤òÇÞÂΤȤ¹¤ë¼êË¡¤Ïµì¤¯¤Æ¿·¤·¤¤±ü¤Î¿¼¤¤À¤³¦¤Ç¤¹¡£¿·¤¿¤ÊÀ½Éʤ䥵¡¼¥Ó¥¹¡¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¹½ÃÛ¤¹¤ëºÝ¤ÎÆ»¶ñΩ¤Æ¤Î¤Ò¤È¤Ä¤È¤·¤Æ¡¢¤¢¤ë¤¤¤Ï¡¢Â¾¤ÎÊýË¡¤¬¤¹¤Ù¤ÆÍøÍѤǤ­¤Ê¤¤¾ì¹ç¤ÎÉúʼ¤È¤·¤Æ¤âÍ­ÍѤǤ·¤ç¤¦¡£¤È¤Æ¤â¶½Ì£¿¼¤¤·Ð¸³¤Ç¤·¤¿¡£


(tanabe)
klab_gijutsu2 at 11:54¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
2017ǯ06·î20Æü

²»¤òÍøÍѤ¹¤ë 4 ¡Ámbed ¥Þ¥¤¥³¥ó¤Ç¤Î±þÍÑ¡§½àÈ÷ÊÔ¡Á

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

¤³¤Îµ­»ö¤ÎÆâÍÆ

IoT ÊýÌ̤ǤαþÍѤòÁÛÄꤷ¥Þ¥¤¥³¥ó·Ï¤Ç¤â²»¤Ë´Ø¤¹¤ë¼Â¸³¤È»îºî¤ò¹Ô¤¤¤Þ¤·¤¿¡£º£²ó¤Ï¤½¤Î½àÈ÷ÊԤǤ¹¡£¤³¤³¤Ç¤Ï¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤È¤·¤Æ mbed LPC1768 ¥Ü¡¼¥É¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£´ðËÜŪ¤Ê¹Í¤¨Êý¤Ï´Ä¶­¤Ë°Í¸¤·¤Ê¤¤¤¿¤áÍ×ÁǤο¤¯¤Ï¾¤ÎÀ½Éʸþ¤±¤ËÆÉ¤ßÂØ¤¨¤ë¤³¤È¤â²Äǽ¤Ç¤·¤ç¤¦¡£

½àÈ÷ 1. ÉôÉʤòÍѰդ¹¤ë

²»À¼¥Ç¡¼¥¿¤ÎÆþ½ÐÎÏÍѤ˰ʲ¼¤ÎÉôÉʤòÍѰդ·¤Þ¤·¤¿¡£

¥Þ¥¤¥¯¥â¥¸¥å¡¼¥ë¤ò mbed LPC1768 ¤Î p20¡ÊAnalogIn¡Ë¤Ë¡¢¥ª¡¼¥Ç¥£¥ª¥¢¥ó¥×¤ò p18¡ÊAnalogOut¡Ë¤ËÀܳ¤·¤Þ¤·¤¿¡£¤³¤ì¤ò¼Â¸³¤Ë»È¤¤¤Þ¤¹¡£

½àÈ÷ 2. mbed ¥Þ¥¤¥³¥ó¤Ç¤Î²»À¼Æþ½ÐÎϽèÍý¤ò³Ð¤¨¤ë

²¿¤Ï¤È¤â¤¢¤ì²»À¼¥Ç¡¼¥¿¤ÎÆþ½ÐÎÏÊýË¡¤«¤é¤Ç¤¹¡£¥ê¥Õ¥¡¥ì¥ó¥¹¤ò³Îǧ¤·¤Þ¤¹¡£

  • AnalogIn - ¥¢¥Ê¥í¥°ÆþÎÏ - developer.mbed.org
    val = name.read();
    val¤Ë¤Ï0(0V)¡Á1.0(3.3V)¤Î¿ôÃÍ¡Êfloat¡Ë¤¬ÂåÆþ¤µ¤ì¤Þ¤¹¡£

    val = name.read_u16();
    val¤Ë¤Ï0(0V)¡Á65535(0xffff, 3.3V)¤Î¿ôÃͤ¬ÂåÆþ¤µ¤ì¤Þ¤¹¡£¡Ê¾å°Ì12¥Ó¥Ã¥È¤¬Í­¸ú¡Ë
    • AN10974 LPC176x/175x 12-bit ADC design guidelines¡ÊPDF¡Ë - www.nxp.com
      Page 3 of 19 ¤è¤ê
      The LPC175x/6x family is based on the ARM Cortex M3 core, and includes a 12-bit Analog-to-Digital (ADC) module with input multiplexing among eight pins, conversion rates up to 200 kHz, and multiple result registers.
  • AnalogOut - ¥¢¥Ê¥í¥°½ÐÎÏ - developer.mbed.org
    name = 0.5;
    0(0V)¡Á1(3.3V)¤Î¿ôÃÍ¡Êfloat¡Ë¤Ç½ÐÎϤò»ØÄꤷ¤Þ¤¹¡£

    name.write_u16 = 1000;
    0(0V)¡Á65535(0xffff, 3.3V)¤Î¿ôÃÍ¡Êunsigned short¡Ë¤Ç½ÐÎϤò»ØÄꤷ¤Þ¤¹¡£¡Ê¾å°Ì10¥Ó¥Ã¥È¤¬Í­¸ú¡Ë

»îºî 1

¤Þ¤º¡¢¤´¤¯ÁÇËѤÊÏ¿²»¡¦ºÆÀ¸¥×¥í¥°¥é¥à¤ò½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£¼¡¤ÎÆâÍÆ¤Ç¤¹¡£

  • ¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ï 4000Hz
  • ÆþÎÏ¿®¹æ¤ò 4000Hz ¤Ç¥µ¥ó¥×¥ê¥ó¥°¤¹¤ë¤¿¤á¤Î»þ´Ö´Ö³Ö w ¤ò·×»»
    w = 1sec / 4000Hz = 0.00025sec = 0.25msec = 250¦Ìsec
  • ¥¢¥Ê¥í¥°ÆþÎϤ«¤é w ´Ö³Ö¤ÇÆÉ¤ß¼è¤Ã¤¿Ãͤò¥µ¥ó¥×¥ê¥ó¥°ÍѥХåե¡¤Î½ªÃ¼¤Þ¤Ç½ç¼¡³ÊǼ¤¹¤ë
  • ¥µ¥ó¥×¥ê¥ó¥°ÍѥХåե¡¤Ë³ÊǼ¤·¤¿Ãͤò w ´Ö³Ö¤Ç½ç¼¡¥¢¥Ê¥í¥°½ÐÎϤؽñ¤­¹þ¤à ¡Á̵¸Â¥ë¡¼¥×

ưºî¤ÎÍÍ»Ò

ư²è¡§20Éá¡¡¡¢¨²»ÎÌÃí°Õ

¥½¡¼¥¹¥³¡¼¥É

sonic01_mic

  • main.cpp
    
    #include "mbed.h"
    
    #define SAMPLE_RATE 4000
    #define BUFSIZE 7680
    
    AnalogIn mic(p20);
    AnalogOut speaker(p18);
    DigitalOut led(LED4);
    float recBuf[BUFSIZE];
    
    int main() {
      // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö
      float w = 1.0 / SAMPLE_RATE;
    
      // Ï¿²»³«»Ï¤Þ¤Ç¤Ë LED ¤ò 3²óÅÀÌǤµ¤»¤ë
      led = 1;
      for (int i = 0; i < 6; i++) {
        wait(0.5);
        led = !led;
      }
      // Ï¿²»
      for (int i = 0; i < BUFSIZE; i++) {
        recBuf[i] = mic.read();
        wait(w);
      }
      led = 0;
    
      // ºÆÀ¸
      while (1) {
        for (int i = 0; i < BUFSIZE; i++) {
          speaker = recBuf[i] ;
          wait(w);
        }
      }
      return 0;
    }
    
    

»îºî 1 ¤ÎÌäÂêÅÀ¤Ë¤Ä¤¤¤Æ

¤³¤Î¤è¤¦¤Ë¤È¤Æ¤âû¤¤¥³¡¼¥É¤Ç´Êñ¤Ë²»À¼¥Ç¡¼¥¿¤ÎÆþ½ÐÎϤò¼Â¸½¤Ç¤­¤Þ¤·¤¿¡£¤·¤«¤·¡¢Ï¿²»¤ÈºÆÀ¸¤ò»î¤·¤Æ¤¤¤ë¤ÈÈù̯¤Ê°ãÏ´¶¤¬¤¢¤ê¤Þ¤·¤¿¡£Ï¿²»¤·¤¿²»¤ÈºÆÀ¸¤µ¤ì¤ë²»¤Î¹â¤µ¤¬°ã¤¦¤è¤¦¤Êµ¤¤¬¤·¤¿¤Î¤Ç¤¹¡£¤³¤Î¤³¤È¤ò³Ú´ï¤ò»È¤Ã¤Æ³Îǧ¤·¤Æ¤ß¤Þ¤·¤¿¡£

ºÆÀ¸²»¤Î¹â¤µ¤¬¤ª¤«¤·¤¤¡©

ư²è¡§21Éá¡¡¡¢¨²»ÎÌÃí°Õ

¤³¤Îư²è¤Ç¤Ï³Ú´ï¤Î²»¤òÏ¿²»¤·ºÆÀ¸»þ¤Ë¹ç¤ï¤»ÃƤ­¤Ê¤É¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£¤Ê¤ª¡¢Á°·Ç¤Î°Â²Á¤Ê¥¹¥Ô¡¼¥«¡¼¤Ç¤Ï¤ä¤Ï¤ê²»¼Á¤¬Éϼå¤Ê¤Î¤Ç¡¢¤³¤Îư²è°Ê¹ß¤Ç¤Ï¥¢¥ó¥×Æâ¢¤Î¥¹¥Ô¡¼¥«¡¼¡ÊPHILIPS ¼ÒÀ½ BT50¡Ë¤ò AnalogOut ¥Ý¡¼¥È¤Ë¤Ä¤Ê¤¤¤ÇºÆÀ¸¤Ë»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£

ÌäÂê¤Î¸¶°ø¤ÈÂнèÊýË¡

¤³¤Î¤ª¤«¤·¤Ê¸½¾Ý¤Î¸¶°ø¤Ï»îºî 1 ¤Î¥³¡¼¥É¤Ë¤ª¤¤¤Æ¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö¤òÀ©¸æ¤·¤Æ¤¤¤ë wait() ´Ø¿ô¤Ë¤¢¤ê¤Þ¤¹¡£mbed ¥×¥í¥°¥é¥ß¥ó¥°¤Ë¤ª¤¤¤Æ¤­¤ï¤á¤Æ¥«¥¸¥å¥¢¥ë¤Ë»ÈÍѤµ¤ì¤ë¤³¤Î´Ø¿ô¤Î¥ê¥Õ¥¡¥ì¥ó¥¹¤ò¤¢¤é¤¿¤á¤Æ³Îǧ¤·¤¿¤È¤³¤í¡ÖWhen you call wait your board's CPU will be busy in a loop waiting for the required time to pass¡×¤È¤Îµ­½Ò¤¬¤¢¤ê¡¢¤È¤ê¤¢¤¨¤º°Ê²¼¤ÎÆâÍÆ¤ÇÀºÅ٤γÎǧ¤ò¹Ô¤¤¤Þ¤·¤¿¡£

  • ¼¡¤Î¤ß¤Ã¤Ä¤Î¥Ñ¥¿¡¼¥ó¤Ë¤Ä¤¤¤Æ¡¢¥¤¥ó¥¿¡¼¥Ð¥ë 10¦ÌÉ䫤é 250¦ÌÉäޤǤΠ1¦ÌÉùï¤ß¤Î¥ë¡¼¥×Æâ¤Ç¤½¤ì¤¾¤ì 1000²ó wait() ¤ò¸Æ¤Ó½Ð¤·½êÍ×»þ´Ö¤ÈÍýÏÀ»þ´Ö¤Îº¹°ã¤ò·×¬¤¹¤ë
    • wait() ¤Î¤ß
    • wait() + AnalogIn.read()
    • wait() + AnalogOut.write()
¥¤¥ó¥¿¡¼¥Ð¥ë 250¦ÌÉäǤηë²Ì¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£
  • wait() ¤Î¤ß
    • wait=250us ½êÍ×»þ´Ö¡§250666us ÍýÏÀ»þ´Ö¡§250000us ¸íº¹¡§666us (0.266400%)
  • wait() + AnalogIn.read()
    • wait=250us ½êÍ×»þ´Ö¡§271662us ÍýÏÀ»þ´Ö¡§250000us ¸íº¹¡§21662us (8.664801%)
  • wait() + AnalogOut.write()
    • wait=250us ½êÍ×»þ´Ö¡§252363us ÍýÏÀ»þ´Ö¡§250000us ¸íº¹¡§2363us (0.945200%)

¤³¤Î¤è¤¦¤Ë wait() + AnalogIn.read() ¤ÇÂçÉý¤ÊÃٱ䤬ȯÀ¸¤·¤Æ¤¤¤Þ¤¹¡£°ìÊý¡¢wait() + AnalogOut.write() ¤Ç¤ÏÁêÂÐŪ¤ËÃٱ䤬¾®¤µ¤¤¤¿¤á»îºî 1 ¤Î¥×¥í¥°¥é¥à¤Ï·ë²Ì¤È¤·¤Æ¡ÖÄ㤤¥ì¡¼¥È¤Ç¥µ¥ó¥×¥ê¥ó¥°¡×¤·¤¿¥Ç¡¼¥¿¤ò¡Ö¹â¤¤¥ì¡¼¥È¤ÇºÆÀ¸¡×¤¹¤ë½êºî¤È¤Ê¤Ã¤Æ¤¤¤Þ¤·¤¿¡£¾å¤Î¸¡¾Ú¤Ç¤Î¥¤¥ó¥¿¡¼¥Ð¥ë 10¡Á250¦ÌÉäò²£¼´¡¢½êÍ×»þ´Ö¤Î¸íº¹¤Î³ä¹ç¤ò½Ä¼´¤Ë¥×¥í¥Ã¥È¤·¤¿¥°¥é¥Õ¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£

¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö¤Î¥³¥ó¥È¥í¡¼¥ë¤Ë mbed ɸ½à¤Î¥¿¥¤¥Þ³ä¹þ¤ßµ¡¹½¤Ç¤¢¤ë Ticker ¤ò»È¤Ã¤ÆÆ±¤¸¸¡¾Ú¤ò¹Ô¤¤¤Þ¤·¤¿¡£ ¥¤¥ó¥¿¡¼¥Ð¥ë 250¦ÌÉäǤηë²Ì¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£

  • Analog read / write ¤Ê¤·
    • ticker=250us ½êÍ×»þ´Ö¡§249770us ÍýÏÀ»þ´Ö¡§250000us ¸íº¹¡§230us (0.092000%)
  • AnalogIn.read() ¸Æ¤Ó½Ð¤·¤Ä¤­
    • ticker=250us ½êÍ×»þ´Ö¡§249791us ÍýÏÀ»þ´Ö¡§250000us ¸íº¹¡§209us (0.083600%)
  • AnalogOut.write() ¸Æ¤Ó½Ð¤·¤Ä¤­
    • ticker=250us ½êÍ×»þ´Ö¡§249772us ÍýÏÀ»þ´Ö¡§250000us ¸íº¹¡§228us (0.091200%)

¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

¤³¤Î¤è¤¦¤Ë·ë²Ì¤Ï wait() »ÈÍÑ»þ¤è¤ê¤â°µÅÝŪ¤ËÎɹ¥¤Ç¤¹¡£¤½¤Î°ìÊý¤Ç¡¢AnalogIn.read() Ê»ÍÑ»þ¤Î¥¤¥ó¥¿¡¼¥Ð¥ë 25¦ÌÉÃÉÕ¶á¤Î¡ÖÊɡפθºß¤¬Ìܤ˻ߤޤê¤Þ¤¹¡£¼ê¸µ¤Î¸¡¾Ú¤Ç¤Ï¤³¤Î·ë²Ì¤Ë¤ÏÌÀ³Î¤ÊºÆ¸½À­¤¬¤ß¤é¤ì¤Þ¤·¤¿¡£25¦ÌÉðʲ¼¤Î³ä¹þ¤ß¤òɬÍפȤ·¤Ê¤¤¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤òÍøÍѤ¹¤ì¤ÐÂ礭¤Ê»Ù¾ã¤Ï¤Ê¤µ¤½¤¦¤Ç¤¹¤¬¡¢¹­¤¯ÍѤ¤¤é¤ì¤ë¥ì¡¼¥È 44100Hz ¤Î¾ì¹ç¤Ë¤Ï 1sec / 44100Hz ¢â 23¦Ìsec ¤È¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö¤¬ 25¦ÌÉäò³ä¤ê¹þ¤à¤³¤È¤¬Èù̯¤Ë»Äǰ¤Ç¤â¤¢¤ê¤Þ¤¹¡£

°ìÏ¢¤ÎÄ´ºº¤Î²áÄø¤Ç Erik Olieman »á¤Ë¤è¤ë FastAnalogIn ¥é¥¤¥Ö¥é¥ê¤Î¸ºß¤òÃΤê¤Þ¤·¤¿¡£

½êÄê¤Î¥¢¥Ê¥í¥°ÆþÎϥݡ¼¥È¤ËÂФ¹¤ë mbed ɸ½à¤Î AnalogIn.read() ¤¬¡¢¸Æ¤Ó½Ð¤·¤ÎÅÔÅÙ¡¢Åö³º¥Ý¡¼¥È¤ËÂбþ¤¹¤ë ADC ¥Á¥ã¥Í¥ë·Ðͳ¤Ç AD ÊÑ´¹¤ò¹Ô¤¦»ÅÍ͡ʤ½¤Î¤¿¤áÃÙ¤¤¡Ë¤Ç¤¢¤ë¤Î¤ËÂФ·¡¢FastAnalogIn ¤Ï ADC ¤Î BURST mode ¤òÍøÍѤ·¤ÆÊÑ´¹¤ò¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÇºÇÂç 200kHz¤Ç·«¤êÊÖ¤·¼Â¹Ô¤· read() ¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¤È¡ÖºÇ¸å¤Ë¥µ¥ó¥×¥ê¥ó¥°¤·¤¿Ã͡פòľ¤Á¤ËÊÖ¤¹ÆâÍÆ¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¡Ê¢¨ Á°·Ç¤Î ADC ¥É¥­¥å¥á¥ó¥ÈÃæ¤Î "conversion rates up to 200 kHz" ¤Î¤¯¤À¤ê¤Ï BURST mode ²¼¤Î¤³¤Î½êºî¤ò»Ø¤¹¤â¤Î¤È¹Í¤¨¤é¤ì¤ë¡Ë

  • FastAnalogIn - a mercurial repository | mbed - developer.mbed.org
    When you read an AnalogIn object it will enable the corresponding ADC channel, depending on the implementation do either one or multiple measurements for more accuracy, and return that value to your program. This way the ADC is only active when it is required, and it is fairly straightforward. However the downside is, is that an ADC is relatively slow.
          :
    This library uses the 'burst' feature of the microcontroller. This allows the ADC on the background to perform the AD conversions without requiring intervention from the microcontroller's core. Also there are no interrupts used, so also your time-sensitive code is not affected.
          :
    • FastAnalogIn Class Reference - developer.mbed.org
      AnalogIn does a single conversion when you read a value (actually several conversions and it takes the median of that). This library runns the ADC conversion automatically in the background. When read is called, it immediatly returns the last sampled value.
            :
  • ADC_LPC1768 - John Kneen: Microcontrollers - 6. Selecting and triggering the analogue to digital conversion. - sites.google.com
    Bit 16 : BURST

    1 The AD converter does repeated conversions at up to 200 kHz, scanning (if necessary) through the pins selected by bits set to ones in the SEL field.
          :

·×¬ÍÑ¥³¡¼¥É¤ÎÃæ¤Î AnalogIn ¤ò¤³¤Î FastAnalogIn ¤ËÊѹ¹¤·¤ÆÆ±Íͤη׬¤ò¹Ô¤Ã¤¿¤È¤³¤í 25¦ÌÉðʲ¼¤Î¥¤¥ó¥¿¡¼¥Ð¥ë¤Ç¤ÎÀ®ÀÓ¤¬·àŪ¤Ë²þÁ±¤µ¤ì¤Þ¤·¤¿¡£Á°·Ç¤Î¤Õ¤¿¤Ä¤Î¥°¥é¥Õ¤Î½Ä¼´ºÇÂçÃͤ¬¡Ö100%¡×¤Ç¤¢¤Ã¤¿¤Î¤ËÂФ·¡¢²¼¤Î¥°¥é¥Õ¤Ç¤Ï¡Ö1.00%¡×¤Ç¤¢¤ë¤³¤È¤ËÍ×ÃíÌܤǤ¹¡£

¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

»îºî 2

¾å¤Î¡ÖÂнèÊýË¡¡×¤òÈ¿±Ç¤·¤¿·Á¤ÇÏ¿²»¡¦ºÆÀ¸¥×¥í¥°¥é¥à¤ò½ñ¤­Ä¾¤·¤Þ¤·¤¿¡£¸¡¾Ú¾å¤ÎÊØµ¹¤ò·ó¤Í¤Æ¼¡¤ÎÆâÍÆ¤È¤·¤Æ¤¤¤Þ¤¹¡£

  • Ï¿²»¡¦ºÆÀ¸¤ËÍ×ÁÇ¿ô 14000 ¤Î unsigned short ·¿ÇÛÎó¤ò»ÈÍѤ¹¤ë
  • ¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È 8000Hz, 16000Hz, 22000Hz, 30720Hz, 44100Hz ¤Î½ç¤ËÏ¿²»¤ÈºÆÀ¸¤ò¹Ô¤¦
  • ¥ì¡¼¥È¤¬¹â¤¯¤Ê¤ë¤Û¤ÉÏ¿²»²Äǽ»þ´Ö¤Ïû¤¯¤Ê¤ë¤¬¡¢ºÆÀ¸¤Ï¤¤¤º¤ì¤â 8ÉôÖÄøÅÙ·«¤êÊÖ¤·¹Ô¤¦

ưºî¤ÎÍÍ»Ò

ư²è¡§1ʬ28Éá¡¡¡¢¨²»ÎÌÃí°Õ

¤³¤Îư²è¤Ç¤Ï³Æ¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ë¤ª¤¤¤Æ¥­¡¼¥Ü¡¼¥É¤Î¡Ö¥Õ¥¡¡×¤Î²»¡ÊF5¡§698.456Hz¡Ë¤òÏ¿²»¤·¡¢¤½¤ÎºÆÀ¸²»¤ò°ÊÁ°ºîÀ®¤·¤¿¥Ô¡¼¥¯¼þÇÈ¿ôɽ¼¨¥×¥í¥°¥é¥à¤È³Ú´ïÍѤΥÁ¥å¡¼¥Ê¡¼¡ÊKORG ¼ÒÀ½ AW-2G¡Ë¤Ç³Îǧ¤·¤Æ¤¤¤Þ¤¹¡£

¥½¡¼¥¹¥³¡¼¥É

sonic07_mic3

  • main.cpp
    // ¥µ¥ó¥×¥ê¥ó¥°¤ÈºÆÀ¸
    // ¥ì¡¼¥È 8000,16000,22000,30720,44100Hz ¤Î½ç¤Ë¥µ¥ó¥×¥ê¥ó¥°¤ò¹Ô¤¤
    // ¤½¤ì¤¾¤ì 8ÉÃÄøÅ٥롼¥×ºÆÀ¸¤¹¤ë
    // FastAnalogIn ¥é¥¤¥Ö¥é¥ê¤ò»ÈÍÑ
    
    #include "mbed.h"
    #include "FastAnalogIn.h"
    
    #define DEVELOP
    #ifdef DEVELOP
    #define dbg(...) printf(__VA_ARGS__)
    #else
    #define dbg(...)
    #endif
    
    #define BUFSIZE 14000
    
    Ticker tick;
    Timer timer;
    int countTick,interval_us, sampleTime;
    bool recDone;
    unsigned short *recBufp = NULL;
    AnalogOut speaker(p18);
    FastAnalogIn mic(p20);
    DigitalOut led(LED4);
    
    // ¥µ¥ó¥×¥ê¥ó¥°
    void flipRec() {
      recBufp[countTick++] = mic.read_u16() & 0xFFFC;
      if (countTick == BUFSIZE) {
        tick.detach();
        recDone = true;
      }
    }
    
    // ºÆÀ¸
    void flipPlay() {
      speaker.write_u16(recBufp[countTick++]);
      if (countTick == BUFSIZE) {
        countTick = 0;
      }
    }
    
    void recAndPlay(int sampleRate) {
      // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö usec
      interval_us = 1.0 / sampleRate * 1000000;
      // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°»þ´Ö usec
      sampleTime = BUFSIZE * interval_us / sizeof(short);
      dbg("rate=%5dHz irq=%dus time=%dms\r\n",
    ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sampleRate, interval_us, sampleTime/1000);
      
      // ¥µ¥ó¥×¥ê¥ó¥°³«»Ï¤Þ¤Ç¤Ë LED ¤ò 3²óÅÀÌǤµ¤»¤ë
      led = 1;
      for (int i = 0; i < 6; i++) {
        wait(0.4);
        led =! led;
      }
      // ¥µ¥ó¥×¥ê¥ó¥°
      countTick = 0;
      recDone = false;
      tick.attach_us(&flipRec, interval_us);
      while (!recDone) {
        wait(0.2);
      }
      led = 0;
      wait(1);
      // 8ÉÃÄøÅ٥롼¥×ºÆÀ¸
      countTick = 0;
      tick.attach_us(&flipPlay, interval_us);
      wait(8);
      tick.detach();
    }
    
    int main() {
      recBufp = (unsigned short*)malloc(BUFSIZE);
      recAndPlay(8000);
      recAndPlay(16000);
      recAndPlay(22000);
      recAndPlay(30720);
      recAndPlay(44100);
      dbg("done\r\n");
      if (recBufp) {
        free(recBufp);
      }
      return 0;
    }
    
    
    

½àÈ÷ 3. Ǥ°Õ¤Î¼þÇÈ¿ô¤Î²»ÇȤòÀ¸À®¡¦½ÐÎϤ¹¤ë

ÀèÈ̤ÎAndroid ´Ä¶­¤Ç¤Î»î¤ß¤ÈƱÍͤ˼긵¤Î mbed ¥Þ¥¤¥³¥ó¤Ç¥µ¥¤¥óÇÈ¿®¹æ¤òÀ¸À®¡¦½ÐÎϤ·¤Æ¤ß¤Þ¤¹¡£Android ÈǤǤÎÅþãÅÀ¤òƧ½±¤Ç¤­¤ë¤Î¤Ç¤¢¤Þ¤ê¼ê¤Ï¤«¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£

»îºî

°Ê²¼¤ÎÍ×ÎÎ¤Ç¥×¥í¥°¥é¥à¤òºîÀ®¤·¤Þ¤·¤¿¡£

  • 400Hz¡Á14000Hz ¤ÎÈϰϤΠ10¼ïÎà¤Î¼þÇÈ¿ô¤Î¥µ¥¤¥óÇÈ¿®¹æ¤ò½ç¼¡À¸À®¤¹¤ë
  • ¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ï 33330Hz¡Ê¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö 30¦ÌÉáˤȤ·¡¢¥Ð¥Ã¥Õ¥¡¾å¤Ë³Æ¼þÇÈ¿ô 100¥ß¥êÉÃʬ¤Î¿®¹æ¥Ç¡¼¥¿¤ò¹½ÃÛ¤·¤Æ¤½¤ì¤¾¤ì 4ÉôÖÄøÅÙ AnalogOut ¥Ý¡¼¥È¤Ø½ÐÎϤ¹¤ë
  • unsigned short ·¿ÇÛÎó¤ò°ú¿ô¤Ë¤È¤ë AnalogOut.write_u16() ¤Î°ú¿ôÈÏ°Ï¤Ï 0¡Á65535 ¤Ç¤¢¤ë¤¿¤á¿®¹æÀ¸À®»þ¤ËľήÀ®Ê¬¤È¤·¤Æ 65535 / 2 ¤ò²Ã¤¨¤ë

ưºî¤ÎÍÍ»Ò

ư²è¡§1ʬ15Éá¡¡¡¢¨²»ÎÌÃí°Õ

¤³¤Îư²è¤Ç¤ÏÆóÂæ¤Î¥¿¥Ö¥ì¥Ã¥È¾å¤Î¤Õ¤¿¤Ä¤Î¥×¥í¥°¥é¥à¤ò»È¤Ã¤Æ¿®¹æ¤Î³Îǧ¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£

ºÇ½é¤Ë 400Hz ¥µ¥¤¥óÇÈ¿®¹æ¤Î¼ýÏ¿¤µ¤ì¤¿ Youtube ư²è¤ò»È¤Ã¤Æ³Îǧ¤ò¹Ô¤¤¡¢¤½¤Î¸å mbed ¥Þ¥¤¥³¥ó¤«¤é 10¼ïÎà¤Î¼þÇÈ¿ô¤Î¥µ¥¤¥óÇÈ¿®¹æ¤ò½çÈÖ¤Ë 4É交ÄÌĤ餷¤Æ¤¤¤Þ¤¹¡£

¥½¡¼¥¹¥³¡¼¥É

sonic08_sine2

  • main.cpp
    
    // ¥µ¥¤¥óÇȲ»À¼¿®¹æ¤òÀ¸À®¡¦½ÐÎϤ¹¤ë
    
    #include "mbed.h"
    
    #define DEVELOP
    #ifdef DEVELOP
    #define dbg(...) printf(__VA_ARGS__)
    #else
    #define dbg(...)
    #endif
    
    #define SAMPLE_RATE 33330
    #define PI 3.141592653589793238462
    #define MAG 3000
    
    Ticker tick;
    int count = 0;
    const int BUFSIZE = SAMPLE_RATE / 10; // ¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º 100¥ß¥êÉÃʬ
    unsigned short waveBuf[BUFSIZE];
    // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö ÉÃ
    const float SEC_PER_SAMPLEPOINT = 1.0 / SAMPLE_RATE;
    const float a0 = 65535 / 2;
    
    AnalogOut speaker(p18);
    
    // ½ÐÎÏ
    void flip() {
       speaker.write_u16(waveBuf[count++]);
       (count >= BUFSIZE) ? count = 0 : 1;
    }
    
    void outputSineWave(int freq) {
      for (int i = 0; i < BUFSIZE; i++) {
        float currentSec = i * SEC_PER_SAMPLEPOINT;
        double val = a0 + MAG * sin(2.0*PI * freq * currentSec);
        waveBuf[i] = (unsigned short)val;
      }
      count = 0;
      tick.attach(&flip, SEC_PER_SAMPLEPOINT;
      wait(4); // 4ÉÃÄøÅÙ½ÐÎÏ
      tick.detach();  
    }
    
    int main() {
      dbg("interval=%fs\r\n", SEC_PER_SAMPLEPOINT);
      outputSineWave(400);
      outputSineWave(800);
      outputSineWave(1200);
      outputSineWave(1600);
      outputSineWave(2000);
      outputSineWave(4000);
      outputSineWave(8000);
      outputSineWave(10000);
      outputSineWave(12000);
      outputSineWave(14000);
      return 0;
    }
    
    

½àÈ÷ 4. ½¸²»¤·¤¿¥Ç¡¼¥¿¤Î¼þÇÈ¿ôʬÀϤò¹Ô¤¦

½àÈ÷ÊԤκǸå¤ËÆþÎÏ¿®¹æ¤ÎʬÀϤò»î¤ß¤Þ¤¹¡£

Â籺ÈÇ FFT ¤Ë¤Ä¤¤¤Æ

¤³¤³¤Ç¤Ï¹âÀ­Ç½¤«¤Ä¥³¥ó¥Ñ¥¯¥È¤Ê FFT ¥é¥¤¥Ö¥é¥ê¤È¤·¤Æ¹­¤¯ÍøÍÑ¡ÊNASA ¤ÎÎã¡Ë¤µ¤ì¤Æ¤¤¤ëÂ籺ÂóºÈÍ͡ʵþÅÔÂç³Ø¿ôÍý²òÀϸ¦µæ½ê ½õ¶µ¡Ë¤Ë¤è¤ë¥é¥¤¥»¥ó¥¹¥Õ¥ê¡¼¤ÎÈÆÍÑ FFT ¥Ñ¥Ã¥±¡¼¥¸¡ÊÄ̾ΠÂ籺ÈÇ FFT¡Ë¤ò»È¤Ã¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£ÀèÈÌ Android ´Ä¶­²¼¤ÇÍøÍѤ·¤¿ JTransforms ¤Ï¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤òÊìÂΤȤ¹¤ë¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹¡£

  • Â籺 ÂóºÈ (Ooura, Takuya) - µþÅÔÂç³Ø¿ôÍý²òÀϸ¦µæ½ê - www.kurims.kyoto-u.ac.jp
    • ÈÆÍÑ FFT (¹â® ¥Õ¡¼¥ê¥¨/¥³¥µ¥¤¥ó/¥µ¥¤¥ó ÊÑ´¹) ¥Ñ¥Ã¥±¡¼¥¸
      °ì¼¡¸µ DFT / DCT / DST

      ¾ÜºÙ
      °ì¼¡¸µ¡¤£²¤ÎÀ°¿ô¾è¸Ä¤Î¥Ç¡¼¥¿¤ÎÎ¥»¶ Fourier ÊÑ´¹¡¤ ¥³¥µ¥¤¥óÊÑ´¹¡¤¥µ¥¤¥óÊÑ´¹Åù¤ò¹Ô¤¤¤Þ¤¹¡¥¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ë¤Ï C ¤È Fortran ¤Î FFT ¥³¡¼¥É¤¬´Þ¤Þ¤ì¤Þ¤¹¡¥
            :

      ÆâÍÆ
      fft4g.c : FFT ¥Ñ¥Ã¥±¡¼¥¸ in C - ¹â®ÈÇ (´ð¿ô 4, 2)
            :

      ¥Õ¥¡¥¤¥ë¤Î°ã¤¤
      ´Ê°×ÈǤϺî¶ÈÍÑÇÛÎó¤ò°ìÀڻȤ¤¤Þ¤»¤ó¡¥¹â®ÈǤϻ°³Ñ´Ø¿ôɽ¤Ê¤É¤Îºî¶ÈÍÑÇÛÎó¤ò»È¤¤¤Þ¤¹¡¥¹â®ÈǤϴʰ×ÈǤËÈæ¤Ù¤Æ¹â®¤«¤Ä¹âÀºÅÙ¡¥¹â®ÈǤλÅÍͤϤ¹¤Ù¤ÆÆ±¤¸¡¥

      ¥Ñ¥Ã¥±¡¼¥¸Æâ¤Î¥ë¡¼¥Á¥ó
      cdft() : Ê£ÁÇÎ¥»¶ Fourier ÊÑ´¹ rdft() : ¼ÂÎ¥»¶ Fourier ÊÑ´¹
            :

      ¥é¥¤¥»¥ó¥¹
      Copyright Takuya OOURA, 1996-2001

      ¤³¤Î¥½¡¼¥¹¥³¡¼¥É¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¤Ç¤¹¡¥¾¦ÍÑÌÜŪ¤ò´Þ¤á¡¤¤³¤Î¥³¡¼¥É¤Î»ÈÍÑ¡¤ ¥³¥Ô¡¼¡¤½¤ÀµµÚ¤ÓÇÛÉۤϼ«Í³¤Ë¹Ô¤Ã¤Æ·ë¹½¤Ç¤¹¡¥¤¿¤À¤·¡¤¤³¤Î¥³¡¼¥É¤Î½¤Àµ¤ò ¹Ô¤Ã¤¿¾ì¹ç¤Ï¡¤¤½¤Î¤³¤È¤òÌÀµ­¤·¤Æ¤¯¤À¤µ¤¤¡¥
    • ²»À¼¿®¹æ¤Ï¼Â¿ô¥Ç¡¼¥¿¤Ë¤Ä¤­¼ÂÎ¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹´Ø¿ô rdft() ¤ò»ÈÍѤ¹¤ë¡£»È¤¤Êý¤Ï¥·¥ó¥×¥ë¡£FFT ¥µ¥¤¥º¤ò 2¤Î¤Ù¤­¾è¤ÎÃͤȤ¹¤ë¤³¤È¤ËÃí°Õ¡£
      -------- Real DFT / Inverse of Real DFT --------

       [usage]
        <case1>
         ip[0] = 0; // first time only
         rdft(n, 1, a, ip, w);
        <case2>
         ip[0] = 0; // first time only
         rdft(n, -1, a, ip, w);

       [parameters]
        n     :data length (int)
            n >= 2, n = power of 2

        a[0...n-1]  :input/output data (double *)
            <case1>
             output data
              a[2*k] = R[k], 0<=k<n/2
              a[2*k+1] = I[k], 0<k<n/2
              a[1] = R[n/2]
            <case2>
             input data
              a[2*j] = R[j], 0<=j<n/2
              a[2*j+1] = I[j], 0<j<n/2
              a[1] = R[n/2]

        ip[0...*]   :work area for bit reversal (int *)
            length of ip >= 2+sqrt(n/2)
            strictly, 
            length of ip >= 
             2+(1<<(int)(log(n/2+0.5)/log(2))/2).
            ip[0],ip[1] are pointers of the cos/sin table.

        w[0...n/2-1]   :cos/sin table (double *)
            w[],ip[] are initialized if ip[0] == 0.

       [remark]
        Inverse of 
         rdft(n, 1, a, ip, w);
        is 
         rdft(n, -1, a, ip, w);
         for (j = 0; j <= n - 1; j++) {
          a[j] *= 2.0 / n;
         }

»îºî

¥ì¡¼¥È 33330Hz ¤Ç¥µ¥ó¥×¥ê¥ó¥°¤·¤¿²»À¼¿®¹æ¤ò mbed ¥Þ¥¤¥³¥ó¾å¤Î FFT ½èÍý¤Ë¤«¤±¤Æ¥Ô¡¼¥¯¼þÇÈ¿ô¤òµá¤á¥³¥ó¥½¡¼¥ë¤ØÏ¢Â³½ÐÎϤ¹¤ëÆâÍÆ¤Ç»îºî¤ò¹Ô¤¤¤Þ¤·¤¿¡£¼ê¸µ¤Î³Îǧ¤Ç¤Ï mbed LPC1768 ¤Î¥á¥â¥êÍÆÎ̾å FFT ¥µ¥¤¥º¤Ï 210 = 1024 ¤¬¸Â³¦¤Ç¤¢¤ê¤½¤Î±Æ¶Á¤é¤·¤­¤â¤Î¤¬¼ã´³±®¤¨¤ë¤â¤Î¤Î½½Ê¬¤Ë¼ÂÍÑ¿å½à¤Ë¤¢¤ë¤È¹Í¤¨¤é¤ì¤Þ¤¹¡£

ưºî¤ÎÍÍ»Ò

ư²è¡§1ʬ33Éá¡¡¡¢¨²»ÎÌÃí°Õ

¤³¤Îư²è¤Ç¤ÏÆóÂæ¤Î¥¿¥Ö¥ì¥Ã¥È¾å¤Î¤Õ¤¿¤Ä¤Î¥×¥í¥°¥é¥à¤ò»È¤Ã¤Æ¥Æ¥¹¥È¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£

±¦¤Î¥¿¥Ö¥ì¥Ã¥È¤«¤é½ç¼¡½êÄê¤Î¼þÇÈ¿ô¤Î¥µ¥¤¥óÇÈ¿®¹æ¤ò½ÐÎϤ·¡¢¤½¤ì¤ò mbed ¥Þ¥¤¥³¥ó¤Èº¸Â¦¤Î¥¿¥Ö¥ì¥Ã¥È¤Ç¤½¤ì¤¾¤ì FFT ½èÍý¤Ë¤«¤±Î¾¼Ô¤Î·ë²Ì¤ò´Ñ»¡¤·¤Æ¤¤¤Þ¤¹¡£

¥½¡¼¥¹¥³¡¼¥É

sonic05_FFT2

  • main.cpp
    
    // Â籺ÈÇ FFT ¥é¥¤¥Ö¥é¥ê¤ÇÆþÎϲ»À¼¿®¹æ¤Î¥Ô¡¼¥¯¼þÇÈ¿ô¤òÆÀ¤ë
    
    #include "mbed.h"
    
    #define DEVELOP
    #ifdef DEVELOP
    #define dbg(...) printf(__VA_ARGS__)
    #else
    #define dbg(...)
    #endif
    
    #define PI = 3.141592653589793238462;
    #define SAMPLE_RATE 33330
    // n >= 2, n = power of 2
    #define FFTSIZE 1024
    // length of ip >= 2+sqrt(n/2)
    const int IP_LEN = 4 + sqrt((double)(FFTSIZE/2));
    
    Ticker tick;
    double *recBufp = NULL;
    int countTick;
    Timer timer;
    bool recDone;
    AnalogIn mic(p20);
    DigitalOut led(LED4);
    
    // Åö³º¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ç¤Î¥µ¥ó¥×¥ê¥ó¥°´Ö³Ö ÉÃ
    const float SEC_PER_SAMPLEPOINT = 1.0 / SAMPLE_RATE;
    
    void rdft(int n, int isgn, double *a, int *ip, double *w);
    
    int doFFT(double *FFTBuffer) {
      int ip[IP_LEN];
      double *w = (double*)malloc(sizeof(double) * (FFTSIZE/2));
      ip[0] = 0;
      rdft(FFTSIZE, 1, FFTBuffer, ip, w);
    
      double maxAmp = 0;
      int index;
      for (int i = 0; i < FFTSIZE/2; i++) {
        double a = FFTBuffer[i*2]; // ¼ÂÉô
        double b = FFTBuffer[i*2 + 1]; // µõÉô
        // a+ib ¤ÎÀäÂÐÃÍ ¢å a^2 + b^2 = r ¤¬¿¶ÉýÃÍ
        double r = sqrt(a*a + b*b);
        if (r > maxAmp) {
          maxAmp = r;
          index = i;
        }
      }
      double freq = index * SAMPLE_RATE / FFTSIZE;
      if (freq > 0 && maxAmp > 1.0) {
        dbg("freq=%d mag=%f\r\n", (int)freq, maxAmp);
      }
      free(w);
      return (int)freq;
    }
    
    // ¥µ¥ó¥×¥ê¥ó¥°
    void flip() {
      // AnalogIn.read() ¤ÎÃÍÈÏ°Ï¤Ï 0¡Á1.0 ¤Ë¤Ä¤­Ãæ¿´Ãͤò 0 ¤Ë
      recBufp[countTick++] = mic.read() - 0.5;
      if (countTick == FFTSIZE) {
        tick.detach();
        recDone = true;
      }
    }
    
    int main() {
      recBufp = (double*)malloc(sizeof(double) * FFTSIZE);
      while (1) {
        countTick = 0;
        recDone = false;
        tick.attach(&flip, SEC_PER_SAMPLEPOINT);
        while (!recDone) {
          wait_ms(100);
        }
        doFFT(recBufp);
      }
      if (recBufp) {
        free(recBufp);
      }
      return 0;
    }
    
    

(tanabe)
klab_gijutsu2 at 17:21¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
2017ǯ06·î15Æü

²»¤òÍøÍѤ¹¤ë 3 ¡ÁAndroid ¥Ç¥Ð¥¤¥¹¤Ç¤Î²»ÇÈÄÌ¿®¡§¼ÂÁõÊÔ¡Á

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

¤³¤Îµ­»ö¤ÎÆâÍÆ

Á°²ó¤Îµ­»ö¤Ç¤Ï Android ¥Ç¥Ð¥¤¥¹´Ö¤Ç²»ÇÈÄÌ¿®¤ò¹Ô¤¦¤¿¤á¤Î½àÈ÷¤È¤·¤Æ¼¡¤Î¤ß¤Ã¤Ä¤ÎÍ×ÁǤËÌܤò¸þ¤±¤Þ¤·¤¿¡£

º£²ó¤Ï¤³¤ì¤é¤òÁǺà¤È¤·¤Æ²»À¼¿®¹æ¤Ç¥Ó¥Ã¥È¥Ç¡¼¥¿¤òÁ÷¼õ¿®¤·¤Æ¤ß¤Þ¤¹¡£»ÍÃʳ¬¤Ëʬ¤±½ç¼¡µ¡Ç½¤ò²Ã¤¨¤Ê¤¬¤é»îºî¤ò¹Ô¤¤¤Þ¤¹¡£

2017-11-29 Äɵ­¡§
Ëܵ­»ö¤Ë·ÇºÜ¤Î¥³¡¼¥É¤Ï³«È¯»þ¤Ë Android 5.x ´Ä¶­¤ò»ÈÍѤ·¤Æ¤ª¤ê¡¢Android 6.0 °Ê¹ß¤Ç¤Ï android.permission.RECORD_AUDIO ¤Ë¤Ä¤¤¤Æ¼Â¹Ô»þ¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¼èÆÀ¤¬É¬ÍפǤ¹¡£
¤³¤Î·ï¤Ø¤ÎÂбþÎã¤È¤·¤Æ sonic01 ¤Î MainActivity.java ¤Ë¼ê¤ò²Ã¤¨¤Þ¤·¤¿¡£ ¡Êdiff¡Ë
¾¤Î¥×¥í¥¸¥§¥¯¥È¤Ë¤Ä¤¤¤Æ¤âŬµ¹²ÃÌ£¤·¤Æ²¼¤µ¤¤¡£

1. ¥Ó¥Ã¥È¥Ç¡¼¥¿¤ò²»À¼¿®¹æ¤ÇÁ÷¼õ¿®¤¹¤ë 1

ÁÛÄꤷ¤¿ÆâÍÆ

¤Þ¤ººÇ½é¤Î»îºî¤ËºÝ¤·¼¡¤ÎÆâÍÆ¤òÁÛÄꤷ¤Þ¤·¤¿¡£

  • Á÷¿®Â¦¤ÏÁ÷¿®ÀìÍÑ¡¢¼õ¿®Â¦¤Ï¼õ¿®ÀìÍѤȤ¹¤ë
  • Á÷¿®Â¦¤ÏǤ°Õ¤Îʸ»úÎó¤ò½êÄê¤Îµ¬Â§¤Ëź¤Ã¤Æ¥µ¥¤¥óÇÈ¿®¹æ¤ËÊÑ´¹¤·¥ª¡¼¥Ç¥£¥ª½ÐÎϤ¹¤ë
  • ¼õ¿®Â¦¤Ï½¸²»Ãæ¤Ë½êÄê¤Îµ¬Â§¤Ëź¤Ã¤¿²»À¼¿®¹æ¤ò¸¡ÃΤ¹¤ë¤È¤½¤³¤«¤éʸ»úÎó¾ðÊó¤òÉü¸µ¤·²èÌ̤Ëɽ¼¨¤¹¤ë
  • ³«È¯¾å¤ÎÊØµ¹¤Î¤¿¤á¤Ë²Äݲ»¤ò»ÈÍѤ¹¤ë

°Ê²¼¤Ë¤Ä¤¤¤Æ¤Ï¤È¤ê¤¢¤¨¤º¸å¤Þ¤ï¤·¤Ç¤¹¡£

  • ÅÁÁ÷¸úΨ
  • ¸í¤ê¤Ø¤ÎÂкö

¼þÇÈ¿ôÊÑÄ´¡ÊFSK¡Ë¤Ë¤Ä¤¤¤Æ

½êÄê¤Î¥Ç¡¼¥¿¤ò²»À¼¿®¹æ¤ËÊÑ´¹¤¹¤ë¤¿¤á¤Ë¼þÇÈ¿ôÊÑÄ´Êý¼°¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£¼¡¤Î¹Í¤¨Êý¤Ç¤¹¡£

  • ¤Õ¤¿¤Ä¤Î¼þÇÈ¿ô A, B ¤Ë 0 ¤È 1 ¤ò³ä¤êÅö¤Æ¤ë
  • ¸µ¥Ç¡¼¥¿¤Î¥Ó¥Ã¥ÈʤӤò¾åµ­ A, B ¤ËÃÖ¤­´¹¤¨¤½¤ì¤é¤ò½êÄê¤Î»þ´Ö´Ö³Ö¤ÇÀÚ¤êÂØ¤¨¤ë

  • FSK - ¡ÖÄÌ¿®ÍѸì¤Î´ðÁÃÃμ±¡×¤è¤ê
    Àµ¸¹ÇȤËÂФ·¤Æ¥Ç¥£¥¸¥¿¥ë¿®¹æ¤ÇÊÑÄ´¤ò¹Ô¤Ê¤¦¤¤¤ï¤æ¤ë¥Ç¥£¥¸¥¿¥ëÊÑÄ´¤ÎÊý¼°¤Î°ì¤Ä¤Ç¡¢¥Ç¥£¥¸¥¿¥ëÃͤòÀµ¸¹ÇȤμþÇÈ¿ô¤ËÂбþ¤µ¤»¤ÆÅÁÁ÷¤¹¤ëÊý¼°¤Î¤³¤È¡£¶ñÂÎŪ¤Ë¤Ï¥Ç¥£¥¸¥¿¥ëÃͤÎ1/0¤ËÂбþ¤µ¤»¤Æ2¤Ä¤Î¼þÇÈ¿ô¤ò·è¤á¡¢ÆþÎϤµ¤ì¤ë¥Ç¥£¥¸¥¿¥ë¿®¹æ¤Ë±þ¤¸¤Æ¤½¤ì¤¾¤ì¤Î¼þÇÈ¿ô¤ÎÀµ¸¹ÇȤò¸ò¸ß¤ËÁ÷½Ð¤¹¤ë¤³¤È¤Ç¼Â¸½¤µ¤»¤ë¡£

»îºî

½èÍý¤Î¥¤¥á¡¼¥¸

¤¶¤Ã¤¯¤ê°Ê²¼¤ÎÍ×ÎΤǼÂÁõ¤ò»î¤ß¤Þ¤·¤¿¡£

  • ¼þÇÈ¿ôÊÑÄ´¤Ë¤ª¤¤¤Æ¤Ï 8000Hz ¤ò 0, 10000Hz ¤ò 1 ¤È¤·¤Æ°·¤¤ 1 ¥Ó¥Ã¥È¤¢¤¿¤ê¤Îȯ¿¶»ý³»þ´Ö¤ò 100¥ß¥êÉäȤ¹¤ë ¡Ê¤è¤Ã¤ÆÅÁÁ÷®ÅÙ¤Ï 10bps¡Ë

  • ¿®¹æ½ÐÎϤ˺ݤ·¤Æ¤Ïñ°ì¥Ð¥Ã¥Õ¥¡¾å¤Ë½ª»Ï¤Î´°·ë¤·¤¿¥Ç¡¼¥¿¤ò¹½ÃÛ¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯À¸À®ºÑ¤ß¤Î 8000Hz, 10000Hz ¿®¹æ¤òºÆÀ¸¥Ð¥Ã¥Õ¥¡¤Ë½ç¼¡Ä¾Àܽñ¤­¹þ¤à
  • º£²ó¤Ï»²¾È¤·¤Æ¤¤¤Ê¤¤¤¬ËöÈø¤Ë½ªÃ¼¤ÎÉäÃú¤È¤·¤Æ 12000Hz ¤Î¿®¹æ¤ò 1ÉôÖÉÕÍ¿¤¹¤ë
  • º¸¡§Á÷¿®Â¦¡¡±¦¡§¼õ¿®Â¦

ưºî¤ÎÍÍ»Ò

ư²è¡§ 1ʬ30Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¥½¡¼¥¹¥³¡¼¥É

Á÷¿®Â¦¡§ sonic05

  • MainActivity.java
    
    /**
     *
     * sonic05
     *
     * ʸ»úÎó¤ò¥µ¥¤¥óÇÈ¿®¹æ¤ËÃÖ¤­´¹¤¨¤Æ½ÐÎϤ¹¤ë
     * Lo -> 8000Hz, Hi -> 10000Hz
     * Âиþ¤Î¼õ¿®¥×¥í¥°¥é¥à¤Ï sonic06
     *
     */
    
    package jp.klab.sonic05;
    
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.AudioManager;
    import android.media.AudioTrack;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.ToggleButton;
    
    import java.io.UnsupportedEncodingException;
    import java.util.Arrays;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final float SEC_PER_SAMPLEPOINT = 1.0f / SAMPLE_RATE;
      private static final int AMP = 4000;
      private static final int ELMS_1SEC = SAMPLE_RATE;
      private static final int ELMS_100MSEC = SAMPLE_RATE/10;
    
      private static final int FREQ_LOW  = 8000;
      private static final int FREQ_HI  = 10000;
      private static final int FREQ_END = 12000;
    
      private static final int MSG_PLAY_START   = 120;
      private static final int MSG_PLAY_END   = 130;
    
      private static final byte [] BITS = new byte [] {
          (byte)0x80, (byte)0x40, (byte)0x20, (byte)0x10,
          (byte)0x08, (byte)0x04, (byte)0x02, (byte)0x01};
    
      private Handler mHandler;
      private AudioTrack mAudioTrack = null;
      private ToggleButton mButton01;
      private EditText mEditText01;
      private short mPlayBuf1[];
      private short mPlayBuf2[];
      private short mPlayBuf3[];
      private String mText;
    
      // ¥µ¥¤¥óÇȥǡ¼¥¿¤òÀ¸À®
      private void createSineWave(short[] buf, int freq, int amplitude, boolean doClear) {
        if (doClear) {
          Arrays.fill(buf, (short) 0);
        }
        for (int i = 0; i < ELMS_1SEC; i++) {
          float currentSec = i * SEC_PER_SAMPLEPOINT; // ¸½ºß°ÌÃ֤ηвáÉÿô
          double val = amplitude * Math.sin(2.0 * Math.PI * freq * currentSec);
          buf[i] += (short)val;
        }
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mButton01 = (ToggleButton)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mEditText01 = (EditText)findViewById(R.id.editText01);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        mPlayBuf1 = new short[ELMS_1SEC];
        mPlayBuf2 = new short[ELMS_1SEC];
        mPlayBuf3 = new short[ELMS_1SEC];
        createSineWave(mPlayBuf1, FREQ_LOW, AMP, true); // Low
        createSineWave(mPlayBuf2, FREQ_HI,  AMP, true); // Hi
        createSineWave(mPlayBuf3, FREQ_END, AMP, true); // END
    
        // ºÆÀ¸ÍÑ
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_OUT_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes,
                        AudioTrack.MODE_STREAM);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioTrack != null) {
          if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioTrack");
            mAudioTrack.stop();
            mAudioTrack.flush();
          }
          mAudioTrack = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
          mAudioTrack.stop();
          mAudioTrack.flush();
        }
        if (mButton01.isChecked()) {
          mText = mEditText01.getText().toString();
          if (mText.length() > 0) {
            new Thread(this).start();
          } else {
            mButton01.setChecked(false);
          }
        }
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_PLAY_START:
            Log.d(TAG, "MSG_PLAY_START");
            break;
          case MSG_PLAY_END:
            Log.d(TAG, "MSG_PLAY_END");
            mButton01.setChecked(false);
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        mHandler.sendEmptyMessage(MSG_PLAY_START);
        byte[] strByte = null;
        try {
          strByte = mText.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
        }
        mAudioTrack.play();
        for (int i = 0; i < strByte.length; i++) {
          valueToWave(strByte[i]);
        }
        valueToWave((byte) 0x20); // ¥À¥ß¡¼
        mAudioTrack.write(mPlayBuf3, 0, ELMS_1SEC); // ½ªÃ¼
    
        mAudioTrack.stop();
        mAudioTrack.flush();
        mHandler.sendEmptyMessage(MSG_PLAY_END);
      }
    
      // »ØÄꤵ¤ì¤¿¥Ð¥¤¥ÈÃͤò²»À¼¿®¹æ¤ËÃÖ¤­´¹¤¨¤ÆºÆÀ¸¤¹¤ë
      private void valueToWave(byte val) {
        for (int i = 0; i < BITS.length; i++) {
          // ¥Ó¥Ã¥È¤´¤È¤Ë Hi, Low ¤ò½ÐÎÏ
          mAudioTrack.write(((val & BITS[i]) != 0) ? mPlayBuf2 : mPlayBuf1, 0, ELMS_100MSEC);
        }
      }
    }
    
    

¼õ¿®Â¦¡§ sonic06

  • MainActivity.java
    
    /**
     *
     * sonic06
     *
     * üËö¤Î¥Þ¥¤¥¯¤«¤é½¸²»¤·¤¿¿®¹æ¤ò¥Ð¥¤¥È¥Ç¡¼¥¿¤ËÊÑ´¹¤¹¤ë
     * Lo -> 8000Hz, Hi -> 10000Hz
     * FFT ½èÍý¤Ë JTransforms ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ
     * Âиþ¤ÎÁ÷¿®¥×¥í¥°¥é¥à¤Ï sonic05
     *
     */
    
    package jp.klab.sonic06;
    
    
    import org.jtransforms.fft.DoubleFFT_1D;
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import java.io.UnsupportedEncodingException;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final short THRESHOLD_SILENCE = 0x00ff;
      private static final int FREQ_LOW =  8000;
      private static final int FREQ_HI  = 10000;
    
      private static final int MSG_RECORD_START = 100;
      private static final int MSG_RECORD_END   = 110;
      private static final int MSG_DATA_RECV  = 130;
    
      private static final byte [] BITS = new byte [] {
          (byte)0x80, (byte)0x40, (byte)0x20, (byte)0x10,
          (byte)0x08, (byte)0x04, (byte)0x02, (byte)0x01};
    
      private Handler mHandler;
      private AudioRecord mAudioRecord = null;
    
      private Button mButton01;
      private TextView mTextView02;
    
      private boolean mInRecording = false;
      private boolean mStop = false;
      private int mBufferSizeInShort;
    
      private short mRecordBuf[];
      private short mTestBuf[];
      private DoubleFFT_1D mFFT;
      private double mFFTBuffer[];
      private int mFFTSize;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        mButton01 = (Button)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mTextView02 = (TextView)findViewById(R.id.textView02);
        mTextView02.setOnClickListener(this);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        mBufferSizeInShort = bufferSizeInBytes / 2;
        // Ï¿²»ÍѥХåե¡
        mRecordBuf = new short[mBufferSizeInShort];
    
        // FFT ½èÍýÍÑ
        mTestBuf =  new short[SAMPLE_RATE/10]; // 100msec
        mFFTSize = mBufferSizeInShort;
        mFFT = new DoubleFFT_1D(mFFTSize);
        mFFTBuffer = new double[mFFTSize];
    
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        mStop = true;
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioRecord != null) {
          if (mAudioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioRecord");
            mAudioRecord.stop();
          }
          mAudioRecord = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (v == (View)mButton01) {
          // ½¸²»³«»Ï or ½ªÎ»
          if (!mInRecording) {
            mInRecording = true;
            new Thread(this).start();
          } else {
            mInRecording = false;
          }
        } else if (v == (View)mTextView02) {
          // ɽ¼¨¥Ç¡¼¥¿¤ò¥¯¥ê¥¢
          mTextView02.setText("");
        }
        return;
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_RECORD_START:
            Log.d(TAG, "MSG_RECORD_START");
            mButton01.setText("STOP");
            break;
          case MSG_RECORD_END:
            Log.d(TAG, "MSG_RECORD_END");
            mButton01.setText("START");
            break;
          case MSG_DATA_RECV:
            //Log.d(TAG, "MSG_DATA_RECV");
            byte[] ch = new byte[] {(byte)msg.arg1};
            try {
              // ¼õ¿®¥Ç¡¼¥¿¤òɽ¼¨
              String s = new String(ch, "UTF-8");
              s = mTextView02.getText() + s;
              mTextView02.setText(s);
            } catch (UnsupportedEncodingException e) {
            }
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        int dataCount = 0;
        int bitCount = 0;
        byte val = 0;
        boolean bSilence = false;
        mHandler.sendEmptyMessage(MSG_RECORD_START);
        // ½¸²»³«»Ï
        mAudioRecord.startRecording();
        while (mInRecording && !mStop) {
          // ²»À¼¥Ç¡¼¥¿ÆÉ¤ß¹þ¤ß
          mAudioRecord.read(mRecordBuf, 0, mBufferSizeInShort);
          bSilence = true;
          for (int i = 0; i < mBufferSizeInShort; i++) {
            short s = mRecordBuf[i];
            if (s > THRESHOLD_SILENCE) {
              bSilence = false;
            }
          }
          if (bSilence) { // Àżä
            dataCount = bitCount = 0;
            continue;
          }
          int copyLength = 0;
          // ¥Ç¡¼¥¿¤ò mTestBuf ¤Ø½ç¼¡¥¢¥Ú¥ó¥É
          if (dataCount < mTestBuf.length) {
            // mTestBuf ¤Î»ÄÎΰè¤Ë±þ¤¸¤Æ¥³¥Ô¡¼¤¹¤ë¥µ¥¤¥º¤ò·èÄê
            int remain = mTestBuf.length - dataCount;
            if (remain > mBufferSizeInShort) {
              copyLength = mBufferSizeInShort;
            } else {
              copyLength = remain;
            }
            System.arraycopy(mRecordBuf, 0, mTestBuf, dataCount, copyLength);
            dataCount += copyLength;
          }
          if (dataCount >= mTestBuf.length) {
            byte ret = doFFT(mTestBuf);
            //Log.d(TAG, "ret=" + ret);
            if (ret == -1) { // FREQ_LOW, FREQ_HI °Ê³°¤Î¼þÇÈ¿ô¤Î¾ì¹ç
              dataCount = bitCount = 0;
              continue;
            } else {
              // ¥Ð¥¤¥È¥Ç¡¼¥¿¤ò½ç¼¡¹½À®
              if (bitCount == 0) {
                val = 0;
              }
              val |= (ret == 1) ? BITS[bitCount] : 0;
              if (bitCount < 7) {
                bitCount++;
              } else { // 1¥Ð¥¤¥Èʬ´°Î»
                bitCount = 0;
                Message msg = new Message();
                msg.what = MSG_DATA_RECV;
                msg.arg1 = (int) val;
                mHandler.sendMessage(msg);
              }
            }
            dataCount = 0;
            // mRecordBuf ¤ÎÅÓÃæ¤Þ¤Ç¤ò mTestBuf ¤Ø¥³¥Ô¡¼¤·¤Æ FFT ¤·¤¿¾ì¹ç¤Ï
            // mRecordBuf ¤Î»Ä¥Ç¡¼¥¿¤ò mTestBuf ÀèÆ¬¤Ø¥³¥Ô¡¼¤·¤¿¾å¤Ç·Ñ³
            if (copyLength < mBufferSizeInShort) {
              int startPos = copyLength;
              copyLength = mBufferSizeInShort - copyLength;
              System.arraycopy(mRecordBuf, startPos, mTestBuf, 0, copyLength);
              dataCount += copyLength;
            }
          }
        }
        // Ï¿²»½ªÎ»
        mAudioRecord.stop();
        mHandler.sendEmptyMessage(MSG_RECORD_END);
      }
    
      private byte doFFT(short[] data) {
        for (int i = 0; i < mFFTSize; i++) {
          mFFTBuffer[i] = (double)data[i];
        }
        mFFT.realForward(mFFTBuffer);
    
        // ½èÍý·ë²Ì¤ÎÊ£ÁÇ¿ôÇÛÎ󤫤é¥Ô¡¼¥¯¼þÇÈ¿ôÀ®Ê¬¤ÎÍ×ÁÇÈÖ¹æ¤òÆÀ¤ë
        double maxAmp = 0;
        int index = 0;
        for (int i = 0; i < mFFTSize/2; i++) {
          double a = mFFTBuffer[i*2]; // ¼ÂÉô
          double b = mFFTBuffer[i*2 + 1]; // µõÉô
          // a+ib ¤ÎÀäÂÐÃÍ ¢å a^2 + b^2 = r ¤¬¿¶ÉýÃÍ
          double r = Math.sqrt(a*a + b*b);
          if (r > maxAmp) {
            maxAmp = r;
            index = i;
          }
        }
        // ¥Ô¡¼¥¯¼þÇÈ¿ô¤òµá¤á¤ë
        int freq = index * SAMPLE_RATE / mFFTSize;
        return (byte)((freq == FREQ_LOW) ? 0 : (freq == FREQ_HI) ? 1 : -1);
      }
    }
    
    

¼þÇÈ¿ôÀÚ¤êÂØ¤¨²Õ½ê¤ÎÇÈ·Á¤ò¸«¤ë

¿®¹æÃæ¤Î Lo¡Ê8000Hz¡Ë¤«¤é Hi¡Ê10000Hz¡Ë¡¢Hi ¤«¤é Lo ¤Ø¤ÎÀÚ¤êÂØ¤¨Éôʬ¤ÎÇÈ·Á¤Î³Îǧ¤ò¹Ô¤¤¤Þ¤·¤¿¡£

Lo, Hi ¤È¤â¤Ë 10 ¤Ç³ä¤êÀÚ¤ì¤ë¼þÇÈ¿ô¤Ê¤Î¤Ç¡¢ÀèÆ¬¤«¤é 100¥ß¥êÉøå¤Î°ÌÃ֤Ǥα¿Æ°±ß¾å¤Î Y ºÂɸ¤Ï 1Éøå¤Î°ÌÃÖ¤ÈÅù¤·¤¯ 0 ¤Ç¤¢¤ê¡¢¤½¤³¤ËƱ¤¸¤¯ Y=0 »Ï¤Þ¤ê¤ÎÊ̤μþ´ü¤Î¥µ¥¤¥óÇȤòÀܹ礷¤Æ¤â°ÌÁê¤ÎÉÔϢ³¤ÏȯÀ¸¤·¤Ê¤¤¤Ï¤º¤Ç¤¹¡£ ¡Ê¤¿¤À¤·¼þ´ü¤Î°ã¤¤¤¬·Ñ¤®ÌÜÁ°¸å¤Î¥«¡¼¥Ö¤Î·Á¾õ¤Î°ã¤¤¤È¤·¤ÆÉ½¤ì¤ë¤¿¤áÇÈ·Á¤È¤·¤Æ´°àú¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡Ë

°Ê²¼¤ÏÁ÷¿®Â¦¥¢¥×¥ê¤«¤é¤Î¿®¹æ½ÐÎϤò PC ¤ËÀܳ¤·¤¿¥Þ¥¤¥¯¤«¤é¼è¤ê¹þ¤ó¤À Audacity ¤Î¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤Ç¤¹¡£

Lo -> Hi Éôʬ¤Î¥º¡¼¥à

¸å³¤Î Hi -> Lo Éôʬ¤òƱÍͤ˥º¡¼¥à

2. ¥Ó¥Ã¥È¥Ç¡¼¥¿¤ò²»À¼¿®¹æ¤ÇÁ÷¼õ¿®¤¹¤ë 2

¾å¤ÎºÇ½é¤Î»îºî¤Ç¤Ï¤Þ¤º²»¤Ë¤è¤ë¥Ç¡¼¥¿¤ÎÁ÷¼õ¿®¼«ÂΤ¬²Äǽ¤Ç¤¢¤ë¤³¤È¤ò³Îǧ¤·¤Þ¤·¤¿¤¬¡¢Æ°ºî¤¬ÉÔ°ÂÄê¤Ç²¿¤è¤êÄÌ¿®¤ÎÃÙ¤µ¤¬ÌܤˤĤ­¤Þ¤¹¡£¤³¤ÎÅÀ¤Ë¤Ä¤¤¤Æ¹Í¤¨¤Æ¤ß¤Þ¤¹¡£

ÅÁÁ÷¸úΨ²þÁ±¤Î¹Í¤¨Êý

¸úΨ¤ò²þÁ±¤¹¤ë¤¿¤á¤ËÅÁ㤹¤ë¾ðÊó¤ÎÆâÍÆ¤Ë¼ê¤ò²Ã¤¨¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£1¥Ð¥¤¥Èʬ¤Î¥­¥ã¥é¥¯¥¿¥Ç¡¼¥¿¤ò¥Ó¥Ã¥È¤´¤È¤Ë 0,1 ¤òɽ¤ï¤¹¤Õ¤¿¤Ä¤Î¼þÇÈ¿ô¤ÎÇȤÎÍåÎó¤Çɽ¸½¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢256¼ïÎà¤Î¼þÇÈ¿ô¤òÍѤ¤¤ÆÄ¾ÀÜ 0x00 ¡Á 0xFF ¤òɽ¸½¤¹¤ë·Á¤Ë¤¹¤ì¤ÐÍýÏÀ¾åÅÁÁ÷¸úΨ¤¬ 8Çܸþ¾å¤¹¤ë¤Ï¤º¤Ç¤¹¡£¤³¤ì¤ò¶ñÂ⽤·¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤¹¡£

»îºî

½èÍý¤Î¥¤¥á¡¼¥¸

°Ê²¼¤ÎÍ×ÎΤǼÂÁõ¤ò¹Ô¤¤¤Þ¤·¤¿¡£

  • Á÷¿®Â¦¤Ï¥Ð¥¤¥ÈÃÍ 0x00 ¡Á 0xFF ¤ò 400Hz ¡Á 5500Hz ¤Î 20Hz ¹ï¤ß¤Î 256 ¥Ñ¥¿¡¼¥ó¤Î¼þÇÈ¿ô¤«¤éÀ®¤ë²»À¼¿®¹æ¤ËÊÑÄ´¤¹¤ë
  • ¼õ¿®Â¦¤Ï¡Ö¡Ê¸¡ÃΤ·¤¿¥Ô¡¼¥¯¼þÇÈ¿ô - 400¡Ë/ 20¡×¤ÎÊ¿°×¤Ê·×»»¤Ç¸µ¤Î¥Ð¥¤¥ÈÃͤØÉü¹æ¤¹¤ë
  • ¥¢¥×¥ê¤Î UI ¤ÏºÇ½é¤Î»îºî¤ÈƱ¤¸

ưºî¤ÎÍÍ»Ò

ư²è¡§ 1ʬ¡¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¥½¡¼¥¹¥³¡¼¥É

Á÷¿®Â¦¡§ sonic07     GitHub

  • MainActivity.java
    /**
     * sonic07
     *
     * ʸ»úÎó¤ò¥µ¥¤¥óÇÈ¿®¹æ¤ËÃÖ¤­´¹¤¨¤Æ½ÐÎϤ¹¤ë
     * ÅÁÁ÷¸úΨ²þÁ±ÈÇ
     * Âиþ¤Î¼õ¿®¥×¥í¥°¥é¥à¤Ï sonic08
     *
     */
    
    package jp.klab.sonic07;
    
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.AudioManager;
    import android.media.AudioTrack;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.ToggleButton;
    
    import java.io.UnsupportedEncodingException;
    import java.util.Arrays;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final float SEC_PER_SAMPLEPOINT = 1.0f / SAMPLE_RATE;
      private static final int AMP = 4000;
      private static final int FREQ_BASE = 400;
      private static final int FREQ_STEP = 20;
      private static final int FREQ_KEY = 300;
      private static final int ELMS_1SEC = SAMPLE_RATE;
      private static final int ELMS_100MSEC = SAMPLE_RATE/10;
      private static final int ELMS_MAX = 256;
    
      private static final int MSG_PLAY_START   = 120;
      private static final int MSG_PLAY_END   = 130;
    
      private Handler mHandler;
      private AudioTrack mAudioTrack = null;
      private ToggleButton mButton01;
      private EditText mEditText01;
      private short mPlayBuf[] = new short[SAMPLE_RATE];
      private short mSignals[][] = new short[ELMS_MAX][SAMPLE_RATE/10];
      private String mText;
    
      // ¥µ¥¤¥óÇȥǡ¼¥¿¤òÀ¸À®
      private void createSineWave(short[] buf, int freq, int amplitude, boolean doClear) {
        if (doClear) {
          Arrays.fill(buf, (short) 0);
        }
        for (int i = 0; i < buf.length; i++) {
          float currentSec = i * SEC_PER_SAMPLEPOINT; // ¸½ºß°ÌÃ֤ηвáÉÿô
          double val = amplitude * Math.sin(2.0 * Math.PI * freq * currentSec);
          buf[i] += (short)val;
        }
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mButton01 = (ToggleButton)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mEditText01 = (EditText)findViewById(R.id.editText01);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        // ÀèÆ¬¡¦½ªÃ¼¤ÎÌܰõÍÑ¿®¹æ¥Ç¡¼¥¿
        createSineWave(mPlayBuf, FREQ_KEY, AMP, true);
    
        // 256¼ïÎà¤Î¿®¹æ¥Ç¡¼¥¿¤òÀ¸À®
        for (int i = 0; i < ELMS_MAX; i++) {
          createSineWave(mSignals[i], (short) (FREQ_BASE + FREQ_STEP*i), AMP, true);
        }
    
        // ºÆÀ¸ÍÑ
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_OUT_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes,
                        AudioTrack.MODE_STREAM);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioTrack != null) {
          if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioTrack");
            mAudioTrack.stop();
            mAudioTrack.flush();
          }
          mAudioTrack = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
          mAudioTrack.stop();
          mAudioTrack.flush();
        }
        if (mButton01.isChecked()) {
          mText = mEditText01.getText().toString();
          if (mText.length() > 0) {
            new Thread(this).start();
          } else {
            mButton01.setChecked(false);
          }
        }
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_PLAY_START:
            Log.d(TAG, "MSG_PLAY_START");
            break;
          case MSG_PLAY_END:
            Log.d(TAG, "MSG_PLAY_END");
            mButton01.setChecked(false);
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        mHandler.sendEmptyMessage(MSG_PLAY_START);
        byte[] strByte = null;
        try {
          strByte = mText.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
        }
        mAudioTrack.play();
        mAudioTrack.write(mPlayBuf, 0, ELMS_1SEC); // ³«»Ï
        for (int i = 0; i < strByte.length; i++) {
          valueToWave(strByte[i]);
        }
        mAudioTrack.write(mPlayBuf, 0, ELMS_1SEC); // ½ªÃ¼
    
        mAudioTrack.stop();
        mAudioTrack.flush();
        mHandler.sendEmptyMessage(MSG_PLAY_END);
      }
    
      // »ØÄꤵ¤ì¤¿¥Ð¥¤¥ÈÃͤò²»À¼¿®¹æ¤ËÃÖ¤­´¹¤¨¤ÆºÆÀ¸¤¹¤ë
      private void valueToWave(byte val) {
        mAudioTrack.write(mSignals[val], 0, ELMS_100MSEC);
      }
    }
    
    
    

¼õ¿®Â¦¡§ sonic08     GitHub

  • MainActivity.java
    
    /**
     * sonic08
     *
     * üËö¤Î¥Þ¥¤¥¯¤«¤é½¸²»¤·¤¿¿®¹æ¤ò¥Ð¥¤¥È¥Ç¡¼¥¿¤ËÊÑ´¹¤¹¤ë
     * ÅÁÁ÷¸úΨ²þÁ±ÈÇ
     * FFT ½èÍý¤Ë JTransforms ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ
     * Âиþ¤ÎÁ÷¿®¥×¥í¥°¥é¥à¤Ï sonic07
     *
     */
    
    package jp.klab.sonic08;
    
    import org.jtransforms.fft.DoubleFFT_1D;
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import java.io.UnsupportedEncodingException;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final short THRESHOLD_SILENCE = 0x00ff;
      private static final int FREQ_BASE = 400;
      private static final int FREQ_STEP = 20;
      private static final int FREQ_MAX = 400 + 255 * 20;
      private static final int UNITSIZE = SAMPLE_RATE/10; // 100msecʬ
    
      private static final int MSG_RECORD_START = 100;
      private static final int MSG_RECORD_END   = 110;
      private static final int MSG_DATA_RECV  = 120;
    
      private Handler mHandler;
      private AudioRecord mAudioRecord = null;
    
      private Button mButton01;
      private TextView mTextView02;
    
      private boolean mInRecording = false;
      private boolean mStop = false;
      private int mBufferSizeInShort;
    
      private short mRecordBuf[];
      private short mTestBuf[];
      private DoubleFFT_1D mFFT;
      private double mFFTBuffer[];
      private int mFFTSize;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        mButton01 = (Button)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mTextView02 = (TextView)findViewById(R.id.textView02);
        mTextView02.setOnClickListener(this);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        mBufferSizeInShort = bufferSizeInBytes / 2;
        // ½¸²»ÍѥХåե¡
        mRecordBuf = new short[mBufferSizeInShort];
    
        // FFT ½èÍýÍÑ
        mTestBuf =  new short[UNITSIZE];
        mFFTSize = UNITSIZE;
        mFFT = new DoubleFFT_1D(mFFTSize);
        mFFTBuffer = new double[mFFTSize];
    
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        mStop = true;
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioRecord != null) {
          if (mAudioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioRecord");
            mAudioRecord.stop();
          }
          mAudioRecord = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (v == (View)mButton01) {
          // ½¸²»³«»Ï or ½ªÎ»
          if (!mInRecording) {
            mInRecording = true;
            new Thread(this).start();
          } else {
            mInRecording = false;
          }
        } else if (v == (View)mTextView02) {
          // ɽ¼¨¥Ç¡¼¥¿¤ò¥¯¥ê¥¢
          mTextView02.setText("");
        }
        return;
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_RECORD_START:
            Log.d(TAG, "MSG_RECORD_START");
            mButton01.setText("STOP");
            break;
          case MSG_RECORD_END:
            Log.d(TAG, "MSG_RECORD_END");
            mButton01.setText("START");
            break;
          case MSG_DATA_RECV:
            //Log.d(TAG, "MSG_DATA_RECV");
            byte[] ch = new byte[] {(byte)msg.arg1};
            try {
              // ¼õ¿®¥Ç¡¼¥¿¤òɽ¼¨
              String s = new String(ch, "UTF-8");
              s = mTextView02.getText() + s;
              mTextView02.setText(s);
            } catch (UnsupportedEncodingException e) {
            }
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        int dataCount = 0;
        boolean bSilence = false;
        mHandler.sendEmptyMessage(MSG_RECORD_START);
        // ½¸²»³«»Ï
        mAudioRecord.startRecording();
        while (mInRecording && !mStop) {
          // ²»À¼¥Ç¡¼¥¿ÆÉ¤ß¹þ¤ß
          mAudioRecord.read(mRecordBuf, 0, mBufferSizeInShort);
          bSilence = true;
          for (int i = 0; i < mBufferSizeInShort; i++) {
            short s = mRecordBuf[i];
            if (s > THRESHOLD_SILENCE) {
              bSilence = false;
            }
          }
          if (bSilence) { // Àżä
            dataCount = 0;
            continue;
          }
          int copyLength = 0;
          // ¥Ç¡¼¥¿¤ò mTestBuf ¤Ø½ç¼¡¥¢¥Ú¥ó¥É
          if (dataCount < mTestBuf.length) {
            // mTestBuf ¤Î»ÄÎΰè¤Ë±þ¤¸¤Æ¥³¥Ô¡¼¤¹¤ë¥µ¥¤¥º¤ò·èÄê
            int remain = mTestBuf.length - dataCount;
            if (remain > mBufferSizeInShort) {
              copyLength = mBufferSizeInShort;
            } else {
              copyLength = remain;
            }
            System.arraycopy(mRecordBuf, 0, mTestBuf, dataCount, copyLength);
            dataCount += copyLength;
          }
          if (dataCount >= mTestBuf.length) {
            // 100ms ʬί¤Þ¤Ã¤¿¤é FFT ¤Ë¤«¤±¤ë
            int freq = doFFT(mTestBuf);
            // ÂԤäƤ¿ÈϰϤμþÇÈ¿ô¤«¥Á¥§¥Ã¥¯
            if (freq >= FREQ_BASE && freq <= FREQ_MAX) {
              int val = (int) ((freq - FREQ_BASE) / FREQ_STEP);
              if (val >= 0 && val <= 255) {
                Message msg = new Message();
                msg.what = MSG_DATA_RECV;
                msg.arg1 = val;
                mHandler.sendMessage(msg);
              } else {
                freq = -1;
              }
            } else {
              freq = -1;
            }
            dataCount = 0;
            if (freq == -1) {
              continue;
            }
            // mRecordBuf ¤ÎÅÓÃæ¤Þ¤Ç¤ò mTestBuf ¤Ø¥³¥Ô¡¼¤·¤Æ FFT ¤·¤¿¾ì¹ç¤Ï
            // mRecordBuf ¤Î»Ä¥Ç¡¼¥¿¤ò mTestBuf ÀèÆ¬¤Ø¥³¥Ô¡¼¤·¤¿¾å¤Ç·Ñ³
            if (copyLength < mBufferSizeInShort) {
              int startPos = copyLength;
              copyLength = mBufferSizeInShort - copyLength;
              System.arraycopy(mRecordBuf, startPos, mTestBuf, 0, copyLength);
              dataCount += copyLength;
            }
          }
        }
        // ½¸²»½ªÎ»
        mAudioRecord.stop();
        mHandler.sendEmptyMessage(MSG_RECORD_END);
      }
    
      private int doFFT(short[] data) {
        for (int i = 0; i < mFFTSize; i++) {
          mFFTBuffer[i] = (double)data[i];
        }
        // FFT ¼Â¹Ô
        mFFT.realForward(mFFTBuffer);
    
        // ½èÍý·ë²Ì¤ÎÊ£ÁÇ¿ôÇÛÎ󤫤é¥Ô¡¼¥¯¼þÇÈ¿ôÀ®Ê¬¤ÎÍ×ÁÇÈÖ¹æ¤òÆÀ¤ë
        double maxAmp = 0;
        int index = 0;
        for (int i = 0; i < mFFTSize/2; i++) {
          double a = mFFTBuffer[i*2]; // ¼ÂÉô
          double b = mFFTBuffer[i*2 + 1]; // µõÉô
          // a+ib ¤ÎÀäÂÐÃÍ ¢å a^2 + b^2 = r ¤¬¿¶ÉýÃÍ
          double r = Math.sqrt(a*a + b*b);
          if (r > maxAmp) {
            maxAmp = r;
            index = i;
          }
        }
        // ¥Ô¡¼¥¯¼þÇÈ¿ô¤òµá¤á¤ë
        int freq = index * SAMPLE_RATE / mFFTSize;
        //Log.d(TAG, "peak=" + freq + "Hz");
        return freq;
      }
    }
    
    

3. ¥Ó¥Ã¥È¥Ç¡¼¥¿¤ò²»À¼¿®¹æ¤ÇÁ÷¼õ¿®¤¹¤ë 3

ÅÁÁ÷¸úΨ¤Î²þÁ±¤Ë³¤­¡¢¼¡¤ÎÍ×ÁǤËÌܤò¸þ¤±¤Æ¤ß¤Þ¤¹¡£

  • ¸í¤êȯÀ¸¤Ø¤ÎÂнè
  • Ͳ»ÇȤÎÍøÍÑ

¸í¤êȯÀ¸¤Ø¤ÎÂнè¤Ë¤Ä¤¤¤Æ

¾¤ÎÄÌ¿®ÊýË¡¤ÈƱÍͤˡ¢²»ÇȤˤè¤ëÄÌ¿®¤Ë¤ª¤¤¤Æ¤âÁ÷¼õ¿®¤ÎºÝ¤Ë²¿¤é¤«¤ÎÍýͳ¤Ç¥Ç¡¼¥¿¤Ë¸í¤ê¤¬È¯À¸¤¹¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ÎÌäÂê¤Ø¤ÎÂнè¤Ë¤Ä¤¤¤Æ¹Í¤¨¤Æ¤ß¤Þ¤¹¡£

¤Þ¤º¸í¤ê¤ò¸¡½Ð²Äǽ¤Ç¤¢¤ë¤³¤È¡¢¤µ¤é¤Ë¡¢¼«Æ°Åª¤Ë¥Ç¡¼¥¿¤òÄûÀµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ì¤ÐÍýÁÛŪ¤Ç¤·¤ç¤¦¡£¤·¤«¤·¤Ê¤¬¤é¡¢¸í¤êÄûÀµ¤ò¼Â¸½¤¹¤ë¤¿¤á¤Ë¤Ï²¿¤é¤«¤Î·Á¤Ç¥Ç¡¼¥¿¤Î¾éĹ²½¤¬É¬¿Ü¤È¤Ê¤êɬÁ³Åª¤ËÅÁÁ÷¸úΨ¤È¤Î¥È¥ì¡¼¥É¥ª¥Õ¤È¤Ê¤ê¤Þ¤¹¡£¾éĹ²½¤µ¤ì¤¿¤è¤êÂ礭¤Ê¥Ç¡¼¥¿¤ò¼ø¼õ¤¹¤ë¤³¤È¤Ç¼«Æ°ÄûÀµ¼Â¸½¤Î²ÄǽÀ­¸þ¾å¤òÁªÂò¤¹¤Ù¤­¤«¡©¤¢¤ë¤¤¤Ï¡¢¸í¤ê̵ͭȽÄê¤Î¤ß¤ò²Äǽ¤È¤¹¤ë¥¹¥ê¥à¤Ê¥Ç¡¼¥¿¤òû»þ´Ö¤Ç¼ø¼õ¤¹¤ë¤³¤È¤ò»Ý¤È¤¹¤ë¤«¡©

¤¿¤È¤¨¤Ð¡¢¥×¥é¥¤¥Ù¡¼¥È¤Ê´Ä¶­¤Ç¤Î²»ÇÈÄÌ¿®¤Î±þÍѤòÁÛÄꤹ¤ë¤È¡¢¥¨¥é¡¼È¯À¸¤Ëµ¤¤Å¤¤¤¿ÍøÍѼԤ¬¼«È¯Åª¤ËÁ÷¼õ¿®¤òºÆ»î¹Ô¤¹¤ë¤Î¤Ï¤´¤¯ÉáÄ̤μ«Á³¤Êή¤ì¤Ç¤¹¡£¤³¤Î¾ìÌ̤ǤÏÄûÀµµ¡Ç½¤è¤ê¤â¤¹¤ß¤ä¤«¤ËÄÌ¿®¤¬¹Ô¤ï¤ì¤ë¤³¤È¤Î¤Û¤¦¤¬µá¤á¤é¤ì¤ë¤Ç¤·¤ç¤¦¡£¤Þ¤¿¡¢¥Ñ¥Ö¥ê¥Ã¥¯¤Ê¶õ´Ö¤Ç¤Î¥Ó¡¼¥³¥ó·Ï¥µ¡¼¥Ó¥¹¤Ë¤ª¤¤¤Æ¤ÏÁ÷¤ê¼ê¤¬Æ±°ì¤Î¾ðÊó¤ò½êÄê¤Î´ü´Ö²¿Å٤ⷫ¤êÊÖ¤·È¯¿®¤¹¤ë¡Ê¤½¤ì¤â¤Þ¤¿Ã±Êý¸þÄÌ¿®¤Ç¤¢¤ë¤³¤È¤Ëµ¯°ø¡Ë¤³¤È¤¬°ìÈÌŪ¤Ê¤Î¤Ç¼õ¤±¼ê¤Ë¤Ï¾ðÊó¼èÆÀ¤ËÀ®¸ù¤¹¤ë¤Þ¤Ç²¿ÅÙ¤â¥Á¥ã¥ó¥¹¤¬Ä󶡤µ¤ì¤Þ¤¹¡£

¤³¤Î¤è¤¦¤Ë¹Í¤¨¤ë¤È¡¢¤³¤³¤Ç¤Ï¸í¤êÄûÀµ¤Î¤¿¤á¤Îµ¡¹½¤Ï¸½ºß¤ÎÏÃÂê¤ËÉԲķç¤ÎÍ×ÁǤǤϤʤ¯¡¢¤à¤·¤í¸í¤ê¤Î¸¡½Ð¤Þ¤Ç¤¬½ÅÍפǤ¢¤ë¤³¤È¤¬¸«¤¨¤Æ¤­¤Þ¤¹¡£

Ͳ»ÇȤÎÍøÍѤˤĤ¤¤Æ

¤³¤³¤Þ¤Ç¤Î»îºî¤Ç¤Ï³«È¯¾å¤ÎÊØµ¹¤«¤é²Äݲ»°è¤Î¿®¹æ¤ÇÄÌ¿®¤ò¹Ô¤Ã¤Æ¤­¤Þ¤·¤¿¡£

¡Ö²»¤òÍøÍѤ¹¤ë 1¡×ËÁƬ¤Î¡Ö¤Ï¤¸¤á¤Ë¡×¤Î¹à¤Ç¤â¿¨¤ì¤¿¤è¤¦¤Ë¡¢²»À¼¿®¹æ¤òÍøÍѤ¹¤ëºÝ¤Î²»°è¤ÎÁªÄê¤Ï´Ä¶­¤ä»ÈÅӤȤΤ«¤Í¤¢¤¤¤Ë¤è¤Ã¤ÆÃ±¤ËŬºàŬ½ê¤ÇȽÃǤµ¤ì¤ë¤Ù¤­¤Ï¤º¤Î¤â¤Î¤Ç¤¹¤¬¡¢¤½¤Î¤³¤È¤È¤Ï¤¢¤Þ¤ê´Ø·¸¤Ê¤¯ÍΤÎÅìÀ¾¤òÌä¤ï¤º¡ÖͲ»ÇȡסÖUltrasonic¡×¤Ï¿Íµ¤¤¬¤¢¤ê¤Þ¤¹¤Í¡£¤½¤í¤½¤í¤³¤Î¤¢¤¿¤ê¤Ç½¾Íè¤Î²Äݲ»¤Ë²Ã¤¨Ä¶²»ÇȤⰷ¤Ã¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤¹¡£

»îºî

½èÍý¤Î¥¤¥á¡¼¥¸

°Ê²¼¤ÎÍ×ÎΤǼÂÁõ¤ò¹Ô¤¤¤Þ¤·¤¿¡£

²Äݲ»¥â¡¼¥É¤ÈͲ»Çȥ⡼¥É

¡ÖͲ»Çȥ⡼¥É¡×¤òÄɲá£

  • Á÷¿®Â¦¤Ï½êÄê¤Î¥Ð¥¤¥ÈÃÍ 0x00 ¡Á 0xFF ¤ò°Ê²¼¤Î¼þÇÈ¿ô°è¤Ç¹½À®¤µ¤ì¤ë²»À¼¿®¹æ¤ËÊÑÄ´¤¹¤ë
    ¡ÊÁ°¹à¤Î¤Õ¤¿¤Ä¤á¤Î»îºî¤Ç¤Ï 20Hz¹ï¤ß¤È¤·¤¿¤¬ 10Hz¹ï¤ß¤Ç¤âÀ­Ç½¾å¤Î»Ù¾ã¤¬¸«¤é¤ì¤Ê¤¤¤¿¤áÂÓ°èÉý¤òÀáÌó¡Ë
    • ²Äݲ»¥â¡¼¥É¡§500Hz ¡Á 3050Hz¡Ê10Hz ¹ï¤ß¡Ë
    • Ͳ»Çȥ⡼¥É¡§14000Hz ¡Á 16550Hz¡Ê10Hz ¹ï¤ß¡Ë

ÀèüÉäÃú¤È½ªÃ¼ÉäÃú

ȯ¿®¤¹¤ë²»À¼¿®¹æ¤ÎÀèÆ¬¤È½ªÃ¼¤ËÌܰõ¤È¤·¤Æ¾å¿Þ¤ÎÈϰϤ˴ޤޤì¤Ê¤¤½êÄê¤Î¼þÇÈ¿ô¤Î¿®¹æ¤ò 1ÉôÖÉÕÍ¿¤¹¤ë¡£

  • ÀèüÉäÃú¡§³Æ¥â¡¼¥É¤Ç»ÈÍѤ¹¤ë²»°è¤ÎÀèÆ¬¼þÇÈ¿ô ¡Ý 80Hz¡Ê¡á420Hz,13920Hz¡Ë
  • ½ªÃ¼ÉäÃú¡§³Æ¥â¡¼¥É¤Ç»ÈÍѤ¹¤ë²»°è¤ÎÀèÆ¬¼þÇÈ¿ô ¡Ý 100Hz¡Ê¡á400Hz, 13900Hz¡Ë

¸í¤ê¸¡½Ð

¼¡¤ÎÆâÍÆ¤Ç¸í¤ê¸¡½Ðµ¡¹½¤òÄɲá£

  • Á÷¿®Â¦¤ÏÀèüÉäÃú¤È¥Ç¡¼¥¿ËÜÂΤδ֤˥ǡ¼¥¿¤Î 32¥Ó¥Ã¥È CRC ·×»»·ë²Ì¡Êjava.util.zip.CRC32 »ÈÍѡˤò 4 * 100¥ß¥êÉôÖȯ¿®¤¹¤ë
  • ¼õ¿®Â¦¤ÏÀèüÉäÃú¤ò¸¡ÃΤ¹¤ë¤È¾åµ­ CRC Ãͤò¼èÆÀ¡¦Éü¹æ¤·¤ÆÊÝ»ý¡£½ªÃ¼ÉäÃú¸¡½Ð»þ¤ËÉü¹æ¤º¤ß¥Ç¡¼¥¿ËÜÂΤΠCRC ¤ò·×»»¤·Î¾¼Ô¤òÈæ³Ó¤¹¤ë¤³¤È¤Ç¸í¤ê¤Î²ÄǽÀ­¤Î̵ͭ¤òȽÄꤹ¤ë
    • ¥Ç¡¼¥¿ËÜÂΤμõ¤±ÅϤ·¤Ë¼ºÇÔ¤·¤¿¥±¡¼¥¹¤Î¤ß¤Ê¤é¤º CRC Ãͤμõ¤±ÅϤ·¤Ë¼ºÇԤΥ±¡¼¥¹¤â¤¢¤ê¤¨¤ë¤¬¡¢¸½»þÅÀ¤Ç¤Ï CRC Ã;ðÊó¼ø¼õ¤Î¾éĹ²½¤Ï¹Í¤¨¤º°ìΧ¤Ë¡Ö¥¨¥é¡¼¡×¤È¤ß¤Ê¤¹

UI

  • º¸¡§Á÷¿®Â¦¡¡±¦¡§¼õ¿®Â¦
    ξ¼Ô¤È¤â¡ÖUltrasonic¡×¥¹¥¤¥Ã¥Á¤ÇͲ»Çȥ⡼¥É¤Ø°Ü¹Ô

ưºî¤ÎÍÍ»Ò

ư²è¡§ 1ʬ19Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¥½¡¼¥¹¥³¡¼¥É

Á÷¿®Â¦¡§ sonic09     GitHub

  • MainActivity.java
    
    /**
     * sonic09
     *
     * ʸ»úÎó¤ò¥µ¥¤¥óÇÈ¿®¹æ¤ËÃÖ¤­´¹¤¨¤Æ½ÐÎϤ¹¤ë
     * 32¥Ó¥Ã¥ÈCRCÉÕÍ¿, Ͳ»Çȥ⡼¥ÉÄɲÃ
     * Âиþ¤Î¼õ¿®¥×¥í¥°¥é¥à¤Ï sonic10
     *
     */
    
    package jp.klab.sonic09;
    
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.AudioManager;
    import android.media.AudioTrack;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.CompoundButton;
    import android.widget.EditText;
    import android.widget.Switch;
    import android.widget.ToggleButton;
    
    import java.io.UnsupportedEncodingException;
    import java.util.Arrays;
    import java.util.zip.CRC32;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener,
        Switch.OnCheckedChangeListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final float SEC_PER_SAMPLEPOINT = 1.0f / SAMPLE_RATE;
      private static final int FREQ_BASE_LOW = 500;
      private static final int FREQ_BASE_HIGH = 14000;
      private static final int AMP_SMALL = 5000;
      private static final int AMP_LARGE = 28000;
    
      private static final int ELMS_1SEC = SAMPLE_RATE;
      private static final int ELMS_UNITSEC = SAMPLE_RATE/10;
      private static final int ELMS_MAX = 256;
    
      private static final int MSG_PLAY_START   = 120;
      private static final int MSG_PLAY_END   = 130;
    
      private int FREQ_STEP = 10;
      private int AMP;
      private int FREQ_BASE;
      private int FREQ_OUT;
      private int FREQ_IN;
    
      private Handler mHandler;
      private AudioTrack mAudioTrack = null;
      private ToggleButton mButton01;
      private EditText mEditText01;
      private Switch mSwitch01;
    
      private short mSigIn[] = new short[SAMPLE_RATE];
      private short mSigOut[] = new short[SAMPLE_RATE];
      private short mSignals[][] = new short[ELMS_MAX][ELMS_UNITSEC];
      private String mText;
    
      // ¥µ¥¤¥óÇȥǡ¼¥¿¤òÀ¸À®
      private void createSineWave(short[] buf, int freq, int amplitude, boolean doClear) {
        if (doClear) {
          Arrays.fill(buf, (short) 0);
        }
        for (int i = 0; i < buf.length; i++) {
          float currentSec = i * SEC_PER_SAMPLEPOINT; // ¸½ºß°ÌÃ֤ηвáÉÿô
          double val = amplitude * Math.sin(2.0 * Math.PI * freq * currentSec);
          buf[i] += (short)val;
        }
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mButton01 = (ToggleButton)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mEditText01 = (EditText)findViewById(R.id.editText01);
        mSwitch01 = (Switch)findViewById(R.id.switch01);
        mSwitch01.setOnCheckedChangeListener(this);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
        setParams(false);
    
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_OUT_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes,
                        AudioTrack.MODE_STREAM);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioTrack != null) {
          if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioTrack");
            mAudioTrack.stop();
            mAudioTrack.flush();
          }
          mAudioTrack = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
          mAudioTrack.stop();
          mAudioTrack.flush();
        }
        if (mButton01.isChecked()) {
          mText = mEditText01.getText().toString();
          if (mText.length() > 0) {
            new Thread(this).start();
          } else {
            mButton01.setChecked(false);
          }
        }
      }
      @Override
      public void onCheckedChanged(CompoundButton b, boolean isChecked) {
        setParams(isChecked);
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_PLAY_START:
            Log.d(TAG, "MSG_PLAY_START");
            break;
          case MSG_PLAY_END:
            Log.d(TAG, "MSG_PLAY_END");
            mButton01.setChecked(false);
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        mHandler.sendEmptyMessage(MSG_PLAY_START);
        byte[] strByte = null;
        try {
          strByte = mText.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
        }
        mAudioTrack.play();
        mAudioTrack.write(mSigIn, 0, ELMS_1SEC); // ÀèüÉäÃú
        // ¥Ç¡¼¥¿ËÜÂΤΠCRC32 ¤ò·×»»¤·¤ÆÈ¯¿®
        CRC32 crc = new CRC32();
        crc.reset();
        crc.update(strByte, 0, strByte.length);
        long crcVal = crc.getValue();
        //Log.d(TAG, "crc=" + Long.toHexString(crcVal));
        byte crcData[] = new byte[4];
        for (int i = 0; i < 4; i++) {
          crcData[i] = (byte)(crcVal >> (24-i*8));
          valueToWave((short) (crcData[i] & 0xFF));
        }
        // ¥Ç¡¼¥¿ËÜÂÎ
        for (int i = 0; i < strByte.length; i++) {
          valueToWave(strByte[i]);
        }
        mAudioTrack.write(mSigOut, 0, ELMS_1SEC); // ½ªÃ¼ÉäÃú
    
        mAudioTrack.stop();
        mAudioTrack.flush();
        mHandler.sendEmptyMessage(MSG_PLAY_END);
      }
    
      // »ØÄꤵ¤ì¤¿¥Ð¥¤¥ÈÃͤò²»À¼¿®¹æ¤ËÃÖ¤­´¹¤¨¤ÆºÆÀ¸¤¹¤ë
      private void valueToWave(short val) {
        //Log.d(TAG, "val=" + val);
        mAudioTrack.write(mSignals[val], 0, ELMS_UNITSEC);
      }
    
      private void setParams(boolean useUltrasonic) {
        AMP = (useUltrasonic) ? AMP_LARGE : AMP_SMALL;
        FREQ_BASE = (useUltrasonic) ? FREQ_BASE_HIGH : FREQ_BASE_LOW;
        FREQ_OUT = FREQ_BASE - 100;
        FREQ_IN = FREQ_OUT + 20;
        // Àèü¡¦½ªÃ¼ÉäÃú¤Î¿®¹æ¥Ç¡¼¥¿¤òÀ¸À®
        createSineWave(mSigIn, FREQ_IN, AMP, true);
        createSineWave(mSigOut, FREQ_OUT, AMP, true);
        // 256¼ïÎà¤Î¿®¹æ¥Ç¡¼¥¿¤òÀ¸À®
        for (int i = 0; i < ELMS_MAX; i++) {
          createSineWave(mSignals[i], (short) (FREQ_BASE + FREQ_STEP * i), AMP, true);
        }
    
      }
    }
    
    

¼õ¿®Â¦¡§ sonic10     GitHub

  • MainActivity.java
    
    /**
     * sonic10
     *
     * üËö¤Î¥Þ¥¤¥¯¤«¤é½¸²»¤·¤¿¿®¹æ¤ò¥Ð¥¤¥È¥Ç¡¼¥¿¤ËÊÑ´¹¤¹¤ë
     * CRC32¤Ë¤è¤ë¸í¤ê¸¡½Ð, Ͳ»Çȥ⡼¥É¤ØÂбþ
     * FFT ½èÍý¤Ë JTransforms ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ
     * Âиþ¤ÎÁ÷¿®¥×¥í¥°¥é¥à¤Ï sonic09
     *
     */
    
    package jp.klab.sonic10;
    
    import org.jtransforms.fft.DoubleFFT_1D;
    import android.graphics.Color;
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CompoundButton;
    import android.widget.Switch;
    import android.widget.TextView;
    
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.zip.CRC32;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener,
          Switch.OnCheckedChangeListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final short THRESHOLD_SILENCE = 0x00ff;
      private static final int FREQ_BASE_LOW = 500;
      private static final int FREQ_BASE_HIGH = 14000;
      private static final int FREQ_STEP = 10;
      private static final int UNITSIZE = SAMPLE_RATE/10; // 100msecʬ
    
      private static final int MSG_RECORD_START = 100;
      private static final int MSG_RECORD_END   = 110;
      private static final int MSG_DATA_RECV  = 120;
      private static final int MSG_RECV_OK    = 200;
      private static final int MSG_RECV_NG    = 210;
    
      private int FREQ_BASE = FREQ_BASE_LOW;
      private int FREQ_OUT = FREQ_BASE - 100;
      private int FREQ_IN = FREQ_OUT + 20;
      private int FREQ_MAX = FREQ_BASE + FREQ_STEP * 255;
    
      private Handler mHandler;
      private AudioRecord mAudioRecord = null;
    
      private Button mButton01;
      private TextView mTextView02;
      private TextView mTextView03;
      private Switch mSwitch01;
    
      private boolean mInRecording = false;
      private boolean mStop = false;
      private int mBufferSizeInShort;
    
      private short mRecordBuf[];
      private short mTestBuf[];
      private DoubleFFT_1D mFFT;
      private double mFFTBuffer[];
      private int mFFTSize;
      private byte mValueCount = -1;
      private long mCrc32Val = 0;
      private String mRecvStr;
      private ArrayList<Byte> mDataArrayList = new ArrayList<Byte>();
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        mButton01 = (Button)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mTextView02 = (TextView)findViewById(R.id.textView02);
        mTextView02.setOnClickListener(this);
        mTextView03 = (TextView)findViewById(R.id.textView03);
        mTextView03.setTextColor(Color.RED);
        mSwitch01 = (Switch)findViewById(R.id.switch01);
        mSwitch01.setOnCheckedChangeListener(this);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        mBufferSizeInShort = bufferSizeInBytes / 2;
        // ½¸²»ÍѥХåե¡
        mRecordBuf = new short[mBufferSizeInShort];
    
        // FFT ½èÍýÍÑ
        mTestBuf =  new short[UNITSIZE];
        mFFTSize = UNITSIZE;
        mFFT = new DoubleFFT_1D(mFFTSize);
        mFFTBuffer = new double[mFFTSize];
    
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        mStop = true;
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioRecord != null) {
          if (mAudioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioRecord");
            mAudioRecord.stop();
          }
          mAudioRecord = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (v == (View)mButton01) {
          // ½¸²»³«»Ï or ½ªÎ»
          if (!mInRecording) {
            mInRecording = true;
            new Thread(this).start();
          } else {
            mInRecording = false;
          }
        } else if (v == (View)mTextView02) {
          // ɽ¼¨¥Ç¡¼¥¿¤ò¥¯¥ê¥¢
          mTextView02.setText("");
          mTextView03.setText("");
        }
        return;
      }
      @Override
      public void onCheckedChanged(CompoundButton b, boolean isChecked) {
        if (b == (CompoundButton)mSwitch01) {
          FREQ_BASE = (isChecked) ? FREQ_BASE_HIGH : FREQ_BASE_LOW;
          FREQ_OUT = FREQ_BASE - 100;
          FREQ_IN = FREQ_OUT + 20;
          FREQ_MAX = FREQ_BASE + FREQ_STEP * 255;
        }
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_RECORD_START:
            Log.d(TAG, "MSG_RECORD_START");
            mButton01.setText("STOP");
            mSwitch01.setEnabled(false);
            break;
          case MSG_RECORD_END:
            Log.d(TAG, "MSG_RECORD_END");
            mButton01.setText("START");
            mSwitch01.setEnabled(true);
            break;
          case MSG_DATA_RECV:
            //Log.d(TAG, "MSG_DATA_RECV");
            byte[] ch = new byte[] {(byte)msg.arg1};
            try {
              // ¼õ¿®¥Ç¡¼¥¿¤òɽ¼¨
              String s = new String(ch, "UTF-8");
              s = mTextView02.getText() + s;
              mTextView02.setText(s);
            } catch (UnsupportedEncodingException e) {
            }
            mTextView03.setText("");
            break;
          case MSG_RECV_OK:
            mTextView03.setText("OK!");
            break;
          case MSG_RECV_NG:
            mTextView03.setText("NG!");
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        int dataCount = 0;
        boolean bSilence = false;
        mHandler.sendEmptyMessage(MSG_RECORD_START);
        // ½¸²»³«»Ï
        mAudioRecord.startRecording();
        while (mInRecording && !mStop) {
          // ²»À¼¥Ç¡¼¥¿ÆÉ¤ß¹þ¤ß
          mAudioRecord.read(mRecordBuf, 0, mBufferSizeInShort);
          bSilence = true;
          for (int i = 0; i < mBufferSizeInShort; i++) {
            short s = mRecordBuf[i];
            if (s > THRESHOLD_SILENCE) {
              bSilence = false;
            }
          }
          if (bSilence) { // Àżä
            dataCount = 0;
            continue;
          }
          int copyLength = 0;
          // ¥Ç¡¼¥¿¤ò mTestBuf ¤Ø½ç¼¡¥¢¥Ú¥ó¥É
          if (dataCount < UNITSIZE) {//mTestBuf.length) {
            // mTestBuf ¤Î»ÄÎΰè¤Ë±þ¤¸¤Æ¥³¥Ô¡¼¤¹¤ë¥µ¥¤¥º¤ò·èÄê
            int remain = UNITSIZE - dataCount;
            if (remain > mBufferSizeInShort) {
              copyLength = mBufferSizeInShort;
            } else {
              copyLength = remain;
            }
            System.arraycopy(mRecordBuf, 0, mTestBuf, dataCount, copyLength);
            dataCount += copyLength;
          }
          if (dataCount >= UNITSIZE) {//mTestBuf.length) {
            // 100ms ʬί¤Þ¤Ã¤¿¤é FFT ¤Ë¤«¤±¤ë
            int freq = doFFT(mTestBuf);
            if (mValueCount < 0) {
              // ¥Ç¡¼¥¿½ªÎ»
              if (freq == FREQ_OUT && mCrc32Val != 0) {
                byte check [] = new byte[mDataArrayList.size()];
                for (int i = 0; i < check.length; i++) {
                  check[i] = mDataArrayList.get(i);
                }
                CRC32 crc = new CRC32();
                crc.reset();
                crc.update(check, 0, check.length);
                long crcVal = crc.getValue();
                Log.d(TAG, "crc check=" +  Long.toHexString(crcVal));
                if (crcVal == mCrc32Val) {
                  mHandler.sendEmptyMessage(MSG_RECV_OK);
                } else {
                  mHandler.sendEmptyMessage(MSG_RECV_NG);
                }
                mCrc32Val = 0;
              }
            }
            // ÂԤäƤ¿ÈϰϤμþÇÈ¿ô¤«¥Á¥§¥Ã¥¯
            if (freq >= FREQ_BASE && freq <= FREQ_MAX) {
              int val = (int) ((freq - FREQ_BASE) / FREQ_STEP);
              if (val >= 0 && val <= 255) {
                if (mValueCount > 4) {
                  mDataArrayList.add((byte)val);
                  Message msg = new Message();
                  msg.what = MSG_DATA_RECV;
                  msg.arg1 = val;
                  mHandler.sendMessage(msg);
                }
              } else {
                freq = -1;
              }
            } else {
              freq = -1;
            }
            dataCount = 0;
            if (freq == -1) {
              continue;
            }
            // mRecordBuf ¤ÎÅÓÃæ¤Þ¤Ç¤ò mTestBuf ¤Ø¥³¥Ô¡¼¤·¤Æ FFT ¤·¤¿¾ì¹ç¤Ï
            // mRecordBuf ¤Î»Ä¥Ç¡¼¥¿¤ò mTestBuf ÀèÆ¬¤Ø¥³¥Ô¡¼¤·¤¿¾å¤Ç·Ñ³
            if (copyLength < mBufferSizeInShort) {
              int startPos = copyLength;
              copyLength = mBufferSizeInShort - copyLength;
              System.arraycopy(mRecordBuf, startPos, mTestBuf, 0, copyLength);
              dataCount += copyLength;
            }
          }
        }
        // ½¸²»½ªÎ»
        mAudioRecord.stop();
        mHandler.sendEmptyMessage(MSG_RECORD_END);
      }
    
      private int doFFT(short[] data) {
        for (int i = 0; i < mFFTSize; i++) {
          mFFTBuffer[i] = (double)data[i];
        }
        // FFT ¼Â¹Ô
        mFFT.realForward(mFFTBuffer);
    
        // ½èÍý·ë²Ì¤ÎÊ£ÁÇ¿ôÇÛÎ󤫤é¥Ô¡¼¥¯¼þÇÈ¿ôÀ®Ê¬¤ÎÍ×ÁÇÈÖ¹æ¤òÆÀ¤ë
        double maxAmp = 0;
        int index = 0;
        for (int i = 0; i < mFFTSize/2; i++) {
          double a = mFFTBuffer[i*2]; // ¼ÂÉô
          double b = mFFTBuffer[i*2 + 1]; // µõÉô
          // a+ib ¤ÎÀäÂÐÃÍ ¢å a^2 + b^2 = r ¤¬¿¶ÉýÃÍ
          double r = Math.sqrt(a*a + b*b);
          if (r > maxAmp) {
            maxAmp = r;
            index = i;
          }
        }
        // ¥Ô¡¼¥¯¼þÇÈ¿ô¤òµá¤á¤ë
        int freq = index * SAMPLE_RATE / mFFTSize;
        byte val = (byte)((freq-FREQ_BASE)/FREQ_STEP);
    
        if (freq == FREQ_IN) { // ÀèüÉäÃú
          mValueCount = 0;
          mCrc32Val = 0;
          if (!mDataArrayList.isEmpty()) {
            mDataArrayList.clear();
          }
          return freq;
        } else if (freq == FREQ_OUT) { // ½ªÃ¼ÉäÃú
          mValueCount = -1;
          return freq;
        }
    
        // ÀèüÉäÃúľ¸å¤Î 4¥Ð¥¤¥È¤Ï32¥Ó¥Ã¥ÈCRC
        if (mValueCount >= 0 &&  mValueCount < 4) {
          mCrc32Val |=  (val & 0xFF);
          if (mValueCount != 3) {
            mCrc32Val <<= 8;
          } else {
            Log.d(TAG, "mCrc32Val=" + Long.toHexString(mCrc32Val));
          }
        }
        mValueCount++;
        return freq;
      }
    }
    
    

4. ¥Ó¥Ã¥È¥Ç¡¼¥¿¤ò²»À¼¿®¹æ¤ÇÁ÷¼õ¿®¤¹¤ë 4

¤³¤³¤Þ¤Ç¤Î»îºî¤Ç¤ÏñÊý¸þ¤ÎÄÌ¿®¤Î¤ß¤ò°·¤Ã¤Æ¤­¤Þ¤·¤¿¡£¤³¤ì¤Ï°Ê²¼¤ÎÍýͳ¤Ë¤è¤ë¤â¤Î¤Ç¤¹¡£

  1. ½¸²»¡¦È¯²»¤Îξµ¡Ç½¤òº®ºß¤µ¤»¤ë¤È¼«µ¡¤Îȯ¤·¤¿¿®¹æ²»¤Ë¤è¤ëº®Í𤬵¯¤³¤êÆÀ¤ë
  2. ÅÁÁ÷¤¬´ðËÜŪ¤ËÄ㮤Ǥ¢¤ë¤¿¤áµ¡´ï´Ö¤ÇÁê¸ß¤ËÄÌ¿®¤ò¹Ô¤¦¤Ê¤éÁÐÊý¤Î¹´Â«»þ´Ö¤¬Ä¹¤¯¤Ê¤ë¤³¤È¤Ë¤Ê¤ê¼ÂÍÑÀ­¤òÁÛÄꤷ¤Ë¤¯¤¤
  3. ÁÐÊý¸þÄÌ¿®¤Ëȼ¤¤¥×¥í¥È¥³¥ë¤¬ÈÑ»¨²½¤¹¤ë¤³¤È¤è¤ê¤âñÊý¸þÄÌ¿®¤Ç¤¢¤ë¤³¤È¤ò³è¤«¤»¤ëÍÑÅÓ¤òÁª¤Ö¤Ù¤­

¤³¤ì¤é¤Ï¤ª¤½¤é¤¯¹Í¤¨Êý¤È¤·¤Æ´Ö°ã¤Ã¤Æ¤¤¤Ê¤¤¤è¤¦¤Ë»×¤¤¤Þ¤¹¤¬¡¢°ìÊý¤Ç¡¢ÆóÂæ¤Îµ¡´ï¤¬Áê¸ß¤Ë²»¤Ç¾ðÊó¤ò¤ä¤ê¤È¤ê¤¹¤ë¸÷·Ê¤òÁÛÁü¤¹¤ë¤ÈÍýͳ¤Î¤Ê¤¤¹¥´ñ¿´¤ò¤¯¤¹¤°¤é¤ì¤Þ¤¹¡£¤½¤³¤Ç¡¢¼Â¸³¤Î°ì´Ä¤È¤·¤ÆºÇ¸å¤Ë¥Ç¥Ð¥¤¥¹´Ö¤ÎÁÐÊý¸þÄÌ¿®¤ò»î¤¹¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

ÁÐÊý¸þÄÌ¿®¤ò¹Í¤¨¤ë

ÁÐÊý¸þÄÌ¿®¤ÎÊýË¡¤È¤·¤Æ°Ê²¼¤ÎÆâÍÆ¤òÁÛÄꤷ¤Þ¤·¤¿¡£

»îºî

½èÍý¤Î¥¤¥á¡¼¥¸

°Ê²¼¤ÎÍ×ÎΤǼÂÁõ¤ò¹Ô¤¤¤Þ¤·¤¿¡£

¡Ö¤·¤ê¤È¤ê¡×¤òÂêºà¤È¤¹¤ë

  • µ¡´ï´Ö¤Ç¼«Î§Åª¤Ë¤¢¤ëÄøÅÙ°ÕÌ£¤Î¤¢¤ë±þ½·¤ò¹Ô¤ï¤»¤ë¤¿¤á¤Ë±Ññ¸ì¤Î¤·¤ê¤È¤ê¤òÂêºà¤È¤·¤¿
    ability -> yellow -> warn -> national .... ¤ÎÍ×ÎÎ
  • µ¡´ï´Ö¤Î±þ½·¤Ï¼«Æ°²½¤·ºÇ½é¤Îñ¸ì¤òȯ¿®¤¹¤ë¤¿¤á¤Ë½é²ó¤Î¤ß UI ¤òÁàºî¤¹¤ë·Á¤È¤·¤¿

½¸²»¡¦È¯²»¤ÎÀÚ¤êÂØ¤¨

  • ½¸²»¾õÂ֤ǤÎÂÔµ¡Ãæ¤ËÀèüÉäÃú¤Î¿®¹æ²»¤ò¸¡ÃΤ·¤¿¤é¥Ç¡¼¥¿ÅþÃå¤È¤ß¤Ê¤·¸å³½èÍý¤ò³«»Ï¡£¤½¤Î¸å½ªÃ¼ÉäÃú¤ò¸¡ÃΤ·¤¿¤é½êÄê¤Î»þ´Ö´Ö³Ö¤ò¤ª¤¤¤ÆÈ¯¿®¤ò¹Ô¤¦¡£È¯¿®¤¬´°Î»¤·¤¿¤é½¸²»¾õÂ֤ǤÎÂÔµ¡¤ËÌá¤ë

ºÆÁ÷Í×µá

  • ¼õ¿®¡¦Éü¹æ¤·¤¿¥Ç¡¼¥¿¤ÎÆâÍÆ¤Ë¸í¤ê¤ò¸¡½Ð¤·¤¿¾ì¹ç¡¢¡Ö?¡×ʸ»ú¤òȯ¿®¤¹¤ë¤³¤È¤ÇÁê¼ê¤ËºÆÁ÷¤òÍ׵᤹¤ë

UI

  • ¥¿¥¤¥È¥ëÉôʬ¤ò¥¿¥Ã¥×¤¹¤ë¤ÈºÇ½é¤Îñ¸ì¤òȯ¿®¡£¤¢¤È¤Ï¥¨¥ó¥É¥ì¥¹

ưºî¤ÎÍÍ»Ò

ư²è¡§ 1ʬ29Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¥½¡¼¥¹¥³¡¼¥É

sonic11     GitHub

  • MainActivity.java
    
    /**
     *
     * sonic11
     *
     * ¥µ¥¤¥óÇȲ»À¼¿®¹æ¤Ë¤è¤ëȾÆó½Å¼°¤Ç¤ÎÁÐÊý¸þÄÌ¿®¤Î¤·¤¯¤ß¤Î»îºî
     * ÆóÂæ¤Îµ¡´ï´Ö¤Ç¡Ö¤·¤ê¤È¤ê¡×¤ò¹Ô¤¦
     * FFT ½èÍý¤Ë JTransforms ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ
     *
     */
    
    package jp.klab.sonic11;
    
    import org.jtransforms.fft.DoubleFFT_1D;
    import android.graphics.Color;
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.AudioManager;
    import android.media.AudioTrack;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CompoundButton;
    import android.widget.Switch;
    import android.widget.TextView;
    
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.zip.CRC32;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener,
          Switch.OnCheckedChangeListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final float SEC_PER_SAMPLEPOINT = 1.0f / SAMPLE_RATE;
      private static final short THRESHOLD_SILENCE = 0x00ff;
      private static final int THRESHOLD_COUNT_SILENCE = 25; // ̵²»¶è´ÖȽÄêÍÑ
      private static final int FREQ_BASE_LOW = 500;
      private static final int FREQ_BASE_HIGH = 14000;
      private static final int AMP_SMALL = 28000;
      private static final int AMP_LARGE = 28000;
    
      private static final int ELMS_1SEC = SAMPLE_RATE;
      private static final int ELMS_UNITSEC = SAMPLE_RATE/10;
      private static final int ELMS_MAX = 256;
      private static final int FREQ_STEP = 10;
      private static final int UNITSIZE = SAMPLE_RATE/10; // 100msecʬ
    
      private static final int MSG_RECORD_START  = 100;
      private static final int MSG_RECORD_END    = 110;
      private static final int MSG_DATA_RECV     = 130;
      private static final int MSG_DATA_SEND_START = 140;
      private static final int MSG_RECV_OK     = 200;
      private static final int MSG_RECV_NG     = 210;
    
      private int AMP;
      private int FREQ_BASE;
      private int FREQ_OUT;
      private int FREQ_IN;
      private int FREQ_MAX = FREQ_BASE + FREQ_STEP * 255;
    
      private Handler mHandler;
      private AudioRecord mAudioRecord = null;
      private AudioTrack mAudioTrack = null;
    
      private Button mButton01;
      private TextView mTextView01;
      private TextView mTextView02;
      private TextView mTextView03;
      private TextView mTextView04;
      private Switch mSwitch01;
    
      private short mSigIn[] = new short[SAMPLE_RATE];
      private short mSigOut[] = new short[SAMPLE_RATE];
      private short mSignals[][] = new short[ELMS_MAX][SAMPLE_RATE/10];
    
      private boolean mInRecording = false;
      private boolean mStop = false;
      private int mBufferSizeInShort;
    
      private short mRecordBuf[];
      private short mTestBuf[];
      private DoubleFFT_1D mFFT;
      private double mFFTBuffer[];
      private int mFFTSize;
      private byte mValueCount = -1;
      private long mCrc32Val = 0;
      private ArrayList<Byte> mDataArrayList = new ArrayList<Byte>();
      private int mLastFreq;
      private String mRecvWord = "";
      private String mSendWord = "";
      private boolean mRecvOK;
    
      // ¥µ¥¤¥óÇȥǡ¼¥¿¤òÀ¸À®
      private void createSineWave(short[] buf, int freq, int amplitude, boolean doClear) {
        if (doClear) {
          Arrays.fill(buf, (short) 0);
        }
        for (int i = 0; i < buf.length; i++) {
          float currentSec = i * SEC_PER_SAMPLEPOINT; // ¸½ºß°ÌÃ֤ηвáÉÿô
          double val = amplitude * Math.sin(2.0 * Math.PI * freq * currentSec);
          buf[i] += (short)val;
        }
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        mButton01 = (Button)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mTextView01 = (TextView)findViewById(R.id.textView01);
        mTextView01.setOnClickListener(this);
        mTextView02 = (TextView)findViewById(R.id.textView02);
        mTextView02.setOnClickListener(this);
        mTextView03 = (TextView)findViewById(R.id.textView03);
        mTextView03.setTextColor(Color.RED);
        mTextView04 = (TextView)findViewById(R.id.textView04);
        mSwitch01 = (Switch)findViewById(R.id.switch01);
        mSwitch01.setOnCheckedChangeListener(this);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        mBufferSizeInShort = bufferSizeInBytes / 2;
        // ½¸²»ÍѥХåե¡
        mRecordBuf = new short[mBufferSizeInShort];
    
        // FFT ½èÍýÍÑ
        mTestBuf = new short[UNITSIZE];
        mFFTSize = UNITSIZE;
        mFFT = new DoubleFFT_1D(mFFTSize);
        mFFTBuffer = new double[mFFTSize];
    
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes);
    
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
            SAMPLE_RATE,
            AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT,
            bufferSizeInBytes,
            AudioTrack.MODE_STREAM);
    
        setParams(false);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        mStop = true;
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioRecord != null) {
          if (mAudioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioRecord");
            mAudioRecord.stop();
          }
          mAudioRecord = null;
        }
        if (mAudioTrack != null) {
          if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioTrack");
            mAudioTrack.stop();
            mAudioTrack.flush();
          }
          mAudioTrack = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (v == (View)mButton01) {
          // ½¸²»³«»Ï or ½ªÎ»
          if (!mInRecording) {
            mInRecording = true;
            new Thread(this).start();
          } else {
            mInRecording = false;
          }
        } else if (v == (View)mTextView01) {
          // ¤·¤ê¤È¤ê¤Î³«»Ï¡¦ºÆ³«
          // ¤¹¤Ç¤Ë½¸²»Ãæ¤Ê¤é¼«Ê¬¤Ç¼«Ê¬¤Î²»¤ò½¦¤ï¤Ê¤¤¤è¤¦¤Ë
          // ¥¹¥ì¥Ã¥É¤ò°ìö½ªÎ»
          boolean running = mInRecording;
          if (mInRecording) {
            mStop = true;
            try {
              while (mInRecording) {
                Thread.sleep(100);
              }
            } catch (InterruptedException e) {
            }
          }
          // ¥é¥ó¥À¥à¤ËÁª¤ó¤À±Ññ¸ì¤ò²»¤Çȯ¿®
          mSendWord = words.getWord();
          doSendWord(mSendWord);
          if (running) {
            // ½¸²»¥¹¥ì¥Ã¥ÉºÆ²ÔƯ
            mInRecording = true;
            mStop = false;
            new Thread(this).start();
          }
        } else if (v == (View)mTextView02) {
          mTextView02.setText("");
          mTextView03.setText("");
        }
        return;
      }
    
      @Override
      public void onCheckedChanged(CompoundButton b, boolean isChecked) {
        if (b == (CompoundButton)mSwitch01) {
          setParams(isChecked);
        }
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_RECORD_START:
            Log.d(TAG, "MSG_RECORD_START");
            mButton01.setText("STOP");
            mSwitch01.setEnabled(false);
            break;
          case MSG_RECORD_END:
            Log.d(TAG, "MSG_RECORD_END");
            mButton01.setText("START");
            mSwitch01.setEnabled(true);
            break;
          case MSG_DATA_RECV:
            //Log.d(TAG, "MSG_DATA_RECV");
            if (mRecvWord.length() <= 0) {
              mTextView02.setText("RECV: ");
            }
            byte[] ch = new byte[] {(byte)msg.arg1};
            try {
              // ¼õ¿®¥Ç¡¼¥¿¤òɽ¼¨
              String s = new String(ch, "UTF-8");
              mRecvWord += s;
              s = mTextView02.getText() + s;
              mTextView02.setText(s);
            } catch (UnsupportedEncodingException e) {
            }
            mTextView03.setText("");
            break;
          case MSG_DATA_SEND_START:
            mTextView04.setText("SEND: " + mSendWord);
            break;
          case MSG_RECV_OK:
            mTextView03.setText("OK!");
            break;
          case MSG_RECV_NG:
            mTextView03.setText("NG!");
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        int dataCount = 0;
        boolean bSilence = false;
        long countSilence = 0;
        mHandler.sendEmptyMessage(MSG_RECORD_START);
        // ½¸²»³«»Ï
        mAudioRecord.startRecording();
        while (mInRecording && !mStop) {
          // ²»À¼¿®¹æÆÉ¤ß¹þ¤ß
          mAudioRecord.read(mRecordBuf, 0, mBufferSizeInShort);
          bSilence = true;
          for (int i = 0; i < mBufferSizeInShort; i++) {
            short s = mRecordBuf[i];
            if (s > THRESHOLD_SILENCE) {
              bSilence = false;
              break;
            }
          }
          if (bSilence) { // Àżä
            dataCount = 0;
            countSilence++;
          } else {
            countSilence = 0;
          }
          // ñ¸ì¤ò¼õ¿®¤º¤ß¤«¤Ä°ìÄê´ü´Ö°Ê¾åÀż䤬³¤¤¤¿¤éÁ÷¿®¤Ë¤Þ¤ï¤ë
          if (countSilence > THRESHOLD_COUNT_SILENCE &&
              mLastFreq == FREQ_OUT && mRecvWord.length() > 0) {
            if (mRecvOK) { // ľÁ°¤Î¼õ¿®¡¦Éü¹æ·ë²Ì¤¬Àµ¾ï¤À¤Ã¤¿
              if (!mRecvWord.equals("?")) {
                // ¼õ¿®¤·¤¿Ã±¸ì¤Î¤·¤ê¤È¤ê¸ì¤ò¼èÆÀ
                mSendWord = words.getWord(mRecvWord);
              }
            } else {
              // ºÆÁ÷Í×µá
              mSendWord = "?";
            }
            Log.d(TAG, "mSendWord=" + mSendWord);
            // ñ¸ì¤òȯ¿®
            doSendWord(mSendWord);
            continue;
          }
    
          int copyLength = 0;
          // ¥Ç¡¼¥¿¤ò mTestBuf ¤Ø½ç¼¡¥¢¥Ú¥ó¥É
          if (dataCount < UNITSIZE) {
            // mTestBuf ¤Î»ÄÎΰè¤Ë±þ¤¸¤Æ¥³¥Ô¡¼¤¹¤ë¥µ¥¤¥º¤ò·èÄê
            int remain = UNITSIZE - dataCount;
            if (remain > mBufferSizeInShort) {
              copyLength = mBufferSizeInShort;
            } else {
              copyLength = remain;
            }
            System.arraycopy(mRecordBuf, 0, mTestBuf, dataCount, copyLength);
            dataCount += copyLength;
          }
          if (dataCount >= UNITSIZE) {
            // 100ms ʬί¤Þ¤Ã¤¿¤é FFT ¤Ë¤«¤±¤ë
            int freq = doFFT(mTestBuf);
            mLastFreq = freq;
            if (mValueCount < 0) {
              // ¥Ç¡¼¥¿½ªÎ»
              if (freq == FREQ_OUT && mCrc32Val != 0) {
                byte check [] = new byte[mDataArrayList.size()];
                for (int i = 0; i < check.length; i++) {
                  check[i] = mDataArrayList.get(i);
                }
                //Log.d(TAG, "mRecvWord=" + mRecvWord);
                CRC32 crc = new CRC32();
                crc.reset();
                crc.update(check, 0, check.length);
                long crcVal = crc.getValue();
                //Log.d(TAG, "crc check=" +  Long.toHexString(crcVal));
                mRecvOK = false;
                if (crcVal == mCrc32Val) {
                  mRecvOK = true;
                  mHandler.sendEmptyMessage(MSG_RECV_OK);
                } else {
                  mHandler.sendEmptyMessage(MSG_RECV_NG);
                }
                mCrc32Val = 0;
              }
            }
            // ÂԤäƤ¿ÈϰϤμþÇÈ¿ô¤«¥Á¥§¥Ã¥¯
            if (freq >= FREQ_BASE && freq <= FREQ_MAX) {
              int val = (int) ((freq - FREQ_BASE) / FREQ_STEP);
              if (val >= 0 && val <= 255) {
                if (mValueCount > 4) {
                  mDataArrayList.add((byte)val);
                  Message msg = new Message();
                  msg.what = MSG_DATA_RECV;
                  msg.arg1 = val;
                  mHandler.sendMessage(msg);
                }
              } else {
                freq = -1;
              }
            } else {
              freq = -1;
            }
            dataCount = 0;
            if (freq == -1) {
              continue;
            }
            // mRecordBuf ¤ÎÅÓÃæ¤Þ¤Ç¤ò mTestBuf ¤Ø¥³¥Ô¡¼¤·¤Æ FFT ¤·¤¿¾ì¹ç¤Ï
            // mRecordBuf ¤Î»Ä¥Ç¡¼¥¿¤ò mTestBuf ÀèÆ¬¤Ø¥³¥Ô¡¼¤·¤¿¾å¤Ç·Ñ³
            if (copyLength < mBufferSizeInShort) {
              int startPos = copyLength;
              copyLength = mBufferSizeInShort - copyLength;
              System.arraycopy(mRecordBuf, startPos, mTestBuf, 0, copyLength);
              dataCount += copyLength;
            }
          }
        }
        // ½¸²»½ªÎ»
        mAudioRecord.stop();
        mInRecording = false;
        mHandler.sendEmptyMessage(MSG_RECORD_END);
      }
    
      private int doFFT(short[] data) {
        for (int i = 0; i < mFFTSize; i++) {
          mFFTBuffer[i] = (double)data[i];
        }
        // FFT ¼Â¹Ô
        mFFT.realForward(mFFTBuffer);
    
        // ½èÍý·ë²Ì¤ÎÊ£ÁÇ¿ôÇÛÎ󤫤é¥Ô¡¼¥¯¼þÇÈ¿ôÀ®Ê¬¤ÎÍ×ÁÇÈÖ¹æ¤òÆÀ¤ë
        double maxAmp = 0;
        int index = 0;
        for (int i = 0; i < mFFTSize/2; i++) {
          double a = mFFTBuffer[i*2]; // ¼ÂÉô
          double b = mFFTBuffer[i*2 + 1]; // µõÉô
          // a+ib ¤ÎÀäÂÐÃÍ ¢å a^2 + b^2 = r ¤¬¿¶ÉýÃÍ
          double r = Math.sqrt(a*a + b*b);
          if (r > maxAmp) {
            maxAmp = r;
            index = i;
          }
        }
        // ¥Ô¡¼¥¯¼þÇÈ¿ô¤òµá¤á¤ë
        int freq = index * SAMPLE_RATE / mFFTSize;
        byte val = (byte)((freq-FREQ_BASE)/FREQ_STEP);
    
        if (freq == FREQ_IN) { // ÀèüÉäÃú
          mValueCount = 0;
          mCrc32Val = 0;
          if (!mDataArrayList.isEmpty()) {
            mDataArrayList.clear();
          }
          mRecvWord = "";
          return freq;
        } else if (freq == FREQ_OUT) { // ½ªÃ¼ÉäÃú
          mValueCount = -1;
          return freq;
        }
    
        // ÀèüÉäÃúľ¸å¤Î 4¥Ð¥¤¥È¤Ï32¥Ó¥Ã¥ÈCRC
        if (mValueCount >= 0 &&  mValueCount < 4) {
          mCrc32Val |=  (val & 0xFF);
          if (mValueCount != 3) {
            mCrc32Val <<= 8;
          } else {
            Log.d(TAG, "mCrc32Val=" + Long.toHexString(mCrc32Val));
          }
        }
        mValueCount++;
        return freq;
      }
    
      // »ØÄꤵ¤ì¤¿¥Ð¥¤¥ÈÃͤò²»À¼¿®¹æ¤ËÃÖ¤­´¹¤¨¤ÆºÆÀ¸¤¹¤ë
      private void valueToWave(short val) {
        //Log.d(TAG, "val=" + val);
        mAudioTrack.write(mSignals[val], 0, ELMS_UNITSEC);
      }
    
      private void doSendWord(String str) {
        mSendWord = str;
        mHandler.sendEmptyMessage(MSG_DATA_SEND_START);
        Log.d(TAG, "mSendWord=" + mSendWord);
        byte[] strByte = null;
        try {
          strByte = mSendWord.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
        }
        mAudioTrack.play();
        mAudioTrack.write(mSigIn, 0, ELMS_1SEC); // ÀèüÉäÃú
        // ¥Ç¡¼¥¿ËÜÂΤΠCRC32 ¤ò·×»»¤·¤ÆÈ¯¿®
        CRC32 crc = new CRC32();
        crc.reset();
        crc.update(strByte, 0, strByte.length);
        long crcVal = crc.getValue();
        //Log.d(TAG, "crc=" + Long.toHexString(crcVal));
        byte crcData[] = new byte[4];
        for (int i = 0; i < 4; i++) {
          crcData[i] = (byte)(crcVal >> (24-i*8));
          valueToWave((short) (crcData[i] & 0xFF));
        }
        // ¥Ç¡¼¥¿ËÜÂÎ
        for (int i = 0; i < strByte.length; i++) {
          valueToWave(strByte[i]);
        }
        mAudioTrack.write(mSigOut, 0, ELMS_1SEC); // ½ªÃ¼ÉäÃú
        mAudioTrack.stop();
        mAudioTrack.flush();
        mLastFreq = -1;
        mRecvWord = "";
      }
    
      private void setParams(boolean useUltrasonic) {
        AMP = (useUltrasonic) ? AMP_LARGE : AMP_SMALL;
        FREQ_BASE = (useUltrasonic) ? FREQ_BASE_HIGH : FREQ_BASE_LOW;
        FREQ_OUT = FREQ_BASE - 100;
        FREQ_IN = FREQ_OUT + 20;
        // Àèü¡¦½ªÃ¼ÉäÃú¤Î¿®¹æ¥Ç¡¼¥¿¤òÀ¸À®
        createSineWave(mSigIn, FREQ_IN, AMP, true);
        createSineWave(mSigOut, FREQ_OUT, AMP, true);
        // 256¼ïÎà¤Î¿®¹æ¥Ç¡¼¥¿¤òÀ¸À®
        for (int i = 0; i < ELMS_MAX; i++) {
          createSineWave(mSignals[i], (short) (FREQ_BASE + FREQ_STEP * i), AMP, true);
        }
        FREQ_MAX = FREQ_BASE + FREQ_STEP * 255;
      }
    }
    
    

(tanabe)
klab_gijutsu2 at 09:00¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)
2017ǯ06·î02Æü

²»¤òÍøÍѤ¹¤ë 2 ¡ÁAndroid ¥Ç¥Ð¥¤¥¹¤Ç¤Î²»ÇÈÄÌ¿®¡§½àÈ÷ÊÔ¡Á

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

¤³¤Îµ­»ö¤ÎÆâÍÆ

Á°²ó¤Îµ­»ö¤Ç¤Ï²»¤òÇÞÂΤȤ¹¤ëµ¡´ï´Ö¤Î¾ðÊóÄÌ¿®¤¬¶áǯ¤Õ¤¿¤¿¤ÓÃíÌܤµ¤ì¤Æ¤¤¤ë¤³¤È¤Ë¿¨¤ìÊ£¿ô¤Î¶ñÂÎŪ¤Ê»öÎã¤òµó¤²¤Þ¤·¤¿¡£¶áµ÷Î¥ÄÌ¿®¼êÃʤȤ·¤Æ¤Î²»ÇȤÎÍøÍѤˤϵ»½ÑŪ¹¥´ñ¿´¤ò¤½¤½¤é¤ì¤Þ¤¹¤¬¡¢¤½¤ì¤ò¤É¤Î¤è¤¦¤Ë·Á¤Ë¤¹¤ì¤Ð¤è¤¤¤Î¤«¤Ï°Æ³°¥Ô¥ó¤ÈÍè¤Þ¤»¤ó¡£¤½¤³¤Ç¡¢Android ¥Ç¥Ð¥¤¥¹¤òÂêºà¤Ë¼ê¸µ¤Ç¹Ô¤Ã¤¿²»ÇÈÄÌ¿®¤Î¼Â¸³¤È»îºî¤ÎÆâÍÆ¤ò¤³¤ì¤«¤é²¿²ó¤«¤Ëʬ¤±¤Æ¾Ò²ð¤·¤Þ¤¹¡£º£²ó¤Ï½àÈ÷ÊԤȤ·¤Æ¼ÂÁõ¤ËɬÍפÊÍ×ÁǤÎÀ°Íý¤ò¹Ô¤¤¤Þ¤¹¡£

2017-11-29 Äɵ­¡§
Ëܵ­»ö¤Ë·ÇºÜ¤Î¥³¡¼¥É¤Ï³«È¯»þ¤Ë Android 5.x ´Ä¶­¤ò»ÈÍѤ·¤Æ¤ª¤ê¡¢Android 6.0 °Ê¹ß¤Ç¤Ï android.permission.RECORD_AUDIO ¤Ë¤Ä¤¤¤Æ¼Â¹Ô»þ¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¼èÆÀ¤¬É¬ÍפǤ¹¡£
¤³¤Î·ï¤Ø¤ÎÂбþÎã¤È¤·¤Æ sonic01 ¤Î MainActivity.java ¤Ë¼ê¤ò²Ã¤¨¤Þ¤·¤¿¡£ ¡Êdiff¡Ë
¾¤Î¥×¥í¥¸¥§¥¯¥È¤Ë¤Ä¤¤¤Æ¤âŬµ¹²ÃÌ£¤·¤Æ²¼¤µ¤¤¡£

½àÈ÷ 1. Andorid ¤Ç¤Î²»À¼Æþ½ÐÎϽèÍý¤ò³Ð¤¨¤ë

¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë¤è¤ê³«È¯´Ä¶­¤ä API ¤Ë°ã¤¤¤Ï¤¢¤Ã¤Æ¤â²»¤ò°·¤¦½èÍý¤ÎËܼÁ¤ÏÊѤï¤ê¤Þ¤»¤ó¡£¼ê¸µ¤Ç¥¿¡¼¥²¥Ã¥È¤È¤·¤Æ Android ¤òÁª¤ó¤À¤Î¤Ï°Ê²¼¤ÎÍýͳ¤Ë¤è¤ë¤â¤Î¤Ç¤¹¡£

  • ¥á¥¸¥ã¡¼¤Ç¤¢¤ë
  • ¥µ¥¦¥ó¥É I/O ¤òɸ½à¤ÇÍøÍѤǤ­¤ë¡Ê¥Þ¥¤¥³¥ó·Ï¤ÈÈæ¤Ù¤Æ¤ÎÍøÅÀ¡Ë
  • ¥Ý¡¼¥¿¥Ö¥ë¤Ç¤¢¤ë¤¿¤á±þÍѤ¬Íø¤­¤ä¤¹¤¯ IoT ÊýÌ̤ȤÎÏ¢·ÈÀ­¤âÎɤ¤¡ÊPC ¤ÈÈæ¤Ù¤Æ¤ÎÍøÅÀ¡Ë
  • ³«È¯´Ä¶­¤ÎÀ©Ì󤴤Ȥ¬ÁêÂÐŪ¤Ë¾¯¤Ê¤¤¡Ê¾¤Î¥¹¥Þ¥Û·Ï¤ÈÈæ¤Ù¤Æ¤ÎÍøÅÀ¡Ë

¤Þ¤º¡¢º£²ó»ÈÍѤ·¤¿²»À¼Æþ½ÐÎÏ API ¤Î¾ðÊó¤ò¥ê¥Õ¥¡¥ì¥ó¥¹¤è¤ê°úÍѤ·¤Þ¤¹¡£ÆÃ¤ËÆñ¤·¤¤Í×ÁǤâ¤Ê¤¯Ê¬¤«¤ê¤ä¤¹¤¤ÆâÍÆ¤Ç¤·¤¿¡£

ÆþÎÏ¡§AudioRecord ¥¯¥é¥¹

  • AudioRecord
    The AudioRecord class manages the audio resources for Java applications to record audio from the audio input hardware of the platform.
          :
    Upon creation, an AudioRecord object initializes its associated audio buffer that it will fill with the new audio data.
          :
    Data should be read from the audio hardware in chunks of sizes inferior to the total recording buffer size.
    • AudioRecord (constructor)
      AudioRecord (int audioSource,
            int sampleRateInHz,
            int channelConfig,
            int audioFormat,
            int bufferSizeInBytes)
            :
      Parameters
            :
      bufferSizeInBytes
      int: the total size (in bytes) of the buffer where audio data is written to during the recording. New audio data can be read from this buffer in smaller chunks than this size. See getMinBufferSize(int, int, int) to determine the minimum required buffer size for the successful creation of an AudioRecord instance. Using values smaller than getMinBufferSize() will result in an initialization failure.
    • getMinBufferSize
      int getMinBufferSize (
            int sampleRateInHz,
            int channelConfig,
            int audioFormat)

      Returns the minimum buffer size required for the successful creation of an AudioRecord object, in byte units.
            :
    • startRecording
      void startRecording ()

      Starts recording from the AudioRecord instance.
    • read
      int read (short[] audioData,
            int offsetInShorts,
            int sizeInShorts)

      Reads audio data from the audio hardware for recording into a short array. The format specified in the AudioRecord constructor should be ENCODING_PCM_16BIT to correspond to the data in the array.
            :
    • getRecordingState
      int getRecordingState ()

      Returns the recording state of the AudioRecord instance.

      See also:
            RECORDSTATE_STOPPED
            RECORDSTATE_RECORDING
    • stop
      void stop ()

      Stops recording.

½ÐÎÏ¡§AudioTrack ¥¯¥é¥¹

  • AudioTrack
    The AudioTrack class manages and plays a single audio resource for Java applications. It allows streaming of PCM audio buffers to the audio sink for playback.
          :
    An AudioTrack instance can operate under two modes: static or streaming. In Streaming mode, the application writes a continuous stream of data to the AudioTrack, using one of the write() methods.
          :
    The static mode should be chosen when dealing with short sounds that fit in memory and that need to be played with the smallest latency possible.
          :
    • AudioTrack (constructor)
      AudioTrack (
            int streamType,
            int sampleRateInHz,
            int channelConfig,
            int audioFormat,
            int bufferSizeInBytes,
            int mode)
            :
      Parameters
            :
      int: the total size (in bytes) of the internal buffer where audio data is read from for playback. This should be a nonzero multiple of the frame size in bytes.
            :
      If the track's creation mode is MODE_STREAM, this should be the desired buffer size for the AudioTrack to satisfy the application's latency requirements. If bufferSizeInBytes is less than the minimum buffer size for the output sink, it is increased to the minimum buffer size.
            :
      See getMinBufferSize(int, int, int) to determine the estimated minimum buffer size for an AudioTrack instance in streaming mode.
    • play
      void play ()

      Starts playing an AudioTrack.

      If track's creation mode is MODE_STATIC, you must have called one of the write methods¡ÊÃæÎ¬¡Ëprior to play().

      If the mode is MODE_STREAM, you can optionally prime the data path prior to calling play(), by writing up to bufferSizeInBytes (from constructor). If you don't call write() first, or if you call write() but with an insufficient amount of data, then the track will be in underrun state at play(). In this case, playback will not actually start playing until the data path is filled to a device-specific minimum level.
            :
    • write
      int write (
            short[] audioData,
            int offsetInShorts,
            int sizeInShorts)

      Writes the audio data to the audio sink for playback (streaming mode), or copies audio data for later playback (static buffer mode). The format specified in the AudioTrack constructor should be ENCODING_PCM_16BIT to correspond to the data in the array.
            :
    • getPlayState
      int getPlayState ()

      Returns the playback state of the AudioTrack instance.

      See also:
            PLAYSTATE_STOPPED
            PLAYSTATE_PAUSED
            PLAYSTATE_PLAYING
    • pause
      void pause ()

      Pauses the playback of the audio data. Data that has not been played back will not be discarded. Subsequent calls to play() will play this data back. See flush() to discard this data.
            :
    • stop
      void stop ()

      Stops playing the audio data.
            :
    • flush
      void flush ()

      Flushes the audio data currently queued for playback. Any data that has been written but not yet presented will be discarded. No-op if not stopped or paused, or if the track's creation mode is not MODE_STREAM.
            :

»îºî

Android ´Ä¶­¤Ç¤Î²»À¼Æþ½ÐÎϤδðËÜŪ¤ÊºîË¡¤ò³Ð¤¨¤ë¤¿¤á¤ËºÇ½é¤Ë¤´¤¯¥·¥ó¥×¥ë¤Ê¥¢¥×¥ê¤ò½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£ ÆþÎϦ¤È½ÐÎϦ¤Ï¿¤¯¤Î¾ì¹çµ¡Ç½Åª¤Ëʬ¤±¤é¤ì¤Þ¤¹¤¬¡¢¤³¤³¤Ç¤Ï¤½¤ÎξÊý¤ÎÍ×ÁǤò¼¡¤ÎÆâÍÆ¤Çñ°ì¤Î¥×¥í¥°¥é¥à¤ËÁÈ¤ßÆþ¤ì¤Æ¤¤¤Þ¤¹¡£

  • UI ¾å¤Î¥Ü¥¿¥ó¤ò²¡²¼¤¹¤ë¤È¥Þ¥¤¥¯¥í¥Õ¥©¥ó¤«¤é¤ÎÏ¿²»¤ò³«»Ï¤¹¤ë
  • ºÆÅ٥ܥ¿¥ó¤ò²¡²¼¤¹¤ë¤ÈÏ¿²»¤ò½ªÎ»¤·¤½¤ÎÆâÍÆ¤òºÆÀ¸¤¹¤ë
  • ²»À¼¥Ç¡¼¥¿¤Ï¥á¥â¥ê¾å¤Ç°·¤¤¥Õ¥¡¥¤¥ë¤Ï»ÈÍѤ·¤Ê¤¤

½èÍý¤Î¥¤¥á¡¼¥¸

   

ưºî¤ÎÍÍ»Ò

ư²è¡§33Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¥½¡¼¥¹¥³¡¼¥É

sonic01     GitHub

  • MainActivity.java
    
    /**
     *
     * sonic01
     *
     * üËö¤Î¥Þ¥¤¥¯¤«¤é²»À¼¤òÏ¿²»¤·¥¹¥Ô¡¼¥«¡¼¤ÇºÆÀ¸¤¹¤ë
     * Android ɸ½à¤Î AudioRecord, AudioTrack ¤ò»ÈÍÑ
     *
     * ¥µ¥ó¥×¥ê¥ó¥°¼þÇÈ¿ô 44.1kHz
     * Î̻Ҳ½¥Ó¥Ã¥È¿ô 16
     * ¥â¥Î¥é¥ë
     *
     */
    
    package jp.klab.sonic01;
    
    import android.Manifest;
    import android.content.pm.PackageManager;
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.AudioManager;
    import android.media.AudioTrack;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ProgressBar;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final int BLOCK_NUMBER = 300;
    
      private static final int MSG_RECORD_START = 100;
      private static final int MSG_RECORD_END   = 110;
      private static final int MSG_PLAY_END   = 130;
    
      private Handler mHandler;
      private AudioRecord mAudioRecord = null;
      private AudioTrack mAudioTrack = null;
    
      private Button mButton01;
      private ProgressBar mProgressBar;
    
      private boolean mInRecording = false;
      private boolean mStop = false;
      private int mBufferSizeInShort;
    
      private short mPlayBuf[];
      private short mRecordBuf[];
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        mButton01 = (Button)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mProgressBar = (ProgressBar)findViewById(R.id.progressBar);
        mProgressBar.setMax(BLOCK_NUMBER);
        mProgressBar.setProgress(0);
    
        /***** add for Android 6.0 or later ****/
        // https://developer.android.com/training/permissions/requesting.html
        // https://developer.android.com/topic/libraries/support-library/index.html#backward
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) !=
            PackageManager.PERMISSION_GRANTED) {
          // RECORD_AUDIO ¤Î¼Â¹Ô»þ¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÍ×µá
          ActivityCompat.requestPermissions(this,
              new String[]{Manifest.permission.RECORD_AUDIO}, 1);
        }
        initAudio();
        /**** add end ****/
    
    /***** move to initAudio() ****
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        mBufferSizeInShort = bufferSizeInBytes / 2;
        // Ï¿²»ÍѥХåե¡
        mRecordBuf = new short[mBufferSizeInShort];
        // ºÆÀ¸ÍѥХåե¡
        mPlayBuf = new short[mBufferSizeInShort * BLOCK_NUMBER];
    
        // Ï¿²»ÍÑ
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes);
        // ºÆÀ¸ÍÑ
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_OUT_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes,
                        AudioTrack.MODE_STREAM);
    ****/
      }
    
      /**** add for Android 6.0 or later ****/
      // https://developer.android.com/training/permissions/requesting.html
      @Override
      public void onRequestPermissionsResult(int requestCode,
                           String permissions[], int[] grantResults) {
        switch (requestCode) {
          case 1: {
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
              initAudio();
            } else {
              finish();
            }
            return;
          }
        }
      }
    
      private void initAudio() {
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
            AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT);
    
        mBufferSizeInShort = bufferSizeInBytes / 2;
        // Ï¿²»ÍѥХåե¡
        mRecordBuf = new short[mBufferSizeInShort];
        // ºÆÀ¸ÍѥХåե¡
        mPlayBuf = new short[mBufferSizeInShort * BLOCK_NUMBER];
    
        // Ï¿²»ÍÑ
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
            SAMPLE_RATE,
            AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT,
            bufferSizeInBytes);
        // ºÆÀ¸ÍÑ
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
            SAMPLE_RATE,
            AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT,
            bufferSizeInBytes,
            AudioTrack.MODE_STREAM);
      }
      /**** add end ****/
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        mStop = true;
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioRecord != null) {
          if (mAudioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioRecord");
            mAudioRecord.stop();
          }
          mAudioRecord = null;
        }
        if (mAudioTrack != null) {
          if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioTrack");
            mAudioTrack.stop();
            mAudioTrack.flush();
          }
          mAudioTrack = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (v == (View)mButton01) {
          // ½¸²»³«»Ï or ½ªÎ»
          if (!mInRecording) {
            mInRecording = true;
            new Thread(this).start();
          } else {
            mInRecording = false;
          }
        }
        return;
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_RECORD_START:
            Log.d(TAG, "MSG_RECORD_START");
            mButton01.setText("STOP");
            break;
          case MSG_RECORD_END:
            Log.d(TAG, "MSG_RECORD_END");
            mButton01.setEnabled(false);
            break;
          case MSG_PLAY_END:
            Log.d(TAG, "MSG_PLAY_END");
            mButton01.setEnabled(true);
            mButton01.setText("START");
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        mHandler.sendEmptyMessage(MSG_RECORD_START);
        // ½¸²»³«»Ï
        mAudioRecord.startRecording();
        int count = 0;
        while (mInRecording && !mStop) {
          mAudioRecord.read(mRecordBuf, 0, mBufferSizeInShort);
          // ºÆÀ¸ÍѥХåե¡¤Ï¥ê¥ó¥°¥Ð¥Ã¥Õ¥¡¤È¤·¤Æ°·¤¦
          if (count * mBufferSizeInShort >= mPlayBuf.length) {
            count = 0;
            mProgressBar.setProgress(0);
          }
          // ºÆÀ¸ÍѥХåե¡¤Ø½¸²»¤·¤¿¥Ç¡¼¥¿¤ò¥¢¥Ú¥ó¥É
          System.arraycopy(mRecordBuf, 0, mPlayBuf, count * mBufferSizeInShort, mBufferSizeInShort);
          mProgressBar.setProgress(++count);
        }
        // ½¸²»½ªÎ»
        mAudioRecord.stop();
        mProgressBar.setProgress(0);
        mHandler.sendEmptyMessage(MSG_RECORD_END);
        if (mStop) {
          return;
        }
        // ºÆÀ¸
        mAudioTrack.setPlaybackRate(SAMPLE_RATE);
        mAudioTrack.play();
        mAudioTrack.write(mPlayBuf, 0, count * mBufferSizeInShort);
        mAudioTrack.stop();
        mAudioTrack.flush();
        mHandler.sendEmptyMessage(MSG_PLAY_END);
      }
    }
    
    
  • AndroidManifest.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="jp.klab.sonic01">
      <uses-permission android:name="android.permission.RECORD_AUDIO"/>
      <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
          android:name=".MainActivity"
          android:label="@string/app_name"
          android:configChanges="orientation|screenSize"
          android:screenOrientation="unspecified"
          android:theme="@style/AppTheme.NoActionBar">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>
        <!-- ATTENTION: This was auto-generated to add Google Play services to your project for
           App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
        <meta-data
          android:name="com.google.android.gms.version"
          android:value="@integer/google_play_services_version" />
      </application>
    </manifest>
    
    

½àÈ÷ 2. Ǥ°Õ¤Î¼þÇÈ¿ô¤Î²»ÇȤòÀ¸À®¡¦½ÐÎϤ¹¤ë

²»¤Ë¤è¤ë¾ðÊóÅÁã¡Ê¸À¸ì²»¤ò½ü¤¯¡Ë¤Ë¤ª¤¤¤Æ¤Ï¡¢ÅÁ¤¨¤¿¤¤ÆâÍÆ¤Î°ÕÌ£¤ò¹½À®¤¹¤ëÍ×ÁǤȤ·¤Æ¡Ö²»¤Î¹â¤µ¡Ê¼þÇÈ¿ô¡Ë¡×¤È¡Ö²»¤ÎÂ礭¤µ¡Ê¿¶Éý¡Ë¡×¤¬µó¤²¤é¤ì¤Þ¤¹¡£¤³¤ì¤é¤ò½êÄê¤Îµ¬Â§¤Ë´ð¤Å¤¤¤ÆÁȤ߹ç¤ï¤»¤ë¤³¤È¤ÇÁ÷¤ê¼ê¤È¼õ¤±¼ê¤Î´Ö¤Ç¤Î¤ä¤ê¤È¤ê¤¬²Äǽ¤È¤Ê¤ë¤Ç¤·¤ç¤¦¡£Á÷¤ê¼ê¦¤Ë¤Ï¤½¤³¤ÇǤ°Õ¤Î¼þÇÈ¿ô¡¦¿¶Éý¤Î²»¤òºî¤ë½èÍý¤¬É¬ÍפȤʤê¤Þ¤¹¡£¤³¤ì¤¬¤Õ¤¿¤Ä¤á¤Î²ÝÂê¤Ç¤¹¡£

¥µ¥¤¥óÇȤˤĤ¤¤Æ

²»¤ÎÇÈ·Á¤Ë¤Ï¼ïÎब¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤³¤Ç¤Ï´ðËÜÇÈ·Á¤Î¤Ò¤È¤Ä¤Ç¤¢¤ë¥µ¥¤¥óÇȤò»È¤¦¤³¤È¤Ë¤·¤Þ¤·¤¿¡£¥µ¥¤¥óÇȤò¥×¥í¥°¥é¥à¤ÇÀ¸À®¤¹¤ë¤¿¤á¤Ë¤½¤ÎÀ­¼Á¡¦ÆÃħ¤È´ØÏ¢¤¹¤ë¾ðÊó¤òÀ°Íý¤·¤Æ¤ß¤Þ¤¹¡£

  • Àµ¸¹ÇÈ - wikipedia ¤è¤ê
    Àµ¸¹Çȡʤ»¤¤¤²¤ó¤Ï¡¢sine wave¡¢sinusoidal wave¡Ë¤Ï¡¢Àµ¸¹´Ø¿ô¤È¤·¤Æ´Ñ¬²Äǽ¤Ê¼þ´üŪÊѲ½¤ò¼¨¤¹ÇÈÆ°¤Î¤³¤È¤Ç¤¢¤ë¡£¤½¤ÎÇÈ·Á¤ÏÀµ¸¹¶ÊÀþ¡Ê¤»¤¤¤²¤ó¤­¤ç¤¯¤»¤ó¡¢sine curve¡Ë¤â¤·¤¯¤Ï¥·¥Ì¥½¥¤¥É (Sinusoid) ¤È¸Æ¤Ð¤ì¡¢¿ô³Ø¡¢¿®¹æ½èÍý¡¢Åŵ¤¹©³Ø¤ª¤è¤Ó¤½¤Î¾¤ÎʬÌî¤Ë¤ª¤¤¤Æ½ÅÍ×¤ÊÆ¯¤­¤ò¤¹¤ë¡£       :
  • Àµ¸¹Çȸòή¤Ã¤Æ¡¢¼Â¤Ï±ß±¿Æ°¤Ê¤ó¤Ç¤¹ - manapo.com ÍͤΥµ¥¤¥È¤è¤ê
    ¤¢¤ëÅÀ¤òÃæ¿´¤Ë²óž¤¹¤ë±¿Æ°¤Ï¡Ö±ß±¿Æ°¡×¤È¸À¤ï¤ì¡¢ ʪÍý¤ÎÀ¤³¦¤Ç¤Ï¤è¤¯½Ð¤Æ¤¯¤ë¸ÀÍդǤ⤢¤ë¡£¤³¤Î±ß±¿Æ°¤Îµ°Àפò²óž³ÑÅÙ¤ò²£¼´¤Ë¤·¤Æ¥°¥é¥Õ¤Ë¤¹¤ë¤È¡¢¤³¤Î¤è¤¦¤ËÀµ¸¹ÇȤηÁ¤Ë¤Ê¤ë¡£
    ³ÑÅÙ¤¬90¡ë¤Î¤È¤³¤í¤Ç»³¤Ë¤Ê¤ê¡¢180¡ë¤Î¤È¤³¤í¤Ç½ÐȯÅÀ¤ÈƱ¤¸¤Ë¤Ê¤ê¡¢270¡ë¤Î¤È¤³¤í¤Çë¤Ë¤Ê¤ê¡¢360¡ë¤Î¤È¤³¤í¤Ç¸µ¤ËÌá¤ë¡£

    ¿Þ¤Ç¤Ï²óž³ÑÅ٤ǤϤʤ¯¡¢¾¯¤·¤Ç¤âÍý²ò¤·¤ä¤¹¤¤¤è¤¦¤Ë»þ´Ö¤È¤·¤Æ¤¢¤ë¡£¸À¤¤´¹¤¨¤ë¤È¡¢±ß±¿Æ°¤Ç£±²óž¤¹¤ë¤Î¤ËɬÍפʻþ´Ö¤ò¼þ´ü¤È¸Æ¤Ö¤Î¤Ç¤¢¤ë¡£¤½¤·¤Æ¡¢£±Éô֤βóž¿ô¤¬Â¨¤Á¼þÇÈ¿ô¤Ç¤¢¤ë¡£
  •  https://www.youtube.com/embed/ij0K2tUVEGs - surikenclub Íͤˤè¤ë Youtube ư²è
  • Âè5¾Ï¡¡¥Õ¡¼¥ê¥¨µé¿ô - Masasi.Sanae ÍͤΥµ¥¤¥È¤è¤ê
    ¡¦1Éô֤ËÉÁ¤«¤ì¤ëÇȤβó¿ô¤ò¡Ö¼þÇÈ¿ô¡×¤È¤¤¤¤¡¤Ã±°Ì¤Ï¥Ø¥ë¥Ä(Hz)¤òÍѤ¤¤Þ¤¹¡£
    ¡¦1Éô֤˿ʤà³ÑÅ٤Τ³¤È¤ò¡Ö³Ñ®Å١פȤ¤¤¤¦Ø¡Ê¥ª¥á¥¬¡Ë¤Çɽ¤·¤Þ¤¹¡£
    ¡¦²£¼´¤«¤é¤ÎÇȤﶤì¶ñ¹ç¤ò¡Ö¿¶Éý¡×¤È¤¤¤¤¤Þ¤¹¡£

    sinÇÈ¡¤cosÇȤÎ1¤Ä¤ÎÇȤ¬¸½¤ì¤ë³ÑÅ١ʼþ´ü¤È¤¤¤¤¤Þ¤¹¡Ë¤Ï360¡ë¤Ç¤¹¤«¤é

        ³Ñ®ÅÙ¡á¼þÇÈ¿ô¡ß360¡ë

    ¤¬À®¤êΩ¤Á¤Þ¤¹¡£¼¡¤ÎÎã¤Ç¤Ï¼þÇÈ¿ô¤¬3¡¤³Ñ®ÅÙ1080¡ë¡¤¿¶Éý1¤ÎsinÇȤòɽ¤·¤Æ¤¤¤Þ¤¹¡£
    ¼þÇÈ¿ôk¡¤¿¶Éýa¤ÎsinÇȤÏy=a sin k¦Øt¤Çɽ¤µ¤ì¤Þ¤¹¡£¡Ê¦Ø=360¡ë¡Ë

    y=sin 1080¡ët=sin 3¦Øt

  • ¥é¥¸¥¢¥ó¡Ê¸ÌÅÙË¡¡Ë - wikipedia ¤è¤ê
    ¥é¥¸¥¢¥ó¡Êradian, ñ°Ìµ­¹æ: [rad]¡Ë¤Ï¡¢¹ñºÝñ°Ì·Ï (SI) ¤Ë¤ª¤±¤ë³ÑÅÙ¡ÊÊ¿Ì̳ѡˤÎñ°Ì¤Ç¤¢¤ë¡£±ß¼þ¾å¤Ç¤½¤Î±ß¤ÎȾ·Â¤ÈƱ¤¸Ä¹¤µ¤Î¸Ì¤òÀÚ¤ê¼è¤ë2ËܤÎȾ·Â¤¬À®¤¹³Ñ¤ÎÃͤÈÄêµÁ¤µ¤ì¤ë¡£

    1¥é¥¸¥¢¥ó¤ÏÅÙ¿ôË¡¤Ç¤Ï (180/¦Ð)¡ë ¤Ç¡¢¤ª¤è¤½ 57.29578¡ë ¤ËÁêÅö¤¹¤ë¡£180¡ë¤Ï¸ÌÅÙË¡¤Ë¤ª¤¤¤Æ¤Ï ¦Ð rad ¤Ç¤¢¤ê¡¢360¡ë ¤Ï 2¦Ð rad ¤Ç¤¢¤ë¡£
          :
    ¿ô³Ø¤Ç»°³Ñ´Ø¿ô¤ò°·¤¦»þ¤Ï¡¢³ÑÅ٤˥饸¥¢¥ó¤òÍѤ¤¤ë¤Î¤¬ÉáÄ̤Ǥ¢¤ë¡£¤½¤ÎÍýͳ¤Ï¡¢¤½¤ì¤¬¡Ö¼«Á³¡×¤À¤«¤é¤Ç¤¢¤ê¡¢Â¿¤¯¤Î¸ø¼°¤¬´Ê·é¤Ë½ñ¤±¤ë¤è¤¦¤Ë¤Ê¤ë¡£

    ¡Ê¢¨È¾·Â r ¤Î±ß¤Î±ß¼þ¤Ï 2 ¦Ð r ¤Ç¤¢¤ë¤¿¤á ±ß¡Ê¡á360¡ë¡Ë¤ò¸ÌÅÙË¡¤Çɽ¤¹¤È¡Ö2 ¦Ð r ¡à r¡×¡£¤è¤Ã¤Æ 360¡ë ¡á 2¦Ð ¥é¥¸¥¢¥ó¡Ë

°Ê¾å¤Î¤³¤È¤«¤é¡¢¿¶Éý¤¬ A¡¢³Ñ®ÅÙ ¦Ø ¤Î¥µ¥¤¥óÇÈ¿®¹æ¤Î¤¢¤ë»þÅÀ t Éäˤª¤±¤ëÃÍ y ¤Ï¼¡¤Î¼°¤Ë¤è¤Ã¤ÆÆÀ¤é¤ì¤Þ¤¹¡£

    y = A * sin ( ¦Ø * t )

¤³¤³¤Ç¡¢³Ñ®ÅÙ ¡á ¼þÇÈ¿ô¡Ê f Hz ¡Ë¡ß 360¡ë ¤Ç¤¢¤ê 360¡ë ¡á 2¦Ð ¥é¥¸¥¢¥ó ¤Ç¤¢¤ë¤¿¤á³Ñ®Å٤ϡּþÇÈ¿ô¡Ê f Hz ¡Ë ¡ß 2¦Ð¡×¤Èɽ¤»¤ë¤¿¤á¤³¤Î¼°¤Ï¼¡¤Î¤è¤¦¤Ë¤â½ñ¤±¤Þ¤¹¡£

    y = A * sin ( 2¦Ð * f * t )

¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¤Ë¤Ä¤¤¤Æ

½êÄê¤Î¼þÇÈ¿ô¤Î¿®¹æ¤ò½ÐÎϤ¹¤ë¤¿¤á¤Ë¤ÏÁê±þ¤Î¥µ¥ó¥×¥ê¥ó¥°¡ÊɸËܲ½¡Ë¥ì¡¼¥È¤¬É¬ÍפȤʤê¤Þ¤¹¡£

¥ª¡¼¥Ç¥£¥ª CD ¤Îµ¬³Ê¤ÇºÎÍѤµ¤ì¤Æ¤¤¤ë¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È 44,100Hz ¤Ç¤¢¤ì¤ÐÍýÏÀ¾å 22,000Hz ÉÕ¶á¤Þ¤Ç¤ÎºÆ¸½¤¬²Äǽ¤Ç¤¢¤ë¤¿¤á¼ÂÍѾå¤ÎÉÔ­¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤Þ¤¿¡¢½½Ê¬¤Ê¥À¥¤¥Ê¥ß¥Ã¥¯¥ì¥ó¥¸¤ò³ÎÊݤ¹¤ë¤¿¤á¤Ë¿¶Éý¾ðÊó¤ÎÎ̻Ҳ½¤Ë¤Ï¤³¤ì¤â¥ª¡¼¥Ç¥£¥ª CD ¤ÈƱÍÍ¤Ë 16¥Ó¥Ã¥È¤òÍѤ¤¤ë¤³¤È¤È¤·¤Þ¤¹¡£¡Ê¤Á¤Ê¤ß¤Ë DVD ¤Ï 24¥Ó¥Ã¥È¤À¤½¤¦¤Ç¤¹¡Ë

·×»»¤·¤Æ¤ß¤ë¤È¡¢¡Ö¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È 44,100Hz¡¦Î̻Ҳ½¥Ó¥Ã¥È¿ô 16¡¦¥â¥Î¥é¥ë¡×¤Ç 1Éô֤ο®¹æ¤ò¹½À®¤¹¤ë¤Ë¤Ï¡¢44,100ÅÀ * 2¥Ð¥¤¥È * 1¥Á¥ã¥Í¥ë = 88,200¥Ð¥¤¥È¤Î¥á¥â¥ê¶õ´Ö¤¬É¬ÍפȤ¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

´ØÏ¢¾ðÊó

»îºî

°Ê¾å¤Î¾ðÊó¤ò¤â¤È¤Ë¥×¥í¥°¥é¥à¤ò»îºî¤·¤Þ¤·¤¿¡£200Hz ¡Á 14,000Hz ¤ÎÈϰϤΠ10¼ïÎà¤Î¼þÇÈ¿ô¤Î¥µ¥¤¥óÇÈ¿®¹æ¤òÀ¸À®¡¦½ÐÎϤ¹¤ë¤â¤Î¤Ç¤¹¡£¤³¤³¤Ç¤ÏÍ×ÁÇ¿ô 44,100 ¤Î short ·¿ÇÛÎó¤Ë 1ÉÃʬ¤Î¥µ¥¤¥óÇȥǡ¼¥¿¤ò³ÊǼ¤·¥ë¡¼¥×ºÆÀ¸¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£

ưºî¤ÎÍÍ»Ò

ư²è¡§2ʬ13Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª


ʬÀϤ˻ÈÍѤ·¤Æ¤¤¤ë¥¢¥×¥ê¡§ AudioUtil Spectrum Analyzer - play.google.com

¥½¡¼¥¹¥³¡¼¥É

sonic03     GitHub

  • MainActivity.java
    
    /**
     *
     * sonic03
     *
     * ¥µ¥¤¥óÇÈ¿®¹æ¤òÀ¸À®¤·¤ÆÌĤ餹
     *
     * ¥µ¥ó¥×¥ê¥ó¥°¼þÇÈ¿ô 44.1kHz
     * Î̻Ҳ½¥Ó¥Ã¥È¿ô 16
     * ¥â¥Î¥é¥ë
     *
     */
    
    package jp.klab.sonic03;
    
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.AudioManager;
    import android.media.AudioTrack;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.ToggleButton;
    
    import java.util.Arrays;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final float SEC_PER_SAMPLEPOINT = 1.0f / SAMPLE_RATE;
      private static final int AMP = 4000;
    
      private static final int [] FREQS =
          new int[] {200, 400, 800, 1600, 2000, 4000, 8000, 10000, 12000, 14000};
      private static final int DO = 262 * 2;
      private static final int RE = 294 * 2;
      private static final int MI = 330 * 2;
      private static final int FA = 349 * 2;
      private static final int SO = 392 * 2;
      private static final int RA = 440 * 2;
      private static final int SI = 494 * 2;
    
      private static final int MSG_PLAY_START = 120;
      private static final int MSG_PLAY_END   = 130;
    
      private Handler mHandler;
      private AudioTrack mAudioTrack = null;
      private ToggleButton mButtons[];
      private int mIdxButtonPushed = -1;
      private int mBufferSizeInShort;
      private short mPlayBuf[];
    
      // 1ÉÃʬ¤Î¥µ¥¤¥óÇȥǡ¼¥¿¤òÀ¸À®
      private void createSineWave(int freq, int amplitude, boolean doClear) {
        if (doClear) {
          Arrays.fill(mPlayBuf, (short) 0);
        }
        for (int i = 0; i < SAMPLE_RATE; i++) {
          float currentSec = i * SEC_PER_SAMPLEPOINT; // ¸½ºß°ÌÃ֤ηвáÉÿô
          // y(t) = A * sin(2¦Ð * f * t)
          double val = amplitude * Math.sin(2.0 * Math.PI * freq * currentSec);
          mPlayBuf[i] += (short)val;
        }
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        mButtons = new ToggleButton[11];
        (mButtons[0] = (ToggleButton)findViewById(R.id.button01)).setOnClickListener(this);
        (mButtons[1] = (ToggleButton)findViewById(R.id.button02)).setOnClickListener(this);
        (mButtons[2] = (ToggleButton)findViewById(R.id.button03)).setOnClickListener(this);
        (mButtons[3] = (ToggleButton)findViewById(R.id.button04)).setOnClickListener(this);
        (mButtons[4] = (ToggleButton)findViewById(R.id.button05)).setOnClickListener(this);
        (mButtons[5] = (ToggleButton)findViewById(R.id.button06)).setOnClickListener(this);
        (mButtons[6] = (ToggleButton)findViewById(R.id.button07)).setOnClickListener(this);
        (mButtons[7] = (ToggleButton)findViewById(R.id.button08)).setOnClickListener(this);
        (mButtons[8] = (ToggleButton)findViewById(R.id.button09)).setOnClickListener(this);
        (mButtons[9] = (ToggleButton)findViewById(R.id.button10)).setOnClickListener(this);
        (mButtons[10] = (ToggleButton)findViewById(R.id.button11)).setOnClickListener(this);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
        // ºÆÀ¸ÍѥХåե¡
        mPlayBuf = new short[SAMPLE_RATE]; // 1ÉÃʬ¤Î¥Ð¥Ã¥Õ¥¡¤ò³ÎÊÝ
    
        // ºÆÀ¸ÍÑ
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_OUT_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes,
                        AudioTrack.MODE_STREAM);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioTrack != null) {
          if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioTrack");
            mAudioTrack.stop();
            mAudioTrack.flush();
          }
          mAudioTrack = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        for (int i = 0; i < mButtons.length; i++) {
          if (mButtons[i] == (ToggleButton)v) {
            mIdxButtonPushed = i;
            break;
          }
        }
        if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
          mAudioTrack.stop();
          mAudioTrack.flush();
        }
        if (mButtons[mIdxButtonPushed].isChecked()) {
          new Thread(this).start();
        }
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_PLAY_START:
            Log.d(TAG, "MSG_PLAY_START");
            break;
          case MSG_PLAY_END:
            Log.d(TAG, "MSG_PLAY_END");
            mButtons[mIdxButtonPushed].setChecked(false);
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        mHandler.sendEmptyMessage(MSG_PLAY_START);
        if (mAudioTrack.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
          mAudioTrack.stop();
          mAudioTrack.flush();
        }
        mAudioTrack.play();
        if (mIdxButtonPushed != 10) {
          createSineWave(FREQS[mIdxButtonPushed], AMP, true);
          for (int i = 0; i < 5; i++) { // 5ÉÃÄøÅÙÌĤ餹
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE);
          }
        } else { // SONG
          for (int i = 0; i < 2; i++) {
            mAudioTrack.play();
            createSineWave(DO, AMP, true);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(RE, AMP, true);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(MI, AMP, true);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(FA, AMP, true);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(MI, AMP, true);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(RE, AMP, true);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(DO, AMP, true);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE);
    
            // ϲ»
            createSineWave(DO, AMP, true);
            createSineWave(MI, AMP, false);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(RE, AMP, true);
            createSineWave(FA, AMP, false);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(MI, AMP, true);
            createSineWave(SO, AMP, false);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(FA, AMP, true);
            createSineWave(RA, AMP, false);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(MI, AMP, true);
            createSineWave(SO, AMP, false);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(RE, AMP, true);
            createSineWave(FA, AMP, false);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE / 2);
            createSineWave(DO, AMP, true);
            createSineWave(MI, AMP, false);
            mAudioTrack.write(mPlayBuf, 0, SAMPLE_RATE);
          }
        }
        mAudioTrack.stop();
        mAudioTrack.flush();
        mHandler.sendEmptyMessage(MSG_PLAY_END);
      }
    }
    
    
  • AndroidManifest.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="jp.klab.sonic03">
      <uses-permission android:name="android.permission.RECORD_AUDIO"/>
      <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
          android:name=".MainActivity"
          android:label="@string/app_name"
          android:configChanges="orientation|screenSize"
          android:screenOrientation="unspecified"
          android:theme="@style/AppTheme.NoActionBar">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>
        <!-- ATTENTION: This was auto-generated to add Google Play services to your project for
           App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
        <meta-data
          android:name="com.google.android.gms.version"
          android:value="@integer/google_play_services_version" />
      </application>
    </manifest>
    
    

¥¹¥×¥ì¥Ã¥É¥·¡¼¥È¤ò»È¤Ã¤Æ¤Î¸¡¾Ú

Á°½Ò¤Î¤è¤¦¤Ë¾å¤Î¥³¡¼¥É¤Î createSineWave ´Ø¿ô¤ÏÍ×ÁÇ¿ô 44,100 ¤Î short ·¿ÇÛÎó¤Ë 44,100Hz¡¦16¥Ó¥Ã¥È¡¦¥â¥Î¥é¥ë 1ÉÃʬ¤Î¥µ¥¤¥óÇȥǡ¼¥¿¤òÀ¸À®¤·¤Æ¤¤¤Þ¤¹¡£

¤³¤ÎÇÛÎó¤ÎÀèÆ¬ 441 Í×ÁÇʬ¡¢¤Ä¤Þ¤ê 1/100 ÉÃʬ¤Î¥Ç¡¼¥¿¤È¤½¤ì¤ò¥°¥é¥Õ²½¤·¤¿¤â¤Î¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£¤½¤ì¤¾¤ì´üÂÔÄ̤ê¤ÎÇÈ·Á¤¬À¸À®¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬¸«¤Æ¤È¤ì¤Þ¤¹¡£

  • ¼þÇÈ¿ô 400Hz ¤ò»ØÄꤷ¤¿¾ì¹ç¡§400Hz/100 ¤Ë¤Ä¤­ 4 ¼þ´üʬ¤Î½ÐÎÏ
    element,value
    0,0
    1,227
    2,454
    3,680
    4,903
    5,1124
    6,1341
    7,1553
    8,1761
    9,1962
    10,2158
    11,2346
    12,2527
    13,2699
    14,2863
    15,3017
    16,3162
    17,3296
    18,3420
    19,3533
    20,3634
    21,3723
    22,3800
    23,3865
    24,3917
    25,3957
    26,3984
    27,3997
    28,3998
    29,3986
    30,3961
    31,3923
    32,3872
    33,3809
    34,3733
    35,3646
    36,3546
    37,3435
    38,3312
    39,3179
    40,3036
    41,2883
    42,2720
    43,2549
    44,2369
    45,2182
    46,1987
    47,1786
    48,1579
    49,1368
    50,1151
    51,931
    52,708
    53,483
    54,256
    55,28
    56,-199
    57,-426
    58,-652
    59,-876
    60,-1097
    61,-1314
    62,-1527
    63,-1735
    64,-1937
    65,-2134
    66,-2323
    67,-2505
    68,-2678
    69,-2843
    70,-2999
    71,-3145
    72,-3280
    73,-3405
    74,-3519
    75,-3622
    76,-3712
    77,-3791
    78,-3858
    79,-3911
    80,-3953
    81,-3981
    82,-3996
    83,-3999
    84,-3988
    85,-3965
    86,-3928
    87,-3879
    88,-3818
    89,-3743
    90,-3657
    91,-3559
    92,-3449
    93,-3328
    94,-3197
    95,-3055
    96,-2902
    97,-2741
    98,-2571
    99,-2392
    100,-2205
    101,-2012
    102,-1812
    103,-1606
    104,-1394
    105,-1179
    106,-959
    107,-736
    108,-511
    109,-284
    110,-56
    111,170
    112,398
    113,624
    114,848
    115,1069
    116,1287
    117,1501
    118,1709
    119,1913
    120,2110
    121,2300
    122,2482
    123,2657
    124,2823
    125,2980
    126,3127
    127,3264
    128,3390
    129,3506
    130,3610
    131,3702
    132,3782
    133,3850
    134,3905
    135,3948
    136,3978
    137,3995
    138,3999
    139,3990
    140,3968
    141,3934
    142,3886
    143,3826
    144,3753
    145,3669
    146,3572
    147,3464
    148,3344
    149,3214
    150,3073
    151,2922
    152,2762
    153,2592
    154,2415
    155,2229
    156,2036
    157,1837
    158,1632
    159,1421
    160,1206
    161,987
    162,764
    163,539
    164,313
    165,85
    166,-142
    167,-369
    168,-596
    169,-820
    170,-1042
    171,-1260
    172,-1474
    173,-1684
    174,-1887
    175,-2085
    176,-2276
    177,-2460
    178,-2636
    179,-2803
    180,-2961
    181,-3109
    182,-3247
    183,-3375
    184,-3492
    185,-3597
    186,-3691
    187,-3773
    188,-3842
    189,-3899
    190,-3944
    191,-3975
    192,-3994
    193,-3999
    194,-3992
    195,-3972
    196,-3939
    197,-3893
    198,-3834
    199,-3763
    200,-3680
    201,-3585
    202,-3478
    203,-3360
    204,-3231
    205,-3091
    206,-2941
    207,-2782
    208,-2614
    209,-2437
    210,-2253
    211,-2061
    212,-1862
    213,-1658
    214,-1448
    215,-1233
    216,-1014
    217,-792
    218,-567
    219,-341
    220,-113
    221,113
    222,341
    223,567
    224,792
    225,1014
    226,1233
    227,1448
    228,1658
    229,1862
    230,2061
    231,2253
    232,2437
    233,2614
    234,2782
    235,2941
    236,3091
    237,3231
    238,3360
    239,3478
    240,3585
    241,3680
    242,3763
    243,3834
    244,3893
    245,3939
    246,3972
    247,3992
    248,3999
    249,3994
    250,3975
    251,3944
    252,3899
    253,3842
    254,3773
    255,3691
    256,3597
    257,3492
    258,3375
    259,3247
    260,3109
    261,2961
    262,2803
    263,2636
    264,2460
    265,2276
    266,2085
    267,1887
    268,1684
    269,1474
    270,1260
    271,1042
    272,820
    273,596
    274,369
    275,142
    276,-85
    277,-313
    278,-539
    279,-764
    280,-987
    281,-1206
    282,-1421
    283,-1632
    284,-1837
    285,-2036
    286,-2229
    287,-2415
    288,-2592
    289,-2762
    290,-2922
    291,-3073
    292,-3214
    293,-3344
    294,-3464
    295,-3572
    296,-3669
    297,-3753
    298,-3826
    299,-3886
    300,-3934
    301,-3968
    302,-3990
    303,-3999
    304,-3995
    305,-3978
    306,-3948
    307,-3905
    308,-3850
    309,-3782
    310,-3702
    311,-3610
    312,-3506
    313,-3390
    314,-3264
    315,-3127
    316,-2980
    317,-2823
    318,-2657
    319,-2482
    320,-2300
    321,-2110
    322,-1913
    323,-1709
    324,-1501
    325,-1287
    326,-1069
    327,-848
    328,-624
    329,-398
    330,-170
    331,56
    332,284
    333,511
    334,736
    335,959
    336,1179
    337,1394
    338,1606
    339,1812
    340,2012
    341,2205
    342,2392
    343,2571
    344,2741
    345,2902
    346,3055
    347,3197
    348,3328
    349,3449
    350,3559
    351,3657
    352,3743
    353,3818
    354,3879
    355,3928
    356,3965
    357,3988
    358,3999
    359,3996
    360,3981
    361,3953
    362,3911
    363,3858
    364,3791
    365,3712
    366,3622
    367,3519
    368,3405
    369,3280
    370,3145
    371,2999
    372,2843
    373,2678
    374,2505
    375,2323
    376,2134
    377,1937
    378,1735
    379,1527
    380,1314
    381,1097
    382,876
    383,652
    384,426
    385,199
    386,-28
    387,-256
    388,-483
    389,-708
    390,-931
    391,-1151
    392,-1368
    393,-1579
    394,-1786
    395,-1987
    396,-2182
    397,-2369
    398,-2549
    399,-2720
    400,-2883
    401,-3036
    402,-3179
    403,-3312
    404,-3435
    405,-3546
    406,-3646
    407,-3733
    408,-3809
    409,-3872
    410,-3923
    411,-3961
    412,-3986
    413,-3998
    414,-3997
    415,-3984
    416,-3957
    417,-3917
    418,-3865
    419,-3800
    420,-3723
    421,-3634
    422,-3533
    423,-3420
    424,-3296
    425,-3162
    426,-3017
    427,-2863
    428,-2699
    429,-2527
    430,-2346
    431,-2158
    432,-1962
    433,-1761
    434,-1553
    435,-1341
    436,-1124
    437,-903
    438,-680
    439,-454
    440,-227
    
  • ¼þÇÈ¿ô 1,600Hz ¤ò»ØÄꤷ¤¿¾ì¹ç¡§1,600Hz/100 ¤Ë¤Ä¤­ 16 ¼þ´üʬ¤Î½ÐÎÏ
    element,value
    0,0
    1,903
    2,1761
    3,2527
    4,3162
    5,3634
    6,3917
    7,3998
    8,3872
    9,3546
    10,3036
    11,2369
    12,1579
    13,708
    14,-199
    15,-1097
    16,-1937
    17,-2678
    18,-3280
    19,-3712
    20,-3953
    21,-3988
    22,-3818
    23,-3449
    24,-2902
    25,-2205
    26,-1394
    27,-511
    28,398
    29,1287
    30,2110
    31,2823
    32,3390
    33,3782
    34,3978
    35,3968
    36,3753
    37,3344
    38,2762
    39,2036
    40,1206
    41,313
    42,-596
    43,-1474
    44,-2276
    45,-2961
    46,-3492
    47,-3842
    48,-3994
    49,-3939
    50,-3680
    51,-3231
    52,-2614
    53,-1862
    54,-1014
    55,-113
    56,792
    57,1658
    58,2437
    59,3091
    60,3585
    61,3893
    62,3999
    63,3899
    64,3597
    65,3109
    66,2460
    67,1684
    68,820
    69,-85
    70,-987
    71,-1837
    72,-2592
    73,-3214
    74,-3669
    75,-3934
    76,-3995
    77,-3850
    78,-3506
    79,-2980
    80,-2300
    81,-1501
    82,-624
    83,284
    84,1179
    85,2012
    86,2741
    87,3328
    88,3743
    89,3965
    90,3981
    91,3791
    92,3405
    93,2843
    94,2134
    95,1314
    96,426
    97,-483
    98,-1368
    99,-2182
    100,-2883
    101,-3435
    102,-3809
    103,-3986
    104,-3957
    105,-3723
    106,-3296
    107,-2699
    108,-1962
    109,-1124
    110,-227
    111,680
    112,1553
    113,2346
    114,3017
    115,3533
    116,3865
    117,3997
    118,3923
    119,3646
    120,3179
    121,2549
    122,1786
    123,931
    124,28
    125,-876
    126,-1735
    127,-2505
    128,-3145
    129,-3622
    130,-3911
    131,-3999
    132,-3879
    133,-3559
    134,-3055
    135,-2392
    136,-1606
    137,-736
    138,170
    139,1069
    140,1913
    141,2657
    142,3264
    143,3702
    144,3948
    145,3990
    146,3826
    147,3464
    148,2922
    149,2229
    150,1421
    151,539
    152,-369
    153,-1260
    154,-2085
    155,-2803
    156,-3375
    157,-3773
    158,-3975
    159,-3972
    160,-3763
    161,-3360
    162,-2782
    163,-2061
    164,-1233
    165,-341
    166,567
    167,1448
    168,2253
    169,2941
    170,3478
    171,3834
    172,3992
    173,3944
    174,3691
    175,3247
    176,2636
    177,1887
    178,1042
    179,142
    180,-764
    181,-1632
    182,-2415
    183,-3073
    184,-3572
    185,-3886
    186,-3999
    187,-3905
    188,-3610
    189,-3127
    190,-2482
    191,-1709
    192,-848
    193,56
    194,959
    195,1812
    196,2571
    197,3197
    198,3657
    199,3928
    200,3996
    201,3858
    202,3519
    203,2999
    204,2323
    205,1527
    206,652
    207,-256
    208,-1151
    209,-1987
    210,-2720
    211,-3312
    212,-3733
    213,-3961
    214,-3984
    215,-3800
    216,-3420
    217,-2863
    218,-2158
    219,-1341
    220,-454
    221,454
    222,1341
    223,2158
    224,2863
    225,3420
    226,3800
    227,3984
    228,3961
    229,3733
    230,3312
    231,2720
    232,1987
    234,256
    235,-652
    236,-1527
    237,-2323
    238,-2999
    239,-3519
    240,-3858
    241,-3996
    242,-3928
    243,-3657
    244,-3197
    245,-2571
    246,-1812
    247,-959
    248,-56
    249,848
    250,1709
    251,2482
    252,3127
    253,3610
    254,3905
    255,3999
    256,3886
    257,3572
    258,3073
    259,2415
    260,1632
    261,764
    262,-142
    263,-1042
    264,-1887
    265,-2636
    266,-3247
    267,-3691
    268,-3944
    269,-3992
    270,-3834
    271,-3478
    272,-2941
    273,-2253
    274,-1448
    275,-567
    276,341
    277,1233
    278,2061
    279,2782
    280,3360
    281,3763
    282,3972
    283,3975
    284,3773
    285,3375
    286,2803
    287,2085
    288,1260
    289,369
    290,-539
    291,-1421
    292,-2229
    293,-2922
    294,-3464
    295,-3826
    296,-3990
    297,-3948
    298,-3702
    299,-3264
    300,-2657
    302,-1069
    303,-170
    304,736
    305,1606
    306,2392
    307,3055
    308,3559
    309,3879
    310,3999
    311,3911
    312,3622
    313,3145
    314,2505
    315,1735
    316,876
    317,-28
    318,-931
    319,-1786
    320,-2549
    321,-3179
    322,-3646
    323,-3923
    324,-3997
    325,-3865
    326,-3533
    327,-3017
    328,-2346
    329,-1553
    330,-680
    331,227
    332,1124
    333,1962
    334,2699
    335,3296
    336,3723
    337,3957
    338,3986
    339,3809
    340,3435
    341,2883
    342,2182
    343,1368
    344,483
    345,-426
    346,-1314
    347,-2134
    348,-2843
    349,-3405
    350,-3791
    351,-3981
    352,-3965
    353,-3743
    354,-3328
    355,-2741
    356,-2012
    357,-1179
    358,-284
    359,624
    360,1501
    361,2300
    362,2980
    363,3506
    364,3850
    365,3995
    366,3934
    367,3669
    368,3214
    369,2592
    370,1837
    371,987
    372,85
    373,-820
    374,-1684
    375,-2460
    376,-3109
    377,-3597
    378,-3899
    379,-3999
    380,-3893
    381,-3585
    382,-3091
    383,-2437
    384,-1658
    385,-792
    386,113
    387,1014
    388,1862
    389,2614
    390,3231
    391,3680
    392,3939
    393,3994
    394,3842
    395,3492
    396,2961
    397,2276
    398,1474
    399,596
    400,-313
    401,-1206
    402,-2036
    403,-2762
    404,-3344
    405,-3753
    406,-3968
    407,-3978
    408,-3782
    409,-3390
    410,-2823
    411,-2110
    412,-1287
    413,-398
    414,511
    415,1394
    416,2205
    417,2902
    418,3449
    419,3818
    420,3988
    421,3953
    422,3712
    423,3280
    424,2678
    425,1937
    426,1097
    427,199
    428,-708
    429,-1579
    430,-2369
    431,-3036
    432,-3546
    433,-3872
    434,-3998
    435,-3917
    436,-3634
    437,-3162
    438,-2527
    439,-1761
    440,-903
    

½àÈ÷ 3. ½¸²»¤·¤¿¥Ç¡¼¥¿¤Î¼þÇÈ¿ôʬÀϤò¹Ô¤¦

FFT¡ÊFast Fourier Transform ¹â®¥Õ¡¼¥ê¥¨ÊÑ´¹¡Ë¤Ë¤Ä¤¤¤Æ

̵¶Á¼¼¤Î¤è¤¦¤Ë¿Í°ÙŪ¤ÊÆÃ¼ì´Ä¶­¤ò½ü¤­À¤³¦¤Ï»¨Â¿¤Ê²»¤ÇËþ¤Á¤Æ¤¤¤Þ¤¹¡£¿Í´Ö¤ÎǾ¤Ï¼«¿È¤¬Ìµ°Õ¼±¤Î¤¦¤Á¤ËÊ£¿ô¤Î²»¤ÎÃæ¤«¤éɬÍפʲ»¤òÁª¤êʬ¤±¤Æ¤ª¤ê¡Ê¥«¥¯¥Æ¥ë¥Ñ¡¼¥Æ¥£¡¼¸ú²Ì¡Ë¡¢ÀŤ«¤Ë´¶¤¸¤é¤ì¤ë¼¼Æâ¤Ç¤¢¤Ã¤Æ¤â¥ì¥³¡¼¥À¡¼¤Ç¤ÎÏ¿²»ÆâÍÆ¤òºÆÀ¸¤¹¤ë¤È°Õ³°¤Ê¥Î¥¤¥º¤Ëµ¤¤Å¤¯¤È¤¤¤Ã¤¿·Ð¸³¤Ï°ìÈÌŪ¤Ê¤â¤Î¤Ç¤¹¤Í¡£¤½¤Î¤¿¤á¡¢¼õ¤±¼ê¦¤ÎÁõÃÖ¤¬ÆÃÄê¤Î²»¤ò¸¡ÃΤ¹¤ë¤¿¤á¤Ë¤ÏɬÍפʤâ¤Î¤À¤±¤òÌÀ¼¨Åª¤Ë¥Ô¥Ã¥¯¥¢¥Ã¥×¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤¬¤ß¤Ã¤Ä¤á¤Î²ÝÂê¤Ç¤¹¡£¹­¤¯ÃΤé¤ì¤ë¥Õ¡¼¥ê¥¨ÊÑ´¹¤ò²»À¼¿®¹æ¤ËŬÍѤ¹¤ì¤Ð²»¤Î²ô¤ò¼þÇÈ¿ôÀ®Ê¬¤´¤È¤ËʬÀϤǤ­¤Þ¤¹¡£

¥Õ¡¼¥ê¥¨ÊÑ´¹¤È¤Ï

  • ¥Õ¡¼¥ê¥¨ÊÑ´¹¤ÎËܼÁ - apphokuson ÍͤΥµ¥¤¥È¤è¤ê

    Á´¤Æ¤Î¿®¹æ¤Ï¡¢¾å¿Þ¤Î¤è¤¦¤ËÇȤέ¤·¤¢¤ï¤»¤Çɽ¸½¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

    ¶ñÂÎŪ¤Ë¤Ï¡¢¼þÇÈ¿ô¤¬1¤ÎÇÈ1¤È¼þÇÈ¿ô¤¬2¤ÎÇÈ2¤È¼þÇÈ¿ô¤¬3¤ÎÇÈ3¤È¡¦¡¦¡¦¼þÇÈ¿ô¤¬ n¤ÎÇÈn¤ò­¤·¹ç¤ï¤»¤ë¤³¤È¤Ç¡¢¤¢¤é¤æ¤ë¿®¹æ¤òɽ¸½¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¤Î¤Ç¤¹¡£
          :
    ¼þÇÈ¿ô¤ò²£¼´¤Ë¡¢¿¶Éý¤ÎÂ礭¤µ¡Ê¥Ñ¥ï¡¼Ã͡ˤò½Ä¼´¤Ë¤È¤Ã¤Æ¥°¥é¥Õ¤ò½ñ¤­¤Ê¤ª¤·¤Æ¤ß¤Þ¤¹¡£
          :
    ¤³¤Î·ë²Ì¤Ï¡¢º¸¿Þ¤Î¿®¹æ¤Ë¼þÇÈ¿ô£±¤ÎÇȤ¬Â礭¤µ£´¤Ç´Þ¤Þ¤ì¤Æ¤¤¤ë¤³¤È¡¢¼þÇÈ¿ô£²¤Î ÇȤ¬Â礭¤µ0.5¤Ç´Þ¤Þ¤ì¤Æ¤¤¤ë¤³¤È¡¢¼þÇÈ¿ô£³¤ÎÇȤ¬¡¦¡¦¡¦¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£
          :
    ¥Õ¡¼¥ê¥¨ÊÑ´¹¤ò¹Ô¤¨¤Ð¡¢¡Ö¿®¹æ¤Ë´Þ¤Þ¤ì¤ë¼þÇÈ¿ô¤ÎÀ®Ê¬Èæ¡×¤òÆÀ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
          :

    ¡Ê¢¨°úÍѤ˺ݤ·É½µ­¤Ë°ìÉô¼ê¤ò²Ã¤¨¤µ¤»¤ÆÄº¤­¤Þ¤·¤¿ tanabe¡Ë

    • Åý·×Ū²»À¼Ç§¼±¤Î´ðËܸ¶Íý - ¼Äºêδ¹¨ÍͤΥµ¥¤¥È¤è¤ê
      ²»À¼¿®¹æ¤Ï,°ì¼¡¸µ¤Î»þ·ÏÎó¥Ç¡¼¥¿¤Ç¤¹¡¥²£¼´¤ò»þ´Ö,½Ä¼´¤ò²»¤ÎÂ礭¤µ¤È¤·¤Æ¥°¥é¥Õ¤òºîÀ®¤¹¤ë¤È,°Ê²¼¤Î¤è¤¦¤Ê¿Þ¤¬ÆÀ¤é¤ì¤Þ¤¹¡¥

¹â®¥Õ¡¼¥ê¥¨ÊÑ´¹¤È¤Ï

  • ¹â®¥Õ¡¼¥ê¥¨ÊÑ´¹ - wikipedia ¤è¤ê
    ¹â®¥Õ¡¼¥ê¥¨ÊÑ´¹¡Ê¤³¤¦¤½¤¯¥Õ¡¼¥ê¥¨¤Ø¤ó¤«¤ó¡¢±Ñ: Fast Fourier Transform¡¢FFT¡Ë ¤È¤Ï¡¢Î¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹ (Discrete Fourier Transform¡¢DFT) ¤ò·×»»µ¡¾å¤Ç¹â®¤Ë ·×»»¤¹¤ë¥¢¥ë¥´¥ê¥º¥à¡£FFT¤ÎµÕÊÑ´¹¤òIFFT (Inverse FFT) ¤È¸Æ¤Ö¡£
    • Î¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹ÆþÌç - EnergyChord ÍͤΥµ¥¤¥È¤è¤ê
      ¥³¥ó¥Ô¥å¡¼¥¿¤Ç¹Ô¤ï¤ì¤ë¥Õ¡¼¥ê¥¨ÊÑ´¹¤Ï´ðËÜŪ¤ËÎ¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹¤Ç¤¢¤ë¡¥¤Ê¤¼¤Ê¤é¡¤ÅŻҷ׻»µ¡¤ÏϢ³Î̤ò¤½¤Î¤Þ¤Þ°·¤¦¤³¤È¤¬¤Ç¤­¤Ê¤¤¤¿¤á¡¤¥³¥ó¥Ô¥å¡¼¥¿¤¬½èÍý¤¹¤ë¥Ç¡¼¥¿¤Ïɬ¤ºÎ¥»¶²½¤µ¤ì¤ëɬÍפ¬¤¢¤ë¤«¤é¤Ç¤¢¤ë¡¥¤Ä¤Þ¤ê¡¤¥³¥ó¥Ô¥å¡¼¥¿¤Ë¤è¤ë¥Ç¡¼¥¿½èÍý¤¬Åö¤¿¤êÁ°¤È¤Ê¤Ã¤¿¸½Âåµ»½Ñ¤Ë¤ª¤¤¤Æ¤Ï¡¤¥Õ¡¼¥ê¥¨ÊÑ´¹¤È¸À¤¨¤ÐÎ¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹¤ò»Ø¤¹¤È¸À¤Ã¤Æ¤â²á¸À¤Ç¤Ï¤Ê¤¤¡¥
      • Î¥»¶²½¤È¤Ï - ITÍѸ켭ŵ¥Ð¥¤¥Ê¥ê¤è¤ê
        Î¥»¶²½¤È¤Ï¡¢¤¢¤ëϢ³¤·¤¿¾ðÊó¤ò¡¢ÈóϢ³¤ÎÃͤËʬ³ä¤¹¤ë¤³¤È¤Ç¤¢¤ë¡£
        Ϣ³¤·¤¿Ãͤò»ý¤Ã¤¿¾ðÊó¤ò²òÀϤ¹¤ë¤³¤È¤ÏÈó¾ï¤Ëº¤Æñ¤Ç¤¢¤ë¤¬¡¢Î¥»¶²½¤ò¹Ô¤¤ÈóϢ³¤Ê¿ôÃͤËÃÖ¤­´¹¤¨¤ë¤³¤È¤Ç¡¢¶á»÷Ū¤Ê·×»»·ë²Ì¤òÈæ³ÓÅªÍÆ°×¤Ë»»½Ð¤¹¤ë¤³¤È¤¬²Äǽ¤È¤Ê¤ë¡£
    • ¥Õ¡¼¥ê¥¨ÊÑ´¹¤ÈÎ¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹ - ´äËÜ¿¿Íµ»ÒÍͤΥµ¥¤¥È¤è¤ê
            :
      ¥Õ¡¼¥ê¥¨ÊÑ´¹¤Ç¤Ï¡¢ÇÈy(t)¤ò¹½À®¤¹¤ë»°³Ñ´Ø¿ô¤È¤½¤Î¼þÇÈ¿ô¡¦¿¶Éý¡¦½é´ü°ÌÁê¤Ê¤É¤òÃΤ뤳¤È¤¬¤Ç¤­¤ë¤¿¤á¡¢ÇÈ¤ÎÆÃħ¤òÌÀ³Î¤Ëª¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

      Î¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹

      ¤³¤ì¤Þ¤Ç¤Ï¡¢Ï¢Â³´Ø¿ô¤ËÂФ¹¤ë¥Õ¡¼¥ê¥¨ÊÑ´¹¤ª¤è¤Ó¥Õ¡¼¥ê¥¨ÀÑʬ¡ÊµÕ¥Õ¡¼¥ê¥¨ÊÑ´¹¡Ë¤Ë¤Ä¤¤¤Æ¹Í¤¨¤Æ¤­¤¿¡£¼ÂºÝ¡¢²»À¼¤ä²»³Ú¤Ê¤É¤Ï¡¢Ï¢Â³Åª¤ÊÇȤȤ·¤Æ½ÐÎϤµ¤ì¤ë¡£¤·¤«¤·¡¢¥³¥ó¥Ô¥å¡¼¥¿¤ÏÎ¥»¶ÃͤǤ·¤«°·¤¨¤Ê¤¤¤¿¤á¡¢Analog-Didital (AD) ÊÑ´¹´ï¤ò»È¤Ã¤Æ¡¢°ìÄê´Ö³Ö¤Ç¥µ¥ó¥×¥ê¥ó¥°¤·¡¢¥³¥ó¥Ô¥å¡¼¥¿¤¬Ä¾Àܰ·¤¨¤ëÎ¥»¶Åª¤ÊÇȤËÊÑ´¹¤µ¤ì¤ë¡£
            :


      Ϣ³Ū¤ÊÇȤÈÎ¥»¶Åª¤ÊÇȤδط¸

      ¥Õ¡¼¥ê¥¨ÊÑ´¹¤Ï¡¢Ï¢Â³Åª¤ÊÇȤò»°³Ñ´Ø¿ô¤ò½Å¤Í¹ç¤ï¤»¤ë¤³¤È¤Çɽ¤½¤¦¤È¤¹¤ë¤â¤Î¤Ç¤¢¤Ã¤¿¡£Î㤨¤Ð¡¢²¼¿Þ¤Î¤è¤¦¤Ë¡¢£¸¸Ä¤Î¼þ´ü´Ø¿ô¤ò½Å¤Í¹ç¤ï¤»¤¿¤â¤Î¤¬¼ÂºÝ¤Î²»¤Ç¤¢¤Ã¤¿¤È¤¹¤ë¡£


      ¼¡¤Ë¡¢ADÊÑ´¹¤Ë¤è¤Ã¤Æ¡¢£±Éô֤ˣ´¸Ä¤Î¥µ¥ó¥×¥ê¥ó¥°¿ô¡Ê£´Åùʬ¡Ë¤ÇϢ³Ū¤ÊÇȤ¬Î¥»¶²½¤µ¤ì¤¿¤È¤¹¤ë¡Ê¹õ´Ý¡Ë¡£¤è¤¯¸«¤Æ¤ß¤ë¤È¡¢cos 3t ¤ÎÎ¥»¶¤Î£´ÅÀ¤Ï cos t ¤ÎÎ¥»¶¤Î£´ÅÀ¤ÈÁ´¤¯Æ±¤¸¤Ç¤¢¤ë¡£¼Â¤Ï sin 3t ¤È sin t ¤Ë¤Ä¤¤¤Æ¤âƱÍͤǤ¢¤ë¡£
      ¤Ä¤Þ¤ê¡¢Î¥»¶²½¤µ¤ì¤¿ÇȤˤª¤¤¤Æ¤Ï¡¢¹â¼þÇÈ¿ô¤ÎÇȤÏÄã¼þÇÈ¿ô¤ÎÇȤ˵ۼý¤µ¤ì¤Æ¤·¤Þ¤¦¡£º£¤Î¾ì¹ç¤Ï¡¢½Å¤Í¹ç¤ï¤»¤é¤ì¤¿Ê£»¨¤ÊÇȤ¬¡¢k=0,1,2 ¤Î»°³Ñ´Ø¿ô¤Î¤ß¤Çɽ¤»¤ë¤È¤¤¤¦¤³¤È¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¡£
      ¤·¤«¤·¡¢ÍưפËͽÁۤǤ­¤ë¤è¤¦¤Ë¡¢¥µ¥ó¥×¥ê¥ó¥°¿ô¤ò Áý¤ä¤¹¤È¡¢¤³¤ÎÌäÂê¤Ï²ò¾Ã¤¹¤ë¡£
            :
      Î¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹¤òÍѤ¤¤¿²»¤Ê¤É¤Î²òÀϤä²Ã¹©¤Ë¤Ï¡¢¥µ¥ó¥×¥ê¥ó¥°¤ÏÈó¾ï¤Ë½ÅÍפÊÍ×ÁǤǤ¢¤ê¡¢°·¤¦ÇȤˤĤ¤¤Æ¤¢¤ëÄøÅÙÆÃħ¤äÀ­¼Á¤òÃΤäƤ¤¤ëɬÍפ¬¤¢¤ë¡£Î㤨¤Ð¡¢¿Í´Ö¤¬Ê¹¤¯¤³¤È¤¬¤Ç¤­¤ë²»¤Î¼þÇÈ¿ô¤Ï¡¢20 Hz¤«¤é20 kHz¤È¸À¤ï¤ì¤Æ¤¤¤ë¡Ê°ìÈÌŪ¤Ë¤Ï15 kHz¤¯¤é¤¤¤Þ¤Ç¡Ë¤Î¤Ç¡¢¿Í´Ö¤¬Ê¹¤¯¤³¤È¤¬¤Ç¤­¤ë¤¹¤Ù¤Æ¤Î¼þÇÈ¿ô¤ò¥«¥Ð¡¼¤·¤è¤¦¤È¤¹¤ë¤È¡¢¥µ¥ó¥×¥ê¥ó¥°¿ô¤Ï£±Éô֤¢¤¿¤ê¡¢20000(Hz)¡ß2=40000 ²óɬÍפȤʤ롣
            :

FFT ¥é¥¤¥Ö¥é¥ê¡ÖJTransforms¡×

Android ¤Ë¤Ïɸ½à¤Î Visualizer ¥¯¥é¥¹¤Ë FFT ÍѤΠAPI getFft() ¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£¤¿¤À¤·¡¢¤¢¤¯¤Þ¤Ç¤â¡ÖThe Visualizer class enables application to retrieve part of the currently playing audio for visualization purpose.¡×¤Ç¤¢¤ê¡¢¡ÖFrequency data: 8-bit magnitude FFT by using the getFft(byte[]) method¡×¤Èµ¡Ç½Åª¤Ë¤â¹µ¤¨¤á¤ÊÆâÍÆ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ Android ¤Ç»È¤¨¤ë FFT ¥é¥¤¥Ö¥é¥ê¤Ë¤ÏÊ£¿ô¤ÎÁªÂò»è¤¬¤¢¤ê¤Þ¤¹¤¬¡¢Piotr Wendykier »á¤Ë¤è¤ë JTransforms ¤¬¹âÀ­Ç½¤«¤Ä¥á¥¸¥ã¡¼¤Ç¤¢¤ë¤³¤È¤òÃΤꤳ¤ì¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

  • JTransforms - Piotr Wendykier - sites.google.com
    JTransforms is the first, open source, multithreaded FFT library written in pure Java. Currently, four types of transforms are available: Discrete Fourier Transform (DFT), Discrete Cosine Transform (DCT), Discrete Sine Transform (DST) and Discrete Hartley Transform (DHT). The code is derived from General Purpose FFT Package written by Takuya Ooura and from Java FFTPack written by Baoshe Zhang.

    ¡ÊGoogle Ìõ¡Ë
    JTransforms¤Ï¡¢½ã¿è¤ÊJava¤Ç½ñ¤«¤ì¤¿ºÇ½é¤Î¥ª¡¼¥×¥ó¥½¡¼¥¹¤Î¥Þ¥ë¥Á¥¹¥ì¥Ã¥É FFT¥é¥¤¥Ö¥é¥ê¤Ç¤¹¡£¸½ºß¡¢Î¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹¡ÊDFT¡Ë¡¢Î¥»¶¥³¥µ¥¤¥óÊÑ´¹¡ÊDCT¡Ë¡¢ Î¥»¶¥µ¥¤¥óÊÑ´¹¡ÊDST¡Ë¤ª¤è¤ÓÎ¥»¶¥Ï¡¼¥È¥ì¡¼ÊÑ´¹¡ÊDHT¡Ë¤Î4¼ïÎà¤ÎÊÑ´¹¤¬ÍøÍѲÄǽ ¤Ç¤¢¤ë¡£¤³¤Î¥³¡¼¥É¤Ï¡¢Takuya Ooura ¤¬½ñ¤¤¤¿ÈÆÍÑFFT¥Ñ¥Ã¥±¡¼¥¸¤È¡¢Baoshe Zhang¤¬ ½ñ¤¤¤¿Java FFTPack¤«¤éÆÀ¤é¤ì¤¿¤â¤Î¤Ç¤¹¡£
          :
    License
    JTransforms is distributed under the terms of the BSD-2-Clause license.
  • wendykierp/JTransforms - GitHub
    • Documentation | Overview (JTransforms 3.1 API) - wendykierp.github.io
      JTransforms 3.1 API
      Packages
      Package                Description
      org.jtransforms.dct    Discrete Cosine Transforms.
      org.jtransforms.dht    Discrete Hartley Transforms.
      org.jtransforms.dst    Discrete Sine Transforms.
      org.jtransforms.fft    Discrete Fourier Transforms.
      org.jtransforms.utils  Utility classes.
      • Class DoubleFFT_1D
        org.jtransforms.fft
        Class DoubleFFT_1D

        Computes 1D Discrete Fourier Transform (DFT) of complex and real,double precision data. The size of the data can be an arbitrary number.

        ¡ÊGoogle Ìõ¡Ë
        Ê£ÁÇ¿ô¤È¼Â¿ô¤ÎÇÜÀºÅ٥ǡ¼¥¿¤Î°ì¼¡¸µÎ¥»¶¥Õ¡¼¥ê¥¨ÊÑ´¹¡ÊDFT¡Ë¤ò·×»»¤·¤Þ¤¹¡£¥Ç¡¼¥¿¤Î¥µ¥¤¥º¤ÏǤ°Õ¤Î¿ô¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
Á°·Ç¤Î¤è¤¦¤Ë²»À¼¿®¹æ¤Ï°ì¼¡¸µ¥Ç¡¼¥¿¤Ê¤Î¤Ç»È¤¦¤Î¤Ï¤³¤Î DoubleFFT_1D ¥¯¥é¥¹¤Ç¤è¤µ¤½¤¦¤Ç¤¹¤¬ Javadoc ¤Ç¤ÏÍøÍÑÊýË¡¤¬¤µ¤Ã¤Ñ¤ê¤ï¤«¤é¤º»ÈÍÑÎã¤ò¥Í¥Ã¥È¤Çõ¤·¤Þ¤·¤¿¡£
  • JTransforms FFT in Android from PCM data - stackoverflow.com
      System.arraycopy(applyWindow(sampleData), 0, a, 0, sampleData.length);
      fft.realForward(a);

      /* find the peak magnitude and it's index */
      double maxMag = Double.NEGATIVE_INFINITY;
      int maxInd = -1;

      for(int i = 0; i < a.length / 2; ++i) {
        double re  = a[2*i];
        double im  = a[2*i+1];
        double mag = Math.sqrt(re * re + im * im);

        if(mag > maxMag) {
          maxMag = mag;
          maxInd = i;
        }
      }
  • How to get frequency from fft result? - stackoverflow.com
    The complex data is interleaved, with real components at even indices and imaginary components at odd indices, i.e. the real components are at index 2*i, the imaginary components are at index 2*i+1.

    To get the magnitude of the spectrum at index i, you want:

    re = fft[2*i];
    im = fft[2*i+1];
    magnitude[i] = sqrt(re*re+im*im);

    Then you can plot magnitude[i] for i = 0 to N / 2 to get the power spectrum. Depending on the nature of your audio input you should see one or more peaks in the spectrum.

    To get the approximate frequency of any given peak you can convert the index of the peak as follows:

    freq = i * Fs / N;

    where:

    freq = frequency in Hz
    i = index of peak
    Fs = sample rate (e.g. 44100 Hz or whatever you are using)
    N = size of FFT (e.g. 1024 in your case)

¤Ê¤ë¤Û¤É¡¢»È¤¤Êý¤ÏÆñ¤·¤¯¤Ê¤¤¤è¤¦¤Ç¤¹¡£À°Íý¤·¤Æ¤ß¤Þ¤¹¡£

  • ²»À¼¾ðÊó¡Ê¡á¼Â¿ô¤Î¤ß¤Ç¹½À®¤µ¤ì¤ë¡Ë¤ò FFT ¤Ë¤«¤±¤ë¾ì¹ç¤Ï¿®¹æ¥Ç¡¼¥¿¤ÎÇÛÎó¤ò°ú¿ô¤È¤·¤Æ realForward ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹
  • ¼Â¹Ô·ë²Ì¤ÏÇÛÎó¤ËÊ£ÁÇ¿ô¤Ç¾å½ñ¤­¤µ¤ì¶ö¿ô¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë¤Ï¼ÂÉô¡¢¤Ò¤È¤Ä¸å¤Î´ñ¿ô¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë¤ÏµõÉô¡¢¤È¤¤¤¦¥Ú¥¢¤¬Â³¤¯
  • ³Æ¼þÇÈ¿ôÀ®Ê¬¤Î¿¶ÉýÃͤÏÅö³ºÊ£ÁÇ¿ô¤ÎÀäÂÐÃÍre2+im2 ¤ÇÆÀ¤é¤ì¤ë
    • Ê£ÁÇÊ¿ÌÌ - KIT¿ô³Ø¥Ê¥Ó¥²¡¼¥·¥ç¥óÍͤΥµ¥¤¥È¤è¤ê
      xy Ê¿Ì̤ˤª¤¤¤Æ¡¤ x ¼´¤Ë¼Â¿ô¡¤ y ¼´¤Ëµõ¿ô¤òÂбþ¤µ¤»¤Æ¡¤Ê£ÁÇ¿ô¤òɽ¤·¤¿¤â¤Î¤òÊ£ÁÇÊ¿Ì̤Ȥ¤¤¦¡¥¤Þ¤¿¤Ï¡¤Ê£ÁÇ¿ôÊ¿ÌÌ¡¤¥¬¥¦¥¹Ê¿Ì̤Ȥ⤤¤¦¡¥

      Ê£ÁÇ¿ô z=a+ⅈb ¤òÊ£ÁÇÊ¿Ì̾å¤Ëɽ¤·¤¿¤â¤Î¤¬¡¤±¦¤Î¿Þ¤Ç¤¢¤ë¡¥

      Ê£ÁÇ¿ôz ¤ÎÀäÂÐÃͤÎÄêµÁ¡§

      | z |=| a+b |= a 2 + b 2 =r

      ¤¹¤Ê¤ï¤Á¡¤Ê£ÁÇÊ¿Ì̾å¤Î¸¶ÅÀO¤«¤é z ¤Þ¤Ç¤Îµ÷Î¥ r ¤È¤Ê¤ë¡¥
  • ¼þÇÈ¿ô¤Ï¡ÖÇÛÎóÍ×ÁǤΥ¤¥ó¥Ç¥Ã¥¯¥¹ * ¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È / ¿®¹æ¥Ç¡¼¥¿¤ÎÍ×ÁÇ¿ô¡Ê¡á¡ÖFFT ¥µ¥¤¥º¡×¡Ë¡×¤Î¼°¤ÇÆÀ¤é¤ì¤ë
  • ¤Ä¤Þ¤ê¡¢¤â¤Ã¤È¤â¿¶Éý¤ÎÂ礭¤¤¼þÇÈ¿ô¡Ê¥Ô¡¼¥¯¼þÇÈ¿ô¡Ë¤òÆÀ¤ë¤Ë¤ÏºÇÂç¿¶ÉýÃͤò»ý¤ÄÇÛÎóÍ×ÁǤΥ¤¥ó¥Ç¥Ã¥¯¥¹¤ò¾å¤Î¼°¤ËÆÍ¤Ã¹þ¤á¤Ð¤è¤¤

»îºî

¾åµ­¤Î JTransforms ¥é¥¤¥Ö¥é¥ê¤òÍøÍѤ·¤Æ½¸²»¥Ç¡¼¥¿Ãæ¤Î¥Ô¡¼¥¯¼þÇÈ¿ô¤ò²èÌ̤Ëɽ¼¨¤¹¤ë¥¢¥×¥ê¤òºîÀ®¡£´üÂԤɤª¤ê¤Î·ë²Ì¤¬ÆÀ¤é¤ì¤Þ¤·¤¿¡£

ưºî¤ÎÍÍ»Ò

ư²è¡§1ʬ7Éá¡¡¡¢¨²»ÎÌÃí°Õ¡ª

¥½¡¼¥¹¥³¡¼¥É

sonic04     GitHub

  • MainActivity.java
    
    /**
     *
     * sonic04
     *
     * üËö¤Î¥Þ¥¤¥¯¤«¤é²»À¼¤ò¼õ¿®¤·¥Ô¡¼¥¯¼þÇÈ¿ô¤òɽ¼¨¤¹¤ë
     * FFT ½èÍý¤Ë JTransforms ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ
     *
     * ¥µ¥ó¥×¥ê¥ó¥°¼þÇÈ¿ô 44.1kHz
     * Î̻Ҳ½¥Ó¥Ã¥È¿ô 16
     * ¥â¥Î¥é¥ë
     *
     */
    
    package jp.klab.sonic04;
    
    
    import org.jtransforms.fft.DoubleFFT_1D;
    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity
        implements Runnable, View.OnClickListener, Handler.Callback {
      private static final String TAG = "SNC";
    
      private static final int SAMPLE_RATE = 44100;
      private static final short THRESHOLD_AMP = 0x00ff;
    
      private static final int MSG_RECORD_START = 100;
      private static final int MSG_RECORD_END   = 110;
      private static final int MSG_FREQ_PEAK  = 120;
      private static final int MSG_SILENCE    = 130;
    
      private Handler mHandler;
      private AudioRecord mAudioRecord = null;
    
      private Button mButton01;
      private TextView mTextView02;
    
      private boolean mInRecording = false;
      private boolean mStop = false;
      private int mBufferSizeInShort;
    
      private short mRecordBuf[];
      private DoubleFFT_1D mFFT;
      private double mFFTBuffer[];
      private int mFFTSize;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        mHandler = new Handler(this);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        mButton01 = (Button)findViewById(R.id.button01);
        mButton01.setOnClickListener(this);
        mTextView02 = (TextView)findViewById(R.id.textView02);
    
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
        mBufferSizeInShort = bufferSizeInBytes / 2;
        // Ï¿²»ÍѥХåե¡
        mRecordBuf = new short[mBufferSizeInShort];
    
        // FFT ½èÍýÍÑ
        mFFTSize = mBufferSizeInShort;
        mFFT = new DoubleFFT_1D(mFFTSize);
        mFFTBuffer = new double[mFFTSize];
    
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSizeInBytes);
      }
    
      @Override
      public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        mStop = true;
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        if (mAudioRecord != null) {
          if (mAudioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {
            Log.d(TAG, "cleanup mAudioRecord");
            mAudioRecord.stop();
          }
          mAudioRecord = null;
        }
      }
    
      @Override
      public void onClick(View v) {
        if (v == (View)mButton01) {
          // ½¸²»³«»Ï or ½ªÎ»
          if (!mInRecording) {
            mInRecording = true;
            new Thread(this).start();
          } else {
            mInRecording = false;
          }
        }
        return;
      }
    
      @Override
      public boolean handleMessage(Message msg) {
        switch (msg.what) {
          case MSG_RECORD_START:
            Log.d(TAG, "MSG_RECORD_START");
            mButton01.setText("STOP");
            break;
          case MSG_RECORD_END:
            Log.d(TAG, "MSG_RECORD_END");
            mButton01.setText("START");
            break;
          case MSG_FREQ_PEAK:
            mTextView02.setText(Integer.toString(msg.arg1) + " Hz");
            break;
          case MSG_SILENCE:
            mTextView02.setText("");
            break;
        }
        return true;
      }
    
      @Override
      public void run() {
        boolean bSilence = false;
        mHandler.sendEmptyMessage(MSG_RECORD_START);
        // ½¸²»³«»Ï
        mAudioRecord.startRecording();
        while (mInRecording && !mStop) {
          mAudioRecord.read(mRecordBuf, 0, mBufferSizeInShort);
          bSilence = true;
          for (int i = 0; i < mBufferSizeInShort; i++) {
            short s = mRecordBuf[i];
            if (s > THRESHOLD_AMP) {
              bSilence = false;
            }
          }
          if (bSilence) { // Àżä
            mHandler.sendEmptyMessage(MSG_SILENCE);
            continue;
          }
          int freq = doFFT(mRecordBuf);
          Message msg = new Message();
          msg.what = MSG_FREQ_PEAK;
          msg.arg1 = freq;
          mHandler.sendMessage(msg);
        }
        // ½¸²»½ªÎ»
        mAudioRecord.stop();
        mHandler.sendEmptyMessage(MSG_RECORD_END);
      }
    
      private int doFFT(short[] data) {
        for (int i = 0; i < mFFTSize; i++) {
          mFFTBuffer[i] = (double)data[i];
        }
        // FFT ¼Â¹Ô
        mFFT.realForward(mFFTBuffer);
    
        // ½èÍý·ë²Ì¤ÎÊ£ÁÇ¿ôÇÛÎ󤫤鳯¼þÇÈ¿ôÀ®Ê¬¤Î¿¶ÉýÃͤòµá¤á¥Ô¡¼¥¯Ê¬¤ÎÍ×ÁÇÈÖ¹æ¤òÆÀ¤ë
        double maxAmp = 0;
        int index = 0;
        for (int i = 0; i < mFFTSize/2; i++) {
          double a = mFFTBuffer[i*2]; // ¼ÂÉô
          double b = mFFTBuffer[i*2 + 1]; // µõÉô
          // a+ib ¤ÎÀäÂÐÃÍ ¢å a^2 + b^2 = r ¤¬¿¶ÉýÃÍ
          double r = Math.sqrt(a*a + b*b);
          if (r > maxAmp) {
            maxAmp = r;
            index = i;
          }
        }
        // Í×ÁÇÈֹ桦¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¡¦FFT ¥µ¥¤¥º¤«¤é¥Ô¡¼¥¯¼þÇÈ¿ô¤òµá¤á¤ë
        return index * SAMPLE_RATE / mFFTSize;
      }
    }
    
    
  • AndroidManifest.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="jp.klab.sonic04">
      <uses-permission android:name="android.permission.RECORD_AUDIO"/>
      <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
          android:name=".MainActivity"
          android:label="@string/app_name"
          android:configChanges="orientation|screenSize"
          android:screenOrientation="unspecified"
          android:theme="@style/AppTheme.NoActionBar">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>
        <!-- ATTENTION: This was auto-generated to add Google Play services to your project for
           App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
        <meta-data
          android:name="com.google.android.gms.version"
          android:value="@integer/google_play_services_version" />
      </application>
    </manifest>
    
    

¼¡²ó¤ÎͽÄê

°Ê¾å¤ÎÆâÍÆ¤Ë¤è¤ê Android ¥Ç¥Ð¥¤¥¹¤Ç¡ÖǤ°Õ¤Î¼þÇÈ¿ô¡¦¿¶Éý¤Î²»¤ò½Ð¤¹¤³¤È¡×¤È¡Ö½¦¤Ã¤¿²»¤Ë´Þ¤Þ¤ì¤ë¼þÇÈ¿ô¤ò¸¡ÃΤ¹¤ë¤³¤È¡×¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£²»¤ò»È¤Ã¤Æ¥Ç¥Ð¥¤¥¹´Ö¤ÇÄÌ¿®¤ò¹Ô¤¦¤¿¤á¤ÎÁǺब¤³¤ì¤Ç·¤Ã¤¿¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¼¡²ó¤Ï¤³¤³¤Þ¤Ç¤ÎÅþãÅÀ¤ò±þÍѤ·¤Æ¥Ó¥Ã¥È¥Ç¡¼¥¿¤ÎÁ÷¼õ¿®¤ò»î¤ß¤Þ¤¹¡£


(tanabe)
klab_gijutsu2 at 07:21¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(4)
2017ǯ05·î18Æü

²»¤òÍøÍѤ¹¤ë 1

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

¤Ï¤¸¤á¤Ë

µ»½Ñ¡¦¥¤¥ó¥Õ¥é¤Î¿Ê²½¤È¤È¤â¤Ë¾ðÊóÄÌ¿®¤Î¸úΨ¤¬²Ã®¤ò³¤±¤ë¾õ¶·¤Ë¤¢¤Ã¤Æ¡¢¡Ö²»¡×¤òÍøÍѤ·¤¿±ýǯ¤ÎÄÌ¿®¼êË¡¤¬¶áǯ¤¢¤é¤¿¤á¤ÆÃíÌܤµ¤ì¤Æ¤¤¤Þ¤¹¡£´ØÏ¢¤¹¤ëÏÃÂê¤ò¤¤¤¯¤Ä¤«°Ê²¼¤Ë¥Ô¥Ã¥¯¥¢¥Ã¥×¤·¤Æ¤ß¤Þ¤¹¡£¤³¤ì¤é¤Ï¤¤¤º¤ì¤âºÇ¿·¤Îµ»½Ñ¤äʸ²½¤ËÌ©Ã夷¤¿Í×·ï¤Ç¤Î±þÍѤȤ¤¤¦ÅÀ¤Ç¶¦Ä̤·¤Æ¤ª¤ê¡¢²û¸ÅŪ¤Ê¥â¥Á¡¼¥Õ¤È¤Ï¤Þ¤Ã¤¿¤¯Ìµ±ï¤Ç¤¢¤ë¤³¤È¤¬¶½Ì£¿¼¤¯´¶¤¸¤é¤ì¤Þ¤¹¡£

¡Ê¢¨³Æ°úÍÑÊ¸Ãæ¤ÎÀÄ»úɽ¼¨¤ÏÉ®¼Ô¤Ë¤è¤ë¤â¤Î¤Ç¤¹¡Ë

  • ¤ªÇ㤤ʪÂ賤ò¤¢¤¿¤é¤·¤¯
    ¡Ê³ô¼°²ñ¼Ò¥¹¥Ý¥Ã¥È¥é¥¤¥ÈÍÍ¥µ¥¤¥È¤è¤ê¡Ë
    ¥¹¥Ý¥Ã¥È¥é¥¤¥È¤Îµ»½Ñ

    (1) °ÌÃÖ¸¡½Ðµ»½Ñ
    ÆÈ¼«¤ÎͲ»Çȵ»½Ñ¤Ë¤è¤ê¡¢Andorid/iOSÁÐÊý¤ËÂбþ¤·¤¿¡¢Àµ³Î¤Ç¥»¥­¥å¥¢¤ÊÍèŹ¸¡ÃΤ¬¼Â¸½¤Ç¤­¤Þ¤¹

  • ¡ØSSC¡ÙSmart Sonic Communication Ͳ»ÇÈÄÌ¿®¤Î¤´°ÆÆâ
    ¡Ê¥É¥ê¡¼¥à¥Ë¥å¡¼¥¹ÍÍ¥µ¥¤¥È¤è¤ê¡§ 2012-06-20¡Ë
    SINGAPORE SDI PTE LTD¡ÊËܼҡ§¥·¥ó¥¬¥Ý¡¼¥ë¡Ë¤Ï¡¢Ä¶²»ÇȤòÍøÍѤ·¤¿µ¡´ï´ÖÄÌ¿®µ»½Ñ¤È¤·¤Æ¡ØSSC(Smart Sonic Communication)¡Ù¤ò³«È¯¤¤¤¿¤·¤Þ¤·¤¿¡£ iPhone¡¢Android¤Ê¤É¤Î¥¹¥Þ¡¼¥È¥Õ¥©¥ó¤Ï¤â¤È¤è¤ê¡¢¥Þ¥¤¥¯¤È¥¹¥Ô¡¼¥«¡¼¤òÈ÷¤¨¤Æ¤¤¤ëµ¡´ï¤Ç¤¢¤ì¤ÐÆÃÊ̤ʥϡ¼¥É¥¦¥§¥¢¤òÄɲ乤뤳¤È¤Ê¤¯¡¢¥½¥Õ¥È¥¦¥§¥¢¤ÎƳÆþ¤Î¤ß¤ÇÄÌ¿®¤¬²Äǽ¤Ç¤¹¡£

  • ŹÊޤ˥Á¥§¥Ã¥¯¥¤¥ó¤¹¤ì¤Ð¥Ý¥¤¥ó¥È¤¬Ãù¤Þ¤ë¡Ö³ÚÅ·¥Á¥§¥Ã¥¯¡×¤ÏO2O¤ÎËÜÌ¿¤È¤Ê¤ë¤«
    ¡ÊTechCrunch Japan ÍÍ¥µ¥¤¥È¤è¤ê¡§ 2014-04-02¡Ë
    Ͳ»ÇȤòÍøÍѤ·¤¿ÍèŹ¸¡ÃΥݥ¤¥ó¥È¥¢¥×¥ê¡Ö¥¹¥Þ¥Ý¡×¤òÄ󶡤¹¤ë¥¹¥Ý¥Ã¥È¥é¥¤¥È¡£ 2013ǯ10·î¤Ë³ÚÅ·¤¬Çã¼ý¤·¤Æ´°Á´»Ò²ñ¼Ò¤È¤Ê¤Ã¤¿Æ±¼Ò¤¬¡¢4·î2Æü¤è¤ê³ÚÅ·¤ÈÏ¢·È¤·¤¿ÍèŹ¥Ý¥¤¥ó¥È¥¢¥×¥ê¡Ö³ÚÅ·¥Á¥§¥Ã¥¯¡×¤ÎÄ󶡤ò³«»Ï¤·¤¿¡£

  • ³ÚÅ·¥Á¥§¥Ã¥¯ - ÍèŹ¤Ç¥Ý¥¤¥ó¥È¤¬Ãù¤Þ¤ë¡ª¤ªÆÀ¤Ê̵ÎÁ¥¢¥×¥ê¡ª
    ¡ÊGoogle Play ¥¹¥È¥¢¾å¤Î³ô¼°²ñ¼Ò¥¹¥Ý¥Ã¥È¥é¥¤¥ÈÍͤˤè¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥óÀâÌÀ¤è¤ê¡§ Åöµ­»ö»þÅÀ¤Ç¤Î¹¹¿·ÆüÉÕɽ¼¨¤Ï 2017-04-23¡Ë
    1.³ÚÅ·¥Á¥§¥Ã¥¯¤Ç¥Ý¥¤¥ó¥È¤¬Ãù¤Þ¤ë¤ªÅ¹¤òõ¤¹
    2.¹¥¤­¤Ê¤ªÅ¹¤äµ¤¤Ë¤Ê¤Ã¤¿¤ªÅ¹¤Ë¹Ô¤¯
    3.¤ªÅ¹¤ËÃ夤¤¿¤é¥¢¥×¥ê¤Ëµ­ºÜ¤µ¤ì¤¿»ØÄê¤Î¥¨¥ê¥¢¤Ç¥Ü¥¿¥ó¤ò¥¿¥Ã¥×¤¹¤ë¤À¤±¡ª

  • LINE¤Î¡Öͧ¤À¤ÁÄɲáפÇͲ»ÇȤ¬»ÈÍѲÄǽ¤Ë¡ª¥Í¥¿¤«¤È»×¤Ã¤¿¤é¤Û¤ó¤È¤Ë½ÐÍ褿¡ª
    ¡Ê¡Ö¥Ç¥¸¤µ¤ë¡×ÍÍ¥µ¥¤¥È¤è¤ê¡§ 2015-09-06¡Ë
    LINE¤òµ¯Æ°¤·¤Æº¸²¼¤Î¡Ö¤½¤Î¾¡×¤«¤é¡Öͧ¤À¤ÁÄɲáפò¥¿¥Ã¥×¤·¤Þ¤¹¡£
    ¡ÖQR¥³¡¼¥É¡×¤ò¥¿¥Ã¥×¤·¤Þ¤¹¡£
    ¤¹¤ë¤ÈQR¥³¡¼¥É¥ê¡¼¥À¡¼¤¬µ¯Æ°¤·¤Þ¤¹¡£Í§¤À¤ÁÄɲäò¤¹¤ë°ìÊý¤Ï¤³¤Î¾õÂÖ¤ÇÂÔµ¡¤·¤Þ¤¹¡£
    ¤â¤¦°ìÊý¤Ï¡¢¡Ö¼«Ê¬¤ÎQR¥³¡¼¥É¤òɽ¼¨¡×¤ò¥¿¥Ã¥×¤·¤ÆQR¥³¡¼¥É¤ò²èÌ̤˽Ф·¤Þ¤¹¡£
    ¤¹¤ë¤È²»Î̤¬¤³¤Î»þ¤À¤±Â礭¤¯¤Ê¤ê¤Þ¤¹¡£¿Í´Ö¤Î¼ª¤Ë¤Ïʹ¤³¤¨¤Þ¤»¤ó¤¬¤³¤Î»þ´û¤ËͲ»ÇȤ¬½Ð¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¡£

  • Radon - Share using Ultrasound
    ¡ÊGoogle Play ¥¹¥È¥¢¾å¤Î Nam Nghiem Íͤˤè¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥óÀâÌÀ¤è¤ê¡§ Åöµ­»ö»þÅÀ¤Ç¤Î¹¹¿·ÆüÉÕɽ¼¨¤Ï 2016-03-29¡Ë
    NO NFC? NO PROBLEM.
    Radon uses sensors you already have, and everyone else has including Wi-Fi, Bluetooth and Ultrasound. It does everything automatically, so all you have to do is tap share.

  • ¿·¤·¤¤ Amazon Dash Button ¤Ë¥Þ¥¤¥¯¤¬»Ä¤µ¤ì¤Æ¤¤¤ëÍýͳ
    ¡ÊÅö¥Ö¥í¥°¤Îµ­»ö¤è¤ê¡§ 2016-12-22¡Ë
    µì Button ¤¬ iOS üËö¤Ç¤Î¥»¥Ã¥È¥¢¥Ã¥×»þ¤Ë²»À¼¿®¹æ¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¥Þ¥¤¥¯¥í¥Õ¥©¥ó¤òÆâ¢¤·¤Æ¤¤¤¿¤³¤È¤ÏÍý²ò¤Ç¤­¤Þ¤¹¡£¤Ç¤Ï¡¢¤Ê¤¼ BLE ÄÌ¿®¤òÍøÍѤ¹¤ë¿· Button ¤Ë¤â¥Þ¥¤¥¯¤¬»Ä¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¤·¤ç¤¦¡©
    »È¤ï¤Ê¤¤ÉôÉʤǤ¢¤ì¤ÐÀ½Â¤¥³¥¹¥Èºï¸º¤Î¤¿¤á¤Ë¤âűµî¤¹¤ë¤Û¤¦¤¬¹çÍýŪ¤Ê¤Ï¤º¤Ç¤¹¡£¤Þ¤µ¤« Amazon ¤¬²¿¤«Îɤ«¤é¤Ì¤³¤È¤ò´ë¤ó¤Ç¤¤¤ë¤Î¤Ç¤·¤ç¤¦¤«¡©

      ¡¦ Amazon Dash¤«¤é¥Þ¥¤¥¯¤¬¸«¤Ä¤«¤ë¡¢¤³¤ìÅðİ´ï¤À¤í - jisaka.blog.jp

  • ¿·ThinkPad¤Ç¤Ï¥¨¥é¡¼¥Ó¡¼¥×²»¤òAndroid¥¢¥×¥ê¤Ëʹ¤«¤»¤ë¤È¥¨¥é¡¼ÆâÍÆ¤ÎÆÃÄ꤬²Äǽ
    ¡ÊPC Watch ÍÍ¥µ¥¤¥È¤è¤ê¡§ 2017-02-09¡Ë
    2017ǯ¥â¥Ç¥ë¤Î¿·µ¡Ç½¤Î1¤Ä¤È¤·¤Æ¡¢¥¨¥é¡¼¥Ó¡¼¥×²»¤Î¿Ê²½¤¬µó¤²¤é¤ì¤ë¡£ ¤³¤ì¤Þ¤Ç¤ÎPC¤Î¥¨¥é¡¼¥Ó¡¼¥×²»¤È¸À¤¨¤Ð¡¢Ä¹¤¤²»¤Èû¤¤²»¤òÁȤ߹ç¤ï¤»¤¿¥â¡¼¥ë¥¹¿®¹æ¤Î¤è¤¦¤Ê¤â¤Î¤Ç¡¢¥æ¡¼¥¶¡¼¤Ï¤½¤Î²»¤òʹ¤¤¤Æ¡¢¥Þ¥Ë¥å¥¢¥ë¤È¾È¤é¤·¹ç¤ï¤»¤Æ¥¨¥é¡¼¤òÆÃÄꤹ¤ë¤È¤¤¤Ã¤¿ÈÑ»¨¤Êºî¶È¤¬É¬ÍפÀ¤Ã¤¿¡£

    °ìÊý¡¢2017ǯ¥â¥Ç¥ë¤Ç¤Ï¡¢¸ÄÊ̤β»³¬¤ò»ý¤Ã¤¿¥¨¥é¡¼²»¤Ç¥¨¥é¡¼¥³¡¼¥É¤òȯ¿®¤·¡¢¥¹¥Þ¡¼¥È¥Õ¥©¥óÂбþ¤Î¡ÖLenovo PC Diagnostics¡×(¥ê¥ó¥¯Àè¤Ï AndroidÈÇ)¤È¤¤¤¦¥¢¥×¥ê¤Ëʹ¤«¤»¤ë¤È¡¢¥¨¥é¡¼¥³¡¼¥É¤È¤È¤â¤Ë¡¢µ¡¼ï̾¡¢¥¨¥é¡¼¤Î¸¶°ø¡¢¥¿¥¤¥à¥¹¥¿¥ó¥×¡¢¤½¤·¤Æ¥â¥Ç¥ë̾¤ä¥·¥ê¥¢¥ë¥Ê¥ó¥Ð¡¼¤Ë»ê¤ë¤Þ¤Ç¤òÆÃÄê¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£¤³¤ì¤Ë¤è¤Ã¤Æ´ÉÍý¤ÎÍøÊØÀ­¤òÂçÉý¤Ë ¸þ¾å¤µ¤»¤¿¡£

»öÎã¤Ç¤Ï¿Í´Ö¤Î²Äݰè¤òÎ¥¤ì¤¿Ä¶²»ÇȤòÍøÍѤ¹¤ë¥±¡¼¥¹¤¬¤·¤Ð¤·¤Ð¸«¼õ¤±¤é¤ì¤Þ¤¹¡£¼ÂºÝ¡¢¡ÖͲ»ÇÈÄÌ¿®¡×¤Ï¿Íµ¤¤Î¤¢¤ë¥­¡¼¥ï¡¼¥É¤Ç¤¹¤Í¡£¤â¤Ã¤È¤â¡¢¤«¤Ä¤ÆÅÅÏòóÀþ¤´¤·¤Î²»¶Á¥«¥×¥é¤äµìÀ¤Âå¤Î¥Õ¥¡¥¯¥·¥ß¥ê¤Ç¤Î±þ½·¤Ë²Äݲ»¤¬ÍѤ¤¤é¤ì¤Æ¤­¤¿¤è¤¦¤Ë¡¢»ÈÍѤ¹¤ë²»°è¤ò·èÄê¤Å¤±¤ë¤Î¤ÏÍøÍѴĶ­Åù¤Î¾ò·ï¤ÎÁȤ߹ç¤ï¤»¤Ë¤¹¤®¤Þ¤»¤ó¤«¤é¡¢µ»½Ñ¼Ô¤Ë¤È¤Ã¤Æ°ìÈ֤δؿ´»ö¤Ï¤¢¤¯¤Þ¤Ç¤â¡Ö²»¤òÇÞÂΤȤ·¤Æ¤É¤Î¤è¤¦¤Ë¾ðÊó¤ò¤ä¤ê¤È¤ê¤¹¤ë¤«¡×¤È¤¤¤¦ËܼÁŪ¤ÊÏÃÂê¤Ç¤·¤ç¤¦¡£

Åż§ÇȤËÈæ¤Ù²»ÇȤˤÏÅÁÁ÷¾å¤Îµ÷Î¥¤ä¸úΨ¤Ë¤è¤ê¿¤¯¤ÎÀ©Ì󤬤¢¤ê¤Þ¤¹¡£¤½¤Î°ìÊý¤Ç¡¢Ë¡µ¬À©¤Î±Æ¶Á¤¬¤Û¤Ü³§Ìµ¤Ç¤¢¤ë¤³¤È¤Ë²Ã¤¨¡¢µ¡´ï¤ËɬÍ×¤Ê I/F ¤Ï²»À¼Æþ½ÐÎÏ¡ÊÌò³ä¤Ë¤è¤Ã¤Æ¤ÏÊÒÊý¤Ç¤è¤¤¡Ë¤Î¤ß¤Ç¤¢¤ê¼«Í³ÅÙ¤¬¹â¤¤¤È¤¤¤¦Â礭¤ÊÆÃŤ¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¤è¤¦¤Ê»ö¾ð¤Ë´Ø¿´¤ò»ý¤Á¡¢¶áµ÷Î¥ÄÌ¿®¼êÃʤÎÁªÂò»è¤Î¤Ò¤È¤Ä¤È¤·¤Æ¡Ö²»¡×¤òÍøÍѤ¹¤ë¥Î¥¦¥Ï¥¦¤Ë¿¨¤ì¤Æ¤ª¤­¤¿¤¤¤È¹Í¤¨¤Þ¤·¤¿¡£

¤½¤ó¤Ê¤ï¤±¤Ç¤³¤³¤·¤Ð¤é¤¯¼ê¸µ¤Ç¤Ï Android ¥Ç¥Ð¥¤¥¹¤È mbed ¥Þ¥¤¥³¥ó¤ò¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤È¤·¤Æ¤½¤ì¤¾¤ì¤Î´Ä¶­¤Ç²»¡ÊͲ»ÇȤò´Þ¤à¡Ë¤Ë¤è¤ë¾ðÊóÄÌ¿®¤Î¼Â¸³¤ò¹Ô¤Ã¤Æ¤­¤Þ¤·¤¿¡£¼ÂÁ©Åª¤Ê¾ðÊó¤¬Èæ³ÓŪ˳¤·¤¤¾õ¶·¤âÁê¤Þ¤Ã¤Æ¶½Ì£¿¼¤¤·Ð¸³¤Ç¤·¤¿¤¬¡¢Á´ÂΤΥܥê¥å¡¼¥à¤¬¤ä¤äÂ礭¤¤¤³¤È¤â¤¢¤êº£¸åÃæ¿È¤òÀ°Íý¤·¤Ê¤¬¤é¿ô²ó¤Ëʬ¤±½ç¤òÄɤäƤ³¤Î¥Ö¥í¥°¤Ëµ­»ö¤ò½ñ¤­¤¿¤¤¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£

º£²ó¤Ïͽ¹ð¤ò¤«¤Í¤Æ»îºî¤Î°ìÉô¤ò¾Ò²ð¤·¤Þ¤¹¡£°Ê²¼¤ÎÆóËÜ¤ÎÆ°²è¤ò¤´Í÷²¼¤µ¤¤¡£

  • Î㣱¡§²»¤Ë¤è¤ëÄÌ¿®¤ÇÆóÂæ¤ÎüËö¤Ë¡Ö¤·¤ê¤È¤ê¡×¤ò¤µ¤»¤ë   

  • Î㣲¡§ÅÅÏäÎÃå¿®²»¤ò¥È¥ê¥¬¡¼¤Ë¥Þ¥¤¥³¥ó¤Ç½êÄê¤Î½èÍý¤ò¼Â¹Ô¤¹¤ë   

    ¼¡²ó¤Ï Android ´Ä¶­¤Ç¤Î¼è¤êÁȤߤȼÂÁõ¤Þ¤ï¤ê¤ÎÏÃÂê¤ò·ÇºÜ¤¹¤ëͽÄê¤Ç¤¹¡£

    »¨µ­¡§ºÇ½é¤ÎºÇ½é¤Ë»î¤·¤¿¤³¤È ¡Á ½êÄê¤Î²»¤ËÈ¿±þ¤¹¤ëµ¡´ï

    2004ǯ¤´¤í¡¢Åìµþ±ØÈ¬½Å½§Ãϲ¼³¹¤Ë¤Þ¤À¸ºß¤·¤Æ¤¤¤¿¥¢¥¤¥Ç¥£¥¢¥°¥Ã¥º¤Îʡֲ¦ÍͤΥ¢¥¤¥Ç¥£¥¢¡×¤Ç¡Ö¥ê¥â¥³¥óȯ¸«´ï¡×¤È¤¤¤¦¥Í¡¼¥ß¥ó¥°¤Î¾¦Éʤò¹ØÆþ¤·¤¿¡£ÉÕ°¤ÎÅ«¤ò¿á¤¯¤È¾®¤µ¤ÊËÜÂΤ¬²»¤È¸÷¤ÇÈ¿±þ¤¹¤ë¤È¤¤¤¦¤â¤Î¡£

    ²¿ÅÙ¤«»È¤Ã¤Æ¤º¤Ã¤È˺¤ì¤Æ¤¤¤¿¤¬º£²ó¤Õ¤È»×¤¤½Ð¤·¥Í¥Ã¥È¤Çõ¤·¤¿¤È¤³¤í¸½ºß¤âÈÎÇ䤵¤ì¤Æ¤¤¤ë¤³¤È¤òÃΤä¿¡£²»¤Ë´Ø¤¹¤ëͽÈ÷Ã챤¬¤Û¤È¤ó¤É¤Ê¤¤¾õÂ֤ʤê¤Ë°ìÏ¢¤Î¼è¤êÁȤߤÎÈéÀÚ¤ê¤È¤·¤Æ¤³¤Î¥Ç¥Ð¥¤¥¹¤ò»È¤Ã¤Æ´Ñ»¡¤ò»î¤ß¤¿¡£

    • ¥ê¥â¥³¥óȯ¸«´ï
      ¡Ê°°Åŵ¡²½À®³ô¼°²ñ¼ÒÍÍ¥µ¥¤¥È¤è¤ê¡Ë
      ¥ê¥â¥³¥ó¤ËÁõÃ夷ūËô¤Ï¸ýÅ«¤ò¿á¤±¤Ð¥Ô¥Ã¥Ô¥Ã¤È²»¤È¸÷¤Ç¥ê¥â¥³¥ó¤¬¤ªÃΤ餻¤·¤Þ¤¹¡£
      ÆÃħ
      ¤è¤¯»È¤¦¥ê¥â¥³¥ó¤Ë¡¢ÉÕ°¥Æ¡¼¥×¤Çȯ¿®µ¡¤ò¥»¥Ã¥È¡£
      Å«Ëô¤Ï¡¢¸ýÅ«¤ò¿á¤±¤Ð¥Ô¥Ã¥Ô¥Ã¤È²»¤È¸÷¤Ç¥ê¥â¥³¥ó¤¬¤ªÃΤ餻¤·¤Þ¤¹¡£
    • ²»¤È¸÷¤Ç¹ÔÊýÉÔÌÀ¤Î¥ê¥â¥³¥ó¤ò¤ªÃΤ餻! ¥¹¥Þ¥¤¥ë¥­¥Ã¥º ¥ê¥â¥³¥óȯ¸«´ï ARS-11 - www.amazon.co.jp¡¡Åöµ­»ö»þÅÀ¤ÎÈÎÇä²Á³Ê¤Ï¡ï378
    • ÀâÌÀ½ñ
      ¡ÖËÜÀ½Éʤϡ¢Ìó1600¡Á2000¥Ø¥ë¥Ä¤Î²»¤ËÈ¿±þ¤¹¤ë¤è¤¦ºî¤é¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢Å«°Ê³°¤Î²»¤Ç¤â¼þÇÈ¿ô¤¬¹ç¤¨¤ÐÈ¿±þ¤·¤Þ¤¹¡×
    • Ãæ¿È
      ¼Ì¿¿º¸¡§²¼¤Î´Ý¤¤°µÅÅÁǻҤ¬¥¹¥Ô¡¼¥«¡¼¤È¥Þ¥¤¥¯¤ò·ó¤Í¤Æ¤ª¤ê¥á¡¼¥«¡¼¤Ø¿Ò¤Í¤¿¤È¤³¤í¡ÖÆÃÄê¤Î²»°è¤Î¤ß¤Ø¤ÎÈ¿±þ¤Ï¥Õ¥£¥ë¥¿½èÍý¤Ç¤Ï¤Ê¤¯°µÅÅÁǻҤμþÇÈ¿ôÆÃÀ­¤Ë¤è¤ë¤â¤Î¡×¤È¤Î¤³¤È¡£
    • ưºî¤ÎÍÍ»Ò
      ÉÕ°¤ÎÅ«¡¦²»³Ú¥­¡¼¥Ü¡¼¥É¡¦¸ýÅ«¤ò»È¤¤¡¢È¿±þ¤¹¤ë¼þÇÈ¿ôÂÓ¤ò³Îǧ¤·¤Ê¤¬¤é¤³¤Î¥Ç¥Ð¥¤¥¹¤òÁàºî¤·¤¿Íͻҡ£
      ư²è¡§1ʬ26Éá¡¡¡¢¨38É䢤¿¤ê¤«¤é¼ª¤Ë¾ã¤ë²»¤¬ÌĤë¤Î¤Ç²»Î̤ËÃí°Õ
      »ÈÍÑ¥¢¥×¥ê¡§ AudioUtil Spectrum Analyzer - play.google.com
        
    • ¤½¤ì¤¾¤ì¤Î²»¤ÎÆÃħ
      °Ê²¼¤Ïư²è»£±Æ¸å¤Ë¤¢¤é¤¿¤á¤ÆºÎ¼è¤·¤¿¾åµ­¥¢¥×¥ê¤Î¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¡£´Ä¶­²»¤â´Þ¤Þ¤ì¤ë¤¬¤â¤Ã¤È¤â¿¶Éý¤ÎÂ礭¤¤¼þÇÈ¿ôÀ®Ê¬¤¬¶á¤¤¤¿¤á»°¼Ô¤ÎÇÈ·Á¤Î¼þ´ü¤ÏÂçÂλ÷¤Æ¤¤¤ë¡£
      1. À½ÉÊÉÕ°¤ÎÅ«
        ÇÈ·Á
        ¥Ô¡¼¥¯¼þÇÈ¿ô¤Ï 2.0kHz ÉÕ¶á
      2. ²»³Ú¥­¡¼¥Ü¡¼¥É¡ÊCASIO À½ SA-5¡§ ²»¿§ "HARMONICA")
        ÇÈ·Á
        ¥Ô¡¼¥¯¼þÇÈ¿ô¤Ï 1.9kHz ÉÕ¶á
      3. ¸ýÅ«
        ÇÈ·Á
        ¥Ô¡¼¥¯¼þÇÈ¿ô¤Ï 1.6kHz ÉÕ¶á

    (tanabe)
  • klab_gijutsu2 at 07:46¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    2017ǯ01·î20Æü

    ¤µ¤è¤Ê¤é Parse

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    ¤Ï¤¸¤á¤Ë

    À¤³¦Ãæ¤ÎÍøÍѼԤλØÀè¤È»ëÀþ¤ò¶Å¸Ç¤µ¤»¤¿ÆÍÁ³¤Îȯɽ¤«¤é¤Þ¤â¤Ê¤¯ 1ǯ¡¢Parse.com ¤ÎÁ´¥µ¡¼¥Ó¥¹¤¬ ¤¤¤è¤¤¤è 2017ǯ1·î28Æü¡ÊÅڡˤ˽ªÎ»¤·¤Þ¤¹¡£³ÈÄ¥À­¤¬¹â¤¯¹âµ¡Ç½¤Ç¤¢¤ê¤Ê¤¬¤é»È¤¤¾¡¼ê¤ÎÎɤ¤Í¥¤ì¤¿¥µ¡¼¥Ó¥¹¤À¤Ã¤¿¤Î¤Ç½ªÂ©¤¬Àˤ·¤Þ¤ì¤Þ¤¹¡£

          https://parse.com/

    ¼ê¸µ¤Ç¤Ï 2ǯ¤Û¤ÉÁ°¤Ë IoT ¤Î¼Â¸³¤È¤·¤Æ»îºî¤·¤¿°Ê²¼¤Î¤·¤¯¤ß¡ÖAnpi¡×¤Ç Parse.com ¤òºÎ¤êÆþ¤ì¤Þ¤·¤¿¡£

    • mbed ¤È Parse ¤Çºî¤ë¹âÎð¼ÔÀ¤ÂÓ°ÂÈݳÎǧ¥·¥¹¥Æ¥à - Åö¥Ö¥í¥°
      °ìÈÌ¤Ë BaaS ¤Î¼ç¤ÊÌÜŪ¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÂиþ¥µ¡¼¥Ð¦µ¡Ç½¤òÂåÂØ¡¦Êä´°¤¹¤ë¤³¤È¤Ë¤¢¤ê¡¢¥µ¡¼¥Ð¤Î´ÉÍý±¿ÍѤ䥵¡¼¥Ð¦¥³¡¼¥É³«È¯¤ËƧ¤ß¹þ¤à¥³¥¹¥È¤òÍÞÀ©¤·¥¢¥×¥êËÜÂΤγ«È¯¤ËÃíÎϲÄǽ¤È¤Ê¤ë¤³¤È¤¬ÍøÍѼԤˤȤäƤΥá¥ê¥Ã¥È¤Ç¤¹¤¬¡¢Parse ¤Ë¤Ï¥µ¡¼¥Ð¾å¤Ç¥æ¡¼¥¶¥³¡¼¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Î¤Ç¤­¤ë¡ÖCloud Code¡×¤È¤¤¤¦¤·¤¯¤ß¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£¡ÊÃæÎ¬¡Ëº£²óºî¤Ã¤¿ÁõÃÖ¤Ï Parse ¥µ¡¼¥Ð¾å¤ËÀßÃÖ¤·¤¿¼«ºî¥³¡¼¥É¤ò¤½¤Î¤Þ¤Þ¸Æ¤Ó½Ð¤·¤ÆÉ¬ÍפʽèÍý¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤Î¤è¤¦¤ËÌÜŪ¤Ë±þ¤¸¤Æ½ÀÆð¤ËÍøÍѤǤ­¤ë¤³¤È¤¬ Parse ¤ÎÌ¥ÎϤΤҤȤĤȸÀ¤Ã¤Æ¤è¤¤¤Ç¤·¤ç¤¦¡£
    ¤³¤Î¡ÖAnpi¡×¤Ï¥·¥ó¥×¥ë¤Ê¤¬¤é¼ÂÍÑÀ­¤¬¹â¤¯¸½ºß¤â¥×¥é¥¤¥Ù¡¼¥È¤ÇÂ礤¤ËÌòΩ¤Ã¤Æ¤¤¤Þ¤¹¡£¤½¤Î¤¿¤á¤¹¤Ç¤Ë Parse.com ¤«¤é¤Î¾è¤ê´¹¤¨¤ò´°Î»¤·¤Æ¤¤¤Þ¤¹¤¬¡¢°Ü¹Ô¤Î²áÄø¤ÇÊ£¿ô¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤òÂоݤȤ·¤ÆºÆ¼ÂÁõ¤ò²£ÃÇŪ¤Ë»î¤·¤Æ¤ß¤Þ¤·¤¿¡£º£¸åɬÍפȤʤ俺ݤ˥¹¥à¡¼¥¹¤ËÁÛµ¯¤Ç¤­¤ëÆ»¶ñΩ¤Æ¤ÎÁªÂò»è¤Ï¿¤¤¤Û¤¦¤¬¹¥¤Þ¤·¤¯¡¢º£²ó¤Î¤è¤¦¤Ë¶ñÂÎŪ¤ÊÍ׷郎¤¢¤ì¤Ð¤½¤Î¼ÂÁõ¤òÄ̤¸¤ÆÌ¤Âθ³¤Î¥µ¡¼¥Ó¥¹¤ÎÆÃħ¤ä¸ÄÀ­¤ò¸«Äê¤á¤ä¤¹¤¤¤È¹Í¤¨¤¿¤¿¤á¤Ç¤¹¡£¤³¤Îµ­»ö¤Ï¤½¤¦¤¤¤Ã¤¿»î¤ß¤Îµ­Ï¿¤Ç¡¢ÆüËܹñÆâ¤Ç¤Ï¤Þ¤ÀÃÎ̾ÅÙ¤ÎÄ㤤¤â¤Î¤Ë¤â¿¨¤ì¤Æ¤¤¤Þ¤¹¡£¶½Ì£¤Î¤¢¤ëÊý¤Ï¤´Í÷²¼¤µ¤¤¡£

    ¢¨Ê¸Ãæ¤Îµ­½Ò¤Ï¤¤¤º¤ì¤â 2016ǯ11·î¤«¤é12·î¤Î»þÅÀ¤Î¾õ¶·¤Ë´ð¤Å¤¯¤â¤Î¤Ç¤¢¤ê¸½ºß¤Î»ö¾ð¤È¤Ï°Û¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¤¢¤é¤«¤¸¤á¤´Î»¾µ²¼¤µ¤¤¡£

    ¼ê¸µ¤ÎÍ×·ï¤È°Ü¹ÔÀèÁªÄê´ð½à

    ¡ÖAnpi¡×¤Ë¤ª¤¤¤Æ Parse.com ¥µ¥¤¥É¤Ç¹Ô¤Ã¤Æ¤¤¤¿½èÍý¤Ï°Ê²¼¤ÎÆâÍÆ¤Ç¤¹¡£

    • ²°Æâ¤ËÀßÃÖ¤º¤ß¤ÎÁõÃÖ¤¬¿Í´¶¥»¥ó¥µÈ¿±þ»þ¤ËºÇû 30 ʬ´Ö³Ö¤ÇÁ÷¿®¤·¤Æ¤¯¤ë¾ðÊó¤ò¥Ç¡¼¥¿¥¹¥È¥¢¤ØÊݸ
    • Äê¹ï¤Ëľ¶á 60 ¥ì¥³¡¼¥Éʬ¤ò¥ì¥Ý¡¼¥È¤È¤·¤Æ½êÄê¤Î¥¢¥É¥ì¥¹¤Ø¥á¡¼¥ëÁ÷¿®
    • ÁõÃ֤ˤĤʤ¤¤À¥Ü¥¿¥ó¤¬Ä¹²¡¤·¤µ¤ì¤¿¤é½êÄê¤Î¥¢¥É¥ì¥¹¤Ø¥á¡¼¥ë¤ÇÄÌÃΡʶ۵ޥ᡼¥ë¡Ë
    • ¥á¡¼¥ëÇÛ¿®¤Ë¤Ï Parse.com ¤¬ ¸ø¼° API ¤ÇÏ¢·È¤·¤Æ¤¤¤ë Mailgun ¥µ¡¼¥Ó¥¹¤òÍøÍÑ

    Í×·ï¤ËÆÃ¤ËÈÑ»¨¤Ê¤â¤Î¤Ï¤Ê¤¯¤³¤ì¤é¤òµÛ¼ý²Äǽ¤Ê¥µ¡¼¥Ó¥¹¤Ï¤¤¤¯¤Ä¤â¸ºß¤¹¤ë¤Ç¤·¤ç¤¦¡£¤½¤Î¾å¤Ç¡¢º£²ó¤Ï¼¡¤Î»°ÅÀ¤ò°Ü¹ÔÀèÁªÄê¤Î´ð½à¤È¤¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

    • ±¿ÍѤ˼꤬¤«¤«¤é¤Ê¤¤¤³¤È
    • ½ÀÆðÀ­¤¬¤¢¤ë¤³¤È
    • ÈñÍѤ¬¤«¤«¤é¤Ê¤¤¤³¤È
    ³¨¤ËÉÁ¤¤¤¿¤è¤¦¤Ê¥æ¡¼¥¶¥¨¥´¤Ç¤Ï¤¢¤ê¤Þ¤¹¤¬¡¢Åö»þ Parse.com ¤òÁª¤ó¤ÀÍýͳ¤Ï¤³¤ì¤é¤Î¤¹¤Ù¤Æ¤òËþ¤¿¤·¤Æ¤¤¤¿¤¿¤á¤Ç¤â¤¢¤ê¤Þ¤¹¡£Í½È÷Ä´ºº¤ò·Ð¤Æ¼¡¤Î¥µ¡¼¥Ó¥¹¡¦¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ò¸¡Æ¤¤ÎÂоݤȤ·¤Þ¤·¤¿¡£

    1. IFTTT + Google Drive + Google Apps Script
    2. Kii Cloud
    3. back4app¡Ê+ AWS Lambda¡Ë
    4. Backand

    ¤Ê¤ª¡¢Í×·ï¤Î¤¦¤Á¡Ö¶ÛµÞ¥á¡¼¥ë¡×¤Îȯ¿®¤Ë¤Ä¤¤¤Æ¤Ï°ÊÁ°¡Öº£¡¢¥ï¥ó¥Ü¥¿¥ó¤Î IoT ¥Ç¥Ð¥¤¥¹¤¬ÌÌÇò¤¤¡×¤Ç¤âÍøÍѤ·¤¿ SendGrid ¥µ¡¼¥Ó¥¹¤Î API ¤òÁõÃÖ¦¤Î¥³¡¼¥É¤«¤éľÀÜ᤯¤³¤È¤Ë¤·¤Þ¤·¤¿¡£¥á¡¼¥ë¤ÎÆâÍÆ¤Ï·è¤áÂǤÁ¤Ê¤Î¤Ç³Æ¥µ¡¼¥Ó¥¹¤ËÃç²ð¤µ¤»¤ë¤è¤ê¤â¤½¤Î¤Û¤¦¤¬¹çÍýŪ¤È¹Í¤¨¤¿¤¿¤á¤Ç¤¹¡£

    °Ê²¼¡¢¾å¤Î¤è¤Ã¤Ä¤ò½çÈ֤˥ԥ寥¢¥Ã¥×¤·¤Æ¤ß¤Þ¤¹¡£

    °Ü¹ÔÀè¸õÊä 1¡§ IFTTT + Google Drive + Google Apps Script

    ¤â¤Ã¤È¤â¥·¥ó¥×¥ë¤ËÍ×·ï¤òËþ¤¿¤¹Æ»¶ñΩ¤Æ¤È¤·¤Æ¤Þ¤º IFTTT ¤È Google ¥µ¡¼¥Ó¥¹¤ÎÁȤ߹ç¤ï¤»¤ò¹Í¤¨¤Þ¤·¤¿¡£IFTTT ·Ðͳ¤Ç Google Drive ¾å¤Î Spreadsheet ¤ò¥Ç¡¼¥¿¥¹¥È¥¢¤È¤·¤ÆÍøÍѤ· Google Apps Script ¤Ç¥µ¡¼¥Ð¥µ¥¤¥É¤Î½èÍý¤ò¼Â¹Ô¤¹¤ëÆâÍÆ¤Ç¤¹¡£

    ²¾°Ü¹Ô¤òÄ̤¸¤Æ¤Î * ¸Ä¿ÍŪ¤Ê * °õ¾Ý

    GOOD !

    • ¥·¥ó¥×¥ë¤«¤Ä½ÀÆð
    • Google, IFTTT ¤È¤â¤Ëº£¸å²Ý¶â¤ÎȯÀ¸¤¹¤ë²ÄǽÀ­¤¬¤­¤ï¤á¤ÆÄ㤤
    • Google, IFTTT ¤È¤â¤Ëº£¸å¥µ¡¼¥Ó¥¹¤¬½ªÂ©¤¹¤ë²ÄǽÀ­¤¬¤­¤ï¤á¤ÆÄ㤤
    • ¥³¡¼¥É¤ò´Þ¤á¤¹¤Ù¤Æ¤ò¥Ö¥é¥¦¥¶¾å¤ÇÁàºî¤Ç¤­¤ë¤¿¤á±¿ÍѾå¤Î¼«Í³ÅÙ¤¬¹â¤¤
    ! GOOD ¡©

    • º£²ó¤ÎÍ×·ï¤Ë¤Ï½½Ê¬¤À¤¬µ¬ÌϤÎÂ礭¤¤¥Ç¡¼¥¿¤ò°·¤¦¤Ë¤ÏÉÔ¸þ¤­
    • ¤¢¤¯¤Þ¤Ç¤â SaaS ¤È¥Ï¥Ö¥µ¡¼¥Ó¥¹¤ÎÁȤ߹ç¤ï¤»¤Ç¤¢¤ë¤¿¤áÅöÁ³¤Ê¤¬¤é¥×¥Ã¥·¥åÄÌÃΤʤɰìÈÌŪ¤Ê IoT ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ÎÄ󶡤¹¤ëµ¡Ç½¤ÏÂåÂØ¤Ç¤­¤Ê¤¤

    °Ü¹ÔÀè¸õÊä 2¡§ Kii Cloud

    Kii Cloud ¤Ï Kii ³ô¼°²ñ¼ÒÍͤÎÄ󶡤¹¤ëÆüËÜȯ¤Î BaaS ¤Ç¤¹¡£

    ²¾°Ü¹Ô¤òÄ̤¸¤Æ¤Î * ¸Ä¿ÍŪ¤Ê * °õ¾Ý

    GOOD !

    • ¿µ¡Ç½¤«¤Ä̵ÎÁÏȤ¬¹­¤¤
    • Parse.com ¤ÈƱÍÍ¤Ë BaaS ¤Ç¤¢¤ê¤Ê¤¬¤é¥µ¡¼¥Ðµ¡Ç½³ÈÄ¥¤¬²Äǽ
    • ¥µ¡¼¥Ð¤Î¥ê¡¼¥¸¥ç¥ó¤ò¼«Í³¤ËÁªÂò²Äǽ¤Ç¤¢¤êÆÃ¤ËÃæ¹ñ¥ê¡¼¥¸¥ç¥ó¤Î¸ºß¤ÏÂ礭¤¤
    • ¥­¡¼¥Ð¥ê¥å¡¼·Á¼°¤Î¥Ç¡¼¥¿¤Ï»ÈÍÑÍÆÎ̤˥«¥¦¥ó¥È¤µ¤ì¤Ê¤¤¤¿¤á¾¤Î¥µ¡¼¥Ó¥¹¤È¤ÎÊ»ÍѤˤ⹥Ŭ¤«
    • ¥¢¥¯¥»¥¹À©¸æµ¡Ç½¤¬½¼¼Â
    • ÆüËܸì¤Î¥ê¥½¡¼¥¹¤¬½¼¼Â¤·¤Æ¤¤¤ë

    ! GOOD ¡©

    • ¥É¥­¥å¥á¥ó¥È¤Î¾ðÊóÎ̤ÏË­¤«¤À¤¬ÄÌÆÉÀ­¤¬¤â¤¦¤Ò¤È¤Ä¡©¥ê¥ó¥¯¤ÎÄ¥¤êÊý¤Ë¤â²þÁ±¤Î;ÃϤ¬¤¢¤ê¤½¤¦¤Ê°õ¾Ý¡Ê¤³¤Î¤¢¤¿¤ê¤¬²þÁ±¤µ¤ì¤ì¤Ð¤è¤êÍøÍѤ·¤ä¤¹¤¯¤Ê¤ë¤«¤â¡Ë
    • ³«È¯¼Ô¥Ý¡¼¥¿¥ë¤Ï UI¡¦µ¡Ç½¤È¤â¤Ëº£¸å¤Î¿Ê²½¤¬´üÂÔ¤µ¤ì¤ë
    • ³«È¯ÍѤΥ³¥Þ¥ó¥É¥é¥¤¥ó¥Ä¡¼¥ë¤¬ Node.js ¥Ù¡¼¥¹¤Ê¤Î¤ÏÍøÅÀ¤È·çÅÀ¤¬È¾¡¹¤¯¤é¤¤¡© ¥Ð¥Ã¥Á¥¸¥ç¥Ö¤Î¥¹¥±¥¸¥å¡¼¥ëÊѹ¹¤È¤¤¤Ã¤¿Áàºî¤Ï¥Ö¥é¥¦¥¶¾å¤Ç¤Ç¤­¤ë¤È´ò¤·¤¤¡¦¡¦

    °Ü¹ÔÀè¸õÊä 3¡§ back4app¡Ê+ AWS Lambda¡Ë

    back4app ¤Ï BACK4APP SERVICOS DIGITAIS LTDA¡ÊËÜ¼Ò ÊÆ¥«¥ê¥Õ¥©¥ë¥Ë¥¢¡Ë¤ÎÄ󶡤¹¤ë BaaS ¤Ç¤¹¡£

    ²¾°Ü¹Ô¤òÄ̤¸¤Æ¤Î * ¸Ä¿ÍŪ¤Ê * °õ¾Ý

    GOOD !

    • ̵ÎÁÏȤ¬¹­¤¤
    • ºÇ½é¤«¤é Parse.com ¤ÎÂåÂØÍѤȤ·¤Æµ¯¤Á¾å¤²¤é¤ì¤¿½ãÅ٤ι⤤ Parse Alternative ¤Ç¤¢¤ë¤¿¤á Parse.com ¤È¤Î¿ÆÏÂÀ­¤¬¹â¤¯°Ü¹Ô¤¬ÁêÂÐŪ¤ËÍÆ°×
    • UI, ¥É¥­¥å¥á¥ó¥È¤¬¤ï¤«¤ê¤ä¤¹¤¤

    ! GOOD ¡©

    • µ­»öÃæ¤Î¥¸¥ç¥ÖÀßÄê¤ÎÌäÂê¤Ê¤É¸½»þÅÀ¤Ç¤Ï¹Óºï¤ê¤Ê¦Ì̤⸫¤é¤ì¤ë
    • Parse.com ¤ò·Ñ¾µ¤¹¤ë¥µ¡¼¥Ó¥¹¤È¤·¤Æ¤ÏÎɹ¥¤À¤¬¡¢µÕ¤Ë¤½¤Î¤³¤È¤¬ÆÈΩ¤·¤¿ BaaS ¤È¤·¤Æ¤Î¿·Á¯Ì£¤ä¸ÄÀ­¤ÎȯϪ¤òºï¤¤¤Ç¤¤¤ë°õ¾Ý¤â¡©

    °Ü¹ÔÀè¸õÊä 4¡§ Backand

    Backand ¤Ï ModuBiz Ltd¡ÊËܼҥ¤¥¹¥é¥¨¥ë Tel Aviv¡Ë¤ÎÄ󶡤¹¤ë BaaS ¤Ç¤¹¡£

    ²¾°Ü¹Ô¤òÄ̤¸¤Æ¤Î * ¸Ä¿ÍŪ¤Ê * °õ¾Ý

    GOOD !

    • ¿µ¡Ç½¤«¤Ä³ÈÄ¥À­¤ËÍ¥¤ì¤Æ¤¤¤ë¾å¤ËÈó¾ï¤Ë»È¤¤¤ä¤¹¤¤
    • ¥Æ¥¹¥È¡¦¥Ç¥Ð¥Ã¥°µ¡Ç½¤â½¼¼Â¤·¤Æ¤ª¤ê UI ¤â¤ï¤«¤ê°×¤¤
    • ¥Õ¥¡¥¤¥ë¥Û¥¹¥Æ¥£¥ó¥°¤Þ¤ï¤ê¤ÎÁàºî°Ê³°¤Ï¤¹¤Ù¤Æ¥Ö¥é¥¦¥¶¾å¤Ç´°·ë¤Ç¤­¤ë¤¿¤áµ¡Æ°À­¤¬¹â¤¤
    • ¥æ¡¼¥¶¥Ó¥ê¥Æ¥£¤Ïº£²ó¤ÎÃæ¤Ç°ìÈÖ¡£¤¢¤È¤Ï²ÄÍÑÀ­¤È¥¹¥±¡¼¥é¥Ó¥ê¥Æ¥£¼¡Â褫

    ! GOOD ¡©

    • ̵ÎÁÏȤζ¹¤µ¤¬»Äǰ¡£¤Þ¤¿¡¢Prototype Plan $0 -> Hobby Plan $19/·î -> Work Plan $49/·î ... ¤È¤¤¤Ã¤¿Â礭¤á¤ÎÎÁ¶âº¹¤ËÈæ¤·¤ÆÂÔ¶øº¹¤¬¾®¤µ¤á
    • ±¿±Ä¦¤ÎÆâÉôŪ¤Ê»ØÉ¸¤Ç¤¢¤ë¡ÖCache Memory¡×¡ÖCompute Units¡×¤Î¤è¤¦¤ËÍøÍѼԤ¬¼çÂÎŪ¤Ë¥³¥ó¥È¥í¡¼¥ë¤¹¤ë¤³¤È¤ÎÆñ¤·¤¤»ØÉ¸¤¬¥×¥é¥ó¤Î´ð½à¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤¿¤áÍøÍÑÌܽè¤òΩ¤Æ¤Ë¤¯¤¤¡Ê¤à¤·¤í¡¢ÍøÍѤ¹¤ë¤Ê¤é¤Ï¤¸¤á¤«¤é UNLIMITED ¤ÊÎÁ¶â¥×¥é¥ó¤òÁª¤Ö¤Ù¤­¡Ë
    • ÆüËܤΤߤʤ餺¹ñ³°¤Ç¤â¤Þ¤À¤¢¤Þ¤ê¥á¥¸¥ã¡¼¤Ç¤Ï¤Ê¤¯¾ðÊ󤬤ȤƤ⾯¤Ê¤¤¡£Í¥¤ì¤¿¥µ¡¼¥Ó¥¹¤Ç¤¢¤ë¤Ë¤â¤«¤«¤ï¤é¤ºÀ¤´Ö¤Ø¤Î¿»Æ©°µ¤¬Ä㤤°ì°ø¤Ï¾å¤ÎÎÁ¶âÂηϤˤ⤢¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¡©

    ¡Ê2018-01-19 Äɵ­¡Ë
    2018ǯ1·î18Æü¡¢Backand ¤è¤ê 2·î28Æü¤Ë¥µ¡¼¥Ó¥¹¤ò½ªÎ»¤¹¤ë»Ý¤Î¥á¡¼¥ë¤¬ÆÏ¤­¤Þ¤·¤¿¡£¤½¤Î¸å¼ê¸µ¤Ç¤ÏÍøÍѤ·¤Æ¤¤¤Þ¤»¤ó¤Ç¤·¤¿¤¬¡¢ÉʼÁ¤Î¹â¤¤¥µ¡¼¥Ó¥¹¤Ç¤¢¤Ã¤¿¤À¤±¤Ë»Äǰ¤Ç¤¹¡£

    ¤ª¤ï¤ê¤Ë

    ¼ê¸µÍ×·ï¤Î Parse.com ¤«¤é¤Î°Ü¹Ô¤Ë¤¢¤¿¤ê°Ê¾å¤è¤Ã¤Ä¤Î´Ä¶­¤ò»î¤·¤Æ¤ß¤Þ¤·¤¿¡£ºÇ½ªÅª¤Ë¤³¤ÎÃæ¤Î¤Ò¤È¤Ä¤ò¡ÖAnpi¡×¤Î¾è¤ê´¹¤¨Àè¤Ë·èÄꤷ¤Æ¸½ºß¤Ë»ê¤ê¤Þ¤¹¡£Åö½é¤Ï¤É¤ì¤òÁª¤ó¤À¤Î¤«¤ò½ñ¤¯¤Ä¤â¤ê¤Ç¤·¤¿¤¬Ìµ¿è¤Ë¤â»×¤¤¤ä¤á¤Æ¤ª¤¯¤³¤È¤Ë¤·¤Þ¤·¤¿¡£¤¤¤º¤ì¤â¼Á¤Î¹â¤¤¥µ¡¼¥Ó¥¹¤Ç¤½¤ì¤¾¤ì¤Ë½½Ê¬¤Ê¥á¥ê¥Ã¥È¤¬¤¢¤ê¤Þ¤¹¡£

    ¤Û¤ó¤Î10ǯ¤Û¤ÉÁ°¤Ë¤Ï±Æ¤â¤Ê¤«¤Ã¤¿¤â¤Î¤¬Æü¿Ê·îÊâ¤Ç¿Ê²½¤·¤Æ¤¤¤¯¾õ¶·¤Ë¥ê¥¢¥ë¥¿¥¤¥à¤Ç¸þ¤­¹ç¤Ã¤Æ¤¤¤ë¤È10ǯ¸å¤ÎÀ¤³¦¤Ø¤ÎÁÛÁü¤¬ËĤé¤ß¤Þ¤¹¡£¤³¤Î»þÂå¤Î˵¤é¤òµî¤Ã¤Æ¤¤¤¯ Parse.com ¤ò¥æ¡¼¥¶¤Î¤Ò¤È¤ê¤È¤·¤Æ·É°Õ¤È´¶¼Õ¤Îǰ¤ò¤â¤Ã¤Æ¸«Á÷¤ê¤¿¤¤¤È»×¤¤¤Þ¤¹¡£


    (tanabe)
    klab_gijutsu2 at 14:26¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)
    2016ǯ12·î22Æü

    ¿·¤·¤¤ Amazon Dash Button ¤Ë¡Ö¥Þ¥¤¥¯¡×¤¬»Ä¤µ¤ì¤Æ¤¤¤ëÍýͳ

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    ºòǯ°Ê²¼¤Îµ­»ö¤Ç¥Ô¥Ã¥¯¥¢¥Ã¥×¤·¤¿¡ÖAmazon Dash Button¡×¤¬ 2016ǯ12·î5Æü¤ËÆüËܹñÆâ¤Ç¤â¥ê¥ê¡¼¥¹¤µ¤ìÏÃÂê¤ò½¸¤á¤Æ¤¤¤Þ¤¹¡£

    Amazon.co.jp ¤Ç¤ÎÈÎÇ䳫»Ï¤«¤é¤Û¤É¤Ê¤¯ Button ¤Î¿¤¯¤¬ÉÊÀÚ¤ì¤È¤Ê¤ê 12·î22Æü¸½ºß¤âÆþ²ÙÂÔ¤Á¤Î¾õÂÖ¤¬Â³¤¤¤Æ¤¤¤Þ¤¹¡£ ¤³¤Î¥Ç¥Ð¥¤¥¹¤ò¼Â¼Á̵ÎÁ¤ÇÇÛÉÛ¤¹¤ëµðÂ翹ñÀÒ´ë¶È Amazon ¤Î¥Ñ¥ï¡¼¤ÏÀ¨¤Þ¤¸¤¤¤Ç¤¹¤Í¡£

    ¿·µì Dash Button ¤Î°ã¤¤

    ¸½ºßÄ󶡤µ¤ì¤Æ¤¤¤ë Dash Button ¤Ï 2015ǯ¤ËÊÆ¹ñ¤Ç¥Ç¥Ó¥å¡¼¤·¤¿¥ª¥ê¥¸¥Ê¥ë¤È¤Ï°Û¤Ê¤ë¤â¤Î¤Ç¤¹¡£¾å¤Î¥Ö¥í¥°µ­»ö¤Ç¤â¿¨¤ì¤¿ Matthew Petroff »á¤Î¥µ¥¤¥È¤Ë¤Ï¿·µì Button ¤½¤ì¤¾¤ì¤Ë¤Ä¤¤¤Æ¾ÜºÙ¤«¤ÄÌÖÍåŪ¤Ê¶½Ì£¤Ö¤«¤¤µ­»ö¤¬·ÇºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    The Amazon Dash Button it an Internet connected button that allows ordering a single product from Amazon.
    ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡:
    Others have already posted about disassembling it, so I¡Çll focus mostly on the electronics, since the aforementioned blog posts are missing high-resolution images of thecircuit board and don¡Çt quite get some details correct.
    Amazon updated the Dash Button¡Çs hardware to revision two earlier this year, so I decided it was time for a new teardown (here¡Çs last year¡Çs teardown). The new product number is JK29LP; the old product number is JK76PL. While the form factor and case remained much the same, the internals changed substantially. The major highlights are a switch from Broadcom to Atmel chips, a switch from an Energizer lithium battery to a Duracell alkaline battery, and the addition of Bluetooth Low Energy.
    ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡:

    Overall, the new Dash Button appears to be a revision designed to reduce production cost, centered around a reduction in energy usage, which allows for use of a considerably cheaper, alkaline battery.
    Ʊ»á¤Îµ­»ö¤ò»²¹Í¤Ë¤·¤Ê¤¬¤é¤Þ¤º¿·µì Button ¤Î¼ç¤Ê°ã¤¤¤òÀ°Íý¤·¤Æ¤ß¤Þ¤¹¡£
    ¡Ê¢¨Í¾Ã̤ʤ¬¤é¡¢Æ±¤¸µ­»ö¤ËÃíÌܤ·¤¿¿ôÆüÁ°¤Î GIGAZINE ¤µ¤ó¤Îµ­»ö¤ËÀè¤Û¤Éµ¤¤¬¤Ä¤­¤Þ¤·¤¿¤¬¡¢ÆÃ¤Ë¤Ö¤Ä¤«¤ë¤â¤Î¤Ç¤â¤Ê¤¤¤¿¤áÁð¹Æ¤ÎÆâÍÆ¤Î¤Þ¤Þ½ñ¤¯¤³¤È¤Ë¤·¤Þ¤¹¡Ë

    ÅŸ»¤¬¥ê¥Á¥¦¥à°ì¼¡´¥ÅÅÃÓ¤«¤é¥¢¥ë¥«¥ê´¥ÅÅÃÓ¤Ë

    µì Dash Button ¤Ë¤Ïñ»Í·¿¥ê¥Á¥¦¥à°ì¼¡´¥ÅÅÃÓ¤¬Æâ¢¤µ¤ì¤Æ¤¤¤Þ¤·¤¿¡£

    http://dsas.blog.klab.org/archives/52233150.html

    ¤Á¤Ê¤ß¤Ë Amazon Dash Button ¤Ï ÊÆ¥¨¥Ê¥¸¥ã¥¤¥¶¡¼¼Ò¤Î Ultimate Lithium ´¥ÅÅÃÓ Ã±4·Á ¡ÊÆó¼¡ÅÅÃӤǤϤʤ¤¡Ë1ËܤòÆâ¢¤·¤Æ¤¤¤ë¡£¥¢¥ë¥«¥êÅÅÃÓ¤ËÈæ¤Ù¡ÖºÇÂç 9ÇÜĹ»ý¤Á¡×¤ò¼æ¶ç¤È¤¹¤ë ¸½»þÅÀ¤Ç¤ª¤½¤é¤¯ºÇ¶¯¤Î´¥ÅÅÃÓ¡£

    ¥Ç¡¼¥¿¥·¡¼¥È¤Ë¤è¤ë¤È Ultimate Lithium AAA ¤Ï¡ÖMax Discharge: 1.5 Amps Continuous, 2.0Amps Pulse (2 sec on / 8 sec off)¡×¤È¹âÍÆÎÌ

    ¸½ºß¤Î Dash Button ¤Ç¤Ï¤³¤Î¹â²Á¤ÊÅÅÃÓ¤ËÂ夨¤ÆÊƥǥå¥é¥»¥ë¼Ò¤Îñ»Í·¿¥¢¥ë¥«¥ê´¥ÅÅÃÓ¤¬»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
    µì¡§Energizer Ultimate Lithium AAA Battery
    ¿·¡§Duracell Ultra AAA Alkaline Battery
    https://mpetroff.net/
    ¡Ê2016-12-14 »þÅÀ¤Ç¤Îξ¼Ô¤Î¾®Çä²Á³Ê¤ÎÎã¡Ë ÅÅÃÓ¸ò´¹¤Ï¿· Button ¤Ë¤ª¤¤¤Æ¤âÉԲĤǤ¢¤ë¤¿¤á¾åµ­¤ÎÊѹ¹¤¬»ÈÍѼ÷Ì¿¤ËµÚ¤Ü¤¹±Æ¶Á¤¬µ¤¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢Petroff »á¤Ë¤è¤ë¿·µìξ Button ¤Î¾ÃÈñÅÅή¼Â¬·ë²Ì¡Ê²¼¥°¥é¥Õ¡§ÌÜÀ¹Éý¤Î°ã¤¤¤ËÃí°Õ¡Ë¤Ë¤è¤ì¤Ð¥¹¥ê¡¼¥×¾õÂ֤ǤϿ· Button ¤¬ 2.0¦ÌA°Ê²¼¡¢µì Button ¤¬ 2.3¦ÌA°Ê²¼¤ÈÁ°¼Ô¤Î¤Û¤¦¤¬Îɹ¥¤Ç¤¢¤ê¡¢¤Þ¤¿¡¢¥Ü¥¿¥ó²¡²¼¸å¤Î¥¢¥¯¥Æ¥£¥Ö¾õÂ֤ˤª¤¤¤Æ¤Ï¿· Button ¤Î¤Û¤¦¤¬¤ª¤ª¤à¤Í 10%Á°¸å¥ì¥Ù¥ë¤¬¹â¤¤¤â¤Î¤Î½èÍý¤ò´°Î»¤·ºÆÅÙ¥¹¥ê¡¼¥×¤¹¤ë¤Þ¤Ç¤Î½êÍ×»þ´Ö¤Ïµì Button ¤ÎȾʬ°Ê²¼¤È¡¢ÅŸ»»ÅÍͤÎÊѹ¹¤Ëȼ¤¤ÅÅÎϾÃÈñ¤òÍÞÀ©¤¹¤ëºî¤ê¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤ëÍͻҤ¬±®¤¨¤Þ¤¹¡£
    µì
    ¿·
    https://mpetroff.net/

    ¥Þ¥¤¥¯¥í¥³¥ó¥È¥í¡¼¥é / Wi-Fi ¥Á¥Ã¥×¤ÎÊѹ¹, BLE ¥Á¥Ã¥×ÄɲÃ, Flash ¥á¥â¥êÍÆÎÌÁý²Ã

    ¿· Button ¤Ç¤Ï¡¢°ÊÁ°¤Î ST ¥Þ¥¤¥¯¥í¥¨¥ì¥¯¥È¥í¥Ë¥¯¥¹¼ÒÀ½¥Þ¥¤¥¯¥í¥³¥ó¥È¥í¡¼¥é STM32F205 ¤¬ Atmel ¼Ò¡Ê2016ǯ4·î¤è¤ê Microchip Technology »±²¼¡ËÀ½ ATSAMG55J19A-MU ¤Ë¡¢Broadcom ¼ÒÀ½¤Î Wi-Fi ¥â¥¸¥å¡¼¥ë BCM943362WCD4 WICED ¤¬ Atmel ¼ÒÀ½ ATWINC1500B ¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£°ìÊý¤Ç ¿· Button ¤Î Flash ¥á¥â¥ê¤ÏÇÜÍÆÎ̤Π32M¥Ó¥Ã¥È¤ËÁý¶¯¤µ¤ì¤Æ¤ª¤ê¡¢¤Þ¤¿¡¢µì Button ¤Ë¤Ï¸ºß¤·¤Ê¤«¤Ã¤¿ BLE ¥Á¥Ã¥×¤¬¥»¥Ã¥È¥¢¥Ã¥×ÍѤËÄɲäµ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤é°ìÏ¢¤Î¹½À®Í×ÁǤÎÊѹ¹¤ÏÀ­Ç½¶¯²½¤È¥³¥¹¥È¥À¥¦¥ó¤ÎξΩ¤òÌÜŪ¤È¤·¤¿È½ÃǤηë²Ì¤È¹Í¤¨¤é¤ì¤Þ¤¹¡£
    µì


    U5) ¥Þ¥¤¥¯¥í¥³¥ó¥È¥í¡¼¥é¡§ST STM32F205
    U9) Wi-Fi ¥â¥¸¥å¡¼¥ë¡§
    Broadcom BCM943362WCD4 WICED
    U6) ¥Õ¥é¥Ã¥·¥å¥á¥â¥ê: Micron M25P16 (16Mbit)
    ¥Þ¥¤¥¯¤¢¤ê
    ¿·


    U1) ¥Þ¥¤¥¯¥í¥³¥ó¥È¥í¡¼¥é¡§Atmel ATSAMG55J19A-MU
    U19) Wi-Fi ¥Á¥Ã¥×¡§Atmel ATWINC1500B
    U22) BLE ¥Á¥Ã¥×¡§Cypress CYBL10563-68FNXI
    U15) ¥Õ¥é¥Ã¥·¥å¥á¥â¥ê: Micron N25Q032 (32Mbit)
    ¥Þ¥¤¥¯¤¢¤ê
    https://mpetroff.net/

    ¥»¥Ã¥È¥¢¥Ã¥×ÊýË¡¤ÎÊѹ¹

    ¿·µì Button ¤Ï¥»¥Ã¥È¥¢¥Ã¥×¤ÎÊýË¡¤¬°Û¤Ê¤ê¤Þ¤¹¡£Android ¤Þ¤¿¤Ï iOS üËö¤È¸ø¼°¥·¥ç¥Ã¥Ô¥ó¥°¥¢¥×¥ê¤òÍøÍѤ¹¤ëÅÀ¤Ï¶¦Ä̤Ǥ¹¤¬¡¢¿·ÈǤ¬Æ±¥¢¥×¥ê¤È Button ¤È¤Î±þ½·¤Ë BLE ÄÌ¿®¤ò»È¤¦ÆâÍÆ¤Ç¤¢¤ë¤Î¤ËÂФ·¡¢µìÈÇ¤Ç¤Ï Android ´Ä¶­¤Ç¤Ï Wi-Fi ÄÌ¿®¡¢iOS ´Ä¶­¤Ç¤ÏͲ»ÇÈÄÌ¿®¤òÍøÍѤ¹¤ë»ÅÍͤǤ·¤¿¡£¤Á¤Ê¤ß¤Ë¡¢µìÈÇ¤Ç¤Ï Fire Phone ¤â¥»¥Ã¥È¥¢¥Ã¥×¤ËÍøÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤·¤¿¡£

    µì Dash Button ¤Î¥»¥Ã¥È¥¢¥Ã¥×

    web.archive.org ¤Ëµì Button ¤Î¥»¥Ã¥È¥¢¥Ã¥×¼ê½çÀâÌÀ¥Ú¡¼¥¸¤Î¥­¥ã¥Ã¥·¥å¤¬»Ä¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤³¤ÎÆâÍÆ¤«¤é¡¢¥Ü¥¿¥óĹ²¡¤·¤Ë¤è¤ê°Ü¹Ô¤¹¤ë¥»¥Ã¥È¥¢¥Ã¥×¥â¡¼¥É¤Ë¤ª¤¤¤Æµì Button ¤¬¥À¥ß¡¼ Wi-Fi ¥¢¥¯¥»¥¹¥Ý¥¤¥ó¥È ·ó ²»À¼¾ðÊó¤Î¥ê¥¹¥Ê¡¼¤È¤·¤Æ¿¶¤ëÉñ¤Ã¤Æ¤¤¤¿¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£

    ¢¨²¼¤Î¿Þ¤Ï¾åµ­¥­¥ã¥Ã¥·¥å¤Î iOS üËö¸þ¤±¤ÎÀâÌÀ²Õ½ê¤«¤é¤ÎÈ´¿è
    ¢¨Æ°²è¤ÏµìÈǤΥ»¥Ã¥È¥¢¥Ã¥×¤ÎÍͻҡÊYoutube 2015ް08-06 Åê¹Æ, iPhone¡Ë3ʬ20É䢤¿¤ê¤«¤é


    http://www.amazon.com/
    https://youtu.be/NSrdo5oNzsI?t=203
    Android üËö¤ò»È¤Ã¤¿¥»¥Ã¥È¥¢¥Ã¥×¤Ë Dash Button ¤Î¥À¥ß¡¼ Wi-Fi ¥¢¥¯¥»¥¹¥Ý¥¤¥ó¥È¤Ø¤Î°ì»þŪ¤ÊÀÚ¤êÂØ¤¨¤¬ÍøÍѤµ¤ì¤Æ¤¤¤ë°ìÊý¤Ç iOS üËö¤Ç¤Î¥»¥Ã¥È¥¢¥Ã¥×¤Ë²»À¼¿®¹æ¤¬ºÎÍѤµ¤ì¤¿¤Î¤Ï JailBreak ¤·¤Ê¤¤¸Â¤êÀܳÀè¤Î Wi-Fi ¥¢¥¯¥»¥¹¥Ý¥¤¥ó¥È¤ò¥×¥í¥°¥é¥à¤«¤éÊѹ¹ÉԲĤǤ¢¤ë¤³¤È¤Ëµ¯°ø¤¹¤ë¤â¤Î¤Î¤è¤¦¤Ç¤¹¡£

    ¿· Dash Button ¤Î¥»¥Ã¥È¥¢¥Ã¥×

    BLE ¥Á¥Ã¥×¤¬ÅëºÜ¤µ¤ì¤¿¿· Button ¤Ç¤Ï¥»¥Ã¥È¥¢¥Ã¥×»þ¤Î¸ø¼°¥¢¥×¥ê¤È¤Î±þ½·¤Ë BLE ÄÌ¿®¤¬ÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£

    ¤³¤ÎÊѹ¹¤Ë¤è¤Ã¤Æ Android / iOS ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Î¼ê½ç¤¬Åý°ì¤µ¤ì¥·¥ó¥×¥ë¤Ç¥¹¥Þ¡¼¥È¤Ë¤Ê¤Ã¤¿È¿ÌÌ¡¢µìÈÇ¤Ç¤ÏÆÃ¤Ë¸ÀµÚ¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿ÂÐ¾Ý OS ¥Ð¡¼¥¸¥ç¥ó¤¬¡ÖiOS 8.3 or higher, Android 4.1 or higher¡×¤Ë¸ÂÄꤵ¤ì¤ë·Á¤È¤Ê¤ê¤Þ¤·¤¿¡£¤Þ¤¿¡¢BLE ÈóÂбþ¤Î Fire Phone¡Ê2015ǯ²¼´üÈÎÇ佪λ¡Ë¤â¼ê½çÀâÌÀ¤«¤é¾Ã¤¨¤Æ¤¤¤Þ¤¹¡£

    ¸½ºß¤Î Dash Button ¥»¥Ã¥È¥¢¥Ã¥×¼ê½çÀâÌÀ¥Ú¡¼¥¸

    ²èÌÌÁ«°Ü

    1
    2
    3
    4
    5
    6
    7
    8
    9

    ¿· Dash Button ¤Ë¥Þ¥¤¥¯¤¬»Ä¤µ¤ì¤Æ¤¤¤ëÍýͳ

    µì Button ¤¬ iOS üËö¤Ç¤Î¥»¥Ã¥È¥¢¥Ã¥×»þ¤Ë²»À¼¿®¹æ¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¥Þ¥¤¥¯¥í¥Õ¥©¥ó¤òÆâ¢¤·¤Æ¤¤¤¿¤³¤È¤ÏÍý²ò¤Ç¤­¤Þ¤¹¡£¤Ç¤Ï¡¢¤Ê¤¼ BLE ÄÌ¿®¤òÍøÍѤ¹¤ë¿· Button ¤Ë¤â¥Þ¥¤¥¯¤¬»Ä¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¤·¤ç¤¦¡©»È¤ï¤Ê¤¤ÉôÉʤǤ¢¤ì¤ÐÀ½Â¤¥³¥¹¥Èºï¸º¤Î¤¿¤á¤Ë¤âűµî¤¹¤ë¤Û¤¦¤¬¹çÍýŪ¤Ê¤Ï¤º¤Ç¤¹¡£¤Þ¤µ¤« Amazon ¤¬²¿¤«Îɤ«¤é¤Ì¤³¤È¤ò´ë¤ó¤Ç¤¤¤ë¤Î¤Ç¤·¤ç¤¦¤«¡©

    Á°·Ç¤Î¼ê½çÀâÌÀ¥Ú¡¼¥¸¤òÆÉ¤ó¤Ç¤¤¤ë¤¦¤Á¤Ë¤Õ¤È°Ê²¼¤Îµ­½Ò¤¬µ¤¤Ë¤Ê¤ê¤Þ¤·¤¿¡£

    Note: Some Dash Buttons and phones do not support Bluetooth connections. If your phone does not connect to your button, select Skip Bluetooth Setup. Then, follow the instructions in the app. Your phone then uses other connection options.
    Ãí: ¥¹¥Þ¡¼¥È¥Õ¥©¥ó¤ÈDash Button¤¬Àܳ¤µ¤ì¤Ê¤¤¾ì¹ç¤Ï¡¢ Bluetooth¤ò¥¹¥­¥Ã¥×¤òÁªÂò¤·¤Þ¤¹¡£¼¡¤Ë¡¢¥¢¥×¥ê¤Î²èÌÌ¤Ë É½¼¨¤µ¤ì¤ë¼ê½ç¤Ë½¾¤¤¤Þ¤¹¡£

    ¸ø¼°¥¢¥×¥ê¤¬ Button ¤È BLE Àܳ¤ò³ÎΩ¤Ç¤­¤Ê¤¤¾ì¹ç¤Ï¤É¤Î¤è¤¦¤Ê½êºî¤È¤Ê¤ë¤Î¤Ç¤·¤ç¤¦¡©¶½Ì£¤ò´¶¤¸»î¤·¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

    BLE ÀܳÉԲĤξõ¶·¤òºÆ¸½¤¹¤ë¤â¤Ã¤È¤â´Êñ¤ÊÊýË¡¤Ï¡ÖButton ¤«¤é¤Î BLE ¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¤òȯÀ¸¤µ¤»¤Ê¤¤¡×¤³¤È¤Ç¤¹¡£¤Ä¤Þ¤ê¡¢¥¢¥×¥ê¤Ëµá¤á¤é¤ì¤¿¥¿¥¤¥ß¥ó¥°¤Ç¤ï¤¶¤È Button ¤Î¥»¥Ã¥È¥¢¥Ã¥×¥â¡¼¥É¤òµ¯Æ°¤»¤º¤½¤Î¤Þ¤ÞÊüÃÖ¤·¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤·¤ç¤¦¡£

    ·ëÏÀ¤È¤·¤Æ¡¢¥¢¥×¥ê¤Ï BLE Àܳ¤ò¤·¤Ð¤é¤¯»î¹Ô¤·¤¿¸å¤Ë¼«Æ°Åª¤Ëµì Button ¤Ç¤Î¥»¥Ã¥È¥¢¥Ã¥×¥·¡¼¥±¥ó¥¹¤Ø°Ü¹Ô¤¹¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤·¤¿¡£ BLE Àܳ¤òÄü¤á¤ë¤È¡¢Android ÈÇ¥¢¥×¥ê¤Ï Button ¤Î¥À¥ß¡¼ AP ¤Ø Wi-Fi Àܳ¤ÎÀÚ¤êÂØ¤¨¤ò»î¤ß¡¢iOS ÈÇ¥¢¥×¥ê¤ÏüËö¤Î¥¹¥Ô¡¼¥«¡¼¤Ø Button ¤òÀܶᤵ¤»¤ë¤³¤È¤òÍøÍѼԤØÂ¥¤·¤Þ¤¹¡£¤½¤Î¥¿¥¤¥ß¥ó¥°¤Ç¿· Button ¤ò¥»¥Ã¥È¥¢¥Ã¥×¥â¡¼¥É¤Çµ¯Æ°¤¹¤ë¤Èµì¥¹¥¿¥¤¥ë¤Ç¤Î¥»¥Ã¥È¥¢¥Ã¥×½èÍý¤¬ÂÚ¤ê¤Ê¤¯¹Ô¤ï¤ì¤Þ¤¹¡£

    ¤Ä¤Þ¤ê¡¢¿· Button ¤Î¥»¥Ã¥È¥¢¥Ã¥×¥â¡¼¥É¤Ïµì Button ¤Ç¤Î¤½¤ì¤ÈƱ°ì¤Î I/F ¤òÈ÷¤¨¤Æ¤¤¤Þ¤¹¡£¤³¤Î¼ÂÁõ¤Ï¡¢BLE ¤ÎÍøÊØÀ­¤ò¼è¤êÆþ¤ì¤Ä¤Ä¤â´Ö¸ý¤Î¹­¤¤µìÈǤǤε¡¹½¤ò²¹Â¸¤¹¤ë¤³¤È¤Ë¤è¤ê¥»¥Ã¥È¥¢¥Ã¥×Ãʳ¬¤Ç¤Î¥È¥é¥Ö¥ë¤ò²Äǽ¤Ê¸Â¤êµÛ¼ý¤¹¤ë¤³¤È¤Ë²Ã¤¨¡¢µì Button - ¿·¥¢¥×¥ê´Ö¤Î¸ß´¹À­¤ò¥·¥ó¥×¥ë¤ËÊݤĤ³¤È¤òÌÜŪ¤È¤¹¤ë¤â¤Î¤È¹Í¤¨¤é¤ì¤Þ¤¹¡£

    Android, iOS üËö¤½¤ì¤¾¤ì¤Ç¤³¤ÎÁàºî¤ò¹Ô¤Ã¤¿ÍÍ»Ò¤ÎÆ°²è¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£

    • ¿· Button ¤òµì¥¹¥¿¥¤¥ë¤Ç¥»¥Ã¥È¥¢¥Ã¥× - Android ÈÇ¡Ê2ʬ9ÉᡴĶ­²»¤¢¤ê¡Ë
    • ¿· Button ¤òµì¥¹¥¿¥¤¥ë¤Ç¥»¥Ã¥È¥¢¥Ã¥× - iOS ÈÇ¡Ê1ʬ33ÉᡴĶ­²»¤¢¤ê¡Ë
    ¤Ê¤ª¡¢¥¢¥×¥ê¤Ï¡ÖüËö¤Î Bluetooth µ¡Ç½¤¬ OFF ¤Î¾ì¹ç¡×¤Ë°Ê²¼¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£¤³¤³¤Ç Android ÈǤǤϡֵñÈݡס¢iOS ÈǤǤϡÖBluetooth ¤ò¥¹¥­¥Ã¥×¡×¤òÁªÂò¤¹¤ë¤³¤È¤ÇƱÍͤ˵쥹¥¿¥¤¥ë¤Î¥»¥Ã¥È¥¢¥Ã¥×¥·¡¼¥±¥ó¥¹¤Ø°Ü¹Ô¤¹¤ë¤³¤È¤ò³Îǧ¤·¤Þ¤·¤¿¡£
    Andorid ÈÇ
    iOS ÈÇ

    ¿Þ¤Î¤è¤¦¤Ë iOS ÈǤ˴ؤ·¤Æ¤ÏËܹà¤ÎËÁƬ¤Ë°úÍѤ·¤¿±Ñ¸ìÈǤÎÀâÌÀµ­»ö¤È¤Û¤ÜÀ°¹ç¤·¤Þ¤¹¤¬¡¢ÆüËܸìÈǵ­»ö¤ÏËÝÌõ¤¬½½Ê¬¤Ç¤Ï¤Ê¤¯¡Ê°Õ¿ÞŪ¤Ê¤â¤Î¡©¡Ë¡¢¤Þ¤¿¡¢Android ¥æ¡¼¥¶¤¬µ­»öÃæ¤Î¥á¥Ã¥»¡¼¥¸¤òÌܤˤ¹¤ëµ¡²ñ¤Ï¤¢¤ê¤Þ¤»¤ó¡£

    ÊÆ¹ñÆâ¤Ë¤Î¤ß¸ºß¤¹¤ëµì Button ¤ÏÅÅÃÓ¼÷Ì¿¤Ç½ù¡¹¤Ë¾Ã¤¨¤Æ¤¤¤¯²áÄø¤Ë¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢BLE ÈóÂбþ¤ÎüËö¤â¼¡Âè¤ËÀ¤´Ö¤«¤é»Ñ¤ò¾Ã¤·¤Æ¤¤¤¯¤³¤È¤Ç¤·¤ç¤¦¡£¾å¤Ë·Ç¤²¤¿¸½ Dash Button ¤ÎÆóÃʹ½¤¨¤Î¥»¥Ã¥È¥¢¥Ã¥× I/F ¤Ï¤¢¤ë¤¤¤Ï²áÅÏŪ¤Ê¤â¤Î¤«¤â¤·¤ì¤Þ¤»¤ó¡£


    (tanabe)
    klab_gijutsu2 at 14:41¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    2016ǯ08·î30Æü

    ´ûÀ®¤Î BLE ¥Ç¥Ð¥¤¥¹¤ò¼«ºî¥×¥í¥°¥é¥à¤«¤éÍøÍѤ¹¤ë»î¤ß

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    Á°²ó¤Îµ­»ö¡§
    • BLE ¥Ç¥Ð¥¤¥¹´Ö¤ÎÄÌ¿®ÆâÍÆ¤ò¥Ñ¥±¥Ã¥È¥ì¥Ù¥ë¤ÇÆÉ¤ß²ò¤¤¤Æ¤ß¤ë
      Âêºà¤Ë¤ÏÄã²Á³Ê¤Ç½Ð²ó¤Ã¤Æ¤¤¤ë¤¢¤ê¤Õ¤ì¤¿ Anti-Lost ·Ï BLE ¥Ç¥Ð¥¤¥¹ A ¤òÁª¤Ó¤Þ¤·¤¿¡£¤³¤Î¾®¤µ¤Ê¥Ç¥Ð¥¤¥¹¤Ë¤Ï LED¡¦¥Ö¥¶¡¼¤È²¡¤·¥Ü¥¿¥ó¥¹¥¤¥Ã¥Á¤¬ ¼ÂÁõ¤µ¤ì¤Æ¤ª¤ê¡¢Âиþ¥¹¥Þ¥Û¥¢¥×¥ê¤È¤Î´Ö¤ÇÁÐÊý¸þ¤Î¤ä¤ê¤È¤ê¤¬²Äǽ¤Ê¤Ä¤¯¤ê¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£


      ¥Ç¥Ð¥¤¥¹ A ¤Î UI
    Á°²ó¤Ï BLE ¥Ñ¥±¥Ã¥È¥¹¥Ë¥Õ¥¡¤ò»È¤Ã¤Æ´ûÀ®¤Î BLE ¥Ç¥Ð¥¤¥¹¡ÖA¡×¤ÈÂиþ¥¢¥×¥ê´Ö¤ÎÄÌ¿®ÆâÍÆ¤òµ­Ï¿¤·¤½¤ÎÀººº¤ò»î¤ß¤Þ¤·¤¿¡£¤½¤³¤ÇÆÀ¤é¤ì¤¿¾ðÊó¤ò¤â¤È¤Ë¡¢º£²ó¤Ï¼Â¸³¤Î°ì´Ä¤È¤·¤Æ¥Ç¥Ð¥¤¥¹ A ¤ÈÏ¢·È¤¹¤ë Android ¥¢¥×¥ê¤Î»îºî¤ò¹Ô¤¤¤Þ¤¹¡£¥Ñ¥±¥Ã¥È¥í¥°¤«¤é±®¤¨¤ë BLE ¥»¥ó¥È¥é¥ë¦¤Î½êºî¤ò¼«ºî¥×¥í¥°¥é¥à¤ÇºÆ¸½¤¹¤ë¤³¤È¤ÏÏÀÍýŪ¤Ë²Äǽ¤Ç¤·¤ç¤¦¡£

    ¥Ç¥Ð¥¤¥¹ A ¤È¥¢¥×¥ê¤ÎÏ¢·È¤ËɬÍפʽèÍý

    Á°²ó¤Îµ­»ö¤«¤é¡¢¥Ç¥Ð¥¤¥¹ A ¤È¥¢¥×¥ê¤ÎÏ¢·È¤Ë´Ø¤¹¤ëÍ×ÁǤò¥Ô¥Ã¥¯¥¢¥Ã¥×¤·¤Æ¤ß¤Þ¤¹¡£

    • ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹ A ¤Î LED¡¦¥Ö¥¶¡¼¤ò¥³¥ó¥È¥í¡¼¥ë

      • ¡ÖScene 6: ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹ A ¤Î LED¡¦¥Ö¥¶¡¼¤òÁàºî¡×
        Frame 616

        Âиþ¥¢¥×¥ê¾å¤Î½êÄê¤Î¥Ü¥¿¥ó¤ò²¡²¼¤¹¤ë¤È¡¢Frame 345, Frame 238 ¤Î¼¨¤¹¡¢ "¡ÖImmediate Alert¡×¥µ¡¼¥Ó¥¹ÇÛ²¼¤Î¡ÖAlert Level¡×¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯" ¤Î Value Handle 0x0025 ¤ËÃÍ¡Ö2¡ÊHigh Alert¡Ë¡×¤¬½ñ¤­¹þ¤Þ¤ì¤ë

        ¥Ç¥Ð¥¤¥¹ A ¤Î LED¡¦¥Ö¥¶¡¼¤Ï¥Õ¥¡¡¼¥à¥¦¥§¥¢¥ì¥Ù¥ë¤Ç¤³¤Î Alert Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ëɳ¤Å¤±¤é¤ì¤Æ¤¤¤ëÌÏÍÍ¡£High Alert Ãͤ¬½ñ¤­¹þ¤Þ¤ì¤ë¤È¤½¤ì¤ËÈ¿±þ¤·¤ÆÃ»»þ´Ö LED ¤È¥Ö¥¶¡¼¤¬ ON ¤Ë¤Ê¤ë

      ¡¼> ¥Ç¥Ð¥¤¥¹ A ¤ÎÄ󶡤¹¤ë Immediate Alert ¥µ¡¼¥Ó¥¹ÇÛ²¼¤Î Alert Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ë¥¢¥×¥ê¤«¤éÃÍ 2 ¤ò½ñ¤­¹þ¤á¤Ð¥Ç¥Ð¥¤¥¹ A ¤Î LED¡¦¥Ö¥¶¡¼¤¬ ON ¤Ë¤Ê¤ê¡¢ÃÍ 0 ¤ò½ñ¤­¹þ¤á¤Ð OFF ¤Ë¤Ê¤ë

    • ¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó²¡²¼¤ò¥¢¥×¥ê¤ØÄÌÃÎ

      • ¡ÖScene 5: ¥Ç¥Ð¥¤¥¹ A ¥Ü¥¿¥ó²¡²¼»þ¤Î¥¢¥×¥ê¤Ø¤ÎÄÌÃΤòÀßÄê¡×
        Frame 491

        Frame 453¡¢Frame 439¡¢Frame 453 ¤Î¼¨¤¹Ä̤ꡢ¥Ï¥ó¥É¥ë 0x0036 ¤Ï¡¢ "¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1¡ÊUUID = 0xFFE0¡ËÇÛ²¼¤Î¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡ËÇÛ²¼¤Î Client Characteristic Configuration Descriptor (CCCD)" ¤Ç¤¢¤ë

        Åö³º¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë¤Î¥×¥í¥Ñ¥Æ¥£¤Ë¤Ï Notify ¤¬ÀßÄꤵ¤ì¤Æ¤ª¤ê¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ç¤¢¤ëÂиþ¥¢¥×¥ê¤«¤é CCCD 0x0036 ¤Ë Notification bit (0x0001) ¤ò½ñ¤­¹þ¤ó¤Ç¤ª¤¯¤³¤È¤Ç¡¢¤³¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ÎÃͤ¬¹¹¿·¤µ¤ì¤¿»þ¤Ë Value Handle ¤Ç¤¢¤ë 0x0035 ·Ðͳ¤Ç¥¢¥×¥ê¦¤ØÄÌÃΡÊNotification¡Ë¤¬¹Ô¤ï¤ì¤ë¤è¤¦¤Ë¤Ê¤ë

      • ¡ÖScene 7: ¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó¤ò²¡¤¹¤È¥¢¥×¥ê¤ØÄÌÃΡ×
        Frame 711

        ¥Ç¥Ð¥¤¥¹ A ¤ÎʪÍý¥Ü¥¿¥ó¤Ï¥Õ¥¡¡¼¥à¥¦¥§¥¢¥ì¥Ù¥ë¤Ç Frame 439 ¤Î¼¨¤¹ "¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1¡ÊUUID = 0xFFE0¡ËÇÛ²¼¤Î¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë" ¤Ëɳ¤Å¤±¤é¤ì¤Æ¤¤¤ëÌÏÍÍ¡£¤³¤Î¥Ü¥¿¥ó¤ò²¡¤¹¤ÈÅö³º¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ÎÃͤ¬¥Ç¥Ð¥¤¥¹ÆâÉô¤Ç¹¹¿·¤µ¤ì Frame 491 ¤Ç¤Î»Å¹þ¤ß¤Ë´ð¤Å¤­¥¢¥×¥ê¦¤ØÄÌÃΤ¬¹Ô¤ï¤ì¤ë

      ¡¼> ½é´ü½èÍý¤È¤·¤Æ¡¢¥Ç¥Ð¥¤¥¹ A ¤ÎÄ󶡤¹¤ë¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1¡ÊUUID = 0xFFE0¡ËÇÛ²¼¤Î¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë¤Î»ý¤Ä Client Characteristic Configuration Descriptor ¡Ê¾ÜºÙ¡§1, 2¡Ë ¤Ë¥¢¥×¥ê¤«¤éÃÍ 0x0001¤ò½ñ¤­¹þ¤ó¤Ç¤ª¤¯¡£¤½¤ì°Ê¹ß¤Ë¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó¤¬²¡²¼¤µ¤ì¤ë¤ÈÅö³º¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯·Ðͳ¤Ç¥Ç¥Ð¥¤¥¹ A ¤«¤é¥¢¥×¥ê¤ØÄÌÃΤ¬¹Ô¤ï¤ì¤ë
    ½èÍý¤½¤Î¤â¤Î¤Ë¤ÏÆÃ¤ËÆñ¤·¤½¤¦¤ÊÍ×ÁǤâ¤Ê¤¯¡¢¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹ A ¤Ø¤ÎÀܳ¸å¤Ë½êÄê¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡¦¥Ç¥¹¥¯¥ê¥×¥¿¤ÎÁàºî¤òŬÀڤ˹Ԥ¦¤³¤È¤¬¥Ý¥¤¥ó¥È¤È¤Ê¤ê¤½¤¦¤Ç¤¹¡£

    ¥µ¡¼¥Ó¥¹¡¦¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡¦¥Ç¥¹¥¯¥ê¥×¥¿¤Î UUID ¤Ë¤Ä¤¤¤Æ

    BLE ¥Í¥¤¥Æ¥£¥Ö¤ÎÀ¤³¦¤Ç¤Ï½êÄê¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ä¥Ç¥¹¥¯¥ê¥×¥¿¤Î I/O ¤Ë¤Ï³Æ¥¨¥ó¥È¥ê¤Ëɳ¤Å¤±¤é¤ì¤¿¥Ï¥ó¥É¥ë¤¬»ÈÍѤµ¤ì¤Þ¤¹¤¬¡¢Ãê¾Ý²½¤µ¤ì¤¿ Android API ¤Ç¤Î½èÍýÂоݤϥª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£½êÄê¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ä¥Ç¥¹¥¯¥ê¥×¥¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¼èÆÀ¤Ë¤Ï¤½¤ì¤¾¤ì¤Î UUID ¤¬É¬ÍפǤ¢¤ë¤¿¤á¡¢¥×¥í¥°¥é¥à¤Îµ­½Ò¤ËºÝ¤·¤Æ¤Ï¡¢¥Ñ¥±¥Ã¥È¥í¥°¾å¤Ëµ­Ï¿¤µ¤ì¤¿½êÄê¤Î¥Ï¥ó¥É¥ë¤¬¤É¤Î UUID ¤Î¥¨¥ó¥È¥ê¤Î¤â¤Î¤Ç¤¢¤ë¤«¤òÀµ³Î¤ËÇİ®¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
    ¤Þ¤¿¡¢¥µ¡¼¥Ó¥¹ - ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ - ¥Ç¥¹¥¯¥ê¥×¥¿¤Ï³¬Áشط¸¤Ë¤¢¤ë¤¿¤á¡¢½êÄê¤Î¥¨¥ó¥È¥ê¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤¹¤ë¼ê³¤­¤ÏºÇ¾å°Ì¤Ë¤¢¤ë¥µ¡¼¥Ó¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬¾ï¤Ëµ¯ÅÀ¤È¤Ê¤ê¤Þ¤¹¡£

    °Ê²¼¤Ë¡¢¥Ñ¥±¥Ã¥È¥í¥°¤«¤é½êÄê¤Î¥µ¡¼¥Ó¥¹°Ê²¼¤Î³Æ¥¨¥ó¥È¥ê¤Î UUID ¤ò¸«¤Ä¤±¤ëÊýË¡¤È¡¢³Æ UUID ¤«¤é¤½¤ì¤¾¤ì¤Î¥¨¥ó¥È¥ê¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤¹¤ë Android ¥³¡¼¥É¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£

    ¥Ñ¥±¥Ã¥È¥í¥°¤«¤é½êÄê¤Î¥µ¡¼¥Ó¥¹°Ê²¼¤Î³Æ¥¨¥ó¥È¥ê¤Î UUID ¤ò½¦¤¦

    • Á°²óµ­»öÃæ¤Î¥Ñ¥±¥Ã¥È¥í¥° Frame 229 ¤Ç¤Ï 0x0001 - 0xffff ¤Î¥Ï¥ó¥É¥ë¶õ´Ö¤òÂÐ¾Ý¤Ë Read By Group Type Request ¤Ç GATT Primary Service Declaration ¤ò¾È²ñ¡¢¤½¤Î¥ì¥¹¥Ý¥ó¥¹¤¬ Frame 231 ¤Ç¤¹

             ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

      ¤³¤³¤Ç¤Ï¥ì¥¹¥Ý¥ó¥¹¤Ë´Þ¤Þ¤ì¤ë 3·ï¤Î¥ì¥³¡¼¥É¤Î¤¦¤Á 2·ï¤á¤ËÃíÌܤ·¤Æ¤ß¤Þ¤¹

      Opcode: Read By Group Type Response (0x11)
               :
      
      Attribute Data, Handle: 0x000c, Group End Handle: 0x000f
        Handle: 0x000c
        Group End Handle: 0x000f
        Value: 0118
               :
      
      • Primary Service Declaration ¤Î¾È²ñ¤ËÂФ¹¤ë Read By Group Type Response ¤Î¡ÖValue¡×¤Ë¤ÏÅö³º¥µ¡¼¥Ó¥¹¤Î UUID ¤¬³ÊǼ¤µ¤ì¤ë
      • ¤³¤ÎÎã¤Ç¤Ï 16¥Ó¥Ã¥È UUID = 0x1801 ¤Ç¤¢¤ê¡¢¤³¤ì¤Ï¡¢BLE ´ûÄê¤Î Generic Attribute ¥µ¡¼¥Ó¥¹¤ò¼¨¤¹
      • Åö³º¥µ¡¼¥Ó¥¹¤Ï¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x000c - 0x000f ¤òÀêÍ­¤¹¤ë
    • Frame 287 ¤Ç¤Ï¾åµ­¤Î¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x000c - 0x000f ¤òÂÐ¾Ý¤Ë Read By Type Request ¤Ç GATT Characteristic Declaration ¤ò¾È²ñ¡¢¤½¤Î¥ì¥¹¥Ý¥ó¥¹¤¬ Frame 289 ¤Ç¤¹

             ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

      ¥ì¥¹¥Ý¥ó¥¹¤ËÃíÌܤ·¤Þ¤¹

      Opcode: Read By Type Response (0x09)
               :
      
      Attribute Data, Handle: 0x000d
        Handle: 0x000d
        Value: 200e00052a
      
      • Characteristic Declaration ¤Î¾È²ñ¤ËÂФ¹¤ë Read By Type Response ¤Î¡ÖValue¡×¤Ë¤ÏÅö³º¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¥×¥í¥Ñ¥Æ¥£¡¦Value Handle¡¦UUID ¤¬³ÊǼ¤µ¤ì¤ë¡Ê¾ÜºÙ¡§1a, 2a, 1b¡Ë

        ¡Ê¢¨É½¤Ï BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part G] page 532 ¤è¤ê¡Ë
      • ¤³¤³¤Ç¤Ï¡Övalue: 200e00052a¡×¤Ë¤Ä¤­¡¢¥×¥í¥Ñ¥Æ¥£ = 0x20 (Indicate), Characteristic Value Handle = 0x000e, 16¥Ó¥Ã¥È UUID = 0x2A52
      • 16¥Ó¥Ã¥È UUID = 0x2A52 ¤Ï¡¢BLE ´ûÄê¤Î Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¼¨¤¹
    • Frame 302 ¤Ç¤Ï»Ä¤ê¤Î¥Ï¥ó¥É¥ë 0x000f ¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò GATT ¤Ø Find Information Request ¤Ç¾È²ñ¡¢¤½¤Î¥ì¥¹¥Ý¥ó¥¹¤¬ Frame 305 ¤Ç¤¹

             ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

      ¥ì¥¹¥Ý¥ó¥¹¤ËÃíÌܤ·¤Þ¤¹

      Opcode: Find Information Response (0x05)
      UUID Format: 16-bit UUIDs (0x01)
      Handle: 0x000f
      UUID: Client Characteristic Configuration (0x2902)
      
      • ¥Ï¥ó¥É¥ë 0x000f ¤Ï Client Characteristic Configuration Descriptor (CCCD) ¤Ç¤¢¤ê¡¢¤³¤Î CCCD ¤ÏľÁ°¤Î Indicate ¥×¥í¥Ñ¥Æ¥£¤ò»ý¤Ä Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ë°¤¹¤ë
        ¡Ê¢¨CCCD ¤Î 16¥Ó¥Ã¥È UUID ¤Ï 0x2902 ¸ÇÄê¡Ë

    °Ê¾å¤Î¤³¤È¤«¤é¡¢¥Ç¥Ð¥¤¥¹ A ¾å¤Î Generic Attribute ¥µ¡¼¥Ó¥¹¤Î¹½À®¤Ï°Ê²¼¤ÎÆâÍÆ¤Ç¤¢¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£

    Generic Attribute ¥µ¡¼¥Ó¥¹¡ÊUUID = 0x1801¡Ë
      |  Handle Group = 0x000c - 0x000f
    ¡¡|
      +-- Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0x2A52¡Ë
            |   Handle = 0x000d, Value Handle = 0x000e
            |
            +-- Client Characteristic Configuration Descriptor (UUID = 0x2902¡Ë
                  Handle = 0x000f
    

    ½êÄê¤Î UUID ¤Î¥¨¥ó¥È¥ê¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤¹¤ë

    ¤³¤³¤Þ¤Ç¤ËÅо줷¤¿ UUID ¤Ï¤¹¤Ù¤Æ 16¥Ó¥Ã¥ÈÃͤǤ·¤¿¤¬¡¢16 ¥Ó¥Ã¥È UUID ¤Ï Bluetooth ÍѤ˥¢¥µ¥¤¥ó¤µ¤ì¤Æ¤¤¤ëËÜÍè¤Î 128¥Ó¥Ã¥È UUID ¤Î¸ÇÄêÉôʬ¡ÊBASE_UUID¡Ë¤ò¾Êά¤·¤¿É½¸½¤Ç¤¹¡£

    • BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part B] page 227
      2.5 SEARCHING FOR SERVICES
             :
      2.5.1 UUID
             :
      To reduce the burden of storing and transferring 128-bit UUID values, 
      a range of UUID values has been pre-allocated for assignment to 
      often-used, registered purposes. The first UUID in this pre-allocated
      range is known as the Bluetooth Base UUID and has the value 
      00000000-0000-1000-8000-00805F9B34FB,
             :
      
    ¤Ä¤Þ¤ê¡¢Generic Attribute ¥µ¡¼¥Ó¥¹¤Î 16¥Ó¥Ã¥È UUID¡Ö0x1801¡×¤Ï¡¢128¥Ó¥Ã¥È UUID¡Ö00001801-0000-1000-8000-00805F9B34FB¡×¤Ç¤¹¡£

    Android API ¤òÍѤ¤¤ÆÁ°½Ð¤Î Generic Attribute ¥µ¡¼¥Ó¥¹¤È Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡¢¤ª¤è¤Ó¤½¤ÎÇÛ²¼¤Î Client Characteristic Configuration Descriptor ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤¹¤ë¥³¡¼¥É¤Î¥¤¥á¡¼¥¸¤ò¼¨¤·¤Þ¤¹¡£

    private BluetoothGatt mBtGatt;
    
    private BluetoothGattCharacteristic mChServiceChanged;
    private BluetoothGattDescriptor mCCCD;
    
    // Generic Attribute ¥µ¡¼¥Ó¥¹ ¤Î UUID
    private UUID mUuidSvcGenericAttribute = UUID.fromString("00001801-0000-1000-8000-00805f9b34fb");
    // Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î UUID 
    private UUID mUuidChServiceChanged    = UUID.fromString("00002a52-0000-1000-8000-00805f9b34fb");
    // Client Characteristic Configuration Descriptor ¤Î UUID ¡Ê¸ÇÄêÃÍ¡Ë
    private UUID mUuidCCCD                = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
                     :
    
    private BluetoothGattCallback mGattCallback = new bleGattCallback();
                     :
    
    // ¥Ç¥Ð¥¤¥¹ A ¤ØÀܳ¸å¡¢GATT ¤ÎÄ󶡤¹¤ë³Æ¥µ¡¼¥Ó¥¹°Ê²¼¤Î°ìÍ÷¤ò¼èÆÀ
    mBtGatt.discoverServices();(mCtx, false, mGattCallback);
                     :
    
    // GATT ¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥é
    private class bleGattCallback extends BluetoothGattCallback {
      @Override
      // GATT ¥µ¡¼¥Ó¥¹°ìÍ÷¼èÆÀ´°Î»
      public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        super.onServicesDiscovered(gatt, status);
    
        // ¥Ç¥Ð¥¤¥¹ A ¤Î Generic Attribute ¥µ¡¼¥Ó¥¹¤Î
        // Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ
        BluetoothGattService svc = gatt.getService(mUuidSvcGenericAttribute);
        mChServiceChanged = svc.getCharacteristic(mUuidChServiceChanged);
    
        // Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î
        // Client Characteristic Configulation Descriptor ¤ò¼èÆÀ
        mCCCD = mChServiceChanged.getDescriptor(mUuidCCCD);
                     :
      }
    

    ¤Á¤Ê¤ß¤Ë¡¢¥¢¥×¥ê³«È¯¤Î½é´ü¤Ë BluetoothGattCallback ¤Î onServicesDiscovered() ¤Ë¼¡¤ÎÍ×ÎΤΥ³¡¼¥É¤òÁÞÆþ¤·¤Æ ³Æ GATT ¥µ¡¼¥Ó¥¹ÇÛ²¼¤ÎÁ´¥¨¥ó¥È¥ê¤Î UUID ¤ò³¬ÁØÅª¤Ë½ÐÎϤ·Êݸ¤·¤Æ¤ª¤¯¤È²¿¤«¤ÈÊØÍø¤Ç¤¹¡£

    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
      super.onServicesDiscovered(gatt, status);
    
      List<BluetoothGattService> serviceList = gatt.getServices();
    
      Log.d(TAG, "onServicesDiscovered: serviceList.size=" + serviceList.size());
    
      for (BluetoothGattService s : serviceList) {
        Log.d(TAG, "onServicesDiscovered: svc uuid=" + s.getUuid().toString());
        List<BluetoothGattCharacteristic> chlist = s.getCharacteristics();
        Log.d(TAG, "onServicesDiscovered: chrlist.size=" + chlist.size());
    
        for (BluetoothGattCharacteristic c : chlist) {
          UUID uuid = c.getUuid();
          Log.d(TAG, "onServicesDiscovered:  chr uuid=" + uuid.toString());
          List<BluetoothGattDescriptor> dlist = c.getDescriptors();
    
          Log.d(TAG, "onServicesDiscovered:  desclist.size=" + dlist.size());
          for (BluetoothGattDescriptor d : dlist) {
            Log.d(TAG, "onServicesDiscovered:   desc uuid=" + d.getUuid());
          }
        }
      }
    

    ¥Ç¥Ð¥¤¥¹ A ¤Ø¤ÎÀܳ¸å¤Ë¾å¤Î¥³¡¼¥É¤ò¼Â¹Ô¤·¤¿ºÝ¤Î¥í¥°¤Ç¤¹¡£¡Ê¢¨¸«¤ä¤¹¤µ¤Î¤¿¤á¤Ë¥µ¡¼¥Ó¥¹¤´¤È¤Ë²þ¹Ô¤òÁÞÆþ¡Ë

    ÅöÁ³¤Ê¤¬¤é¡¢¤³¤ÎÆâÍÆ¤ÏÁ°²óºÎ¼è¤·¤¿¥Ñ¥±¥Ã¥È¥í¥°Æâ¤Î³Æ¥¨¥ó¥È¥ê¤Î¾ðÊó¤ÈÉä¹ç¤·¤Æ¤¤¤Þ¤¹¡£

    ºîÀ®¤·¤¿¥¢¥×¥ê

    °Ê¾å¤ÎÆâÍÆ¤Ë¤â¤È¤Å¤¤¤Æ¥¢¥×¥ê¤òºîÀ®¤·¤Þ¤·¤¿¡£¤´¤¯¥·¥ó¥×¥ë¤Ê¤â¤Î¤Ç¤¹¤¬´üÂÔÄ̤ê¤Ëư¤¤¤Æ¤¤¤Þ¤¹¡£

    ¥½¡¼¥¹¥³¡¼¥É°ì¼°

    ư²è¡§Æ°ºî¤ÎÍÍ»Ò

    ºîÀ®¤·¤¿ Android ¥¢¥×¥ê¤È¥Ç¥Ð¥¤¥¹ A ¤ÎÏ¢·È¤ÎÍͻҤò¼ý¤á¤¿Æ°²è¤Ç¤¹¡£¥Ç¥Ð¥¤¥¹ A ¤Ï UI Éôʬ¤Î¤ß¤òϪ½Ð¤·¤Æ¤¤¤Þ¤¹¡£
    ¡Ê34Éà ¥¢¥é¡¼¥à²»¤¢¤ê ²»ÎÌÃí°Õ¡Ë
        

    ¥á¥â¡§¼ÂÁõ¼ê½ç¤Ê¤É

    private BluetoothAdapter mBtAdapter;
    private BluetoothLeScanner mBtScanner;
    private BluetoothDevice mBtDevice;
    private BluetoothGatt mBtGatt;
    

    1. BluetoothAdapter ¡Á BluetoothLeScanner ¤ò¼èÆÀ

    • BluetoothAdapter - developer.android.com
      Represents the local device Bluetooth adapter. The BluetoothAdapter lets you
      perform fundamental Bluetooth tasks, such as initiate device discovery, query
      a list of bonded (paired) devices, instantiate a BluetoothDevice using a known
      MAC address, and create a BluetoothServerSocket to listen for connection
      requests from other devices, and start a scan for Bluetooth LE devices.
                        :
      
      static BluetoothAdapter	getDefaultAdapter()
      
      Get a handle to the default local Bluetooth adapter. 
      
    • BluetoothAdapter - getBluetoothLeScanner - developer.android.com
      BluetoothLeScanner getBluetoothLeScanner ()
      
      Returns a BluetoothLeScanner object for Bluetooth LE scan operations. 
      
      • BluetoothLeScanner - developer.android.com
        BluetoothLeScanner
        
        This class provides methods to perform scan related operations for Bluetooth
        LE devices. An application can scan for a particular type of Bluetooth LE
        devices using ScanFilter. It can also request different types of callbacks
        for delivering the result. 
        
    mBtAdapter = BluetoothAdapter.getDefaultAdapter();
    mBtScanner = mBtAdapter.getBluetoothLeScanner();
    

    2. ¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Ñ¥±¥Ã¥È¤Î¥¹¥­¥ã¥ó ¡Á ÂоݤȤ¹¤ë BluetoothDevice ¤ò¼èÆÀ

    private ScanCallback mScanCallback = new bleScanCallback();
                     :
    
    mBtScanner.startScan(mScanCallback);
                     :
    
    private class bleScanCallback extends ScanCallback {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);
            if (.......) {
              mBtDevice = result.getDevice();
            }
        }
        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
            Log.e(TAG, "onScanFailed: err=" + errorCode);
        }
    }
    

    3. ¥Ç¥Ð¥¤¥¹¤Ø¤ÎÀܳ

    • BluetoothDevice - connectGatt - developer.android.com
      BluetoothGatt connectGatt (Context context, 
                      boolean autoConnect, 
                      BluetoothGattCallback callback)
      
      Connect to GATT Server hosted by this device. Caller acts as GATT client. 
      The callback is used to deliver results to Caller, such as connection status
      as well as any further GATT client operations. The method returns a
      BluetoothGatt instance. You can use BluetoothGatt to conduct GATT client
      operations.
                        :
      callback 	BluetoothGattCallback: GATT callback handler that will
      receive asynchronous callbacks.
                        :
      
    • BluetoothGattCallback - developer.android.com
      •  onConnectionStateChange - developer.android.com
        void onConnectionStateChange (BluetoothGatt gatt, 
                        int status, 
                        int newState)
        
        Callback indicating when GATT client has connected/disconnected to/from
        a remote GATT server.
                          :
        newState 	int:¡¡Returns the new connection state. Can be one of
        STATE_DISCONNECTED or STATE_CONNECTED
                          :
        
    private BluetoothGattCallback mGattCallback = new bleGattCallback();
                     :
    
    mBtGatt = mBtDevice.connectGatt(mCtx, false, mGattCallback);
                     :
    
    private class bleGattCallback extends BluetoothGattCallback {
      @Override
      public void onConnectionStateChange(BluetoothGatt gatt, int status,
                                          int newState) {
        super.onConnectionStateChange(gatt, status, newState);
        if (newState == BluetoothProfile.STATE_CONNECTED) {
          // Àܳ³ÎΩ - ¥Ç¥Ð¥¤¥¹¤Î GATT ¥µ¡¼¥Ó¥¹°ìÍ÷¤Î¼èÆÀ¤Ø
        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
          // ÀÚÃÇ´°Î»¤Î½èÍý
        }
      }
                     :
    
    

    4. GATT ¥µ¡¼¥Ó¥¹ - ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ - ¥Ç¥¹¥¯¥ê¥×¥¿¤òõº÷ ¡Á ɬÍפʥª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ

    • BluetoothGatt - discoverServices - developer.android.com
      boolean discoverServices ()
      
      Discovers services offered by a remote device as well as their
      characteristics and descriptors.
      
      This is an asynchronous operation. Once service discovery is completed, 
      the onServicesDiscovered(BluetoothGatt, int) callback is triggered. 
      If the discovery was successful, the remote services can be retrieved
      using the getServices() function. 
                        :
      
    • BluetoothGattCallback - onServicesDiscovered - developer.android.com
      void onServicesDiscovered (BluetoothGatt gatt, 
                      int status)
      
      Callback invoked when the list of remote services, characteristics
      and descriptors for the remote device have been updated, ie new services
      have been discovered.
                        :
      
    • BluetoothGatt - getService - developer.android.com
      getService
      
      BluetoothGattService getService (UUID uuid)
      
      Returns a BluetoothGattService, if the requested UUID is supported by
      the remote device.
      
      This function requires that service discovery has been completed for
      the given device.
      
      If multiple instances of the same service (as identified by UUID) exist,
      the first instance of the service is returned.
      
      Requires BLUETOOTH permission.
      
      Parameters
      uuid 	UUID: UUID of the requested service
      Returns
      BluetoothGattService 	BluetoothGattService if supported, or null if the
                              requested service is not offered by the remote device. 
      
      • BluetoothGattService - getCharacteristic - developer.android.com
        getCharacteristic
        
        BluetoothGattCharacteristic getCharacteristic (UUID uuid)
        
        Returns a characteristic with a given UUID out of the list of
        characteristics offered by this service.
        
        This is a convenience function to allow access to a given characteristic
        without enumerating over the list returned by getCharacteristics()
        manually.
        
        If a remote service offers multiple characteristics with the same UUID,
        the first instance of a characteristic with the given UUID is returned.
        
        Parameters
        uuid 	UUID
        Returns
        BluetoothGattCharacteristic  GATT characteristic object or null if no
                                     characteristic with the given UUID was found. 
        
        
        • BluetoothGattCharacteristic - getDescriptor - developer.android.com
          getDescriptor
          
          BluetoothGattDescriptor getDescriptor (UUID uuid)
          
          Returns a descriptor with a given UUID out of the list of descriptors
          for this characteristic.
          
          Parameters
          uuid  UUID
          Returns
          BluetoothGattDescriptor  GATT descriptor object or null if no
                                   descriptor with the given UUID was found. 
          
    private BluetoothGattCharacteristic mChAlertLevel = null;
    private BluetoothGattCharacteristic mChUser1 = null;
    private BluetoothGattDescriptor mDescUser1 = null;
    
    // ¥Ç¥Ð¥¤¥¹ A ¤ÎÄ󶡤¹¤ë¥µ¡¼¥Ó¥¹¡¦¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯·²¤Î UUID ¤è¤ê
    private UUID mUuidSvcImAlert   = UUID.fromString("00001802-0000-1000-8000-00805f9b34fb");
    private UUID mUuidChAlertLevel = UUID.fromString("00002a06-0000-1000-8000-00805f9b34fb");
    private UUID mUuidSvcUser1     = UUID.fromString("0000ffe0-0000-1000-8000-00805f9b34fb");
    private UUID mUuidChUser1      = UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");
    // UUID for Client Characteristic Configuration Descriptor
    // - BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part G] page 537
    private UUID mUuidCCCD         = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
                     :
    
    private BluetoothGattCallback mGattCallback = new bleGattCallback();
                     :
    
    mBtGatt.discoverServices();(mCtx, false, mGattCallback);
                     :
    
    private class bleGattCallback extends BluetoothGattCallback {
      @Override
      // GATT ¥µ¡¼¥Ó¥¹°ìÍ÷¼èÆÀ´°Î»
      public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        super.onServicesDiscovered(gatt, status);
    
        // ¥Ç¥Ð¥¤¥¹ A ¤Î Immediate Alert ¥µ¡¼¥Ó¥¹¤Î
        // Alert Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ
        BluetoothGattService svc = gatt.getService(mUuidSvcImAlert);
        mChAlertLevel = svc.getCharacteristic(mUuidChAlertLevel);
    
        // ¥Ç¥Ð¥¤¥¹ A ¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1 ¤Î ¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î
        // Client ​Characteristic Configulation Descriptor ¤ò¼èÆÀ
        svc = gatt.getService(mUuidSvcUser1);
        mChUser1 = svc.getCharacteristic(mUuidChUser1);
        mDescUser1 = mChUser1.getDescriptor(mUuidCCCD);
                     :
      }
    

    5. ½êÄê¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤«¤é¤ÎÄÌÃΤòÍ­¸ú¤Ë

    // ¥Ç¥Ð¥¤¥¹ A ¤Ø¤Î Alert »Ø¼¨ÍÑ
    private byte[] mCmdAlertOff = new byte[] {(byte)0x00}; // OFF (No Alert)
    private byte[] mCmdAlertOn  = new byte[] {(byte)0x02}; // ON (High Alert)
                     :
    
      // ¥Ç¥Ð¥¤¥¹ A ¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1 ¤Î ¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î
      // Client ​Characteristic Configulation Descriptor ¤ò¼èÆÀ
      svc = gatt.getService(mUuidSvcUser1);
      mChUser1 = svc.getCharacteristic(mUuidChUser1);
      mDescUser1 = mChUser1.getDescriptor(mUuidCCCD);
    
      // Ʊ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ÎÃÍÊѹ¹»þ¤ÎÄÌÃΤòÍ­¸ù¤Ë¤·¤Æ
      // Ʊ CCCD ¤Ø ENABLE_NOTIFICATION_VALUE ¤ò½ñ¤­¹þ¤ó¤ÇÄÌÃΤØÂÔµ¡
      mBtGatt.setCharacteristicNotification(mChUser1, true);
      byte[] val = new byte[] {(byte)0x01, (byte)0x00};
      mDescUser1.setValue(val);
      mBtGatt.writeDescriptor(mDescUser1);
                     :
    
    private class bleGattCallback extends BluetoothGattCallback {
      @Override
      public void onCharacteristicChanged (BluetoothGatt gatt,
                                           BluetoothGattCharacteristic ch) {
        Log.d(TAG, "onCharacteristicChanged");
        // ¥Ç¥Ð¥¤¥¹ A ¤Î¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ 1 ¤«¤é¤ÎÄÌÃΤò¼õ¿®
        if (ch == mChUser1) {
            Toast.makeText(mCtx, "* P U S H E D *", Toast.LENGTH_SHORT).show();
        }
      }
      @Override
      public void onDescriptorWrite (BluetoothGatt gatt,
                                    BluetoothGattDescriptor desc,
                                    int status) { // writeDescriptor() ·ë²Ì
        super.onDescriptorWrite(gatt, desc, status);
        Log.d(TAG, "onDescriptorWrite: sts=" + status);
        if (desc == mDescUser1) {
          // ¥Ç¥Ð¥¤¥¹ A ¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1 ¤Î ¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î
          // Client ​Characteristic Configulation Descriptor ¤Ø¤Î½ñ¤­¹þ¤ß¤¬´°Î»
        }
      }
                     :
    

    6. ½êÄê¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ø¤Î½ñ¤­¹þ¤ß

    // ¥Ç¥Ð¥¤¥¹ A ¤Ø¤Î Alert »Ø¼¨ÍÑ
    private byte[] mCmdAlertOff = new byte[] {(byte)0x00}; // OFF (No Alert)
    private byte[] mCmdAlertOn  = new byte[] {(byte)0x02}; // ON (High Alert)
                     :
    
      mChAlertLevel.setValue(mCmdAlertOn);
      mBtGatt.writeCharacteristic(mChAlertLevel);
                     :
    
    private class bleGattCallback extends BluetoothGattCallback {
      @Override
      public void onCharacteristicWrite(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic ch,
                                        int status) { // writeCharacteristic ·ë²Ì
        super.onCharacteristicWrite(gatt, ch, status);
        if (ch == mChAlertLevel) { 
          Log.d(TAG, "mChAlertLevel: onCharacteristicWrite: sts=" + status);
        }
      }
                     :
    

    (tanabe)
    klab_gijutsu2 at 14:28¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    2016ǯ08·î24Æü

    BLE ¥Ç¥Ð¥¤¥¹´Ö¤ÎÄÌ¿®ÆâÍÆ¤ò¥Ñ¥±¥Ã¥È¥ì¥Ù¥ë¤ÇÆÉ¤ß²ò¤¤¤Æ¤ß¤ë

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    Á°²ó¤Îµ­»ö¡§
    ¥Ñ¥±¥Ã¥È¥¹¥Ë¥Õ¥¡¤ò»È¤Ã¤Æ¼ÂºÝ¤Ë BLE µ¡´ï´Ö¤Î±þ½·¤òÄɤäƤߤޤ·¤¿¡£È÷˺¤ò¤«¤Í¤Æ°Ê²¼¤Ë¾ðÊó¤ò¹µ¤¨¤Þ¤¹¡£Âêºà¤Ë¤ÏÄã²Á³Ê¤Ç½Ð²ó¤Ã¤Æ¤¤¤ë¤¢¤ê¤Õ¤ì¤¿ Anti-Lost ·Ï BLE ¥Ç¥Ð¥¤¥¹ A ¤òÁª¤Ó¤Þ¤·¤¿¡£¤³¤Î¾®¤µ¤Ê¥Ç¥Ð¥¤¥¹¤Ë¤Ï LED¡¦¥Ö¥¶¡¼¤È²¡¤·¥Ü¥¿¥ó¥¹¥¤¥Ã¥Á¤¬¼ÂÁõ¤µ¤ì¤Æ¤ª¤ê¡¢Âиþ¥¹¥Þ¥Û¥¢¥×¥ê¤È¤Î´Ö¤ÇÁÐÊý¸þ¤Î¤ä¤ê¤È¤ê¤¬²Äǽ¤Ê¤Ä¤¯¤ê¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£


    ¥Ç¥Ð¥¤¥¹ A ¤Î UI

    ÁàºîÆâÍÆ

    ¥Ç¥Ð¥¤¥¹ A ¤È Android üËö¤ò»È¤Ã¤Æ°Ê²¼¤ÎÁàºî¤ò¹Ô¤¤¥¹¥Ë¥Õ¥¡¤Ç BLE ¥Ñ¥±¥Ã¥È¤Î¥í¥°¤òºÎ¼è¤·¤Þ¤·¤¿¡£

    1. ¥Ç¥Ð¥¤¥¹ A ¤ÎÅŸ»¤òÆþ¤ì¤ë
    2. Android üËö¾å¤ÎÂиþ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹¤òõº÷¤·¥Ç¥Ð¥¤¥¹ A ¤È¤ÎÀܳ¤ò³ÎΩ
    3. ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹ A ¤Î LED¡Ü¥Ö¥¶¡¼¤ò ON ¤Ë¤¹¤ë
    4. ¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó¤ò²¡¤·¥¢¥×¥ê¤ØÄÌÃΤòÁ÷¤ë
    5. ¥¢¥×¥ê¾å¤Ç¥Ç¥Ð¥¤¥¹ A ¤È¤ÎÀܳ¤òÀÚÃÇ

    ±þ½·¤ÎÁ´ÂÎÁü

    ¥¹¥Ë¥Õ¥¡¤Î Wireshark ¥í¥°¤è¤ê

    ¾å¤ÎÁàºî»þ¤Ë¼ý½¸¤·¤¿¥Ñ¥±¥Ã¥È¥í¥°¤ÎÁ´ÂοޤǤ¹¡£   ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

        

    Í×Ìó

    ¥Ñ¥±¥Ã¥È¥í¥°¤ÎÆâÍÆ¤ÎÍ×Ìó¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£   ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    1. ¥Ç¥Ð¥¤¥¹ A ¤ÎÅŸ»¤òÆþ¤ì¤ë
      • ¥Ç¥Ð¥¤¥¹ A ¤¬¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¤ò³«»Ï (ADV_IND)
    2. ¥¹¥Þ¥Û¾å¤ÎÂиþ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹¤òõº÷¤·¥Ç¥Ð¥¤¥¹ A ¤È¤ÎÀܳ¤ò³ÎΩ
      • ¥Ç¥Ð¥¤¥¹¤Î¥¹¥­¥ã¥ó (SCAN_REQ / SCAN_RSP) ¤ò·Ð¤ÆÀܳÍ×µá (CONNECT_REQ) ¡ÁÀܳ¤¬³ÎΩ¤¹¤ë¤È¥Ç¥Ð¥¤¥¹ A ¤Ï¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¤òÄä»ß
      • µ¡Ç½¾ðÊó¤ò¸ò´¹ (LL_FEATURE_REQ / LL_FEATURE_RSP)
      • ¥Ç¥Ð¥¤¥¹ A ¤ÎÄ󶡤¹¤ë GATT ¥×¥é¥¤¥Þ¥ê¥µ¡¼¥Ó¥¹°ìÍ÷¤ò¼èÆÀ
      • ³Æ¥µ¡¼¥Ó¥¹ÇÛ²¼¤Î¥¨¥ó¥È¥ê¡ÊIncluded Service, ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡Ë°ìÍ÷¤ò¼èÆÀ
      • ³Æ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ÇÛ²¼¤Î¥Ç¥¹¥¯¥ê¥×¥¿¤ò¼èÆÀ
      • ¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿»þ¤ËÄÌÃΤµ¤ì¤ë¤è¤¦½êÄê¤Î Client Characteristic Configuration descriptor ¤Ø¥¢¥×¥ê¤«¤é Notification Bit 0x0001 ¤ò½ñ¤­¹þ¤à
    3. ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹ A ¤Î LED¡Ü¥Ö¥¶¡¼¤ò ON ¤Ë¤¹¤ë
      • ¥¢¥×¥ê¾å¤Î½êÄê¤Î¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¥¿¥¤¥ß¥ó¥°¤Ç¥¢¥×¥ê¤Ï¥Ç¥Ð¥¤¥¹ A ¤Î Immediate Alert ¥µ¡¼¥Ó¥¹ÇÛ²¼¤Î Alert Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ØÃÍ 2 (High Alert)¤ò½ñ¤­¹þ¤à¡£¤³¤ì¤Ë¤è¤ê°ìÄê»þ´Ö A ¤Î LED ¤È¥Ö¥¶¡¼¤¬ ON ¤Ë¤Ê¤ë
    4. ¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó¤ò²¡¤·¥¢¥×¥ê¤ØÄÌÃΤòÁ÷¤ë
      • ¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¥¿¥¤¥ß¥ó¥°¤Ç¥Ç¥Ð¥¤¥¹ A ¤Ï¼«µ¡¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1 (UUID=0xFFE0) ÇÛ²¼¤Î¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ (UUID=0xFFE1) ¤ØÃÍ 1 ¤ò½ñ¤­¹þ¤à¡£Åö³º¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ÇÛ²¼¤Î Client Characteristic Configuration descriptor ¤Ë¤Ï¥¢¥×¥ê¦¤«¤éͽ¤á Notification Bit ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤¿¤á¥¢¥×¥ê¤ØÄÌÃΤµ¤ì¤ë
    5. ¥¢¥×¥ê¾å¤Ç¥Ç¥Ð¥¤¥¹ A ¤È¤ÎÀܳ¤òÀÚÃÇ
      • ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹ A ¤Ø LL_TERMINATE_IND ¤òÁ÷¤ë

    ±þ½·¤Î¾ÜºÙ

    Á´ÂΤÎή¤ì¤ò¸«ÅϤ·¤¿¤È¤³¤í¤Ç¼¡¤Ë¸Ä¡¹¤Î¥Ñ¥±¥Ã¥È¥Ç¡¼¥¿¤òÆÉ¤ß¿Ê¤á¤Æ¤¤¤­¤Þ¤¹¡£

    • °Ê²¼¤Îµ­»ö¤Ë¤Ï Wireshark ¤Î¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤ò¥í¥°¤È¤·¤ÆÅº¤¨¤Æ¤¤¤Þ¤¹  ¡Ê¤½¤ì¤¾¤ì¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë
    • ¥í¥°¤Ë¤Ï BLE ¥Ñ¥±¥Ã¥È¥Ç¡¼¥¿ËÜÂΤ˲ä¨ nRF Sniffer ¤¬²òÀϤÎÊØµ¹¤Î¤¿¤á¤Ë¥í¥°¤Ø½ÐÎϤ¹¤ë¡ÖNordic BLE sniffer meta¡×¥Ø¥Ã¥À¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹
      • nRF Sniffer User Guide v1.1 (PDF) - www.nordicsemi.com Page 8 ¤è¤ê
        4   Using Wireshark
        
        All BLE packets detected by the Sniffer are passed to Wireshark and are
        wrapped in a header which contains useful meta-information not present
        in the BLE packet itself. Wireshark dissects the packets and separates
        the actual packet from the meta-information.
                     :
        
    • µ­»ö¤Ë¤Ï²¼µ­»ñÎÁ¤«¤é¤ÎÈ´¿è¤Ø¤Î¥ê¥ó¥¯¤ò»²¾ÈÍѤËŬµ¹ÁÞÆþ¤·¤Æ¤¤¤Þ¤¹
    • ¿ï½ê¤Ë¡Öhttps://developer.bluetooth.org/gatt/¡×²¼¤Î¥µ¡¼¥Ó¥¹¡¦¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Îµ­»ö¤Ø¤Î¥ê¥ó¥¯¤òÄ¥¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢2016ǯ7·îº¢¤Þ¤Ç¤Ï»²¾È²Äǽ¤À¤Ã¤¿³Æµ­»ö¤¬¸½ºß¤Ï¥ê¥ó¥¯ÀÚ¤ì¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡ÊºÆ¹½À®Ãæ¡©¡Ë¡¢¤µ¤é¤Ë¸½»þÅÀ¤Ç¤ÏÂåÂØ¥Ú¡¼¥¸¤¬¸«Åö¤¿¤é¤Ê¤¤¤¿¤á¥ê¥ó¥¯Àè¤Ï¤ä¤à¤Ê¤¯ http://web.archive.org/ ¾å¤Î¥­¥ã¥Ã¥·¥å¤È¤·¤Æ¤¤¤Þ¤¹¡£¤¿¤À¤· web.archive.org ¾å¤Ë¤âÊݸÍúÎò¤Î¤Ê¤¤µ­»ö¤Ë¤Ä¤¤¤Æ¤Ï°ì³¬Áؾå¤Î¥Ú¡¼¥¸¤Ø¤Î¥ê¥ó¥¯¤òÄ¥¤Ã¤Æ¤¤¤Þ¤¹
      Îã¡§¡ÖLink Loss¡×¥µ¡¼¥Ó¥¹¤ÎñÆÈ¥Ú¡¼¥¸¤Î¥­¥ã¥Ã¥·¥å¤Ï web.archive.org ¤Ë¤â¸«Åö¤¿¤é¤Ê¤¤¤¿¤á¡¢¾å°Ì¤Î¥µ¡¼¥Ó¥¹°ìÍ÷¥Ú¡¼¥¸¤Î¥­¥ã¥Ã¥·¥å¤ò¥¿¡¼¥²¥Ã¥È¤Ë

    ¶ÉÌÌ

    Scene 1: ¥Ç¥Ð¥¤¥¹ A ¤Î¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¤È SCAN_REQ / SCAN_RSP

    Frame 124 - 126 ¤Ï¥Ç¥Ð¥¤¥¹ A ȯ¤Î¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Ñ¥±¥Ã¥È

    • Á´ 40 ¥Á¥ã¥Í¥ë¤Î¤¦¤Á¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Ñ¥±¥Ã¥ÈÍѤΠ37, 38, 39 ¤Î 3 ¥Á¥ã¥Í¥ë¤¬½ç¼¡»ÈÍѤµ¤ì¤Æ¤¤¤ë¤³¤È¤¬¸«¤Æ¤È¤ì¤ë
    • ¡Ö0x8e89bed6¡×¤Î Access Address ¤Ï¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¥Á¥ã¥Í¥ë¥Ñ¥±¥Ã¥È¤Ç»ÈÍѤµ¤ì¤ë¸ÇÄêÃÍ
    • ¥Ç¥Ð¥¤¥¹ A ¤Î¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°¤Î¥¿¥¤¥×¤Ï Connectable Undirected¡Ê¾ÜºÙ¡§ 1, 2, 3, 4¡Ë ¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹°ìÈÌŪ¤Ê¡ÖADV_IND¡×¤Ç¤¢¤ë
    • ¡ÖAdvertising Data: 020106020a000702031802180418¡×¤Ë´Þ¤Þ¤ì¤ëÉÔ´°Á´ 16¥Ó¥Ã¥È¥µ¡¼¥Ó¥¹¥¯¥é¥¹ UUID ¤Ï¼¡¤ÎÆâÍÆ
      • 16 bit uuid: 0x1803 --> ´ûÄê¤Î¡ÖLink Loss¡×¥µ¡¼¥Ó¥¹
      • 16 bit uuid: 0x1802 --> ´ûÄê¤Î¡ÖImmediate Alert¡×¥µ¡¼¥Ó¥¹
      • 16 bit uuid: 0x1804 --> ´ûÄê¤Î¡ÖTx Power¡×¥µ¡¼¥Ó¥¹
    Frame 124

        

    Frame 125

        

    Frame 126

        

    Frame 127

    Àܳ¤ËºÝ¤·Âиþ¥¢¥×¥ê¤¬¥Ç¥Ð¥¤¥¹ A ¤ËÂФ·¤Æ SCAN_REQ ¤òȯ¹Ô

        

    Frame 128

    ¥Ç¥Ð¥¤¥¹ A ¤¬Âиþ¥¢¥×¥ê¤«¤é¤Î SCAN_REQ ¤ËÂФ· SCAN_RSP ¤òÊÖ¿®¡£¤³¤³¤Ç¤Ï ScanRspData ¤È¤·¤Æ¥Ç¥Ð¥¤¥¹¤Î¥í¡¼¥«¥ë¥Í¡¼¥à¤¬ÅϤµ¤ì¤Æ¤¤¤ë

        

    Scene 2: Àܳ¤Î³ÎΩ¤È¾ðÊó¸ò´¹

    Frame 217

    Âиþ¥¢¥×¥ê¤¬¥Ç¥Ð¥¤¥¹ A ¤ËÂФ·¤Æ CONNECT_REQ¡Ê¾ÜºÙ¡§1a, 2a, 1b, 2b¡Ë¤òȯ¹Ô¤·¤ÆÀܳ¤ò»î¤ß¤ë

    • ¡ÖConnection Request¡×Ãæ¤Î¡ÖConnection Access Address¡×¤Ë¤Ï¡¢Àܳ³ÎΩ¸å¤Î¥Ç¡¼¥¿ÄÌ¿®¤Ë¤ª¤¤¤Æ Access Address ¤È¤·¤ÆÁÐÊý¤¬°ì°Õ¤Ë»ÈÍѤ¹¤ëǤ°Õ¤Î¥¢¥É¥ì¥¹¤¬´Þ¤Þ¤ì¤ë¡£¤³¤³¤Ç¤Ï¡Ö0xa6a188c8¡×
    • ¡ÖConnection Request¡×Ãæ¤Î¡ÖChannel map¡×¤Ë¤ÏÀܳ³ÎΩ¸å¤Î¥Ç¡¼¥¿ÄÌ¿®¤Ç»ÈÍѤ¹¤ë¥Á¥ã¥Í¥ëÈÖ¹æ¤Î¥ê¥¹¥È¤¬Ä󼨤µ¤ì¤ë¡£¤³¤³¤Ç¤Ï 0 - 36 ¤ÎÁ´¥Ç¡¼¥¿¥Á¥ã¥Í¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë
    • ¤½¤Î¾¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ä¤¤¤Æ¤Ï¾å¤Î¥ê¥ó¥¯¤Î»ñÎÁ¤ò»²¾È¤Î¤³¤È
    • CONNECT_REQ ¤ËÂФ¹¤ëľÀܤΥ쥹¥Ý¥ó¥¹¤ÏȯÀ¸¤·¤Ê¤¤¡£Àܳ¤¬³ÎΩ¤¹¤ë¤È¥Ç¡¼¥¿ÄÌ¿®¥¢¥¤¥É¥ë»þ¤Ë¥¹¥ì¡¼¥Ö - ¥Þ¥¹¥¿´Ö¤Ç¶õ¥Ñ¥±¥Ã¥È¡ÊEmpty PDU¡Ë¤Î±þ½·¤¬»Ï¤Þ¤ë¤¿¤á¤³¤ì¤¬ÀܳÀ®ÈݤÎȽÄê¤ËÍѤ¤¤é¤ì¤ë

        

    Frame 218, 224 ¤ÏÀܳ³ÎΩ¸å¤ÎºÇ½é¤Î±þ½·¡£Àܳ¤¬³ÎΩ¤¹¤ë¤ÈÂиþ¥¢¥×¥ê¤Ï¥Þ¥¹¥¿¡¢¥Ç¥Ð¥¤¥¹ A ¤Ï¥¹¥ì¡¼¥Ö¤Î°ÌÃ֤Ť±¤È¤Ê¤ë¡£¤³¤³¤Ç¤Ï ¥ê¥ó¥¯ÁØÀ©¸æ PDU ¤Î LL_FEATURE_REQ ¤ª¤è¤Ó LL_FEATURE_RSP ¤Ë¤è¤ê¥Þ¥¹¥¿ - ¥¹¥ì¡¼¥Ö´Ö¤Ç Feature Exchange ¤ò¹Ô¤Ã¤Æ¤¤¤ë¡£¤³¤³¤Ç¤ÏÁÐÊý¤È¤â¡ÖSupported feature: LE Encryption (0)¡×¤Î¤ß¤òÄ󼨡ʤ¿¤À¤·¤³¤³¤Ç¤Ï°Ê¹ß¤ÎÄÌ¿®¤Ë¤ª¤¤¤Æ°Å¹æ²½¤Ï¹Ô¤ï¤ì¤Æ¤¤¤Ê¤¤¡Ë
    Frame 218

        

    Frame 224

        

    Frame 222 ¤Ç¤Ï¥¢¥×¥ê¦¤¬¡ÖDevice Name¡×¤òÍ׵ᤷ Frame 226 ¤Ç¥Ç¥Ð¥¤¥¹ A ¦¤¬¤½¤ì¤Ë±þ¤¨¤Æ¤¤¤ë¡£
    ¡ÖDevice Name¡×¤Ï¡¢´ûÄê¤Î Generic Access¡ÊGAP¡Ë¥µ¡¼¥Ó¥¹ÇÛ²¼¤Î´ûÄê¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0x2A00¡Ë¤Ç¤¢¤ê¡¢GATT ¥µ¡¼¥Ð¤Ïɬ¤º GAP ¥µ¡¼¥Ó¥¹¤ò´Þ¤ó¤Ç¤¤¤ë¡Ê¾ÜºÙ¡§1, 2¡Ë
    Frame 222

      Opcode: Read By Type Request (0x08)
      Starting Handle: 0x0001
      Ending Handle: 0xffff
      UUID: Device Name (0x2a00)

        

    Frame 226

      Opcode: Read By Type Response (0x09)
      Length: 6
      Attribute Data, Handle: 0x0003
          Handle: 0x0003
          Value: ********

        

    ¡ÊGAP ¥µ¡¼¥Ó¥¹¤ª¤è¤Ó Device Name ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ï¸å³¤Î Frame 231, Frame 266 ¤Ç¤¢¤é¤¿¤á¤ÆÉ½¤Ë¸½¤ì¤ë¡Ë

    Scene 3: ¥Ç¥Ð¥¤¥¹ A ¤Î GATT ¥µ¡¼¥Ó¥¹·²¤Î¼èÆÀ

    ¡ÊScene 3, Scene 4 ¶¦Ä̤δðÁÃÃμ±¡Ë
    BLUETOOTH SPECIFICATION Version 4.2(PDF) [Vol 3, Part G] ¤è¤ê
        2.6 GATT PROFILE HIERARCHY
           2.6.1 Overview, 2.6.2 Service, 2.6.3 Included Services, 2.6.4 Characteristic
      3 SERVICE INTEROPERABILITY REQUIREMENTS
         3.1 SERVICE DEFINITION, 3.2 INCLUDE DEFINITION, 3.3 CHARACTERISTIC DEFINITION
           3.3.1 Characteristic Declaration
             3.3.1.1 Characteristic Properties, 3.3.1.2 Characteristic Value Attribute Handle, 3.3.1.3 Characteristic UUID
           3.3.2 Characteristic Value Declaration

    ½é´ü½èÍý¤È¤·¤Æ¡¢¥Þ¥¹¥¿¤Ï¥¹¥ì¡¼¥Ö¤ÎÄ󶡤¹¤ë¥µ¡¼¥Ó¥¹°ìÍ÷¤ò¼èÆÀ¤¹¤ë¡¡¡Ê¾ÜºÙ¡§1, 2, 3¡Ë

    • ¥¢¥×¥ê¦¤¬¡¢¥Ç¥Ð¥¤¥¹ A ¤Î GATT ¥µ¡¼¥Ð¤ÎÄ󶡤¹¤ë¸ø³«¥µ¡¼¥Ó¥¹¡Ê¥×¥é¥¤¥Þ¥ê¥µ¡¼¥Ó¥¹¡Ë¤ÎÌä¹ç¤»¤ò³«»Ï¡£ °Ê¹ß¡¢GATT ¥µ¡¼¥Ð¾å¤Î½êÄê¤Î¥µ¡¼¥Ó¥¹¤Ø¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Î¥Ï¥ó¥É¥ë¤Î¥¢¥É¥ì¥¹¤ÈÅö³º¥µ¡¼¥Ó¥¹¤Î¼ïÎà¤ò¼±Ê̤¹¤ë UUID ¤ò½ç¼¡¼èÆÀ¤¹¤ë
    • ¥Ï¥ó¥É¥ë¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ï 0x0000 - 0xFFFF ¤Ç¤¢¤ê GATT ¥µ¡¼¥Ð¦¤Î±þÅú¤Ë±þ¤¸¤Æ¾È²ñÈϰϤò¹Ê¤Ã¤Æ¤¤¤¯


        ¡Ê¿Þ¤Ï ¡ÖBLUETOOTH SPECIFICATION Version 4.2¡× ¤è¤ê°úÍÑ¡Ë

    Frame 229

    ¤Þ¤º¥Ï¥ó¥É¥ë 0x0001 - 0xffff Á´ÈϰϤˤĤ¤¤Æ¥×¥é¥¤¥Þ¥ê¥µ¡¼¥Ó¥¹¤ò¾È²ñ

        Opcode: Read By Group Type Request (0x10)
        Starting Handle: 0x0001
        Ending Handle: 0xffff
        UUID: GATT Primary Service Declaration (0x2800)

        

    Frame 231

    °Ê²¼¤Î¤ß¤Ã¤Ä¤Î¥µ¡¼¥Ó¥¹¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0001 - 0x000b¡§´ûÄê¤Î¡ÖGeneric Access¡×¥µ¡¼¥Ó¥¹¡ÊUUID = 0x1800¡Ë¤¬»ÈÍÑ
    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x000c - 0x000f¡§´ûÄê¤Î¡ÖGeneric Attribute¡×¥µ¡¼¥Ó¥¹¡ÊUUID = 0x1801¡Ë¤¬»ÈÍÑ
    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0010 - 0x0022¡§´ûÄê¤Î¡ÖDevice Information¡×¥µ¡¼¥Ó¥¹¡ÊUUID = 0x180A¡Ë¤¬»ÈÍÑ

        Opcode: Read By Group Type Response (0x11)
        Length: 6
        Attribute Data, Handle: 0x0001, Group End Handle: 0x000b
            Handle: 0x0001
            Group End Handle: 0x000b
            Value: 0018
        Attribute Data, Handle: 0x000c, Group End Handle: 0x000f
            Handle: 0x000c
            Group End Handle: 0x000f
            Value: 0118
        Attribute Data, Handle: 0x0010, Group End Handle: 0x0022
            Handle: 0x0010
            Group End Handle: 0x0022
            Value: 0a18

        

    Frame 235

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x0023 - 0xffff ÈϰϤΥץ饤¥Þ¥ê¥µ¡¼¥Ó¥¹¤ò¾È²ñ

        

    Frame 238

    °Ê²¼¤Î¤ß¤Ã¤Ä¤Î¥µ¡¼¥Ó¥¹¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0023 - 0x0025¡§´ûÄê¤Î¡ÖImmediate Alert¡×¥µ¡¼¥Ó¥¹¡ÊUUID = 0x1802¡Ë¤¬»ÈÍÑ
    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0026 - 0x002a¡§´ûÄê¤Î¡ÖTx Power¡×¥µ¡¼¥Ó¥¹¡ÊUUID = 0x1804¡Ë¤¬»ÈÍÑ
    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x002b - 0x002d¡§´ûÄê¤Î¡ÖLink Loss¡×¥µ¡¼¥Ó¥¹¡ÊUUID = 0x1803¡Ë¤¬»ÈÍÑ

        

    Frame 242

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x002e - 0xffff ÈϰϤΥץ饤¥Þ¥ê¥µ¡¼¥Ó¥¹¤ò¾È²ñ

        

    Frame 247

    °Ê²¼¤Î¤ß¤Ã¤Ä¤Î¥µ¡¼¥Ó¥¹¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x002e - 0x0032¡§´ûÄê¤Î¡ÖBattery Service¡×¥µ¡¼¥Ó¥¹¡ÊUUID = 0x180F¡Ë¤¬»ÈÍÑ
    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0033 - 0x0037¡§¥æ¡¼¥¶ÄêµÁ¤Î¥µ¡¼¥Ó¥¹ 1¡ÊUUID = 0xFFE0¡Ë¤¬»ÈÍÑ
    • ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0038 - 0x003a¡§¥æ¡¼¥¶ÄêµÁ¤Î¥µ¡¼¥Ó¥¹ 2¡ÊUUID = 0xFFF0¡Ë¤¬»ÈÍÑ

        

    Frame 250

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x003b - 0xffff ÈϰϤΥץ饤¥Þ¥ê¥µ¡¼¥Ó¥¹¤ò¾È²ñ

        

    Frame 253

    ¡ÖAttribute Not Found (0x0a)¡×¤Î¥¨¥é¡¼¤¬Ê֤롣¤³¤ì°Ê¾å¥×¥é¥¤¥Þ¥ê¥µ¡¼¥Ó¥¹¤¬Â¸ºß¤·¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£¥µ¡¼¥Ó¥¹¤Î¾È²ñ¤Ï¤³¤³¤Þ¤Ç

        Opcode: Error Response (0x01)
        Request Opcode in Error: Read By Group Type Request (0x10)
        Handle in Error: 0x003b
        Error Code: Attribute Not Found (0x0a)

        

    Scene 4: ¥Ç¥Ð¥¤¥¹ A ³Æ¥µ¡¼¥Ó¥¹ÇÛ²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ - ¥Ç¥¹¥¯¥ê¥×¥¿¤Î¼èÆÀ

    ¡ÊScene 3, Scene 4 ¶¦Ä̤δðÁÃÃμ±¡Ë
    BLUETOOTH SPECIFICATION Version 4.2(PDF) [Vol 3, Part G] ¤è¤ê
        2.6 GATT PROFILE HIERARCHY
           2.6.1 Overview, 2.6.2 Service, 2.6.3 Included Services, 2.6.4 Characteristic
      3 SERVICE INTEROPERABILITY REQUIREMENTS
         3.1 SERVICE DEFINITION, 3.2 INCLUDE DEFINITION, 3.3 CHARACTERISTIC DEFINITION
           3.3.1 Characteristic Declaration
             3.3.1.1 Characteristic Properties, 3.3.1.2 Characteristic Value Attribute Handle, 3.3.1.3 Characteristic UUID
           3.3.2 Characteristic Value Declaration

    ¼¡¤Ë¡¢¼ý½¸¤º¤ß¤Î³Æ¥×¥é¥¤¥Þ¥ê¥µ¡¼¥Ó¥¹¤Î¥Ï¥ó¥É¥ë¥°¥ë¡¼¥×¤´¤È¤Ë°Ê²¼¤ò¹Ô¤¦¡¡¡Ê¾ÜºÙ¡§1, 2, 3, 4, 5, 6¡Ë

    • ½êÄê¤Î¥µ¡¼¥Ó¥¹¤Ë´Þ¤Þ¤ì¤ë Included Service ¤Î¾È²ñ


        ¡Ê¿Þ¤Ï ¡ÖBLUETOOTH SPECIFICATION Version 4.2¡× ¤è¤ê°úÍÑ¡Ë

    • ½êÄê¤Î¥µ¡¼¥Ó¥¹¤Ë´Þ¤Þ¤ì¤ë¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾È²ñ


        ¡Ê¿Þ¤Ï ¡ÖBLUETOOTH SPECIFICATION Version 4.2¡× ¤è¤ê°úÍÑ¡Ë

      • ½êÄê¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ë´Þ¤Þ¤ì¤ë¥Ç¥¹¥¯¥ê¥×¥¿¤Î¾È²ñ


          ¡Ê¿Þ¤Ï ¡ÖBLUETOOTH SPECIFICATION Version 4.2¡× ¤è¤ê°úÍÑ¡Ë

    Frame 255

    Á°·Ç¤Î Frame 231 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0001 - 0x000b ¤Î¡ÖGeneric Access¡×¥µ¡¼¥Ó¥¹Æâ¤Î Included Service ¤ò¾È²ñ

        Opcode: Read By Type Request (0x08)
        Starting Handle: 0x0001
        Ending Handle: 0x000b
        UUID: GATT Include Declaration (0x2802)

        

    Frame 259

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë Included Service ¤Ï¸ºß¤·¤Ê¤¤¡ÊÃí¡§¿Þ¤Î¥í¥°¤Ç¤Ï¥¹¥Ë¥Õ¥¡¤¬¥Ñ¥±¥Ã¥È¥Ç¡¼¥¿¤ò¼è¤ê¤³¤Ü¤·¤Æ¤¤¤ë¡Ë

        

    Frame 262

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0001 - 0x000b ¤Î¡ÖGeneric Access¡×¥µ¡¼¥Ó¥¹Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        Opcode: Read By Type Request (0x08)
        Starting Handle: 0x0001
        Ending Handle: 0x000b
        UUID: GATT Characteristic Declaration (0x2803)

        

    Frame 266

    °Ê²¼¤Î¤ß¤Ã¤Ä¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    ¡Ê¢¨¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯ ¤Î Value ¥Õ¥£¡¼¥ë¥É¤Î¹½À®¤ÏÁ°·Ç¤Î¡ÖBLUETOOTH SPECIFICATION Version 4.2] - [Vol 3, Part G] p.532 ¡Ö3.3.1 Characteristic Declaration¡× ¤Ë¡¢¥×¥í¥Ñ¥Æ¥£ÃͤΰÕÌ£¤ÏƱ¤¸¤¯ p.533 ¡Ö3.3.1.1 Characteristic Properties¡× ¤ËÀâÌÀ¤¢¤ê¡Ë

    • ¥Ï¥ó¥É¥ë¡§0x0002
      ¡Övalue: 080300002a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x08 (Write), Characteristic Value Handle = 0x0003
      UUID = 0x2A00 = ´ûÄê¤Î¡ÖDevice Name¡×
    • ¥Ï¥ó¥É¥ë¡§0x0004
      ¡Övalue: 020500012a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0005
      UUID = 0x2A01 = ´ûÄê¤Î¡ÖAppearance¡×
    • ¥Ï¥ó¥É¥ë¡§0x0006
      ¡Övalue: 020700042a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0007
      UUID = 0x2A04 = ´ûÄê¤Î¡ÖPeripheral Preferred Connection Parameters¡×

        Opcode: Read By Type Response (0x09)
        Length: 7
        Attribute Data, Handle: 0x0002
          Handle: 0x0002
          Value: 080300002a
        Attribute Data, Handle: 0x0004
          Handle: 0x0004
          Value: 020500012a
        Attribute Data, Handle: 0x0006
          Handle: 0x0006
          Value: 020700042a

        

    Frame 270

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x0007 - 0x000b ÈϰϤΥ­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 275

    °Ê²¼¤Î¤Õ¤¿¤Ä¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x0008
      ¡Övalue: 020900022a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0009
      UUID = 0x2A02 = ´ûÄê¤Î¡ÖPeripheral Privacy Flag¡×
    • ¥Ï¥ó¥É¥ë¡§0x000a
      ¡Övalue: 020b00032a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x000b
      UUID = 0x2A03 = ´ûÄê¤Î¡ÖReconnection Address¡×

        

    Frame 279

    Á°·Ç¤Î Frame 231 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x000c - 0x000f ¤Î¡ÖGeneric Attribute¡×¥µ¡¼¥Ó¥¹Æâ¤Î Included Service ¤ò¾È²ñ

        

    Frame 284

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë Included Service ¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 287

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x000c - 0x000f ¤Î¡ÖGeneric Attribute¡×¥µ¡¼¥Ó¥¹Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 289

    °Ê²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x000d
      ¡Övalue: 200e00052a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x20 (Indicate), Characteristic Value Handle = 0x000e
      UUID = 0x2A52 = ´ûÄê¤Î¡ÖService Changed¡×

        

    Frame 293

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x000e - 0x000f ÈϰϤΥ­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 298

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë¤Ï¤³¤ì°Ê¾å¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 302

    Frame 289 ¤Î¼¨¤¹Ä̤ê 0x0000e ¤Ï Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Value Handle ¤Ç¤¢¤ê¡¢»Ä¤ë0x000f ¤Ë´Ø¤¹¤ë¾ðÊó¤ò GATT ¤ËÌ䤤¹ç¤ï¤»¤Æ¤ß¤ë ¡Ê¾ÜºÙ¡§1, 2¡Ë

        Opcode: Find Information Request (0x04)
        Starting Handle: 0x000f
        Ending Handle: 0x000f

        

    Frame 305

    0x000f ¤Ï Service Changed ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Client Characteristic Configuration Descriptor (UUID = 0x2902¡Ë ¡Ê¾ÜºÙ¡§1, 2¡Ë ¤Ç¤¢¤ë»Ý¤Î¾ðÊ󤬯À¤é¤ì¤¿

        Opcode: Find Information Response (0x05)
        UUID Format: 16-bit UUIDs (0x01)
        Handle: 0x000f
        UUID: Client Characteristic Configuration (0x2902)

        

    Frame 308

    Á°·Ç¤Î Frame 231 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0010 - 0x0022 ¤Î¡ÖDevice Information¡×¥µ¡¼¥Ó¥¹Æâ¤Î Included Service ¤ò¾È²ñ

        

    Frame 312

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë Included Service ¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 315

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0010 - 0x0022 ¤Î¡ÖDevice Information¡×¥µ¡¼¥Ó¥¹Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 319

    °Ê²¼¤Î¤ß¤Ã¤Ä¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x00011
      ¡Övalue: 021200292a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0012
      UUID = 0x2A29 = ´ûÄê¤Î¡ÖManufacturer Name String¡×
    • ¥Ï¥ó¥É¥ë¡§0x00013
      ¡Övalue: 021400242a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0014
      UUID = 0x2A24 = ´ûÄê¤Î¡ÖModel Number String¡×
    • ¥Ï¥ó¥É¥ë¡§0x00015
      ¡Övalue: 021600252a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0014
      UUID = 0x2A25 = ´ûÄê¤Î¡ÖSerial Number String¡×

        

    Frame 323

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x0016 - 0x0022 ÈϰϤΥ­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 326

    °Ê²¼¤Î¤ß¤Ã¤Ä¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x00017
      ¡Övalue: 021800262a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0018
      UUID = 0x2A26 = ´ûÄê¤Î¡ÖFirmware Revision String¡×
    • ¥Ï¥ó¥É¥ë¡§0x00019
      ¡Övalue: 021a00272a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x001a
      UUID = 0x2A27 = ´ûÄê¤Î¡ÖHardware Revision String¡×
    • ¥Ï¥ó¥É¥ë¡§0x0001b
      ¡Övalue: 021c00282a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x001c
      UUID = 0x2A28 = ´ûÄê¤Î¡ÖSoftware Revision String¡×

        

    Frame 330

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x001c - 0x0022 ÈϰϤΥ­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 333

    °Ê²¼¤Î¤ß¤Ã¤Ä¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x0001d
      ¡Övalue: 021e00232a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x001e
      UUID = 0x2A23 = ´ûÄê¤Î¡ÖSystem ID¡×
    • ¥Ï¥ó¥É¥ë¡§0x0001f
      ¡Övalue: 0220002a2a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0020
      UUID = 0x2A2A = ´ûÄê¤Î¡ÖIEEE 11073-20601 Regulatory Certification Data List¡×
    • ¥Ï¥ó¥É¥ë¡§0x00021
      ¡Övalue: 022200502a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x02 (Read), Characteristic Value Handle = 0x0022
      UUID = 0x2A50 = ´ûÄê¤Î¡ÖPnP ID¡×

        

    Frame 337

    Á°·Ç¤Î Frame 238 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0023 - 0x0025 ¤Î¡ÖImmediate Alert¡×¥µ¡¼¥Ó¥¹Æâ¤Î Included Service ¤ò¾È²ñ
    ¡ÊÃí¡§¤³¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ëÀµ¤·¤¤¥ì¥¹¥Ý¥ó¥¹¤Ï¡ÖAttribute Not Found (0x0a)¡×¤À¤¬¡¢¥¹¥Ë¥Õ¥¡¼è¤ê¤³¤Ü¤·¤Î¤¿¤á¥í¥°¤¬·çÍ¤Æ¤¤¤ë¡Ë

        

    Frame 341

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0023 - 0x0025 ¤Î¡ÖImmediate Alert¡×¥µ¡¼¥Ó¥¹Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 345

    °Ê²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x0024
      ¡Övalue: 042500062a¡×¤è¤ê¡¢
      ¥×¥í¥Ñ¥Æ¥£ = 0x04 (Write without Response),
      Characteristic Value Handle = 0x0025
      UUID = 0x2A06 = ´ûÄê¤Î¡ÖAlert Level¡×

        

    Frame 349

    Á°·Ç¤Î Frame 238 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0026 - 0x002a ¤Î¡ÖTx Power¡×¥µ¡¼¥Ó¥¹Æâ¤Î Included Service ¤ò¾È²ñ
    ¡ÊÃí¡§¤³¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ëÀµ¤·¤¤¥ì¥¹¥Ý¥ó¥¹¤Ï¡ÖAttribute Not Found (0x0a)¡×¤À¤¬¡¢¥¹¥Ë¥Õ¥¡¼è¤ê¤³¤Ü¤·¤Î¤¿¤á¥í¥°¤¬·çÍ¤Æ¤¤¤ë¡Ë

        

    Frame 355

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0026 - 0x002a ¤Î¡ÖTx Power¡×¥µ¡¼¥Ó¥¹Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 359

    °Ê²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x0027
      ¡Övalue: 122800072a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x12 (Read | Notify), Characteristic Value Handle = 0x0028
      UUID = 0x2A07 = ´ûÄê¤Î¡ÖTx Power Level¡×

        

    Frame 362

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x0028 - 0x002a ÈϰϤΥ­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 366

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë¤Ï¤³¤ì°Ê¾å¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 369

    Frame 359 ¤Î¼¨¤¹Ä̤ê 0x00028 ¤Ï Tx Power Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Value Handle ¤Ç¤¢¤ê¸å³¤Î 0x0029 - 0x002a ¤Ë´Ø¤¹¤ë¾ðÊó¤ò GATT ¤ËÌ䤤¹ç¤ï¤»¤Æ¤ß¤ë ¡Ê¾ÜºÙ¡§1, 2¡Ë

        

    Frame 373

    0x0029 ¤Ï Tx Power Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Client Characteristic Configuration Descriptor (UUID = 0x2902¡Ë ¡Ê¾ÜºÙ¡§1, 2¡Ë ¤Ç¤¢¤ë»Ý¤Î¾ðÊ󤬯À¤é¤ì¤¿

        

    Frame 376

    »Ä¤ë0x002a ¤Ë´Ø¤¹¤ë¾ðÊó¤ò GATT ¤ËÌ䤤¹ç¤ï¤»¤Æ¤ß¤ë ¡Ê¾ÜºÙ¡§1, 2¡Ë

        

    Frame 380

    0x002a ¤Ï Tx Power Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Characteristic Presentation Format Descriptor (UUID = 0x2904¡Ë ¡Ê¾ÜºÙ¡§1, 2, 3, 4¡Ë ¤Ç¤¢¤ë»Ý¤Î¾ðÊ󤬯À¤é¤ì¤¿

        Opcode: Find Information Response (0x05)
        UUID Format: 16-bit UUIDs (0x01)
        Handle: 0x002a
        UUID: Characteristic Presentation Format (0x2904)

        

    Frame 384

    Á°·Ç¤Î Frame 238 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x002b - 0x002d ¤Î¡ÖLink Loss¡×¥µ¡¼¥Ó¥¹Æâ¤Î Included Service ¤ò¾È²ñ
    ¡ÊÃí¡§¤³¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ëÀµ¤·¤¤¥ì¥¹¥Ý¥ó¥¹¤Ï¡ÖAttribute Not Found (0x0a)¡×¤À¤¬¡¢¥¹¥Ë¥Õ¥¡¼è¤ê¤³¤Ü¤·¤Î¤¿¤á¥í¥°¤¬·çÍ¤Æ¤¤¤ë¡Ë

        

    Frame 390

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x002b - 0x002d ¤Î¡ÖLink Loss¡×¥µ¡¼¥Ó¥¹Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 392

    °Ê²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x002c
      ¡Övalue: 0a2d00062a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x0a (Read | Write), Characteristic Value Handle = 0x002d
      UUID = 0x2A06 = ´ûÄê¤Î¡ÖAlert Level¡×

        

    Frame 395

    Á°·Ç¤Î Frame 247 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x002e - 0x0032 ¤Î¡ÖBattery Service¡×¥µ¡¼¥Ó¥¹Æâ¤Î Included Service ¤ò¾È²ñ

        

    Frame 397

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë Included Service ¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 401

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x002e - 0x0032 ¤Î¡ÖBattery Service¡×¥µ¡¼¥Ó¥¹Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 404

    °Ê²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x002f
      ¡Övalue: 123000192a¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x12 (Read | Notify), Characteristic Value Handle = 0x0030
      UUID = 0x2A19 = ´ûÄê¤Î¡ÖBattery Level¡×

        

    Frame 407

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x0030 - 0x0032 ÈϰϤΥ­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 411

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë¤³¤ì°Ê¾å¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 415

    Frame 404 ¤Î¼¨¤¹Ä̤ê 0x00030 ¤Ï Battery Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Value Handle ¤Ç¤¢¤ê¸å³¤Î 0x0031 - 0x0032 ¤Ë´Ø¤¹¤ë¾ðÊó¤ò GATT ¤ËÌ䤤¹ç¤ï¤»¤Æ¤ß¤ë ¡Ê¾ÜºÙ¡§1, 2¡Ë

        

    Frame 420

    0x0031 ¤Ï Battery Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Client Characteristic Configuration Descriptor (UUID = 0x2902¡Ë ¡Ê¾ÜºÙ¡§1, 2¡Ë ¤Ç¤¢¤ë»Ý¤Î¾ðÊ󤬯À¤é¤ì¤¿

        

    Frame 423

    »Ä¤ë0x0032 ¤Ë´Ø¤¹¤ë¾ðÊó¤ò GATT ¤ËÌ䤤¹ç¤ï¤»¤Æ¤ß¤ë ¡Ê¾ÜºÙ¡§1, 2¡Ë

        

    Frame 427

    0x0032 ¤Ï Battery Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î Characteristic Presentation Format Descriptor (UUID = 0x2904¡Ë ¡Ê¾ÜºÙ¡§1, 2, 3, 4¡Ë ¤Ç¤¢¤ë»Ý¤Î¾ðÊ󤬯À¤é¤ì¤¿

        

    Frame 431

    Á°·Ç¤Î Frame 247 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0033 - 0x0037 ¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1¡ÊUUID = 0xFFE0¡ËÆâ¤Î Included Service ¤ò¾È²ñ

        

    Frame 434

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë Included Service ¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 437

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0033 - 0x0037 ¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1 Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 439

    °Ê²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x0034
      ¡Övalue: 103500e1ff¡×¤è¤ê¡¢
      ¥×¥í¥Ñ¥Æ¥£ = 0x10 (Notify),
      Characteristic Value Handle = 0x0035
      UUID = 0xFFE1 : ¥æ¡¼¥¶ÄêµÁ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯

        

    Frame 442

    ³¤±¤Æ¥Ï¥ó¥É¥ë 0x0035 - 0x0037 ÈϰϤΥ­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 446

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë¤³¤ì°Ê¾å¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 450

    Frame 439 ¤Î¼¨¤¹Ä̤ê 0x00035 ¤Ï¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë¤Î Value Handle ¤Ç¤¢¤ê¸å³¤Î 0x0036 - 0x0037 ¤Ë´Ø¤¹¤ë¾ðÊó¤ò GATT ¤ËÌ䤤¹ç¤ï¤»¤Æ¤ß¤ë ¡Ê¾ÜºÙ¡§1, 2¡Ë

        

    Frame 453

    0x0036 ¤Ï¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë¤Î Client Characteristic Configuration Descriptor (UUID = 0x2902¡Ë ¡Ê¾ÜºÙ¡§1, 2¡Ë ¤Ç¤¢¤ë»Ý¤Î¾ðÊ󤬯À¤é¤ì¤¿

        

    Frame 456

    »Ä¤ë0x0037 ¤Ë´Ø¤¹¤ë¾ðÊó¤ò GATT ¤ËÌ䤤¹ç¤ï¤»¤Æ¤ß¤ë ¡Ê¾ÜºÙ¡§1, 2¡Ë

        

    Frame 458

    0x0037 ¤Ï¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë¤Î Characteristic User Description Descriptor (UUID = 0x2901¡Ë¤Ç¤¢¤ë»Ý¤Î¾ðÊ󤬯À¤é¤ì¤¿

        

    Frame 462

    Á°·Ç¤Î Frame 247 ¤Î¼¨¤¹¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0038- 0x003a ¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 2¡ÊUUID = 0xFFF0¡ËÆâ¤Î Included Service ¤ò¾È²ñ

        

    Frame 465

    Åö³º¥µ¡¼¥Ó¥¹Æâ¤Ë Included Service ¤Ï¸ºß¤·¤Ê¤¤

        

    Frame 468

    ¥Ï¥ó¥É¥ë¥°¥ë¡¼¥× 0x0038 - 0x003a ¤Î¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 2 Æâ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ò¾È²ñ

        

    Frame 470

    °Ê²¼¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¾ðÊ󤬯À¤é¤ì¤¿

    • ¥Ï¥ó¥É¥ë¡§0x0039
      ¡Övalue: 043a00f1ff¡×¤è¤ê¡¢¥×¥í¥Ñ¥Æ¥£ = 0x04 (Write without Response), Characteristic Value Handle = 0x003a
      UUID = 0xFFF1 : ¥æ¡¼¥¶ÄêµÁ¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯

        

    Scene 5: ¥Ç¥Ð¥¤¥¹ A ¥Ü¥¿¥ó²¡²¼»þ¤Î¥¢¥×¥ê¤Ø¤ÎÄÌÃΤòÀßÄê

    Frame 491

    Frame 453¡¢Frame 439¡¢Frame 453 ¤Î¼¨¤¹Ä̤ꡢ¥Ï¥ó¥É¥ë 0x0036 ¤Ï¡¢ "¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1¡ÊUUID = 0xFFE0¡ËÇÛ²¼¤Î¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡ËÇÛ²¼¤Î Client Characteristic Configuration Descriptor (CCCD)" ¤Ç¤¢¤ë

    Åö³º¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë¤Î¥×¥í¥Ñ¥Æ¥£¤Ë¤Ï Notify ¤¬ÀßÄꤵ¤ì¤Æ¤ª¤ê¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ç¤¢¤ëÂиþ¥¢¥×¥ê¤«¤é CCCD 0x0036 ¤Ë Notification bit (0x0001) ¤ò½ñ¤­¹þ¤ó¤Ç¤ª¤¯¤³¤È¤Ç¡¢¤³¤Î¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ÎÃͤ¬¹¹¿·¤µ¤ì¤¿»þ¤Ë Value Handle ¤Ç¤¢¤ë 0x0035 ·Ðͳ¤Ç¥¢¥×¥ê¦¤ØÄÌÃΡÊNotification¡Ë¤¬¹Ô¤ï¤ì¤ë¤è¤¦¤Ë¤Ê¤ë
    ¡Ê¾ÜºÙ¡§ 1a, 2a, 1b, 2b¡Ë

        Opcode: Write Request (0x12)
        Handle: 0x0026
        Value: 0100

        

    Frame 495

        Opcode: Write Response (0x13)

        

    Scene 6: ¥¢¥×¥ê¤«¤é¥Ç¥Ð¥¤¥¹ A ¤Î LED¡¦¥Ö¥¶¡¼¤òÁàºî

    Frame 616

    Âиþ¥¢¥×¥ê¾å¤Î½êÄê¤Î¥Ü¥¿¥ó¤ò²¡²¼¤¹¤ë¤È¡¢Frame 345, Frame 238 ¤Î¼¨¤¹¡¢ "¡ÖImmediate Alert¡×¥µ¡¼¥Ó¥¹ÇÛ²¼¤Î¡ÖAlert Level¡×¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯" ¤Î Value Handle 0x0025 ¤ËÃÍ¡Ö2¡ÊHigh Alert¡Ë¡×¤¬½ñ¤­¹þ¤Þ¤ì¤ë

    ¥Ç¥Ð¥¤¥¹ A ¤Î LED¡¦¥Ö¥¶¡¼¤Ï¥Õ¥¡¡¼¥à¥¦¥§¥¢¥ì¥Ù¥ë¤Ç¤³¤Î Alert Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Ëɳ¤Å¤±¤é¤ì¤Æ¤¤¤ëÌÏÍÍ¡£High Alert Ãͤ¬½ñ¤­¹þ¤Þ¤ì¤ë¤È¤½¤ì¤ËÈ¿±þ¤·¤ÆÃ»»þ´Ö LED ¤È¥Ö¥¶¡¼¤¬ ON ¤Ë¤Ê¤ë

    ¤Ê¤ª¡¢Frame 345 ¤Î¼¨¤¹¤è¤¦¤Ë Alert Level ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤Î¥×¥í¥Ñ¥Æ¥£¤Ë¤Ï¡ÖWrite without Response¡×(0x04) ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤¿¤á¡¢¥¢¥×¥ê¤«¤éÃͤò½ñ¤­¹þ¤ó¤Ç¤â¥Ç¥Ð¥¤¥¹ A ¤«¤é¤Î¥ì¥¹¥Ý¥ó¥¹¤ÏȯÀ¸¤·¤Ê¤¤

        Opcode: Write Command (0x52)
        Handle: 0x0025
        Value: 02

        

    Scene 7: ¥Ç¥Ð¥¤¥¹ A ¤Î¥Ü¥¿¥ó¤ò²¡¤¹¤È¥¢¥×¥ê¤ØÄÌÃÎ

    Frame 711

    ¥Ç¥Ð¥¤¥¹ A ¤ÎʪÍý¥Ü¥¿¥ó¤Ï¥Õ¥¡¡¼¥à¥¦¥§¥¢¥ì¥Ù¥ë¤Ç Frame 439 ¤Î¼¨¤¹ "¥æ¡¼¥¶ÄêµÁ¥µ¡¼¥Ó¥¹ 1¡ÊUUID = 0xFFE0¡ËÇÛ²¼¤Î¥æ¡¼¥¶ÄêµÁ¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¡ÊUUID = 0xFFE1¡Ë" ¤Ëɳ¤Å¤±¤é¤ì¤Æ¤¤¤ëÌÏÍÍ¡£¤³¤Î¥Ü¥¿¥ó¤ò²¡¤¹¤ÈÅö³º¥­¥ã¥é¥¯¥¿¥ê¥¹¥Æ¥£¥Ã¥¯¤ÎÃͤ¬¥Ç¥Ð¥¤¥¹ÆâÉô¤Ç¹¹¿·¤µ¤ì Frame 491 ¤Ç¤Î»Å¹þ¤ß¤Ë´ð¤Å¤­¥¢¥×¥ê¦¤ØÄÌÃΤ¬¹Ô¤ï¤ì¤ë

        Opcode: Handle Value Notification (0x1b)
        Handle: 0x0035
        Value: 01

        

    Scene 8: ¥¢¥×¥ê¦¤«¤é¥Ç¥Ð¥¤¥¹ A ¤È¤ÎÀܳ¤òÀÚÃÇ

    Âиþ¥¢¥×¥ê¾å¤Î½êÄê¤Î¥Ü¥¿¥ó¤ò²¡²¼¤¹¤ë¤È¥ê¥ó¥¯ÁØÀ©¸æ PDU ¤Î LL_TERMINATE_IND (0x02) ¤¬¥Ç¥Ð¥¤¥¹ A ¦¤ËÁ÷½Ð¤µ¤ìξ¼Ô´Ö¤ÎÀܳ¤¬½ªÎ»¤¹¤ë¡Ê¾ÜºÙ¡§1, 2¡Ë

    Frame 779

        


    (tanabe)
    klab_gijutsu2 at 19:02¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    2016ǯ08·î18Æü

    µ»Å¬¥Þ¡¼¥¯¤Ä¤­ BLE ¥Ñ¥±¥Ã¥È¥¹¥Ë¥Õ¥¡¤òÆþ¼ê¤¹¤ë

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    Bluetooth Low Energy (BLE) ¤ÎÊÙ¶¯¤Î¤¿¤á¤Ë BLE ¥Ñ¥±¥Ã¥È¤òÇÁ¤¤¤Æ¤ß¤¿¤¤¤È»×¤¤¤Þ¤·¤¿¡£BLE ¤ÎÄÌ¿®¥×¥í¥È¥³¥ë¤ÏÊ£»¨¤Ç¤¹¤¬¡¢¥Ñ¥±¥Ã¥È¤ÎÆâÍÆ¤òŬµ¹Àººº¤¹¤ì¤ÐºÂ³ØÅª¤Ê¾ðÊó¤Î¸þ¤³¤¦Â¦¤Ë¤¢¤ë¼ÂÁü¤òª¤¨¤ë¤³¤È¤¬²Äǽ¤È¤Ê¤ë¤Ç¤·¤ç¤¦¡£

    ¹ñÆâ¤Ç¤Ï¼¡¤Î¤è¤¦¤Ê BLE ¥×¥í¥È¥³¥ë¥¢¥Ê¥é¥¤¥¶¤¬ÈÎÇ䤵¤ì¤Æ¤¤¤Þ¤¹¡£¤â¤Ã¤È¤â¤³¤¦¤¤¤Ã¤¿¿ôÉ´Ëü±ß¥ª¡¼¥À¡¼¤ÎÀìÍѵ¡¤Ë¤Ï¤Ê¤«¤Ê¤«¼ê¤ò½Ð¤»¤Þ¤»¤ó¡£

    ¤â¤Ã¤È¼ê·Ú¤ÊÊýË¡¤È¤·¤Æ¡¢BLE ¥Á¥Ã¥×¡¦¥â¥¸¥å¡¼¥ë¥Ù¥ó¥À¤ÎÄ󶡤¹¤ë¥Ñ¥±¥Ã¥È¥¹¥Ë¥Õ¥¡¤òÍøÍѤ¹¤ëÁªÂò¤¬¤¢¤ê¤Þ¤¹¡£ÂåɽŪ¤ÊÀ½Éʤò¥Ô¥Ã¥¯¥¢¥Ã¥×¤·¤Æ¤ß¤Þ¤¹¡£ 2016ǯ8·î»þÅÀ¤Ç¤ÏÆüËܹñÆâ¤ÇÀµµ¬¤ËήÄ̤·¤Æ¤¤¤ë BLE ¥Ñ¥±¥Ã¥È¥¹¥Ë¥Õ¥¡À½Éʤϸ«Åö¤¿¤ê¤Þ¤»¤ó¡£¤â¤Á¤í¤ó¹ñ³°¤«¤éĴ㤹¤ë¤³¤È¤Ï²Äǽ¤Ç¤¹¤¬¡¢ÅÅÇÈË¡¤Ë´ð¤Å¤¯µ»½Ñ´ð½àŬ¹ç¡Êµ»Å¬¡Ë¾ÚÌÀ¤È¤Î¤«¤Í¤¢¤¤¤¬µ¤¤Ë¤Ê¤ë¤È¤³¤í¤Ç¤¹¡£

    ¥Ñ¥±¥Ã¥È¥¹¥Ë¥Õ¥¡¤Èµ»Å¬

    ¤¿¤È¤¨¤Ð¡¢Á°·Ç¤Î Nordic Semiconductor ¼ÒÀ½¡ÖnRF51 Dongle¡×¤Ïµ»Å¬¾ÚÌÀ¤ò¼õ¤±¤Æ¤¤¤Ê¤¤¤¿¤á¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¤¬¼¡¤Î¤è¤¦¤ËÃí°Õ¤òÂ¥¤·¤Æ¤¤¤Þ¤¹¡£

    • nRF51 USB dongle for emulator,firmware - jp.rs-online.com
      ·Ù¹ð
      
      Ëܳ«È¯¥­¥Ã¥È¤Ïµ»½Ñ´ð½àŬ¹ç¾ÚÌÀ¤ò¼õ¤±¤Æ¤ª¤ê¤Þ¤»¤ó¡£ËÜÀ½ÉʤΤ´»ÈÍѤ˺ݤ·¤Æ¤Ï¡¢
      ÅÅÇÈË¡½å¼é¤Î¤¿¤á¡¢°Ê²¼¤Î¤¤¤º¤ì¤«¤ÎÁ¼ÃÖ¤ò¼è¤Ã¤Æ¤¤¤¿¤À¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¤Î¤Ç
      ¤´Ãí°Õ¤¯¤À¤µ¤¤¡£
      
       - ÅÅÇÈË¡»Ü¹Ôµ¬Â§Âè 6 ¾òÂè 1 ¹àÂè 1 ¹æ¤Ë´ð¤Å¤¯Ê¿À® 18 ǯ 3 ·î 28 ÆüÁí̳¾Ê¹ð¼¨
         Âè 173 ¹æ¤ÇÄê¤á¤é¤ì¤¿ÅÅÇȰż¼Åù¤Î»î¸³ÀßÈ÷Æâ¤Ç»ÈÍѤ¹¤ë¡£
       - ¼Â¸³¶É¤ÎÌȵö¤ò¼èÆÀ¤·¤¿¤Î¤Á»ÈÍѤ¹¤ë¡£
       - µ»½Ñ´ð½àŬ¹ç¾ÚÌÀ¤ò¼èÆÀ¤·¤¿¤Î¤Á»ÈÍѤ¹¤ë¡£
      
    ¤¿¤À¡¢ÅÅÇÈË¡¤Ï¼õ¿®¤Î¤ß¤òÌÜŪ¤È¤¹¤ë¤â¤Î¤òµ¬À©Âоݳ°¤È¤·¤Æ¤¤¤Þ¤¹¡£
    • ÅÅÇÈË¡ ¡ÊºÇ½ª²þÀµ¡§Ê¿À®Æó¼·Ç¯¸Þ·îÆóÆóÆüˡΧÂèÆóÏ»¹æ¡Ë - law.e-gov.go.jp
      ¡¡¡¡¡¡Âè°ì¾Ï¡¡Áí§
                :
      ÂèÆó¾ò ¤³¤ÎˡΧµÚ¤Ó¤³¤ÎˡΧ¤Ë´ð¤Å¤¯Ì¿Îá¤Îµ¬Äê¤Î²ò¼á¤Ë´Ø¤·¤Æ¤Ï¡¢¼¡¤ÎÄêµÁ¤Ë
             ½¾¤¦¤â¤Î¤È¤¹¤ë¡£ 
                :
        ¸Þ ¡¡¡Ö̵Àþ¶É¡×¤È¤Ï¡¢ÌµÀþÀßÈ÷µÚ¤Ó̵ÀþÀßÈ÷¤ÎÁàºî¤ò¹Ô¤¦¼Ô¤ÎÁíÂΤò¤¤¤¦¡£
             ⤷¡¢¼õ¿®¤Î¤ß¤òÌÜŪ¤È¤¹¤ë¤â¤Î¤ò´Þ¤Þ¤Ê¤¤¡£ 
                :
      
    µ¡Ç½¤ÎÀ­¼Á¾å¡¢¥Ñ¥±¥Ã¥È¥¹¥Ë¥Õ¥¡¤ÎÄÌ¿®¾å¤ÎÌò³ä¤Ï¼õ¿®¤ËÆÃ²½¤·¤Æ¤¤¤Þ¤¹¡£¤Ç¤Ï¤³¤Î¥Ç¥Ð¥¤¥¹¤òµ¬À©Âоݳ°¤ÈȽÃǤ·°Â¿´¤·¤Æ¹ñÆâ¤Ç»È¤¦¤³¤È¤ÏŬÀڤǤ·¤ç¤¦¤«¡© ¼Â¤Ï¤µ¤é¤Ë¹Íθ¤¹¤Ù¤­ÏÃÂ꤬¤¢¤ê¤Þ¤¹¡£

    ¾å¤Îµ­»ö¤Î¤è¤¦¤Ë¡¢nRF51 Dongle ¤Ï mbed Âбþ¤Î¥×¥í¥°¥é¥Þ¥Ö¥ë¤Ê̵ÀþÄÌ¿®¥Ç¥Ð¥¤¥¹¤Ç¤¹¡£¤Ä¤Þ¤ê¡¢¤³¤Î¡Ö̵ÀþÀßÈ÷¡×¤Ï¸µÍè¡Ö¼õ¿®¤Î¤ß¤òÌÜŪ¤È¤¹¤ë¤â¤Î¡×¤Ç¤Ï¤Ê¤¯¤à¤·¤í¡ÖÁàºî¤ò¹Ô¤¦¼Ô¡×¤Ë¤è¤Ã¤Æ¥×¥í¥°¥é¥à¤ò½ñ¤­´¹¤¨²Äǽ¤Ç¤¢¤ë¤³¤È¤òÆÃĹ¤Î¤Ò¤È¤Ä¤Ë·Ç¤²¤Æ¤¤¤ëÀ½ÉʤǤ¹¡£¾å¤Ëµó¤²¤¿¥¹¥Ë¥Õ¥¡¥Ç¥Ð¥¤¥¹¤Ï¤¤¤º¤ì¤âƱÍͤΦÌ̤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£

    °Ê²¼¤ÎÎã¤Î¤è¤¦¤Ë¡¢µ»Å¬¥Þ¡¼¥¯¤Ä¤­¤ÎÀ½Éʤˤª¤¤¤Æ¤µ¤¨¡Ö¥Õ¥¡¡¼¥à¥¦¥§¥¢¤Î½ñ¤­´¹¤¨¡×¤È¤ÎÀ°¹çÀ­¤ò°ì°Õ¤ËȽÃǤǤ­¤Ê¤¤»ö¾ð¤ò¹Í¤¨¹ç¤ï¤»¤ë¤È¡¢µ»Å¬¥Þ¡¼¥¯¤Ê¤·¤Î¤³¤ì¤é¤Î¥¹¥Ë¥Õ¥¡À½ÉÊ¤ÎÆüËܹñÆâ¤Ç¤Î»ÈÍѤÎÀ§Èó¤Ï¤ä¤Ï¤êÈù̯¤«¤â¤·¤ì¤Þ¤»¤ó¡£

    • ESP-WROOM-02¤Î¥Õ¥¡¡¼¥à¥¦¥§¥¢¤ò½ñ¤­´¹¤¨¤¿¾ì¹ç¡¢µ»Å¬¤Ï¤É¤¦¤Ê¤ë¤Î¤« - ¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹
      ¥æ¡¼¥¶¡¼¤Ë¤è¤ë¥Õ¥¡¡¼¥à¥¦¥§¥¢¤Î½ñ¤­´¹¤¨¤¬¡¢ESP-WROOM-02¤Î¹©»öÀß·×ǧ¾Ú¤ò
      ̵¸ú¤Ë¤¹¤ë²ÄǽÀ­¤Ë¤Ä¤¤¤Æ¡¢¥á¡¼¥«¡¼¤ÎEspressif Systems¤Ë³Îǧ¤ò¤·¤Þ¤·¤¿¡£
      Ʊ¼Ò¤ÏÅÐϿǧ¾Úµ¡´Ø¤Ë³Îǧ¤·¤¿¾å¤Ç¡¢Arduino core for ESP8266 WiFi chip
      ¤Þ¤¿¤ÏƱ¼ÒÀ½SDK¤ò»È¤Ã¤Æ¤¤¤ë¸Â¤ê¤Ë¤ª¤¤¤Æ¤Ï¡¢Ç§¾Ú¤Ë¤Ï±Æ¶Á¤òÍ¿¤¨¤Ê¤¤¤È¤¤¤¦
      ²óÅú¤ò²¼¤µ¤¤¤Þ¤·¤¿¡£Â¾¤Î³«È¯´Ä¶­¤Ê¤É¡¢¥Õ¥¡¡¼¥à¥¦¥§¥¢¤ò½ñ¤­´¹¤¨¤ëÉôʬ¤Ë
      ¤è¤Ã¤Æ¤Ï¡¢Ç§¾Ú¤Ë±Æ¶Á¤òµÚ¤Ü¤·ÆÀ¤ë¤È¤Î¤³¤È¤Ç¤¹¤Î¤Ç¡¢¤´Ãí°Õ¤¯¤À¤µ¤¤¡£
      
    • ¥â¥Î¥ï¥¤¥ä¥ì¥¹À½ÉʾðÊó - MONO-WIRELESS.COM - mono-wireless.com
      ÅÅÇÈË¡µ¬¡Êµ»Å¬¡Ë¤Ë¤Ä¤¤¤Æ
               :
      ¹¹¤Ë¥Õ¥¡¡¼¥à¥¦¥¨¥¢¤ò½ñ¤­´¹¤¨¤ë¤Èǧ¾Ú¤ÎÈϰϤò³°¤ì¤Æ¤·¤Þ¤¦ÌµÀþ¥â¥¸¥å¡¼¥ë
      ¤â¸ºß¤·¤Æ¤¤¤Þ¤¹¡£ÊÀ¼ÒÀ½ÉʤÏÁ´¤Æµ»Å¬Ç§¾Ú¤ËŬ¹ç¤·¤¿ÌµÀþ¥â¥¸¥å¡¼¥ë¤Ç¤¹¤Î¤Ç
      ¥³¥ó¥×¥é¥¤¥¢¥ó¥¹¤ËÇØ¤¯¤³¤È¤Ê¤¯°Â¿´¤·¤Æ¤´»ÈÍѤ·¤Æ¤¤¤¿¤À¤±¤Þ¤¹¡£Ê»¤»¤Æ
      ¡ÖÅÅÇÈË¡¤Ë¤Ä¤¤¤Æ¤Î¹Íθ»ö¹à¡×¤ò»²¾È¤¯¤À¤µ¤¤¡£
      
    • DD-WRT - wikipedia
      ÅÅÇÈË¡¤Ë¤è¤ëµ¬À©
      
      ÆüËܤˤª¤¤¤Æ¤Ï̵Àþµ¡´ï¤ËÂФ·¤Æ¥á¡¼¥«¡¼Â¦¤¬ÁÛÄꤷ¤Æ¤¤¤Ê¤¤Èó¸ø¼°¥Õ¥¡¡¼¥à
      ¥¦¥§¥¢¤Ø¤Î½ñ¤­´¹¤¨¤ò¹Ô¤Ã¤¿»þÅÀ¤Çµ»Å¬¥Þ¡¼¥¯¤¬Ìµ¸ú¤È¤Ê¤ê¡¢ÌµÀþLAN¤òÍøÍѤ¹¤ë
      ¾ì¹ç¤ÏÅÅÇÈË¡¤Ë°ãÈ¿¤¹¤ë[Í×½Ðŵ]¡£
               :
      

    Adafruit ¼ÒÀ½¡ÖBluefruit LE Sniffer¡×

    ¤½¤ó¤Ê¤ï¤±¤ÇÁ°·Ç¤Î¥¹¥Ë¥Õ¥¡¤ÎƳÆþ¤Ï°ìöÊÝα¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¾ðÊó¤òõ¤·¤Æ¤¤¤ë¤¦¤Á¤Ë¤Õ¤È¤¢¤ëÀ½ÉʤΥ¹¥Ú¥Ã¥¯¤ËÌܤ¬¤È¤Þ¤ê¤Þ¤·¤¿¡£

    MDBT40 ¤Ï¡¢Nordic Semiconductor ¼ÒÀ½¤Î¥á¥¸¥ã¡¼¤Ê nRF51822 ¥Á¥Ã¥×¤òÅëºÜ¤·¤¿ Ãæ¹ñ Raytac ¼Ò¤Î BLE ¥â¥¸¥å¡¼¥ë¤Ç¤¹¡£Á°¤Ë BLE ¤Þ¤ï¤ê¤ÎÀ½ÉÊÄ´ºº¤ò¹Ô¤Ã¤Æ¤¤¤¿Àޤˤ³¤Î MDBT40 ¤¬ÆüËܤε»Å¬¾ÚÌÀ¤ò¼èÆÀ¤º¤ß¤Ç¤¢¤ë¤³¤È¤òÃΤê̾Á°¤¬°õ¾Ý¤Ë»Ä¤Ã¤Æ¤¤¤Þ¤·¤¿¡£

    MDBT40 ¤òºÜ¤»¤¿À½Éʤϲ¼µ­¤ÎÎã¤Î¤è¤¦¤Ë¹ñÆâ¤ÇήÄ̤·¤Æ¤¤¤Þ¤¹¡£

    • Adafruit Feather 32u4 Bluefruit LE - ¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹
      BLE(Bluetooth Low Energy)µ¡Ç½ÉÕ¤­¤Î¾®·¿Arduino¸ß´¹¥Ü¡¼¥É¤Ç¤¹¡£
      Adafruit Bluefruit LE Micro¤Î¸å·ÑÉʤǤ¹¡£
                      :
      Arduino Leonardo¤Ê¤É¤ËÅëºÜ¤µ¤ì¤Æ¤¤¤ëATmega 32u4¤òÅëºÜ¡£
      BLE¥â¥¸¥å¡¼¥ë¤Ç¤¢¤ëMDBT40¤Ï¡¢Áí̳¾Ê¤Î¹©»öÀß·×ǧ¾Ú¡Ê¤¤¤ï¤æ¤ëµ»Å¬¡Ë¤ò
      ¼èÆÀºÑ¤ß¤Ê¤Î¤Ç¡¢ÆüËܹñÆâ¤Ç»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
                      :
      
    Adafruit ¼ÒÀ½¤Î¤³¤Î¡ÖBluefruit LE Sniffer¡×¤ÎÀ½Éʼ̿¿¤ò¤è¤¯¸«¤ë¤È¡¢µ»Å¬¥Þ¡¼¥¯¤Ä¤­¤Î MDBT40 ¤¬ºÜ¤Ã¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤Ç¤­¤Þ¤¹¡£ ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    ¤³¤Î¥¹¥Ë¥Õ¥¡¤Ç¤¢¤ì¤Ðµ»Å¬´ØÏ¢¤Î¥¸¥ì¥ó¥Þ¤Ê¤·¤ËÍøÍѤǤ­¤½¤¦¤Ç¤¹¡£ËÜÂβÁ³Ê¤ÏľÈÎ¤Ç $29.95¡£°Ê²¼¡¢Adafruit ¼Ò¸ø¼°¥µ¥¤¥È¤è¤ê¡£

    Bluefruit LE Sniffer ¤Î¥Ý¥¤¥ó¥È¤ò¤¶¤Ã¤¯¤ê¤Þ¤È¤á¤Æ¤ß¤Þ¤¹¡£

    ¤µ¤Ã¤½¤¯ Adafruit ¼Ò¥µ¥¤¥È¤Ç¥ª¡¼¥À¡¼¤·¤Þ¤·¤¿¡£ ÇÛÁ÷ÊýË¡¤Ë¤ÏºÇ¤â°Â²Á¤Ê United States Postal Service ¤Î¡ÖFirst-Class Package International Service™ incl. $1.60 insurance : $16.40¡×¤ò»ØÄê¡¢·× $46.35 ¤ò PayPal ¤Ç·èºÑ¤·°ì½µ´Ö¤Û¤É¤ÇÅþÃ夷¤Þ¤·¤¿¡£

    ȯÁ÷Ï¢Íí¸å¤Ë USPS ¥µ¥¤¥È¤ÇÇÛÁ÷¾õ¶·¤ò³Îǧ¤¹¤ë¤È·ÐͳÃϤˡÖJAMAICA¡×¤Îɽµ­¤¢¤ê¡£¤µ¤Æ¤Ï Japan -> Jamaica ¤Î¥ß¥¹¤«¡© ¤Èµ¿¤¤¤Þ¤·¤¿¤¬¤³¤ì¤Ï¥«¥ê¥Ö³¤°è¤Ë¤¢¤ë¹ñ¤Î̾Á°¤Ç¤Ï¤Ê¤¯ JFK ¶õ¹Á¤½¤Ð¤Î¡ÖJAMAICA, NY 11430¡×¤Ç¤·¤¿¡£ÊªÎ®¤ÎÍ׾פΤ褦¤Ç¤¹¤¬ÃѤº¤«¤·¤Ê¤¬¤é¥Ë¥å¡¼¥è¡¼¥¯¤Ë¥¸¥ã¥Þ¥¤¥«¤È¤¤¤¦ÃÏ̾¤¬¤¢¤ë¤³¤È¤ò½é¤á¤ÆÃΤê¤Þ¤·¤¿¡£Adafruit ¤µ¤óµ¿¤Ã¤Æ¤´¤á¤ó¤Ê¤µ¤¤¡Ê^^¡¨

    »È¤Ã¤Æ¤ß¤ë

    Windows PC ¤Ç Bluefruit LE Sniffer ¤ò»ÈÍѤ¹¤ëºÇû¤Î¼ê½ç¤ò¼¨¤·¤Þ¤¹¡£¾ÜºÙ¤Ï nRF Sniffer ¥¢¡¼¥«¥¤¥ÖÆâ¤Î¡ÖnRF Sniffer User Guide¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    1. FTDI ¼Ò¤Î²¾ÁÛ COM ¥Ý¡¼¥È¥É¥é¥¤¥Ð¤ò̤ƳÆþ¤Ê¤é¥¤¥ó¥¹¥È¡¼¥ë
    2. ºÇ¿·¤Î nRF Sniffer ¤Î zip ¥¢¡¼¥«¥¤¥Ö¤ò¥À¥¦¥ó¥í¡¼¥É¤·Å¬Åö¤Ê¥Õ¥©¥ë¥À A ¤ØÅ¸³«
    3. Wireshark¡Êv1.10.1 °Ê¹ß¡Ë¤ò̤ƳÆþ¤Ê¤é¥¤¥ó¥¹¥È¡¼¥ë
    4. Bluefruit LE Sniffer ¤ò USB ¥Ý¡¼¥È¤ØÀܳ¤· Sniffing ¤ÎÂоݤȤ¹¤ë¥Ç¥Ð¥¤¥¹¤ò¶áÀܤµ¤»¤Æ¤ª¤¯
      ¿Þ¤Ï¡ÖnRF Sniffer User Guide v1.2¡×¤è¤ê
    5. ¥Õ¥©¥ë¥À A ľ²¼¤Î¡Öble-sniffer_win_<version>_Sniffer.exe¡×¤ò¼Â¹Ô
    6. ¥³¥ó¥½¡¼¥ë¤¬³«¤­¥¢¥É¥Ð¥¿¥¤¥¸¥ó¥°Ãæ¤Î BLE ¥Ç¥Ð¥¤¥¹¤¬°ìÍ÷ɽ¼¨¤µ¤ì¤ë
    7. ¥«¡¼¥½¥ë¥­¡¼¡ÜENTER ¤Þ¤¿¤Ï¡Ö¡ô¡×ÈÖ¹æ¤ÇÂоݤȤ¹¤ë¥Ç¥Ð¥¤¥¹¤òÁªÂò
    8. ¥Ç¥Ð¥¤¥¹¤òÁªÂò¤·¤¿¾õÂ֤ǡÖw¡×¥­¡¼¤ò²¡²¼¤¹¤ë¤È Wireshark ¤¬µ¯Æ°¡£¤¢¤È¤Ï¥Ç¥Ð¥¤¥¹Â¦¤ÇɬÍפÊÁàºî¤ò¹Ô¤¨¤Ð¤è¤¤

    ÉÕµ­¡§¥Ç¥å¥¢¥ë¥æ¡¼¥¹ÉʤÈÍ¢½Ðµ¬À©

    ¤´Â¸ÃΤÎÊý¤â¿¤¤¤È»×¤¤¤Þ¤¹¤¬¡¢Mouser ¤ä RS¡¤Digi-key ¤È¤¤¤Ã¤¿°ìÈ̤Υǥ£¥¹¥È¥ê¥Ó¥å¡¼¥¿¤«¤é½êÄê¤ÎÅÅ»ÒÉôÉʤò¹ØÆþ¤·¤è¤¦¤È¤¹¤ë¤È¡¢¤½¤ÎÀ½ÉÊ¤ÎÆâÍÆ¤Èºß¸Ë¸µ¡¦½Ð²Ù¸µ¤Î¹ñ¤äÃϰè¤Ë¤è¤Ã¤Æ¤Ï·³»öžÍѤβÄǽ¤Ê¡Ö¥Ç¥å¥¢¥ë¥æ¡¼¥¹ÉÊÌܡפȤ·¤ÆÍ¢½Ðµ¬À©¤Ë°ú¤Ã¤«¤«¤ê¡¢½êÄê¤Î½ñÎà°ì¼°¤ÎÄó½Ð¤òµá¤á¤é¤ì¿³ºº¤Î¤¿¤á¤Ë¿ô½µ´ÖÄøÅÙÂÔ¤¿¤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£

    º£²ó¡¢Ë¿¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¤Ø½êÄê¤Î¾¦Éʤ¬Í¢½Ðµ¬À©¤ÎÂоݤ¬Èݤ«¤ò»öÁ°¤ËȽÊ̤¹¤ëÊýË¡¤Î̵ͭ¤ò¿Ò¤Í¤¿¤È¤³¤í¡ÖÃíʸ¤ò¼õ¤±¼ÂºÝ¤ËÍ¢½Ð¼ê³¤­¤ò³«»Ï¤·¤Ê¤±¤ì¤Ð¤ï¤«¤é¤Ê¤¤¡×¤È¤Î²óÅú¤Ç¤·¤¿¡£ Í¢½Ðµ¬À©¤Ë´Ø¤¹¤ëÃí°Õ½ñ¤­¤Î̵ͭ¤Ï¤Þ¤Á¤Þ¤Á¤Ç¤¹¤¬¡¢°Ê²¼¤Ë°ìÎã¤ò°úÍѤ·¤Þ¤¹¡£

    • nRF51-Dongle Nordic Semiconductor | Mouser - www.mouser.jp
      This product may require additional documentation to export
      from the United States.
      ¤³¤ÎÀ½Éʤò¥¢¥á¥ê¥«¤«¤éÇÛÁ÷¤¹¤ë¤Ë¤Ï¡¢ÄɲäνñÎबɬÍפˤʤë
      ¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
      
    °ìÊý¡¢Ä¾ÈΤâ¹Ô¤Ã¤Æ¤¤¤ë Adafruit ¤Ï¼«¼ÒÀ½ÉʤÎÍ¢½Ð´ÉÍý¤ò¼çÂÎŪ¤Ë¼Â»Ü¤·¤Æ¤¤¤ë»Ý¤ò¸ø¼°¥µ¥¤¥È¾å¤ÇÀë¸À¤·¤Æ¤¤¤Þ¤¹¡£¤³¤¦¤¤¤¦¾ì¹ç¤Ë¤ÏľÈΤòÍøÍѤ¹¤ë¤Û¤¦¤¬ÌÌÅݤ¬¾¯¤Ê¤¤¤è¤¦¤Ç¤¹¡£


    (tanabe)
    klab_gijutsu2 at 11:35¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(4)¨¢TrackBack(0)
    2016ǯ08·î03Æü

    Tomoru ¤È Pochiru ¤È Linking

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    Tomoru

    Tomoru ¤Ï¡¢ºòǯ¡Ê2015ǯ¡Ë11·î¤è¤ê¹ñÆâ¤Î¥¯¥é¥¦¥É¥Õ¥¡¥ó¥Ç¥£¥ó¥°¥µ¡¼¥Ó¥¹ Makuake ¤Ç»Ù±çÊ罸¤Î¹Ô¤ï¤ì¤¿ Bluetooth Low Energy¡ÊBLE¡Ë¥Ç¥Ð¥¤¥¹¤Ç¤¹¡£¡ÖProject Linking¡×¤ÎΩ¤Á¾å¤²¤È¤È¤â¤ËÅö»þÏÃÂê¤Ë¤Ê¤Ã¤¿¤¿¤á¤´Â¸ÃΤÎÊý¤â¿¤¤¤³¤È¤Ç¤·¤ç¤¦¡£2016ǯ8·î¸½ºß¤ÏÀ½Â¤¸µ¤Ç¤¢¤ë³ô¼°²ñ¼Ò Braveridge ¤Î¸ø¼°¥¹¥È¥¢¤ä Amazon ¤«¤éÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£°ÊÁ°¤³¤Î¥Ö¥í¥°¤Ç¡Öblink(1)¡×¤È¤¤¤¦À½Éʤò¥Ô¥Ã¥¯¥¢¥Ã¥×¤·¤¿¤³¤È¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¸Ä¿ÍŪ¤Ë¡Ö¸÷¤ê¤â¤Î¡×¤Ï¹¥Êª¤Ç¡¢¤³¤Î Tomoru ¤â»Ù±çÊ罸¤Ø¤Î±þÊç¤Ë¤è¤Ã¤ÆÆÏ¤¤¤¿¸ÄÂΤò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£

    Tomoru

    www.products.braveridge.com

    ¸½»þÅÀ¤Ç¤ÏÂбþ¥¢¥×¥ê¤¬Á´ÂÎŪ¤Ë¤ä¤äÂç¿Í¤·¤á¤Ç Linking ¼«ÂΤâËܳÊŪ¤ÊÉáµÚ¤Ï¤³¤ì¤«¤é¤Î¤è¤¦¤Ç¤¹¤¬¡¢¼ê¸µ¤Ç¤Ï BLE ¤ÎÊÙ¶¯¤¬¤Æ¤é¤Ë¤³¤Î²Ä°¦¤¤¥Ç¥Ð¥¤¥¹¤ò³Ú¤·¤ó¤Ç¤¤¤Þ¤¹¡£

    Pochiru

    Braveridge ¼Ò¤Ï¤½¤Î¸å¤â³èȯ¤Ë Linking ÂбþÀ½Éʤò¥ê¥ê¡¼¥¹¤·¤Æ¤¤¤Þ¤¹¡£ºÇ¶áÌܤˤȤޤä¿¡ÖPochiru¡×¤È¤¤¤¦¥Ç¥Ð¥¤¥¹¤òÇã¤Ã¤Æ¤ß¤Þ¤·¤¿¡£Pochiru ¤Ë¤Ï LED ¤Ë²Ã¤¨¥Í¡¼¥ß¥ó¥°¤É¤ª¤ê²¡¤·¥Ü¥¿¥ó¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤Î¤¿¤áÄÌ¿®Àè¤Îµ¡´ï¤È¤ÎÁÐÊý¸þ¤Î¤ä¤ê¤È¤ê¤¬²Äǽ¤Ç¤¹¡£

    Pochiru

    www.products.braveridge.com
    ¥Ü¥¿¥ó¤â¤Î¤Î BLE ¥Ç¥Ð¥¤¥¹¤Ï¤¤¤í¤¤¤íÈÎÇ䤵¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¥ê¥â¡¼¥È¥·¥ã¥Ã¥¿¡¼¤ä¥á¥Ç¥£¥¢¥×¥ì¥¤¥ä¡¼¤ÎÁàºî¤È¤¤¤Ã¤¿½êÄê¤ÎÌÜŪ¤ËÊĤ¸¤¿¤â¤Î¤¬Â¿¤¯¡¢Î÷²Á¤Ç¤¢¤ê¤Ê¤¬¤é¼«ºî¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÈÈÆÍÑŪ¤ËÏ¢·È²Äǽ¤Ç¤¢¤ë¤³¤È¤¬ Pochiru ¤ÎÌ¥ÎϤǤ¹¡£¤³¤Î²Á³Ê¤Ç¤³¤Î¥µ¥¤¥º¤Î BLE ¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤ò¼«ºî¤¹¤ë¤³¤È¤ÎÆñÅÙ¤ò¹Í¤¨¤ë¤È¥³¥¹¥È¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Î¹â¤¤À½ÉʤȸÀ¤¨¤ë¤Ç¤·¤ç¤¦¡£

    ¥×¥í¥°¥é¥à¤ò½ñ¤¯

    Tomoru ¤ä Pochiru ¤Î¤è¤¦¤Ê Linking Âбþ¥Ç¥Ð¥¤¥¹ÍѤΥ¢¥×¥ê¤Ï Project Linking ¤¬Ìµ½þ¤Ç¸ø³«¤·¤Æ¤¤¤ë SDK ¤òÍøÍѤ·¤ÆºîÀ®¤·¤Þ¤¹¡£BLE ¤Þ¤ï¤ê¤Î¥Ï¥ó¥É¥ê¥ó¥°¤Ï¤¹¤Ù¤Æ Linking ËÜÂΤ¬Ãç²ð¤¹¤ë¤¿¤á¡¢Ãê¾Ý²½¤µ¤ì¤¿ Linking API ¤ò¸Æ¤Ó½Ð¤¹¤À¤±¤Ç¥Ç¥Ð¥¤¥¹¤È¤ÎÏ¢·È¤¬²Äǽ¤Ç¤¹¡£

    Project Linking ¤Î³«È¯¼Ô¸þ¤±¥Ú¡¼¥¸¤ÎÃæ¤Û¤É¤Î¡ÖAPI guide¡×¹à¤ÎÍøÍѵ¬Ìó¤ò³Îǧ¤Î¾å SDK ¤ò¥À¥¦¥ó¥í¡¼¥É¤·¡¢¡ÖAPI »ÅÍͽñ¡×¤Î¡Ö¥Ý¡¼¥Æ¥£¥ó¥°¡×¥Ú¡¼¥¸¤ÎÀâÌÀ¤Ëź¤Ã¤Æ³«È¯´Ä¶­¤ò¥»¥Ã¥È¥¢¥Ã¥×¤·¤Þ¤¹¡£¸å¤Ï¡ÖAPI »ÅÍͽñ¡×¤È SDK ¥¢¡¼¥«¥¤¥Ö¤Ë´Þ¤Þ¤ì¤ë¡ÖLinkingIFDemo¡×¤Î¥³¡¼¥É¤òÆÉ¤ß¹ç¤ï¤»¤ì¤ÐÍ×ÎΤòÍý²ò¤·¤ä¤¹¤¤¤Ç¤·¤ç¤¦¡£

    ¼ê¸µ¤Ç¤Ï Android ÈÇ SDK ¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£¾åµ­¤Î¥µ¥ó¥×¥ë¤ò¸µ¤ËºîÀ®¤·¤¿´Êñ¤Ê¥¢¥×¥ê¤Î¥³¡¼¥É¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£¥¢¥×¥ê¤Î¡ÖLED¡×¥Ü¥¿¥ó¤ò²¡¤¹¤ÈÏ¢·È¤º¤ß¥Ç¥Ð¥¤¥¹¤Î LED ¤¬ÅÀÅô¤·¡¢Ï¢·È¤º¤ß¥Ç¥Ð¥¤¥¹Â¦¤Î¥Ü¥¿¥ó²¡²¼Åù¤Î¥¤¥Ù¥ó¥È¤Ë¤è¤Ã¤Æ¥¢¥×¥ê¤¬ÄÌÃΤò¼õ¤±¤ë¤È¤½¤Î»Ý¤ò²èÌ̤Ëɽ¼¨¤¹¤ëÆâÍÆ¤Ç¤¹¡£

    »îºî¡§Linking01

    MainActivity.java
    /**
     *
     * Linking01
     *
     * - Ï¢·È¤º¤ß Linking ¥Ç¥Ð¥¤¥¹¤Î LED ¤òÅÀÅô¤µ¤»¤ë
     * - Linking ¥Ç¥Ð¥¤¥¹¤«¤é¤ÎÄÌÃΤò¼õ¤±¼è¤ë
     *
     */
    
    package jp.klab.Linking01;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.media.AudioManager;
    import android.media.ToneGenerator;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.nttdocomo.android.sdaiflib.Define;
    import com.nttdocomo.android.sdaiflib.NotifyNotification;
    import com.nttdocomo.android.sdaiflib.SendOther;
    
    public class MainActivity extends AppCompatActivity
            implements View.OnClickListener {
    
        private Context mCtx;
        private Button mButtonLED;
    
        private static final byte LINKING_IF_PATTERN_ID = 0x20; //LED¥Ñ¥¿¡¼¥ó¤ÎÀßÄê¹àÌÜID¡Ê¸ÇÄêÃÍ¡Ë
        private static final byte LINKING_IF_COLOR_ID = 0x30;   //LED¿§¤ÎÀßÄê¹àÌÜID¡Ê¸ÇÄêÃÍ¡Ë
        private static final byte COLOR_ID_RED = 0x01;  // ÅÀÅô¿§
        private static final byte BLINK_PATTERN = 0x22; // ÅÀÅô¥Ñ¥¿¡¼¥ó
    
        private NotifyNotification mNotifyNotification;
        private MyNotificationInterface mMyNotificationInterface;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mCtx = this;
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            mButtonLED = (Button)findViewById(R.id.buttonLED);
            mButtonLED.setOnClickListener(this);
            // Linking ¥Ç¥Ð¥¤¥¹¤«¤é¤ÎÄÌÃμõ¿®ÍÑ
            mMyNotificationInterface = new MyNotificationInterface();
            mNotifyNotification = new NotifyNotification(this, mMyNotificationInterface);
        }
    
        @Override
        public void onClick(View v) {
            // LED ¥Ü¥¿¥ó²¡²¼¤ÇÏ¢·È¤º¤ß¥Ç¥Ð¥¤¥¹¤¢¤Æ¤Ë LED ÅÀÅô»Ø¼¨¤òÁ÷¤ë
            if (v == (View)mButtonLED) {
                SendOther sendOther = new SendOther(this);
                sendOther.setIllumination(
                        new byte[] {
                                LINKING_IF_PATTERN_ID,
                                BLINK_PATTERN,
                                LINKING_IF_COLOR_ID,
                                COLOR_ID_RED
                        });
                sendOther.send();
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mNotifyNotification.release();
        }
    
        private class MyNotificationInterface implements NotifyNotification.NotificationInterface {
            @Override
            public void onNotify() { // ÄÌÃΤò¼õ¿®¤·¤¿
                // Linking ¥Ç¥Ð¥¤¥¹¤«¤é¤ÎÄÌÃÎÆâÍÆ¤Ï SharedPreferences ¤Ëµ­Ï¿¤µ¤ì¤ë
                SharedPreferences preference =
                        getSharedPreferences(Define.NotificationInfo, Context.MODE_PRIVATE);
                int DEVICE_ID = preference.getInt("DEVICE_ID", -1);
                int DEVICE_BUTTON_ID = preference.getInt("DEVICE_BUTTON_ID", -1);
                // Toast ɽ¼¨
                Toast.makeText(mCtx, "onNotify: DEVICE_ID=" + DEVICE_ID +
                        " DEVICE_BUTTON_ID=" + DEVICE_BUTTON_ID, Toast.LENGTH_SHORT).show();
                // ²»¤âÌĤ餹
                ToneGenerator toneGenerator
                               = new ToneGenerator(AudioManager.STREAM_SYSTEM, ToneGenerator.MAX_VOLUME);
                toneGenerator.startTone(ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING);
            }
        }
    }
    

    »îºî¤Îưºî¤ÎÍÍ»Ò

    ¡Êư²è¡§36Éà ²»¤Ê¤·¡Ë

    Linking ¤Ç¤Î¥Ç¥Ð¥¤¥¹¡¦¥¢¥×¥ê¤ÎÀßÄê¼ê½ç

    Linking Âбþ¥Ç¥Ð¥¤¥¹¤È Linking ¥¢¥×¥ê¤òÏ¢·È¤µ¤»¤ë¤¿¤á¤Ë¤Ï»öÁ°¤ËÀßÄ꤬ɬÍפǤ¹¡£¼ê½ç¤Ï°Ê²¼¤ÎÍ×ÎΤǤ¹¡£

    1. üËö¤Ë¡ÖLinking¡×¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¡Ê̤¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç¤Î¤ß¡Ë

               Linking¡ÊAndroid ÈÇ¡Ë- play.google.com

    2. Ï¢·È¤µ¤»¤ë¥¢¥×¥ê¡Ê¤³¤³¤Ç¤Ï¼«ºî¤Î¡ÖLinking01¡×¡Ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ò¹Ô¤¤ Linking ¤ò¼Â¹Ô¤¹¤ë
        
    3. ¡Ö¥Ç¥Ð¥¤¥¹¤Î¸¡º÷¡×¤ò¹Ô¤¤Ï¢·ÈÂоݤΥǥХ¤¥¹¤ò Linking ¤ËÀܳ¤¹¤ë¡ÊÅö³º¥Ç¥Ð¥¤¥¹¤ò̤ÅÐÏ¿¤Î¾ì¹ç¤Î¤ß¡Ë
              
           
    4. ¥Ç¥Ð¥¤¥¹¤ÎÅÐÏ¿¡¦Àܳ¤¬´°Î»¤·¤¿¤é¡Ö¥Ç¥Ð¥¤¥¹¾ÜºÙ²èÌÌ¡×¤Ø°ÜÆ°¤·Åö³º¥Ç¥Ð¥¤¥¹¤ÈÏ¢·È¤µ¤»¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡ÊÊ£¿ô²Ä¡£¤³¤³¤Ç¤Ï¡ÖLinking01¡×¡Ë¤òÀßÄꤹ¤ë
              
    5. Linking ¤òÈ´¤±¾å¤Î¼ê½ç¤ÇÀßÄꤷ¤¿¥¢¥×¥ê¤òµ¯Æ°¤·¤Æ¥Ç¥Ð¥¤¥¹¤È¤ÎÏ¢·È¤ò³Îǧ¤¹¤ë
           

    È÷¹Í¡§ ¥Ç¥Ð¥¤¥¹¤Î Linking ¤Ø¤ÎºÆÀܳ¤Ë¤Ä¤¤¤Æ

    ¼ê¸µ¤Î Android 5.1 üËö¤Î´Ä¶­¤Ç¤Ï°Ê²¼¤Î¸½¾Ý¤¬¸«¤é¤ì¤Þ¤¹¡£Linking ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï 2016ǯ8·î¸½ºßºÇ¿·¤Î¡Ö03.10.00000¡×¤Ç¤¹¡£

    • Linking ¤ËÀܳ¤º¤ß¤Î¥Ç¥Ð¥¤¥¹¤ò Linking ¾å¤Ç¡ÖÀÚÃǡפ¹¤ë¤ÈºÆÀܳ¤Ç¤­¤Ê¤¯¤Ê¤ë
                 
    ¼ê¸µ¤Ç¤Ï¤³¤Î¾õ¶·¤Ë°Ê²¼¤Î¼ê½ç¤ÇÂн褷¤Æ¤¤¤Þ¤¹¡£
    • Android ¤Î Bluetooth ÀßÄê¤Ë¤ª¤¤¤ÆÅö³º¥Ç¥Ð¥¤¥¹¤È¤Î¥Ú¥¢¤ò²ò½ü¤·¤Æ¤«¤é Linking ¾å¤ÇºÆÀܳ¤ò¹Ô¤¦
                 
           
    ´ØÏ¢µ­»ö
    (tanabe)
    klab_gijutsu2 at 19:54¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(2)
    2016ǯ03·î11Æü

    ¡ÖÆþ±¡¼Ô¤È³°Éô¤È¤Î¥³¥ß¥å¥Ë¥±¡¼¥·¥ç¥ó¡×¤Ø¤Î IoT ¤Î±þÍÑ

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    ¥Õ¥§¥¤¥¹¥¹¥±¡¼¥ë¤Î¤³¤È

    ÀèÆü¿ÈÆâ¤¬Æþ±¡¤·¤¿Àޤˤ³¤¦¤¤¤¦´é¤Î³¨¤ÎÆþ¤Ã¤¿¥¯¥ê¥¢¥Õ¥¡¥¤¥ë¤òÉÂÅï¤Ç¸«¤«¤±¤Þ¤·¤¿¡£

    ¥Õ¥§¥¤¥¹¥¹¥±¡¼¥ë¡Ê±Ñ: Face scale¡Ë¤È¤Ï¡¢¸½ºß¡×¤ÎÄˤߤò¡Ö¤Ë¤Ã¤³¤ê¾Ð¤Ã¤¿´é¡×¤«¤éÉáÄ̤δ顢
    ¤½¤·¤Æ¡Ö¤·¤«¤á¤ÃÌ̡פ½¤·¤Æ¡Öµã¤­´é¡×¤Þ¤Ç¤ÎÍÍ¡¹¤ÊÃʳ¬¤Î´é¤òÍѰդ·¤Æ¡¢¿À·ÐÄˤʤɤÎÄˤߤò
    Áʤ¨¤Æ¤¤¤ë´µ¼Ô¤Ë¤É¤Î¤°¤é¤¤Äˤà¤Î¤«¤ò¼¨¤·¤Æ¤â¤é¤¦¤³¤È¤Ç¡¢¤½¤ÎÄˤßÅÙ¤òµÒ´ÑŪ¤ËÃΤ뤿¤á¤Ë¡¢
    ¥Ú¥¤¥ó¥¯¥ê¥Ë¥Ã¥¯¡¦Ëã¿ì²Ê¤Ê¤É¤ÇÍѤ¤¤é¤ì¤ëÍѶñ¡¦ÍÑ»æ¤Î¤³¤È¤Ç¤¢¤ë¡£
    
    ´Ç¸î»Õ¤µ¤ó¤¬¥Ù¥Ã¥É¤Ë²£¤Ë¤Ê¤Ã¤¿¤Þ¤Þ¤Î¤´¹âÎð¼Ô¤Ë¤³¤ì¤ò¸«¤»¤Ê¤¬¤éÂ礭¤ÊÌÀ¤ë¤¤À¼¤Ç¿Ò¤Í¤Æ¤¤¤ëÍͻҤ¬°õ¾Ý¤Ë»Ä¤ê¤Þ¤·¤¿¡£¤¿¤Ã¤¿°ìËç¤Î°õºþʪ¤Ç¤¹¤¬¡¢¼«Í³¤ËÏä·¤¿¤êÂΤòư¤«¤·¤¿¤ê¤¹¤ë¤³¤È¤Î¤à¤º¤«¤·¤¤¾õÂÖ¤ÎÆþ±¡¼Ô¤È¤Î¤ä¤ê¤È¤ê¤Ë¤ÏÆÃ¤ËÍ­ÍѤʥġ¼¥ë¤Ç¤¢¤ë¤³¤È¤¬ÁÛÁü¤µ¤ì¤Þ¤¹¡£

    Æþ±¡¼Ô¤È³°Éô¤È¤Î¥³¥ß¥å¥Ë¥±¡¼¥·¥ç¥ó¤Ø¤Î IoT ¤Î±þÍÑ

    ·ÈÂÓüËö¤Ç¤ÎÅŻҥ᡼¥ëÍøÍѤÎÉáµÚ¤Ë¤è¤êÆþ±¡¼Ô¤È³°Éô¤È¤ÎÏ¢Íí¤Ï¥á¡¼¥ë°ÊÁ°¤Î»þÂå¤ËÈæ¤Ù³ÊÃʤËÊØÍø¤Ë¤Ê¤ê¤Þ¤·¤¿¡£É¼¼Æâ¤Ç¤ÎÄÌÏäÏ̵Íý¤Ç¤â¥á¡¼¥ë¤ÎÁ÷¼õ¿®¤Ï¿¤¯¤Î¾ì¹çǧ¤á¤é¤ì¤Æ¤ª¤ê¡¢¤ª¤½¤é¤¯¤Ï»ÜÀߦ¤¬ÅÁ¸À¤ò¼è¤ê¼¡¤°ÉÑÅÙ¤âÀΤè¤ê¤â¤º¤Ã¤È¾¯¤Ê¤¯¤Ê¤Ã¤¿¤³¤È¤Ç¤·¤ç¤¦¡£

    ¤½¤Î°ìÊý¤Ç¡¢¾É¾õ¤ä¾õ¶·¤Ë¤è¤Ã¤Æ¤Ï¾®¤µ¤Ê¥­¡¼¤òÁàºî¤¹¤ë¤³¤È¤¬º¤Æñ¤Ç¤¢¤Ã¤¿¤ê¡¢¤¢¤ë¤¤¤Ï·ÈÂÓüËö¤ä¥á¡¼¥ë¤È¤ÎÀÜÅÀ¤òÁÛÁü¤·¤Ë¤¯¤¤Ê·°Ïµ¤¤ÎÆþ±¡¼Ô¤â¾¯¤Ê¤¯¤Ê¤¤¤³¤È¤òÏ¢Æü¤ÎÉÂÅïÆâ¤Î¸÷·Ê¤Ç¤¢¤é¤¿¤á¤Æ¼Â´¶¤·¤Þ¤·¤¿¡£»Äǰ¤Ê¤³¤È¤Ë¡¢¸½¼Â¤Ë¤Ï¤½¤¦¤¤¤¦¿Í¤¿¤Á¤Ë¤³¤½´Ø·¸¼Ô¤È¤ÎÆü¾ïŪ¤Ê¤Ä¤Ê¤¬¤ê¤¬¤è¤êɬÍפʥ±¡¼¥¹¤¬Â¿¤¤¤è¤¦¤Ë¤â´¶¤¸¤é¤ì¤Þ¤¹¡£¤¿¤È¤¨ºÇ¾®¸Â¤ÎÆâÍÆ¤Ç¤¢¤Ã¤Æ¤âÅö»ö¼Ô´Ö¤Ç¼ê·Ú¤Ë¥³¥ß¥å¥Ë¥±¡¼¥·¥ç¥ó¤ò¤È¤ë¤³¤È¤¬¤Ç¤­¤ì¤ÐÁÐÊý¤ÎÉ԰¤¬³Î¼Â¤Ë·Ú¤¯¤Ê¤ë¤³¤È¤ò¹Í¤¨¤¢¤ï¤»¤ë¤È¡¢¼Ò²ñ¤Î¹âÎ𲽤¬¿Ê¹Ô¤¹¤ë¾õ¶·¤Ë¤¢¤Ã¤Æ¤³¤ÎÏÃÂê¤ÏÀøºßŪ¤ÊɬÍ×À­¤Î¹â¤¤¥Æ¡¼¥Þ¤Î¤Ò¤È¤Ä¤È¸À¤¨¤ë¤Î¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡£

    »î¤ß¤Ë¡¢¥Õ¥§¥¤¥¹¥¹¥±¡¼¥ë¤ò¥Ò¥ó¥È¤Ëɼ¼Æâ¤Ç¤Î»ÈÍѤòÁÛÄꤷ¤Æ¤´¤¯´Êñ¤ÊÁàºî¤ÇÎ¥¤ì¤¿Áê¼ê¤È¥á¥Ã¥»¡¼¥¸¤ò¸ò¤ï¤¹¤·¤¯¤ß¤ò·Á¤Ë¤·¤Æ¤ß¤Þ¤·¤¿¡£¿È¶á¤Ê¾ìÌ̤ǤμÂÍÑÀ­¤Î¤¢¤ë IoT ¤Î¥¢¥¤¥Ç¥£¥¢¤È¤·¤Æ¾Ò²ð¤·¤Þ¤¹¡£

    »îºîÁõÃ֤γ°´Ñ¤È³µÍ×

    ²¼¤Î¼Ì¿¿¤ÎÁõÃ֤Τ¤¤º¤ì¤«¤Î¥Ü¥¿¥ó¤ò²¡¤¹¤ÈÁê¼ê¦¤ÎÁõÃÖ¤ÎÆ±¤¸³¨¤Î²¼¤ÎÎФΠLED ¤¬ÅÀÌǤ·¡¢Ê»¤»¤Æ¤½¤Î³¨ÊÁ¤òꤍ¤¿¥á¡¼¥ë¤¬½êÄê¤Î¥¢¥É¥ì¥¹¤ØÆÏ¤­¤Þ¤¹¡£
    ¿Æ¤·¤¤´ÖÊÁ¤Î¿Í¤ä¼«Ê¬¼«¿È¤¬É¼¼¤Î¥Ù¥Ã¥É¤Ç¶ì¤·¤ó¤À·Ð¸³¤Î¤¢¤ëÊý¤Ë¤Ï¤ï¤«¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¤¬¡¢¤¤¤ÞÆþ±¡¼Ô¤Ë¡Ö¥Ü¥¿¥ó¤ò²¡¤¹¤À¤±¤Î;Îϡפȡֳ¨ÊÁ¤òÁªÂò¤¹¤ë°Õ¼±¡×¤¬¤¢¤ë¤È¤¤¤¦¤³¤È¤ò¾ðÊó¤È¤·¤ÆÅÁ¤¨¤é¤ì¤ë¤³¤È¤Ë¤Ï¡¢Î¥¤ì¤Æ°Æ¤º¤ë¦¤Ë¤È¤Ã¤Æ¤âÆþ±¡¼Ô¼«¿È¤Ë¤È¤Ã¤Æ¤â¤½¤ì¼«ÂΤËÂ礭¤Ê°ÕÌ£¤¬¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢°ìÊýÄ̹ԤǤϤʤ¯Áê¼ê¤«¤é¤ÎÈ¿±þ¤¬¼ê¸µ¤ËÆÏ¤¯¤³¤È¤ÏÁÐÊý¤ÎÀº¿ÀŪ¤Ê»Ù¤¨¤È¤Ê¤ë¤Ç¤·¤ç¤¦¡£¼Ì¿¿¤Î¤È¤ª¤ê¡¢¸ß¤¤¤Ë¸ÀÍÕ¤ä°ÕÌ£¤Ç¤Ï¤Ê¤¯µ¤»ý¤Á¤ä°Õ¼±¤òÅÁ¤¨¤ë¤³¤È¤Ë¼ç´ã¤òÃÖ¤¤¤Æ¤½¤ì¤¾¤ì¤Î¥Ü¥¿¥ó¤Î³¨ÊÁ¤Ï¤¢¤¨¤Æ²ò¼á¤Î;ÃϤι­¤¤¤â¤Î¤òÁª¤ó¤Ç¤¤¤Þ¤¹¡£

    ¢¨¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨
     

    ÁõÃÖ¤òɼ¼¤ËÀßÃÖ¤·¤¿¥¤¥á¡¼¥¸

    ¥á¡¼¥ë¤Ë¤Ï²¡¤·¤¿¥Ü¥¿¥ó¤Î²èÁü¤¬¥¤¥ó¥é¥¤¥ó¤Çɽ¼¨¤µ¤ì¥ê¥ó¥¯¤Î¥¯¥ê¥Ã¥¯¤ÇÊÖ¿®ÍѤΥڡ¼¥¸¤¬³«¤¯

    • ¥¤¥ó¥¿¡¼¥Í¥Ã¥ÈÀܳ´Ä¶­¤òÈ÷¤¨¤¿Æþ±¡»ÜÀߤ¬¾¯¤Ê¤¤¤³¤È¤ò¹Íθ¤·ÁõÃ֤ϸ½ºß¤â¤Ã¤È¤âÄ㥳¥¹¥È¤Ç¥â¥Ð¥¤¥ëÄÌ¿®¤Î¥Ï¥ó¥É¥ê¥ó¥°¤¬²Äǽ¤Ê Raspberry Pi ¡Ü 3G ¥â¥Ç¥à¤Î¹½À®¤Ç MVNO SIM ¤ò»ÈÍѤ·¤Æ¤ª¤ê¥³¥ó¥»¥ó¥È¤Ò¤È¤Ä¤Ç²ÔƯ²Äǽ
    • ¼«Ê¬¤¬²¡¤·¤¿¥Ü¥¿¥ó¤ÏÀÖ LED ¤ÎÅÀÅô¡¢Áê¼ê¤Î²¡¤·¤¿¥Ü¥¿¥ó¤ÏÎФΠLED ¤Î´Ë¤ä¤«¤ÊÅÀÌǤǼ¨¤µ¤ì¤ë
    • ÁõÃִ֤Υá¥Ã¥»¡¼¥¸¥ó¥°¤Ë¤Ï Milkcocoa ¡¢¥á¡¼¥ëÁ÷¿®¤Ë¤Ï SendGrid ¤òÍøÍÑ
    • À֥ܥ¿¥ó¤Î²¡²¼¤Ç³Æ LED ¤ò¾ÃÅô¡¢5Éðʾå¤ÎĹ²¡¤·¤ÇÁõÃÖ¤ò¥·¥ã¥Ã¥È¥À¥¦¥ó
    • ±¦Ã¼¤Î LED ¤ÏÁõÃÖ¤Î²ÔÆ¯¤ò¼¨¤¹¥Ñ¥¤¥í¥Ã¥È¥é¥ó¥×

    ưºî¤ÎÍÍ»Ò¡ÊÆ°²è¡§2ʬ20Éà ²»À¼¤Ê¤·¡Ë

    ¤³¤Î¥Ç¥âư²è¤ÏÆþ±¡¼Ô¦¤¬¼ÂÁõÃÖ¤ò»ÈÍѤ·Áê¼ê¦¤¬¥¤¥ó¥¿¡¼¥Í¥Ã¥ÈÀܳ´Ä¶­¤Î¤â¤È¤Ç Web ÈǤβ¾ÁÛÁõÃÖ¤ò»ÈÍѤ¹¤ë¤³¤È¤òÁÛÄꤷ¤¿ÆâÍÆ¤Ç¤¹¡£¤â¤Á¤í¤óÆóÂæ¤Î¼ÂÁõÃִ֤Ǥαþ½·¤â²Äǽ¤Ç¤¹¡£

    ²èÁü¤Ë¤Ä¤¤¤Æ

    º£²ó¤Î»îºî¤Ç¤Ï²èÁü¤¬¥³¥ß¥å¥Ë¥±¡¼¥·¥ç¥ó¤ÎÃç²ð¼Ô¤È¤·¤ÆÂ礭¤ÊÌò³ä¤òô¤Ã¤Æ¤ª¤ê¡¢¤³¤ì¤é¤Ïɼ¼¤È¤¤¤¦µ¤»ý¤Á¤ÎÄÀ¤ß¤¬¤Á¤Ê¶õ´Ö¤Ë¾®¤µ¤ÊÌþ¤·¤òÅô¤¹¥·¥ó¥Ü¥ë¤Ç¤â¤¢¤ê¤Þ¤¹¡£°ìÏ¢¤Î²èÁü¤Ï Beeboo.SLI¡Ê¥Ó¥Ö¡¼¥¹¥é¥¤¡ËÍͤ¬±¿ÍѤµ¤ì¤ë²èÁüÁǺॵ¥¤¥È ¡Ö¥¤¥é¥¹¥È̵ÎÁÁǺࡡ¥¤¥é¥¹¥È¥Ü¥Ã¥¯¥¹¡×¤Ø I¡ã¥¢¥¤¡ä¤µ¤ó ¤¬·ÇºÜ¤µ¤ì¤¿ºîÉʤò²Ã¹©¤·¤Æ»ÈÍѤµ¤»¤ÆÄº¤¤¤Æ¤¤¤Þ¤¹¡£I¡ã¥¢¥¤¡ä¤µ¤ó¤ÎÁÇŨ¤Ê¥¤¥é¥¹¥È¤ÈÁÇÀ²¤é¤·¤¤¥µ¥¤¥È¤Ë¶à¤ó¤Ç¸æÎ鿽¤·¾å¤²¤Þ¤¹¡£

    ÁõÃ֤Ť¯¤ê

    ¥á¥¤¥ó¤ÎÍ×ÁÇ

    ¤³¤ì¤é¤ËÀâÌÀ¤ÏÍפé¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤¤¤º¤ì¤â¡Ö»ý¤Ã¤Æ¤¤¤ë¤ÈÊØÍø¡×¤ÊÆ»¶ñ¤Ç¤¹¡£
    Raspberry Pi 2 Model B

    ¥¢¥Þ¥¾¥ó¤Ç 5,000±ßÁ°¸å
    3G USB ¥â¥Ç¥à¡§ L-05A

    2015ǯ10·î¤Ë¡Ö¥¤¥ª¥·¥¹¡×¤Ç 1,180±ß¤Ç¹ØÆþ¡ÊÃæ¸Å¡Ë
    MVNO SIM¡§0 SIM
    ¡Ê¥Ç¥¸¥â¥Î¥¹¥Æ¡¼¥·¥ç¥ó 2016ǯ02·î¹æÉÕ°ÈÇ¡Ë

    ¼ê¸µ¤Î SORACOM Air ¤È¤É¤Á¤é¤ò»È¤¦¤«Ì¤ä¿¤¬º£²ó¤Ï 0 SIM ¤ò»ÈÍÑ

    ãþÂΤκàÎÁ¤È²Ã¹©

    º£²ó¤ÎÁõÃ֤ǤÏÁàºîÍѤΥܥ¿¥ó¤ÎÁªÄ꤬Â礭¤Ê¥Ý¥¤¥ó¥È¤Ç¤·¤¿¡£¾®¤µ¤¹¤®¤ºÂ礭¤¹¤®¤Ê¤¤¤â¤Î¤òõ¤·°Ê²¼¤ÎÀ½ÉʤòÁª¤Ó¤Þ¤·¤¿¡£

    ¥Ñ¥Í¥ë¼èÉÕÍѲ¡¤·¥Ü¥¿¥ó¥¹¥¤¥Ã¥Á¡ÊÎп§¡Ë¤Ç¤¹¡£²á¹ó¤Ê»ÈÍѤËÂѤ¨¤é¤ì¤ë¥Ø¥Ó¡¼¥Ç¥å¡¼¥Æ¥£¡¼
    »ÅÍͤǤ¹¡£¥×¥Ã¥·¥åµ¡¹½Éô¡Ê¼ù»éÀ½¡Ë¤È¥Þ¥¤¥¯¥í¥¹¥¤¥Ã¥Á¤Ç¹½À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
    

    ¤³¤Î¥Ü¥¿¥ó¤Ï¼è¤ê¤Ä¤±»þ¤ÎÀêͭľ·Â¤¬¤ª¤è¤½ 34mm ¤Ç¡¢¤³¤ì¤ò 5mm ÄøÅÙ¤Î´Ö³Ö¤Ç 7¤ÄÀßÃÖ¤¹¤ë¤Ë¤ÏºÇÄã 28cm ¤Û¤É¤ÎŤµ¤¬É¬ÍפǤ¹¡£100±ß¥·¥ç¥Ã¥×¤ò¤¤¤¯¤Ä¤«¸«¤Æ¤Þ¤ï¤êãþÂΤȤ·¤Æ¼Ì¿¿¤Î¥Ñ¥¹¥¿¥±¡¼¥¹¤òÁª¤Ó¤Þ¤·¤¿¡ÊŤµ¡§30.6cm Éý¡§8.5cm ¹â¤µ¡§7.6cm¡Ë¡£ ³¸¤ÎÊý¤¬¾¯¤·¹­¤á¤ÎÂæ·Á¤Ç¡¢¸Ç¤¤Äì¤Î¤Û¤¦¤ò¾å¤Ë¤¹¤ì¤Ð°ÂÄê´¶¤¬¤¢¤ê¤Þ¤¹¡£

    ¤³¤Î¥±¡¼¥¹¤ÎÄì¤Ë¥Ü¥¿¥ó¤ò¼è¤ê¤Ä¤±¤ë¤Ë¤Ï¸ü¤µ 3mm ¤Î¥Ý¥ê¥×¥í¥Ô¥ì¥óÈÄ¤Ë 30mm ÄøÅ٤Τޤ뤤·ê¤¬ 7¤ÄɬÍפǤ¹¡£º£¤Î¼«Ê¬¤Î¹©ºîÎϤǤϤ³¤Î¤è¤¦¤Ë¹Å¤¯¸ü¤ß¤Î¤¢¤ëÁǺà¤ËåºÎï¤Ê¤Þ¤ë¤¤·ê¤ò¤¢¤±¤ë¤³¤È¤¬Æñ¤·¤¯¡¢Îý½¬ÍѤÎͽÈ÷¤Ç¤¢¤ì¤³¤ì¤ä¤Ã¤Æ¤ß¤Þ¤·¤¿¤¬¤Ê¤«¤Ê¤«¤¦¤Þ¤¯¤¤¤­¤Þ¤»¤ó¡£Å¹Àè¤Ç¤¿¤Þ¤¿¤ÞÌîºÚÄ´ÍýÍѤζâ°À½¤ÎÈ´¤­·¿¤¬ÌܤˤȤޤê¤Þ¤·¤¿¡£²¼¤Î¼Ì¿¿¤ÎÂç2 + ¾®2 ¥»¥Ã¥È¤Î¡Ö¾®¡×¤Î»ý¤Á¼ê¦¤Î³°·Â¤¬ 3cm ¤Ë¶á¤¯¡¢»î¤·¤Ë¤³¤ì¤òÇ®¤·¤Æ¥±¡¼¥¹¤Ë²¡¤·Åö¤Æ¤ë¤È¤Á¤ç¤¦¤É¤è¤¤¥µ¥¤¥º¤ÎåºÎï¤Ê·ê¤¬ÆÀ¤é¤ì¤Þ¤·¤¿¡£¥±¡¼¥¹¤Îξü¤Ë¤Ï 1cm ¤Î¥Þ¡¼¥¸¥ó¤òÀߤ±¡¢¥·¥ã¥Ã¥È¥À¥¦¥ó¥Ü¥¿¥óÍѤΰìÈÖ±¦¤Î·ê¤ÏÎÙ¤ê¤È 1cm Î¥¤·¤Æ¤¢¤È¤Ï 5mm ´Ö³Ö¤Ç·ê¤ò¤¢¤±¤Þ¤·¤¿¡£

    ÌîºÚ¤ÎÈ´¤­·¿ ¡Ê¶â°À½¡Ë

    ·ê¤ò¤¢¤±½ª¤¨¤¿¥±¡¼¥¹

    ¥Ñ¡¼¥Ä¤Î¼è¤ê¤Ä¤±

    ¼ÂºÝ¤Ë¥Ü¥¿¥ó¤ò¼è¤ê¤Ä¤±¤Æ¤ß¤ë¤ÈÁ´ÂΤΰõ¾Ý¤ÏÅö½é¤Î¥¤¥á¡¼¥¸¤É¤ª¤ê¤Ç¤·¤¿¡£¤¿¤À¡¢¥Ü¥¿¥ó 7¸Ä¡¢LED 13¸Äʬ¤Î·× 40ËܤÎÇÛÀþ¤òÆâÉô¤Î»Ä¤ê¤Î¥¹¥Ú¡¼¥¹¤Î»ÍÊý¤Ø¤á¤°¤é¤»¤ë¤Ë¤ÏÅŻҹ©ºîÍѤΰìÈÌŪ¤Ê¥ï¥¤¥ä¤Ç¤Ï¸Ç¤¹¤®¤Æ¼è¤ê²ó¤·¤ËÍ»Ä̤¬Íø¤«¤º¡¢½À¤é¤«¤¤Æ³Àþ¤ò²Ã¹©¤·¤ÆãþÂÎÆâ¤Î·ä´Ö¤ØÇç¤ï¤»¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£¥¹¥Ú¡¼¥¹ÀáÌó¤Î¤¿¤á GND ¤Ø¤Î·Ò¤®¹þ¤ß¤Ë¤Ï¥á¥¹¤Î¥Ô¥ó¥½¥±¥Ã¥È¤Î¥ª¥¹Â¦¤ò¥¹¥º¥á¥Ã¥­Àþ¤ÇÏ¢·ë¤·¤¿¤â¤Î¤ò»È¤¤¤Þ¤·¤¿¡£

    ¤¶¤Ã¤¯¤ê·ëÀþ¡£¥ï¥¤¥ä¤¬¸Ç¤¤

    ƳÀþ¤ËLED¤ÈÄñ¹³¤È¥Ï¥ó¥À¤Å¤±¤·¤ÆËöü¤ò¥ª¥¹¡¦¥á¥¹²½

    ºÛÃǤ·¤¿¿§²èÍÑ»æ¤ò²Ã¹©

    ¥±¡¼¥¹¤Ø°ì¼°¤ò¼ýǼ¤·¤ÆÆ°ºî³Îǧ

    ¥½¥Õ¥È¥¦¥§¥¢Í×ÁÇ

    ºîÀ®¤·¤¿¥×¥í¥°¥é¥àÎà°ì¼°¤ò°Ê²¼¤Î¾ì½ê¤Ç¸ø³«¤·¤Æ¤¤¤Þ¤¹¡£

    https://github.com/mkttanabe/iot_hospital

    »ÈÍѤ·¤Æ¤¤¤ë¥½¥Õ¥È¥¦¥§¥¢»ñ»º¤È¥µ¡¼¥Ó¥¹

    ÅÚÂæ¤Î Raspberry Pi 2 Model B ¤Ë¤Ïɸ½à¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤Î Raspbian ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤º¤ß¤Çº£²ó¤Ï°Ê²¼¤Î¥½¥Õ¥È¥¦¥§¥¢»ñ»º¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£

    ¤Þ¤¿¡¢¤Õ¤¿¤Ä¤ÎÍ¥¤ì¤¿¥µ¡¼¥Ó¥¹¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
    • Milkcocoa¡¡ÁõÃִ֤Υá¥Ã¥»¡¼¥¸¥ó¥°ÍÑ
    • SendGrid¡¡¼ÂÁõÃÖ¤«¤é¤Î¥á¡¼¥ëÁ÷¿®ÍÑ

    ¥á¥¤¥ó¥×¥í¥°¥é¥à

    ¼ÂÁõÃÖÍÑ¤Î¥×¥í¥°¥é¥àËÜÂÎ¤Ï Node.js ¥¹¥¯¥ê¥×¥È¤È¤·¤Æµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£

    /home/pi/node/iot_hospital.js

    Web ÈDz¾ÁÛÁõÃ֤Υڡ¼¥¸¤Ï°Ê²¼¤Î URL ¤«¤é»²¾È¤Ç¤­¤Þ¤¹¡£

    http://dsas.blog.klab.org/data/iot_hospital/index.html?ID02&ID01

    Ãí¡§Web ÈÇ¤ÎÆ°ºî¤Ë¤Ï Milkcocoa ¥¢¥«¥¦¥ó¥È¤ò¼èÆÀ¤· 22¹Ô¤á¤ËÀµ¤·¤¤ APP ID ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹

    ¥â¥Ç¥à¤Þ¤ï¤ê

    L-05A ¡Ü 0 SIM ¤ÎÁȤ߹ç¤ï¤»¤Ç¤Î¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Ø¤ÎÀܳ¤Ë¤Ï wvdial ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£/etc/wvdial.conf ¤Ï°Ê²¼¤ÎÆâÍÆ¡£"sudo wvdial" ¤Î¼Â¹Ô¤ÇÀܳ¤ò³«»Ï¤·¤Þ¤¹¡£

    /etc/wvdial.conf

    [Dialer Defaults]
    init1 = ATZ
    init2 = AT+CGDCONT=1,"IP","so-net.jp"
    Password = nuro
    Username = nuro
    Dial Attempts = 3
    Stupid Mode = 1
    Modem Type = Analog Modem
    Dial Command = ATD
    Stupid Mode = yes
    Baud = 115200
    New PPPD = yes
    Modem = /dev/ttyACM0
    ISDN = 0
    Phone = *99***1#
    Carrier Check = no
    

    ¢¨L-05A ¤Ï¥¼¥í¥¤¥ó¥¹¥È¡¼¥ëµ¡Ç½¤òÆâ¢¤·¤Æ¤ª¤ê½Ð²Ù»þ¤ÎÀßÄê¤Ë¤è¤ê USB Àܳ»þ¤Ë¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç CD-ROM ¥Ç¥Ð¥¤¥¹¤È¤·¤ÆÇ§¼±¤µ¤ì¤Þ¤¹¡£eject ¥³¥Þ¥ó¥É¤ÇËè²ó¤³¤ì¤ò²ò½ü¤¹¤ë¤Î¤¬ÈѤ路¤¤¤¿¤á¼ê¸µ¤Ç¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç USB ¥â¥Ç¥à¤È¤·¤ÆÇ§¼±¤µ¤ì¤ë¤è¤¦¤ËÀßÄê¤òÊѹ¹¤·¤Æ¤¤¤Þ¤¹¡£

    ¥â¥Ç¥à¥â¡¼¥É¤ËÀßÄꤷ¤¿ L-05A ¤Ï lsusb ¥³¥Þ¥ó¥É¤Ç°Ê²¼¤ÎÍ×ÎΤÇɽ¼¨¤µ¤ì¤Þ¤¹¡£

    Bus 001 Device 004: ID 1004:6124 LG Electronics, Inc. 
    

    ¥¹¥¿¡¼¥È¥¢¥Ã¥×¤Þ¤ï¤ê

    ¥·¥¹¥Æ¥àµ¯Æ°»þ¤Ëº£²ó¤Î°ì¼°¤ò¼«Æ°¼Â¹Ô¤¹¤ë¤¿¤á¤Ë /etc/rc.local ¤Ë iot_hospital.sh ¤Î¸Æ¤Ó½Ð¤·¤òµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£ iot_hospital.sh ¤Ï L-05A ¤¬ÁõÃ夵¤ì¤Æ¤¤¤ì¤Ð wvdial ¤Ç¥¤¥ó¥¿¡¼¥Í¥Ã¥ÈÀܳ¤ò»î¹Ô¤·¡¢Àܳ¤ËÀ®¸ù¤¹¤ì¤ÐÁ°·Ç¤Î iot_hospital.js ¤ò¼Â¹Ô¤·¤Þ¤¹¡£

    /etc/rc.local

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
    
    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
      printf "My IP address is %s\n" "$_IP"
    fi
    
    # run app
    sudo /bin/bash /home/pi/node/iot_hospital.sh &
    
    exit 0
    

    /home/pi/node/iot_hospital.sh


    (tanabe)
    klab_gijutsu2 at 07:01¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(2)¨¢TrackBack(0)
    2016ǯ01·î01Æü

    ¥Í¥Ã¥È¥ï¡¼¥¯Âбþ¤Î¸÷ÄÌÃΥǥХ¤¥¹¤ò¼«ºî¤·¤Æ¤ß¤ë

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    ¡Öblink(1)¡×¤Î¤³¤È

    ¥³¡¼¥É¥Í¡¼¥à¤Î¤è¤¦¤ÊÀ½ÉÊ̾¤Ç¤¹¤¬¡¢¡Öblink(1)¡×¤Ï KickStarter ȯ¤Î¥«¥¹¥¿¥Þ¥¤¥º²Äǽ¤Ê USB ¥Ç¥Ð¥¤¥¹¤Ç¤¹¡£ÀܳÀè¤Îµ¡´ï¤ä¥Í¥Ã¥È¥ï¡¼¥¯¤«¤é½êÄê¤Î¾ðÊó¤ò¼õ¤±¤È¤ë¤È LED ¸÷¤Î¿§¤äÌÀÌǤˤè¤ê¿Í´Ö¤Ø¤ÎÄÌÃΤò¹Ô¤¦¤â¤Î¤Ç¡¢2012ǯ¤ËÀ½Éʲ½¤µ¤ì 2013ǯ¤Ë¤Ï IFTTT ¤È¤ÎÏ¢·Èµ¡Ç½¤ò¶¯²½¤·¤¿ blink(1) mk2 ¤¬¥ê¥ê¡¼¥¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    ʸ»ú¤Î¾ðÊó¤Ï¿Í´Ö¤¬°Õ¼±Åª¤Ë¤½¤³¤Ë¸þ¤­¹ç¤ï¤Ê¤±¤ì¤ÐÅÁ¤ï¤é¤º¡¢²»¤Î¾ðÊó¤Ï¾õ¶·¤Ë¤è¤ê¾ì¤Î´Ä¶­¤òÍ𤹲ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£°ìÊý¡¢¡Ö¸÷¡×¤Ë¤è¤ë¾ðÊó¤Ï¤½¤ì¤¬Å¬ÅÙ¤ÊÌÀ¤ë¤µ¤Ç¤¢¤ì¤Ð¾¤Î²¿¤«¤ò˸¤²¤ë¤³¤È¤Ê¤¯¿Í´Ö¤Î»ë³¦¤ØÆÏ¤­¼«Á³¤Ëǧ¼±¤µ¤ìÆÀ¤Þ¤¹¡£¤½¤Î¤³¤È¤ò±þÍѤ·¤¿Îã¤Ï¾¤Ë¤â¸«¤é¤ì¤Þ¤¹¤¬¡¢blink(1) ¤â¤Þ¤¿¸÷¤ÎÆÃÀ­¤ò³è¤«¤·¤¿µ¡´ï¤Î¤Ò¤È¤Ä¤Ç¤¹¡£

    www.kickstarter.com gigazine.net gigazine.net
    ¢¨¾ÜºÙ¤Ê¥ì¥Ý¡¼¥È¤¬ GIGAZINE Íͤΰʲ¼¤Î°ìÏ¢¤Îµ­»ö¤Ë·ÇºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤³¤Î blink(1)¡¢¤Ê¤«¤Ê¤«³Ú¤·¤½¤¦¤Ê¤Î¤Ç»È¤Ã¤Æ¤ß¤¿¤¤¤È»×¤¤¤Þ¤·¤¿¡£¤¿¤À¡¢ÆüËܹñÆâ¤Ë¤Ïº£¤Î¤È¤³¤íÂåÍýʤ¬¤Ê¤¯¹ñ³°¤Î¥Þ¡¼¥±¥Ã¥È¤«¤é¹ØÆþ¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢¤³¤ì¤¬ * Èù̯¤Ë¹â²Á * ¤Ê¤Î¤Ç¤¹¤Í¡£ ¤½¤³¤Ç¡¢°ìÏ¢¤Îµ¡Ç½¤ÎÃæ¤Ç¤â¤Ã¤È¤â¶½Ì£¤Î¤¢¤ë¥Í¥Ã¥È¥ï¡¼¥¯Ï¢·ÈÉôʬ¤ò¼«ºî¤·¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£¤É¤³¤«¤Ç²¿¤«¤¬¤¢¤Ã¤¿¤éÃΤ餻¤ë¤È¤¤¤¦¤Î¤Ï¤Þ¤µ¤Ë IoT ¸þ¤­¤Î¥Æ¡¼¥Þ¤Ç¤¢¤ê¡¢¤Þ¤¿¡¢ÉáÃʤϼç¤Ë¥Ð¥¤¥×¥ì¥¤¥ä¡¼¤Ç¤¢¤ë LED ¤¬°ìÌö¼çÌò¤È¤Ê¤ë¤Á¤ç¤Ã¤ÈÌÌÇò¤¤¥±¡¼¥¹¤Ç¤â¤¢¤ê¤Þ¤¹¡£ÁõÃ֤ϡÖWi-Fi µ¡Ç½¤Ä¤­¤Î¾®¤µ¤Ê¥Þ¥¤¥³¥ó¡×¤È¤·¤Æ¤³¤Î¤È¤³¤í²¿¤«¤È½ÅÊõ¤·¤Æ¤¤¤ë ESP8266 ¥â¥¸¥å¡¼¥ë¤ò¥á¥¤¥ó¤Ë¹½À®¤¹¤ì¤Ð¼ê¶á¤ÊÁǺà¤Î¤ß¤Ç¤â USB ¥Ý¡¼¥È¤ØÄ¾ÁÞ¤·²Äǽ¤Ê¥µ¥¤¥º¤Ë¼ý¤á¤ë¤³¤È¤¬²Äǽ¤Ç¤·¤ç¤¦¡£ÁõÃ֤ؤΥá¥Ã¥»¡¼¥¸¥ó¥°ÍѤΥ½¥ê¥å¡¼¥·¥ç¥ó¤Ë¤Ïº£²ó PubNub ¤òÁª¤Ó¤Þ¤·¤¿¡£

    PubNub ¤Î¤³¤È / ESP8266 ¤È¤Î´Ø·¸

    PubNub ¤Ï Pub/Sub ¥â¥Ç¥ë¤Î¥ê¥¢¥ë¥¿¥¤¥à¥á¥Ã¥»¡¼¥¸¥ó¥°µ¡Ç½¤ò¼ç¼´¤È¤¹¤ë BaaS ¤Ç¤¹¡£ 2010ǯ¤Î¥í¡¼¥ó¥Á°ÊÍ襹¥Þ¥Û¤ä Web ¥¢¥×¥ê¸þ¤±¤Î¥×¥Ã¥·¥åÄÌÃÎ¥µ¡¼¥Ó¥¹Åù¤òŸ³«¡¢¶áǯ¤Ï IoT ÊýÌ̤ˤâÃíÎϤ·¤Æ¤ª¤êÂбþ¸À¸ì¡¦´Ä¶­¤Î¹­¤¤Í­ÍѤʥץé¥Ã¥È¥Õ¥©¡¼¥à¤Î¤Ò¤È¤Ä¤Ç¤¹¡£¥µ¥Ý¡¼¥ÈÂоݤϸ½ºß¤â³ÈÂçÃæ¡¢¤Á¤Ê¤ß¤Ë̵ÎÁÏȤâ¤Ê¤«¤Ê¤«¤ÎÂÀ¤ÃÊ¢¤Ç¤¹¡£

    ¤Þ¤¿¡¢GET ¥ê¥¯¥¨¥¹¥È¥Ù¡¼¥¹¤Î REST API ¥»¥Ã¥È¤¬ÍѰդµ¤ì¤Æ¤ª¤ê¡ÊHTTPS, HTTP¡Ë¡¢¤³¤ì¤òÍøÍѤ¹¤ì¤Ð¾¤Î¥·¥¹¥Æ¥à¤ä¥Ç¥Ð¥¤¥¹¤«¤é¤â PubNub ¤Î½êÄê¤Î Channel ¤Ø½ÀÆð¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£ ¤³¤Î¤è¤¦¤ËÊØµ¹¤ÎÂ礭¤¤ PubNub ¤Ç¤¹¤¬¡¢¤³¤Îµ­»ö¤ò½ñ¤¤¤Æ¤¤¤ë 2015ǯ12·î»þÅÀ¤Ç¤Ï¼Â¤Ï´Î¿´¤Î ESP8266 ¤¬¤Þ¤À¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£¤Ç¤â¹¬¤¤Èó¸ø¼°¤Î¥¯¥é¥¤¥¢¥ó¥È¥é¥¤¥Ö¥é¥ê¤¬¸ø³«¤µ¤ì¤Æ¤¤¤ë¤³¤È¤òÃΤê¤Þ¤·¤¿¡£ËܲȤΠGitHub ¥ê¥Ý¥¸¥È¥ê¤Ë¤â fork ¤µ¤ì¤Æ¤¤¤ë¤³¤È¤«¤éÈó¸ø¼°¤Ê¤¬¤é¤â¸øÇ§¤Î°ÌÃ֤Ť±¤Î¤è¤¦¤Ç¤¹¡£ ¾å¤Îµ­»ö¤Î¤È¤ª¤ê¤³¤ÎÈó¸ø¼°¥é¥¤¥Ö¥é¥ê¤ÏǤ°Õ¤Î¥¿¥¤¥ß¥ó¥°¤Ç¤ÎÁÐÊý¸þÄÌ¿®¤Ë¤ÏÂбþ¤·¤Æ¤¤¤Ê¤¤¡Êsubscribe() ¸Æ¤Ó½Ð¤·¸å¤Î¼õ¿®´°Î»Á°¤Ë¤Ï publish() ÉԲġˤâ¤Î¤Î¡¢º£²óÁÛÄꤷ¤Æ¤¤¤ëÁõÃ֤Ϥâ¤Ã¤Ñ¤é¼õ¿®Â¦¤Ç¤¢¤ë¤¿¤áÆÃ¤Ë»Ù¾ã¤Ï¤Ê¤µ¤½¤¦¤Ç¤¹¡£ºî¼Ô¤Î Kurt Clothier ¤µ¤ó¼«¿È¤¬¡Öcan be adjusted for a particular need¡×¤È½ñ¤¤¤Æ¤¤¤ë¤è¤¦¤Ë¥é¥¤¥Ö¥é¥ê¥³¡¼¥É¤ÏÍÑÅӤ˱þ¤¸Å¬µ¹¼ê¤ò²Ã¤¨¤ÆÍøÍѤ¹¤ì¤ÐÎɤ¤¤Ç¤·¤ç¤¦¡£
    ¤Ê¤ª¡¢¤³¤Î¥é¥¤¥Ö¥é¥ê¤Ï Espressif ¼Ò¤Ë¤è¤ë½ãÀµ¤Î ESP8266 SDK ¸þ¤±¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤è¤ê°·¤¤¤ä¤¹¤¤ Arduino IDE for ESP8266 ´Ä¶­¤Ç¤âÍøÍѤǤ­¤ë¤è¤¦¤ËÊ»¤»¤Æ¼ê¤ò²Ã¤¨¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

    »îºî¤Îưºî¤ÎÍÍ»Ò ¡Êư²è¡§1ʬ11Éà ´Ä¶­²»¡¦Áàºî²»¤¢¤ê¡Ë

    ²¼¤Îư²è¤Ï¡¢ºîÀ®¤·¤¿ÁõÃÖ¤Ø PubNub ¤Î Web ¥³¥ó¥½¡¼¥ë¤«¤é¥á¥Ã¥»¡¼¥¸¤òÁ÷¤êưºî¤ò³Îǧ¤·¤Æ¤¤¤ëÍͻҤǤ¹¡£³Æ¥á¥Ã¥»¡¼¥¸¤Ï¤½¤ì¤¾¤ì°ì¹Ô¤Î REST API µ­½Ò¤ËÃÖ¤­´¹¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£     

    ¼ê¸µ¤Ç¤Î¸½ºß¤Î»ÈÅÓ

    ¼ê¸µ¤Ç¤Ï¤³¤Î»îºî¤ò²¼µ­¤ÎÍ×ÎΤǻÈÍÑÃæ¡£¡Ö¸÷¤Ë¤è¤ëÄÌÃΡפ¬ÁÛÁü°Ê¾å¤ËÊØÍø¤Ç¼ÂÍÑŪ¤Ç¤¢¤ë¤³¤È¤ò¼Â´¶¤·¤Æ¤¤¤Þ¤¹¡£¥¹¥Þ¡¼¥È¤µ¤äɽ¸½À­¤Ï blink(1) ¤ËµÚ¤Ð¤Ê¤¤¤â¤Î¤ÎɬÍפˤʤì¤Ð¹¥¤­¤Ê¤è¤¦¤Ë¤¤¤¸¤ì¤ë¤³¤È¤¬¼êºî¤ê¤ÎÍøÅÀ¤Ç¤¹¤Í¡£

    • ²«ÅÀÅô¡§ÌÀÆü¤ÎͽÊ󤬱«¤Î¾ì¹ç
      ¡ÊIFTTT ¥ì¥·¥Ô¤òÍøÍÑ¡Ë

          ¡¡¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨
      ¤¢¤ê¤¬¤Á¤Ê¥Æ¡¼¥Þ¤À¤¬¼ÂºÝ¤Ë»È¤Ã¤Æ¤ß¤ë¤È¼êÊü¤»¤Ê¤¯¤Ê¤ë¡£¹¥Å·Â³¤­¤Ç²¿¤È¤Ê¤¯ÌýÃǤ·¤Æ¤¤¤ëÀÞ¤ËÉÔ°Õ¤ËÅÀÅô¤òÌܤˤ·¤¿¤éľ¤Á¤ËͽÊó¤ò¥Á¥§¥Ã¥¯¡£

    • ÀÄÅÀÌÇ¡§¹âÎð¼ÔÀ¤ÂӤΰÂÈݳÎǧÁõÃÖ¤ËÈ¿±þ¤¬¤¢¤Ã¤¿¾ì¹ç
      ¡ÊParse.com ¥µ¡¼¥Ð¥µ¥¤¥É¤Î Cloud Code ¤òÍøÍÑ¡Ë

          ¡¡¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨
      ¿Í¤ò¸¡ÃΤ¹¤ë¤ÈºÇû 30ʬ´Ö³Ö¤Ç Parse.com ¤Ø¥ì¥Ý¡¼¥È¤òÁ÷½Ð¤¹¤ë¼«ºîÁõÃÖ¤ò¼Â²È¤Ç²ÔÆ¯Ãæ¡£Âиþ¤¹¤ë¥µ¡¼¥Ð¦¥³¡¼¥É¤Ë»îºî¤Ø¤ÎÄÌÃνèÍý¤òÄɲ᣸÷¤ì¤Ð°Â¿´¡¢¥á¡¼¥ë¤Ë¤è¤ëÄÌÃΤè¤ê¤â¨»þÀ­¤¬¹â¤¯ÈÑ»¨´¶¤¬¾®¤µ¤¤¡£

    • ÀÖÅÀÌÇ¡§ÆÃÄê¤Î¥æ¡¼¥¶¤«¤é¤Î¥Ä¥¤¡¼¥È¤¬¤¢¤Ã¤¿¾ì¹ç
      ¡ÊIFTTT ¥ì¥·¥Ô¤òÍøÍÑ¡Ë

           ¡¡¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨

      ·ï¿ô¤Ï¾¯¤Ê¤¤¤¬¤¤¤Ä¤âÈó¾ï¤ËÍ­ÍѤʾðÊó¤òÄ󶡤·¤Æ¤¯¤ì¤ëË¿»á¤Î¥Ä¥¤¡¼¥È¤ò¸«Íî¤È¤µ¤Ê¤¤¤¿¤á¤Ë¡£

    • ÎÐÅÀÌÇ¡§½êÄê¤Î¥Ö¥í¥°¤¬¹¹¿·¤µ¤ì¤¿¾ì¹ç
      ¡ÊIFTTT ¥ì¥·¥Ô¤òÍøÍÑ¡Ë

           ¡¡¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨

      ¤È¤ê¤¢¤¨¤ººòǯËö ¡ÖKLab Advent Calendar 2015¡×¤Î¥Á¥§¥Ã¥¯ÍѤ˻ȤäƤߤ¿¤é¤È¤Æ¤â²÷Ŭ¡£

    • ´ÉÍýÍÑ HTML ¥Õ¥©¡¼¥à

           ¡¡¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨

      PC¡¦¥¹¥Þ¥Û¤Î Web ¥Ö¥é¥¦¥¶¤«¤éÁõÃ֤إá¥Ã¥»¡¼¥¸¤ò¼êÁ᤯´Êñ¤ËÁ÷¤ë¤¿¤á¤ËÍѰա£¡¡[¥½¡¼¥¹]

    ÁõÃ֤ˤĤ¤¤Æ

    ³°´Ñ¤È¹½À®

        

           ¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨

    ºàÎÁ

    ¥á¥â

    • blink(1) ¤Ï PC ¤Ê¤ÉÂбþµ¡´ï¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¤¬º£²ó¤ÎÁõÃ֤ϥͥåȥ¥¯ÀìÍѤǤ¢¤êÄÌ¿®µ¡Ç½¤òÆâ¢¤·¤Æ¤¤¤ë¤¿¤á USB AC ¥¢¥À¥×¥¿¤Ç¤â»È¤¨¤ë
    • USB ü»Ò¤Ïµ¬³Ê¾åξü¤Î2Ëܤ¬ 5V (500mA) OUT ¤È GND
          
    • ¥Õ¥ë¥«¥é¡¼ LED ¤Ç¤Ï¤Ê¤¯ÀÖ¡¦ÎС¦ÀÄ¡¦²«¤Î 4¤Ä¤Îñ¿§ LED ¤ò»ÈÍÑ¡£LED ÍѤÎÄñ¹³¤Ï¸½Êª¤Îȯ¿§¤ò¤ß¤Ê¤¬¤é¡ÖÀÖ 75¦¸ ÎÐ 75¦¸ ÀÄ 470¦¸ ²« 390¦¸¡×¤Ë
    • LED ¤Îɽ¼¨¤Ï³Æ¿§¡ÖÅÀÅô¡¦ÅÀÌÇ¡×¤ÎÆó¼ïÎà¤Ç¹ç·× 8¥Ñ¥¿¡¼¥ó¡£¤³¤ì¤Ï¼ê¸µ¤Ç¤Î¼ÂÍøÍѤòÁÛÄꤷÂÅÅö¤ÈȽÃǤ·¤¿¿ô
      ¡ÊÊ£¿ô LED ¤ÎÅÀÌÇ»þ¤ÏÌÀÌǤΥ¿¥¤¥ß¥ó¥°¤¬½Å¤Ê¤é¤Ê¤¤¤è¤¦¥×¥í¥°¥é¥à¦¤Ç´ÉÍý¡Ë
    • ÎØ¥´¥à¤Ï USB ¥³¥Í¥¯¥¿³°È´¤±ËÉ»ßÍÑ
    • ¥¨¥¢¥­¥ã¥Ã¥×¤Ï¥¿¥Ã¥Ñ³¸¤Î²¼¤ËÃæÉߤ­¡£LED ¸÷³È»¶¡¢³°´Ñ½Àϲ½¡¢USB ¥³¥Í¥¯¥¿¤È¥¿¥¯¥È¥¹¥¤¥Ã¥Á¤Î°µÇ÷ÍÑ
    • ¥¿¥Ã¥Ñ³¸¤Î¾å¤«¤é¥¿¥¯¥È¥¹¥¤¥Ã¥Á¤ò²¡¤¹¤ÈÁõÃÖ¤¬¥ê¥»¥Ã¥È¤µ¤ì¤ë¡£ÅŸ»Àܳ»þ¤È LED ¾ÃÅôÍѤ˻Ȥ¦

    ¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ

    ESP8266 ÍÑ PubNub ¥é¥¤¥Ö¥é¥ê

    Á°½Ò¤Î¤è¤¦¤Ë¸½»þÅÀ¤Ç¤Ï PubNub ¤Ï ESP8266 ¤òÀµ¼°¤Ë¥µ¥Ý¡¼¥È¤·¤Æ¤ª¤é¤º Espressif ¼Ò½ãÀµ SDK ¸þ¤±¤ÎÈó¸ø¼°¥é¥¤¥Ö¥é¥ê¤¬¸ø³«¤µ¤ì¤Æ¤¤¤ë¤Î¤ß¤Ç¤¹¡£¤³¤ì¤Ë°Ê²¼¤ÎÍ×ÎΤǼê¤ò²Ã¤¨¤Æ»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£

    • Arduino IDE ¤ÇÍøÍѤǤ­¤ë¤è¤¦¤Ë
    • publish() ¤Î´°Î»ÄÌÃÎÍѤ˥³¡¼¥ë¥Ð¥Ã¥¯¤òÅÐÏ¿²Äǽ¤Ë
    • HTTPS Âбþ

    °Ê²¼¤Ë¥½¡¼¥¹¥³¡¼¥É¤ò·ÇºÜ¤·¤Þ¤¹¡£¥é¥¤¥Ö¥é¥ê¡Öpubnub-esp8266¡×¤Ï¥Õ¥¡¥¤¥ë°ì¼°¤ò¥í¡¼¥«¥ë¤Î Arduino ¥é¥¤¥Ö¥é¥ê¥Õ¥©¥ë¥À²¼¤Î pubnub-esp8266/ ²¼¤Ø¥³¥Ô¡¼¤·¤Æ»È¤¤¤Þ¤¹¡£

    ¡Ê¥­¡¼¥ï¡¼¥É "DSAS" Éôʬ¤¬¥ª¥ê¥¸¥Ê¥ë¤«¤é¤ÎÊѹ¹²Õ½ê¡Ë

    pubnub.h - GitHub

    pubnub.cpp - GitHub

    Arduino ¥¹¥±¥Ã¥Á

    ¥¢¥×¥ê¦¤Î¥³¡¼¥É¤Ç¤¹¡£Arduino ¤Î SimpleTimer ¥é¥¤¥Ö¥é¥ê¤òÊ»ÍѤ·¤Æ¤¤¤Þ¤¹¡£

    LEDMessage.ino - GitHub

    ºî¤ë¤Î¤Ï´Êñ¡¢¥¢¥¤¥Ç¥£¥¢¼¡Âè¤Ç¤È¤Æ¤âÊØÍø¤Ë»È¤¨¤Þ¤¹¡£


    (tanabe)
    klab_gijutsu2 at 00:41¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    2015ǯ11·î06Æü

    º£¡¢¥ï¥ó¥Ü¥¿¥ó¤Î IoT ¥Ç¥Ð¥¤¥¹¤¬ÌÌÇò¤¤

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    ÊÆ¥¢¥Þ¥¾¥ó¤¬ 2015ǯ3·î31Æü¤Ëȯɽ¤·¤¿¡ÖAmazon Dash Button¡×¤Ï¥Ü¥¿¥ó¤ò²¡¤¹¤À¤±¤Ç½êÄê¤ÎÆüÍÑÉʤΥª¡¼¥À¡¼¤ò²Äǽ¤È¤¹¤ë¾®¤µ¤Ê¥Ç¥Ð¥¤¥¹¤Ç¤¹¡£ÅÅÃÓ¸ò´¹¤ÏÉԲġ£¥¢¥¤¥Æ¥à¤´¤È¤ËÀìÍѤΥǥХ¤¥¹¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£

    Dash Button¤Ï¤¿¤À¤ÎÄ̲áÅÀ¡¢¥¢¥Þ¥¾¥ó¤¬¿¿¤ËÁÀ¤¦¤Ï²ÈÅŤ¹¤Ù¤Æ¤È¤ÎÏ¢·È¥·¥ç¥Ã¥Ô¥ó¥°¡§¥®¥º¥â¡¼¥É¡¦¥¸¥ã¥Ñ¥ó
    Åö½é Dash Button ¤ÎÍøÍѤϾ·ÂÔÀ©¤Ç¥Ç¥Ð¥¤¥¹¤Ï̵ÎÁ¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤·¤¿¡£¤½¤Î¸å¡ð4.99 ¤Ç¤ÎÈÎÇä¤ËÊѹ¹¤µ¤ì¡¢2015ǯ9·î¤ËÊÆ¥¢¥Þ¥¾¥ó¤Ï Dash Button ¥Ó¥¸¥Í¥¹¤Î³ÈÂçÊý¿Ë¤ò·èÄꤷ¤Æ¤¤¤Þ¤¹¡£¹¥Ä´¤Î¤è¤¦¤Ç¤¹¡£

    ¤Ê¤ª¡¢º£¤Î¤È¤³¤í¤³¤Î¥µ¡¼¥Ó¥¹¤ÎÆüËܤǤγ«»Ï¤Ï¥¹¥±¥¸¥å¡¼¥ë¤µ¤ì¤Æ¤ª¤é¤º¡¢ÊÆ¥¢¥Þ¥¾¥ó¤«¤é Dash Button ñÂΤò¹ØÆþ¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤»¤ó¡£

    2016-12-22 Äɵ­¡§
    Amazon.co.jp ¤Ï 2016ǯ12·î5Æü¤ËÆüËܹñÆâ¤Ç Dash Button ¥µ¡¼¥Ó¥¹¤ò³«»Ï¤·¤Þ¤·¤¿¡£¤³¤ì¤Ëȼ¤¤´ØÏ¢¤¹¤ë°Ê²¼¤Îµ­»ö¤òÅö¥Ö¥í¥°¤ËÄɲ䷤Ƥ¤¤Þ¤¹¡£

    ¥ï¥ó¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤Î¥á¥ê¥Ã¥È¤È±þÍÑÎã

    Amazon Dash Button ¤Ï»ö¶È·ÁÂ֤Ȥ·¤Æ¤âÌÌÇò¤½¤¦¤Ç¤¹¤¬¤³¤Îµ­»ö¤Ç¤Ï¥Ç¥Ð¥¤¥¹ËÜÂΤËÃíÌܤ·¤Þ¤¹¡£Dash Button ¤Î¼ÂÂΤϥޥ¤¥³¥ó¤È̵Àþ LAN ¥â¥¸¥å¡¼¥ë¤ò¼çÍ×ÁǤȤ¹¤ë´¥ÅÅÃÓ¶îÆ°¤Î IoT ¥Ç¥Ð¥¤¥¹¤Ç¤¹¡£

           
    http://mpetroff.net/

    Dash Button ¤ÏÆÈΩ¤·¤¿ÁõÃ֤ʤΤÇɬÍפÊÀޤ˥¹¥Þ¡¼¥È¥Õ¥©¥ó¥¢¥×¥êÅù¤è¤ê¤âÁÇÁ᤯»ÈÍѤ¹¤ë¤³¤È¤¬²Äǽ¡£¥Ü¥¿¥ó¤Ò¤È¤Ä¤Îñµ¡Ç½¤Ç¤¢¤ë¤³¤È¤¬¼ê·Ú¤µ¤È¨±þÀ­¤ò¤µ¤é¤Ë¹â¤á¤Æ¤¤¤Þ¤¹¡£ ¤³¤Î̤¤¤è¤¦¤Î¤Ê¤¤¥æ¡¼¥¶¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ï¡¢¤½¤ÎÁÇËѤµ¤È¤Ï΢ʢ¤Ë¡¢´Ø·¸¼Ô¤¬¾ÃÈñ¼Ô¤Ø¤Î¸ú²ÌŪ¤Ê¥¢¥×¥í¡¼¥Á¤òÌϺ÷¤¹¤ë²áÄø¤Ë¤ª¤¤¤ÆÌÊÌ©¤ËÀïά¤òÎý¤Ã¤¿·ë²Ì¤ÈÁÛÁü¤µ¤ì¤Þ¤¹¡£°ì¸«¡Öï¤Ç¤â»×¤¤¤Ä¤­¤½¤¦¤Ê¤³¤È¡×¤Ï¤½¤ì¤¬ËÜÅö¤Ë¼Â¸½¤µ¤ì¤ì¤Ð¤·¤Ð¤·¤Ð»Â¿·¤Ç¤¹¡£¼ê·Ú¤µ¤È¤¤¤¨¤Ð¥¹¥Þ¥Û¤Ð¤«¤ê¤ËÌܤ¬¸þ¤±¤é¤ì¤ë¸½¾õ¤Ë¤ª¤¤¤Æ¤¢¤¨¤ÆÀìÍѥϡ¼¥É¤Î·ÁÂÖ¤òÁª¤ó¤ÀȯÁۤˤϳؤ֤٤­Í×ÁǤ¬¤¢¤ë¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£

    ¤³¤Î¥Ç¥Ð¥¤¥¹¤Î¥¢¥¤¥Ç¥£¥¢¤Ï¥Ó¥¸¥Í¥¹ÍÑÅӰʳ°¤Î IoT ¤Ë¤ª¤¤¤Æ¤â¹­¤¯³èÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤·¤ç¤¦¡£¡ÖʪÍý¥Ü¥¿¥ó¤Î²¡²¼¡×¤È¤¤¤¦¼ê´Ö¤¬¤«¤«¤é¤ºÃ¯¤Ë¤Ç¤â¤Ç¤­¤ë´Êñ¤ÊÁàºî¤ò¥È¥ê¥¬¡¼¤Ë¤É¤Î¤è¤¦¤Ê½èÍý¤ò¹Ô¤¦¤«¤Ï¥¢¥¤¥Ç¥£¥¢¼¡Âè¤Ç¤¢¤ê¡¢¤½¤ÎÊØµ¹¤ÈÌ¥ÎϤ˵¤¤Å¤¤¤¿¸þ¤­¤¬¤³¤Î°Â²Á¤Ê Dash Button ¤òËÜÍè¤ÎÌÜŪ°Ê³°¤Î¤³¤È¤ËÍøÍѤ·»Ï¤á¤Æ¤¤¤Þ¤¹¡£°Ê²¼¤Ë¤¤¤¯¤Ä¤«Îã¤òµó¤²¤Þ¤¹¡£

    • How I Hacked Amazon¡Çs $5 WiFi Button to track Baby Data ¡Ê2015ް08ް10¡Ë - medium.com
      ¤ª¤½¤é¤¯¤³¤ì¤¬ºÇ½é¤Î Dash Button žÍÑÎã¡£Edward Benson »á¤Ï¼«Âð¤ÇÆý»ù¤ÎÇÓÝõÆü»þ¤ò¼êÁ᤯µ­Ï¿¡¦´ÉÍý¤¹¤ë¼êÃʤòõ¤¹Ãæ¤Ç¡¢ÌëÃæ¤Ë¥¹¥Þ¥Û¤òÁàºî¤¹¤ëÈѤ路¤µ¤â¤Ê¤¯¥Ü¥¿¥ó²¡²¼¤Î¤ß¤Ç´°·ë¤¹¤ë Dash Button ¤ÎĹ½ê¤ËÃåÌܤ·¤¿¡£
      "using your smart phone at night disrupts sleep. I want a simple button I can stick to the wall and push to record"

      Amazon ¤Ø¤Î¥ª¡¼¥À¡¼¤ò¹Ô¤¦¾å¤ÇËÜÍèɬÍפʽé´üÀßÄê¤ò°Õ¿ÞŪ¤ËÊÝα¡£¥Ç¥Ð¥¤¥¹ËÜÂΤò¥Ï¥Ã¥¯¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢¥Ü¥¿¥ó²¡²¼¡Á¥Ç¥Ð¥¤¥¹µ¯¾²»þ¤Ë LAN ¾å¤Ëή¤ì¤ë ARP ¥Ñ¥±¥Ã¥È¤ËÃíÌܤ·¡¢Åö³º¥Ç¥Ð¥¤¥¹¤Î MAC ¥¢¥É¥ì¥¹¤ò¸¡½Ð¤¹¤ì¤Ð¤½¤ì¤ò¥È¥ê¥¬¡¼¤Ë PC ¤Ç½èÍý¤ò¼Â¹Ô¤¹¤ë¼êË¡¤Ë¤è¤Ã¤ÆÍ×·ï¤ò¼Â¸½¤·¤¿¡£


      https://medium.com/
      ¡ÖThe Internet of Things is already here.¡×¤È¤¤¤¦·ë¸ì¤¬°õ¾Ý¤Ë»Ä¤ë¡£¥Ç¥Ð¥¤¥¹¤Î¥³¥¹¥È¤ò»ö¼Â¾åÅÙ³°»ë¤·¤Æ Button ¤ò¶¡µë¤·¤Æ¤¤¤ë¥¢¥Þ¥¾¥ó¤Ë¤È¤Ã¤Æ¤Ï¤¢¤Þ¤ê´¿·Þ¤Ç¤­¤Ê¤¤»î¤ß¤È»×¤ï¤ì¤ë¤¬¡¢ËÜÂΤò²þÊѤ·¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¯°Ọ̃Ū¤Ë¤Ïñ¤Ë¡Ö̤ÅÐÏ¿¡×¤Î¾õÂ֤˲᤮¤Ê¤¤¡£¤³¤Î¼ê¤ÎžÍѤ¬³È¤¬¤ì¤Ð²¿¤é¤«¤ÎÂй³Á¼ÃÖ¤òÉߤ«¤ì¤ë²ÄǽÀ­¤¬³§Ìµ¤Ç¤Ï¤Ê¤¤¤â¤Î¤Î¡¢¸½»þÅÀ¤Ç¤Ï¤³¤¦¤·¤¿¹Ô°Ù¤ËÂФ·Ä¾ÀÜ¥¯¥ì¡¼¥à¤ò¤Ä¤±¤ë¤³¤È¤ÏÆñ¤·¤¤¤À¤í¤¦¡£

    • Amazon Dash — It¡Çs Dinner Time! ¡Ê2015ް08ް27¡Ë - theappslab.com
      Raymond Xie »á¤Ï Dash Button ¤Î¥³¥¹¥È¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Î¹â¤µ¤ËÂç´î¤Ó¡£²ÔÆ¯Ãæ¤ËÇ®¤ò»ý¤Ä PiTFT ¤ò¥³¡¼¥É¤òÈ´¤«¤º´Êñ¤Ë ON/OFF ¤¹¤ëÌÜŪ¤Ë¤µ¤Ã¤½¤¯ÍøÍѤ·¤Æ¤¤¤¿¤È¤³¤í±üÊý¤«¤é¤â¤Ã¤È¼ÂÍÑŪ¤Ê¤³¤È¤Ï¤Ç¤­¤Ê¤¤¤Î¡©¤Èʹ¤«¤ì¡¢¥Ø¥Ã¥É¥Û¥óÁõÃåΨ¤Î¹â¤¤Æó³¬¤Î»Ò¶¡¤¿¤Á¤òͼ¿©»þ¤Ë¤¤¤Á¤¤¤Á¸Æ¤Ó¤Ë¹Ô¤¯Âå¤ï¤ê¤Ë Dash Button ¤Ç»Ò¶¡Éô²°¤Î ¥Õ¥£¥ê¥Ã¥×¥¹ ¥Ò¥å¡¼ ¤òÅÀÌǤµ¤»¤ë¤³¤È¤ò»×¤¤¤Ä¤¯¡£Button ¤ÏÂæ½ê¤Î±üÊý¤Î¼ê¤Ë¡£

    • PizzaDash ¡Ê2015ް09ް12¡Ë - github.com/bhberson
      Á°½Ð¤Î Benson »á¤Îµ­»ö¤Ë¿¨È¯¤µ¤ì¤¿¡¢¤È Brody Berson »á¤Ï Dash Button ¤ò¥É¥ß¥Î¥Ô¥¶¤ÎÂðÇÛ¥ª¡¼¥À¡¼¤ËÍøÍÑ¡Ê̵ÏÀ¥¢¥Þ¥¾¥ó¤È¤Ï̵´Ø·¸¡Ë¡£¥Ü¥¿¥ó²¡²¼¤ò¥È¥ê¥¬¡¼¤Ë Raspberry Pi ¤¬ ¥É¥ß¥Î¥Ô¥¶¸ø¼° API ¤òᤤ¤ÆÃíʸÀ®Î©¡£
      2015-11-25 Äɵ­¡§
      ±Ñ¹ñ¥É¥ß¥Î¥Ô¥¶¤¬¸ø¼°¤Ë¥ï¥ó¥Ü¥¿¥ó¤Î¥ª¡¼¥À¡¼¥µ¡¼¥Ó¥¹¤ò³«»Ï¤¹¤ë»Ý¤Î¾ðÊó¤¢¤ê ¡Ê2015-11-23) "PizzaDash" ¤«¤é¤Î±Æ¶Á¤Î̵ͭ¤ÏÉÔÌÀ¤À¤¬¡¢dominos ¼Ò¤Ï¤³¤ì¤Þ¤Ç¤ËÆÈ¼«¤ÎÍÍ¡¹¤Ê¥ª¥ó¥é¥¤¥ó¥ª¡¼¥À¡¼¥·¥¹¥Æ¥à¤ò³ÎΩ¤·¤Æ¤ª¤ê IT ³èÍѤˤ­¤ï¤á¤ÆÀѶËŪ

    • Amazon dash button automation silliness. ¡Ê2015ް09ް26¡Ë - www.youtube.com
      Michael Donnelly »á¤Ë¤è¤ë Youtube ¤Ø¤ÎÅê¹ÆÆ°²è¡£¸¼´Ø¤Î¾ÈÌÀ¤òÅÀÅô¡¿¾ÃÅô¤·¤¿¤ê¡¢¥¬¥ì¡¼¥¸¤Î¼Ö¤ÎÆâÉô¤¬°ìÄê¤Î²¹Å٤ˤʤ俤饯¥é¥¯¥·¥ç¥ó¤òÌĤ餷¤¿¤ê¡£

    • Dash Hacking: Bare-Metal STM32 Programming - learn.adafruit.com
      Adafruit ¼Ò ¤Î TONY DICOLA »á¤Ë¤è¤ëÀµÌ̤«¤é¤Î Dash Button ¥Ï¥Ã¥¯¤Î»î¤ß¡£¥Õ¥¡¡¼¥à¥¦¥§¥¢¤ò½ñ¤­´¹¤¨ËÜÂΤΠLED ¤ò¼«ºî¤Î¥³¡¼¥É¤ÇÀ©¸æ¡£"this guide didn't touch on the Dash's WiFi module yet" ¤È¤Î¤³¤È¡£

    ¤Þ¤¿¡¢ÊÆ¥¢¥Þ¥¾¥ó¥¦¥§¥Ö¥µ¡¼¥Ó¥¹¡ÊAWS¡Ë¤Ï 2015ǯ10·î¤Î AWS IoT ¥Ù¡¼¥¿¸ø³«¤Ë¤¢¤ï¤»¡¢Amazon Dash Button ¤ÈƱ°ì¤Î¥Ï¡¼¥É¤ò»È¤Ã¤¿ AWS IoT Button (beta)¤òȯɽ¤·¤Þ¤·¤¿¡£10·î6¡Á9Æü¤Ë¥é¥¹¥Ù¥¬¥¹¤Ç³«ºÅ¤µ¤ì¤¿¡ÖAWS re:Invent 2015¡×¤Î²ñ¾ì¤Ç¤Ï»²²Ã¼Ô¤Ø AWS IoT Âθ³ÍѤËÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥Ü¥¿¥ó¤ò²¡¤¹¤È AWS IoT ¥µ¡¼¥Ó¥¹¤ØÄÌÃΤµ¤ìÍøÍѼԤε­½Ò¤·¤¿½èÍý¤ò¼Â¹Ô¤Ç¤­¤ë¤·¤¯¤ß¤Ç¤¹¡£
            

    ¤µ¤é¤Ë¡¢¥¯¥é¥¦¥É¥Õ¥¡¥ó¥Ç¥£¥ó¥°È¯¤Î¼¡¤Î¤è¤¦¤Ê¥ª¥ê¥¸¥Ê¥ë¤Î¥Ü¥¿¥óÀ½ÉʤâÅо줷¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¤³¤ì¤«¤é¤â¿·¤·¤¤¤â¤Î¤¬½Ð¤Æ¤¯¤ë¤³¤È¤Ç¤·¤ç¤¦¡£

    ¤³¤Î¤è¤¦¤Ë¡Ö¥Ü¥¿¥ó¤Ò¤È¤Ä¡×¤Î IoT ¥Ç¥Ð¥¤¥¹¤ÎÍ­ÍÑÀ­¤¬¤¤¤ÞÃíÌܤµ¤ì¤Æ¤¤¤Þ¤¹¡£

    ¹©ºî¤È¼Â¸³

    ¤³¤¦¤¤¤Ã¤¿»ö¾ð¤òÇØ·Ê¤Ë¥ï¥ó¥Ü¥¿¥ó¥Ç¥Ð¥¤¥¹¤ò¼«ºî¤¹¤ë¸þ¤­¤â¤¢¤ê¡ÊÎã 1¡¦Îã 2¡Ë¡¢»î¤ß¤Ë¼ê¸µ¤Ç¤â¼ê¶á¤ÊºàÎÁ¤ò»È¤Ã¤Æºî¤Ã¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£ÁõÃÖ¤¬·Á¤Ë¤Ê¤ì¤Ð¤½¤³¤Ë¤É¤Î¤è¤¦¤Ê½èÍý¤òÍí¤á¤ë¤«¤Ï¼«Í³¤Ç¤¹¤¬¡¢¤Þ¤º¤â¤Ã¤È¤â¿È¶á¤ÊÂêºà¤Î¤Ò¤È¤Ä¤È¤·¤Æ¼«Ê¬¤¢¤Æ¤Î¥á¡¼¥ëÁ÷¿®µ¡Ç½¤òÁȤ߹þ¤ß¤Þ¤·¤¿¡£

    • º£²ó¤Î¡Ö¥ï¥ó¥Ü¥¿¥ó¥á¡¼¥é¡×¤Ï»îºî¾å¤ÎÂêºà¤Ç¤Ï¤¢¤ê¤Þ¤¹¤¬¡¢¼ÂÍѤòÁÛÄꤹ¤ë¤È°ÊÁ°¼ê¤¬¤±¤¿¹âÎð¼ÔÀ¤ÂÓ°ÂÈݳÎǧ¤Î¤·¤¯¤ß¤ÈÊ»¤»¡¢±ó³ÖÀ¤ÂÓ¤«¤é¤Î¼ê´Ö¤¤¤é¤º¤Î ping ŪÄê¹ïÏ¢Íí¤ä¥Ê¡¼¥¹¥³¡¼¥ëŪ¤Ê»È¤¤Êý¤¬¤Ç¤­¤½¤¦¤Ç¤¹

    »îºî¤Îưºî¤ÎÍÍ»Ò ¡Êư²è¡§30ÉáË

        

    ÁõÃ֤ˤĤ¤¤Æ

    »îºî¤·¤¿ÁõÃ֤κàÎÁ¤È¹½À®¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£Arduino IDE for ESP8266 ¥×¥í¥¸¥§¥¯¥È¤Î¥ê¥½¡¼¥¹¤ò»ÈÍѤ· ESP8266 Wi-Fi ¥â¥¸¥å¡¼¥ë¤ò¥¹¥¿¥ó¥É¥¢¥í¥ó¤Î¥Þ¥¤¥³¥ó¤È¤·¤ÆÀ©¸æ¤·¤Æ¤¤¤Þ¤¹¡£
    ¡Ê²Á³Ê¤Ï 2015ǯ10·î»þÅÀ¡Ë

    • ESP8266 ¥â¥¸¥å¡¼¥ë¡¡CDP-ESP8266 - Cerevo¡¡¡ï842¡ÊÀÇÊÌ¡Ë
    • ¥Ð¥Ã¥Æ¥ê¡¼¡¡RW-111¡ÊÅÅÏõ¡ÍÑ¡§3.6V 800mAh¡Ë - ¥í¥ï¥¸¥ã¥Ñ¥ó¡¡¡ï780¡ÊÀǹþ¡Ë¡¡amazon
      ¢¨ÀâÌÀÍó¤Î¡Öñ»°ÅÅÃÓ»°ËܤηÁ¾õ¡×¤Îµ­½Ò¤Ï¡Öñ»ÍÅÅÃÓ»°Ëܡפ¬Àµ¤·¤¤
    • ¥Ö¥ì¥Ã¥É¥Ü¡¼¥É¡¡EIC-15010 - ¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹¡¡¡ï216¡ÊÀǹþ¡Ë
    • ¥¸¥ã¥ó¥×¥ï¥¤¥ä¡¦Äñ¹³¡¦¥¿¥¯¥È¥¹¥¤¥Ã¥Á¡¦ÀÖ LED
    • ¥¿¥Ã¥Ñ¡¦¥Ú¡¼¥Ñ¡¼¥¿¥ª¥ë

         

         

    ¥á¥â

    • ¥¿¥¯¥È¥¹¥¤¥Ã¥Á¤Ï¥Ú¡¼¥Ñ¡¼¥¿¥ª¥ë¤ò¥¯¥Ã¥·¥ç¥ó¤Ë¥¿¥Ã¥Ñ³¸¤Î¤¿¤ï¤ß¤òÍøÍѤ·¤ÆÁàºî¡£¥Á¡¼¥×¤Ê¤¬¤é¤³¤ÎÃæÉߤ­¤ÏÁõÃÖ¤òÊݸ³°´Ñ¤òϤ餲 LED ¤Î¥·¥§¡¼¥É¤ÎÌò³ä¤â
    • ¥í¥ï¤Î¥Ð¥Ã¥Æ¥ê¡¼¤Ï¼ê¸µ¤Î¸ÇÄêÅÅÏõ¡ ¡Ê¥æ¥Ë¥Ç¥ó¼ÒÀ½ UCT-002¡Ë ÍѤ˥¹¥È¥Ã¥¯¤·¤Æ¤¤¤¿¤â¤Î¡£Äê³Ê¤â¥µ¥¤¥º¤â¤Ô¤Ã¤¿¤ê¤À¤¬½¼ÅŤˤÏÅÅÏõ¡¤Ø¤ÎÁõÃ夬ɬÍס£½¼ÅÅ´ï¤Î̵ͭ¤òƱ¼Ò¤ØÌ䤤¹ç¤ï¤»¤ë¤È¤ä¤Ï¤ê¡ÖËÜÂν¼ÅŤΤߡפȤΤ³¤È
    • ¥Ð¥Ã¥Æ¥ê¡¼¾ÃÈñÍÞÀ©¤Î¤¿¤á ESP8266 ¥â¥¸¥å¡¼¥ë¤ÏÊ¿»þ¤Ï¥Ç¥£¡¼¥×¥¹¥ê¡¼¥×¾õÂÖ¤ÇÂÔµ¡¤µ¤»¤ë¡£¥Ü¥¿¥ó²¡²¼¤Ç¥ê¥»¥Ã¥È¤ò¤«¤±¤ë¤Èµ¯¾²¤·¤ÆÉ¬ÍפʽèÍý¤ò¹Ô¤¤¤Õ¤¿¤¿¤Ó¥¹¥ê¡¼¥×¤Ø
      • ¥Ç¥£¡¼¥×¥¹¥ê¡¼¥×Ãæ¤Î ESP8266 ¤Î»ÈÍÑÅÅή¤Ï¸ø¾Î 10¦ÌA¡¢¼ê¸µ¤Î¼Â¬¤Ç 11¦ÌA
      • ESP8266EX ¤Î Operating Voltage ¤Ï 3.0¡Á3.6V¡¢Operating Current(Average value) ¤Ï¸ø¾Î 80mA¡Ê²¼¿Þ¡Ë¡¢º£²ó¤Î¼Â¸³¤Ç¥Ü¥¿¥ó²¡²¼¡ÁºÆ¥¹¥ê¡¼¥×¤Þ¤Ç¤Î¼Â¬¤Ç¤Ï LED ÅÀÅôʬ¤ò´Þ¤á¤ª¤è¤½ 60mA¡£½èÍý´°Î»¤Þ¤Ç¤Î½êÍ×»þ´Ö¤Ï 10ÉÃÁ°¸å

                    ESP8266EX Datasheet Version 4.4 (2015-08-01) Page 8
                        ¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

      • ¥Ð¥Ã¥Æ¥ê¡¼¶îư²Äǽ´ü´Ö¤òÂç¤Þ¤«¤Ë»î»»¤·¤Æ¤ß¤ë¡£
        ¾ò·ï¤È¤·¤Æ¡¢»ÈÍѼԤ¬ 1Æü¤Ë 2²ó¡¢µ¯¾²»þ¤È½¢¿²»þ¤Ë¥Ü¥¿¥ó¤ò²¡¤¹¤â¤Î¤È¤¹¤ë¡£¤³¤Î¾ì¹ç¡¢Á°·Ç¤ÎÃͤòÅö¤Æ¤Ï¤á¤ë¤È 1Æü¤Î¤¦¤Á 2 ¡ß 10Éô֤¬ 80mA¡¢»Ä¤ê¤Î 86380Éô֤¬ 11¦ÌA¡Ê0.011mA¡Ë¤Ç¤¢¤ê¡¢Ê¿¶Ñ¤ò¤È¤ë¤È¤ª¤è¤½ 0.03mA¡£ ¼«Á³ÊüÅÅÆÃÀ­¤ò²ÃÌ£¤»¤º www.digikey.jp ¤Î ÅÅÃÓ¼÷Ì¿¥«¥ê¥­¥å¥ì¡¼¥¿¤Çñ½ã·×»»¤¹¤ë¤Èº£²ó¤Î¥í¥ï¤Î 800mAh ¤Î¥Ð¥Ã¥Æ¥ê¡¼¤Î¾ì¹ç¤Ï¼¡¤Î·ë²Ì¤È¤Ê¤ë
        800mAh / 0.03mA * 0.7 ¢â 18666.67 »þ´Ö ¢â 777.78 Æü ¢â 25.1 ·î ¢â 2.1 ǯ

      • ¤Á¤Ê¤ß¤Ë Amazon Dash Button ¤Ï ÊÆ¥¨¥Ê¥¸¥ã¥¤¥¶¡¼¼Ò¤Î Ultimate Lithium ´¥ÅÅÃÓ Ã±4·Á¡ÊÆó¼¡ÅÅÃӤǤϤʤ¤¡Ë1ËܤòÆâ¢¤·¤Æ¤¤¤ë¡£¥¢¥ë¥«¥êÅÅÃÓ¤ËÈæ¤Ù¡ÖºÇÂç 9ÇÜĹ»ý¤Á¡×¤ò¼æ¶ç¤È¤¹¤ë¸½»þÅÀ¤Ç¤ª¤½¤é¤¯ºÇ¶¯¤Î´¥ÅÅÃÓ¡£²¼µ­µ­»ö¤Î Button ʬ²ò¼Ì¿¿¤Ë¤³¤ÎÅÅÃÓ¤ÎÍͻҤâ¼Ì¤Ã¤Æ¤¤¤ë¡£ÅŶˤ¬¥¿¥ÖÉÕ¤±¤µ¤ì¤Æ¤ª¤êÅÅÃÓ¸ò´¹¤ÏÁÛÄꤵ¤ì¤Æ¤¤¤Ê¤¤ÌÏÍÍ
        Amazon Dash Button Teardown - mpetroff.net
        AWS IoT Button¤òʬ²ò¤·¤Æ¤ß¤¿ - Developers.IO
        ¢¨¥×¥é¥¹¶Ë¦¤Î¹õÃϤËÇòʸ»ú¤Î¡Ö12-2034¡×¡Ö12-2035¡×Åù¤Îɽµ­¤Ï̤»ÈÍÑ»þ¤ÎÉʼÁÊÝ»ý´ü¸Â¤ò¼¨¤¹¡£20ǯ¡ª

        http://mpetroff.net/
      • ¥Ç¡¼¥¿¥·¡¼¥È¤Ë¤è¤ë¤È ¥¨¥Ê¥¸¥ã¥¤¥¶¡¼ Ultimate Lithium AAA ¤Ï "Max Discharge: 1.5 Amps Continuous, 2.0Amps Pulse (2 sec on / 8 sec off)" ¤È¹âÍÆÎ̤Ǥ¢¤ê¡¢Dash Button ¤Î¤è¤¦¤Ë´Ö·çŪ¤ËÅÅÎϤò»ÈÍѤ¹¤ëµ¡´ï¤Ë¤ª¤¤¤Æ¤Ï¸å¼Ô¤Î¥á¥ê¥Ã¥È¤òºÇÂç¸Â¤Ëµý¼õ¤Ç¤­¤ë¤â¤Î¤ÈÁÛÁü¤µ¤ì¤ë
      • ¾å¤Î mpetroff.net ¤Îµ­»ö¤Ë¼¡¤Îµ­½Ò¤¬¤¢¤ë¡£ÆâÉô¤Ç 3.3V ¤Ë¾º°µ¤·¤Æ¤¤¤ë¤È¤Î¤³¤È
        "The Dash Button operates at 3.3 V boosted from the battery¡Çs nominal 1.5 V, drawing 200–300 mA from the battery when on and 2.3 ¦ÌA when in sleep."
        ¸½»þÅÀ¤Ç¤Ï Dash Button ¤Î battery life ¤Ë´Ø¤¹¤ë¸ø¼°¤Îµ­½Ò¤Ï¸«Åö¤¿¤é¤º
      • ¥¨¥Ê¥¸¥ã¥¤¥¶¡¼¤Î Ultimate Lithium ´¥ÅÅÃÓ¤ÏÀ­Ç½Áê±þ¤Ë¹â²Á¤¤¡£¥Ð¥Ã¥Æ¥ê¡¼¤À¤±¤ò¤ß¤Æ¤â Dash Button ¤Î¡ð4.99¤È¤¤¤¦²Á³ÊÀßÄê¤Ø¤Î¶½Ì£¤òͶ¤ï¤ì¤ë
        Energizer L92BP-Energizer Ultimate Lithium AAA Battery (4-Pack) - www.amazon.com¡¡¡ð7.99
        ¥¨¥Ê¥¸¥ã¥¤¥¶¡¼ ¥ê¥Á¥¦¥à´¥ÅÅÃÓñ4·Á 4Ëܥѥå¯ - www.amazon.co.jp¡¡¡ï1250
    • ¥Ö¥ì¥Ã¥É¥Ü¡¼¥É¤ò»È¤ï¤Ê¤±¤ì¤ÐÇÛÀþÉôʬ¤ò¤â¤Ã¤È¾®¤µ¤¯¤Ç¤­¤ë¤¬Á´ÂΤΥµ¥¤¥º¤Ï¼Â¸³ÍѤȤ·¤Æ¤Ï¼êº¢¤«

    ¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ

    ¥á¡¼¥ë¤ÎÁ÷¿®¤Ë¤Ï¡ÖSendGrid¡×¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£¤½¤ÎÊýÌ̤Ǥϥ᥸¥ã¡¼¤Ê¥µ¡¼¥Ó¥¹¤Ç¤¢¤ê¡¢¹ñÆâ¤ËÀµµ¬ÂåÍýŹ¡Ê³ô¼°²ñ¼Ò ¹½Â¤·×²è¸¦µæ½ê¡Ë¤¬¤¢¤êÆüËÜÈǤθø¼°¥µ¥¤¥È¤â±¿±Ä¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÍôÍÑËɻߤΤ¿¤á¥µ¥¤¥ó¥¢¥Ã¥×¤ÎºÝ¤Ë¤Ï»ÈÍÑÌÜŪÅù¤Î¾ÜºÙÀâÌÀ¤¬µá¤á¤é¤ì¥¢¥«¥¦¥ó¥Èȯ¹Ô²ÄÈݤϿʹ֤ˤè¤Ã¤Æ¿³ºº¤µ¤ì¤Þ¤¹¡£

    ¥Õ¥ê¡¼¥×¥é¥ó¤Ç 400ÄÌ¡¿Æü¤ÎÁ÷¿®¤¬²Äǽ¤Ç¤¢¤ê¼ê¸µ¤Ç¤ÎÍøÍѤˤϤޤº½½Ê¬¤½¤¦¤Ç¤¹¡£¥É¥­¥å¥á¥ó¥È¡¦API ¤â½¼¼Â¤·¤Æ¤¤¤Þ¤¹¡£ º£²ó¤Ïñ½ãÌÀ²÷¤Ç¤¯¤ß¤·¤ä¤¹¤¤½éÈǤΤۤ¦¤Î Web API ¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£ ¤È¤³¤í¤Ç¡¢Â¿¤¯¤Î¥¯¥é¥¦¥É¥µ¡¼¥Ó¥¹¤¬¤½¤¦¤Ç¤¢¤ë¤è¤¦¤Ë SendGrid Web API ¤ÎÍøÍѤˤâ HTTPS ¤¬É¬¿Ü¤Ç¤¹¡£ Arduino IDE for ESP8266 ¥×¥í¥¸¥§¥¯¥È¤Ï 2015-08-31 ¤è¤ê TLS 1.0/1.1 ¤Ø¤ÎÂбþ¤ò»Ï¤á¤Æ¤ª¤êÍøÍѼԤΰì¿Í¤È¤·¤ÆÂ礤¤Ë´üÂÔ¤·¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢¤³¤Îµ­»ö¤ò½ñ¤¤¤Æ¤¤¤ë 2015ǯ11·î½é½Ü¤Î»þÅÀ¤Ç¤Ï¤Ê¤ª³èȯ¤Ë³«È¯¤¬¿Ê¹ÔÃæ¤Ç¡¢stable ¤Ë¤Ê¤ë¤Þ¤Ç¤Ë¤Ï¤Þ¤À¿¾¯»þ´Ö¤¬¤«¤«¤ê¤½¤¦¤Ç¤¹¡£ ¤½¤¦¤·¤¿»ö¾ð¤â¤¢¤ê¡¢Àè¤À¤Ã¤Æ¡ÖESP8266 ¥â¥¸¥å¡¼¥ë¤Î AT ¥³¥Þ¥ó¥É¤Ë SSL ¥¯¥é¥¤¥¢¥ó¥Èµ¡Ç½¤òÄɲ乤ë¡×¤Î»î¤ß¤Ç Espressif ¼Ò¤Ë¤è¤ë¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤ò¤â¤È¤Ë¹½À®¤·¤¿ HTTPS ¥¯¥é¥¤¥¢¥ó¥È¥³¡¼¥É¤Ë¼ê¤ò²Ã¤¨¡¢ÅöÌÌ Arduino IDE ¤Ç¥é¥¤¥Ö¥é¥ê¤È¤·¤Æ»È¤¦¤³¤È¤Ë¤·¤Þ¤·¤¿¡£¤â¤Á¤í¤ó¥á¡¼¥ë¥µ¡¼¥Ó¥¹°Ê³°¤ÎÍÑÅӤˤâÍøÍѤǤ­¤ë¤Ç¤·¤ç¤¦¡£
    ¢¨¼ê¸µ¤Î Arduino IDE for ESP8266 ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï¸½»þÅÀ¤Ç stable ¤Ê
    ¡¡2015-07-23 ¥ê¥ê¡¼¥¹¤Î¡Ö1.6.5-947-g39819f0¡×¤Ê¤Î¤Ç¤¹¤¬¡¢¤³¤ÎÈǤË
    ¡¡Æ±º­¤µ¤ì¤Æ¤¤¤ë Espressif ¥é¥¤¥Ö¥é¥ê¤ò»È¤Ã¤Æ¥¹¥±¥Ã¥Á¤ò¥Ó¥ë¥É¤¹¤ë¤È
    ¡¡SendGrid ¤Î API ¥µ¡¼¥Ð ¤Ç¤¢¤ë https://api.sendgrid.com/ ¤Ø¤ÎÀܳ
    ¡¡Í×µá»þ¤Ë°Û¾ï½ªÎ»¤ÎȯÀ¸¤ò³Îǧ¤·¤Þ¤·¤¿¡£Æ±¥é¥¤¥Ö¥é¥ê·²¤ÎÇÛÃÖ¤µ¤ì¤¿
    ¡¡packages/esp8266/hardware/esp8266/1.6.5-947-g39819f0/tools/sdk/lib/
    ¡¡ÇÛ²¼¤Î *.a ¤ò¸½»þÅÀ¤ÇºÇ¿·¤Î esp_iot_sdk_v1.4.0_15_09_18 ¤Ë
    ¡¡´Þ¤Þ¤ì¤ë°ì¼°¤Ëº¹¤·Âؤ¨¤¿¤È¤³¤íÌäÂê¤Î²ò¾Ã¤¬¸«¤é¤ì¤Þ¤·¤¿¡£
    

    °Ê²¼¤Ë¥½¡¼¥¹¥³¡¼¥É¤ò·ÇºÜ¤·¤Þ¤¹¡£¥é¥¤¥Ö¥é¥ê¡ÖEspHttpsClient¡×¤Ï¥Õ¥¡¥¤¥ë°ì¼°¤ò¥í¡¼¥«¥ë¤Î¥é¥¤¥Ö¥é¥ê¥Õ¥©¥ë¥À²¼¤Î EspHttpsClient/ ²¼¤Ø¥³¥Ô¡¼¤·¤Æ»È¤¤¤Þ¤¹¡£

    ¥é¥¤¥Ö¥é¥ê¡§EspHttpClient

    EspHttpClient.h - GitHub

    EspHttpClient.cpp - GitHub

    ¥¹¥±¥Ã¥Á¡§OneButtonMailer

    OneButtonMailer.h - GitHub

    OneButtonMailer.ino

    ¤Þ¤¿¡¢Â¿¾¯Ãٱ䤬ȯÀ¸¤¹¤ë²ÄǽÀ­¤Ï¤¢¤ë¤â¤Î¤Î¡¢ÀìÍѤΥµ¡¼¥Ó¥¹¤ÎÂå¤ï¤ê¤Ë¼ê¶á¤Ë IFTTT ¤Î Maker Channel ¤òÍøÍѤ¹¤ëÁªÂò»è¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£ÌÜŪ¤¬¥á¡¼¥ëÁ÷¿®¤Ç¤¢¤ì¤Ð²¼¿Þ¤ÎÎã¤ÎÍ×ÎΤǥ쥷¥Ô¤òºîÀ®¤·¤Æ¤ª¤­¤Þ¤¹¡£¡¡¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

         

    ¤³¤Î¥ì¥·¥Ô¤ò¸Æ¤Ó½Ð¤¹¥¹¥±¥Ã¥Á¤Ç¤¹¡£

    OneButtonMailer_IFTTT.h - GitHub

    OneButtonMailer_IFTTT.ino

    ÉÕÏ¿

    Espressif ¼Ò¤Î¥É¥­¥å¥á¥ó¥È¤è¤ê ESP8266 ¤Î¥¹¥ê¡¼¥×¥â¡¼¥É¤Ë´Ø¤¹¤ëµ­½Ò²Õ½ê¤ò°Ê²¼¤ËÈ´¿è¤·¤Þ¤¹¡£
    ¡Ê¥¯¥ê¥Ã¥¯¤Ç²ÄÆÉÂçɽ¼¨¡Ë

    ¡ÖESP8266EX Datasheet Version 4.4 (2015-08-01) ¡×¤è¤ê

       

    ¡ÖESP8266 SDK API Guide Version 1.4 (2015-09-18)¡×Ãæ¤Î system_deep_sleep() ¤ª¤è¤Ó system_deep_sleep_set_option() ¤Î¥ê¥Õ¥¡¥ì¥ó¥¹

       


    (tanabe)
    klab_gijutsu2 at 14:46¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)
    2015ǯ10·î08Æü

    ESP8266 ¥â¥¸¥å¡¼¥ë + Blynk ¤Ç¤µ¤é¤ê¤È Wake On Wan

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    Android / iOS üËö¤«¤é½êÄê¤Î IoT ¥Ç¥Ð¥¤¥¹¤Î±ó³ÖÀ©¸æ¤ä´Æ»ë¤ò²Äǽ¤È¤¹¤ë Kickstarter ȯ¤Î Blynk ¤¬¿Íµ¤¤ò½¸¤á¤Æ¤¤¤Þ¤¹¡£2015ǯ10·î¸½ºß Blynk ¤Ï¤Þ¤À³«È¯¤ÎÅÓ¾å¤Ë¤¢¤ê¡¢º£¤Î»þÅÀ¤Ç¤Ï Backer¡Ê½Ð»ñ¼Ô¡Ë¤Ç¤Ê¤¯¤È¤â¼ÂÁõ¤º¤ß¤Î¤¹¤Ù¤Æ¤Îµ¡Ç½¤ò̵½þ¤ÇÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡Ê¢¨¡Ë¡£¥·¥ó¥×¥ë¤Ç¼è¤ê¤Þ¤ï¤·¤Î¤·¤ä¤¹¤¤¤³¤Î¥µ¡¼¥Ó¥¹¤ò»È¤¤¡¢¤Á¤ç¤Ã¤È¤·¤¿¼ÂÍÑÀ­¤Î¤¢¤ëÆ»¶ñ¤È¤·¤Æ±ó³Ö¤Î PC ¤ò¥¹¥Þ¥Û¤Ç Wake On Wan ¤¹¤ë¤â¤Î¤òºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡£¤Ê¤«¤Ê¤«ÊØÍø¤Ê¤Î¤Ç°ì¼°¤ò¸ø³«¤·¤Þ¤¹¡£

    • ¡Ê¢¨¡Ë¸ø¼°¥µ¥¤¥È¤Î¡ÖFAQ¡×¤è¤ê
      + I backed Blynk on Kickstarter. Where are my widgets and
        why the app is free?
      
        - App is free becasuse otherwise you would have to pay to
          download it. This is how AppStore and Google Play works.
        - Current Blynk release has a limited amount of widgets.
          We decided to make them free for everyone until we
          implement store. After that,every widget will be paid.
          However every backer will get them for free (according
          to their pledge).
      
    Blynk ¤Ï ESP8266 Wi-Fi ¥â¥¸¥å¡¼¥ë¤ËÂбþ¤·¤Æ¤ª¤ê¡¢°Ê²¼¤Îµ­»ö¤Ç¤Ïµ»Å¬¥Þ¡¼¥¯¤Ä¤­¤Î¡ÖESP-WROOM-02¡×¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥·¥ê¡¼¥º¤Î¥â¥¸¥å¡¼¥ë¤Ï¼«Î©¤·¤¿¥Þ¥¤¥³¥ó¤È¤·¤ÆÆ°ºî²Äǽ¤Ç¤¢¤ë¤¿¤á IoT ¥Ç¥Ð¥¤¥¹¤Î¼çÍ×ÁǤȤ·¤Æ¤â¤Ã¤È¤â¼ê·Ú¤ÊÁªÂò»è¤Î¤Ò¤È¤Ä¤È¸À¤¨¤ë¤Ç¤·¤ç¤¦¡£

    ½àÈ÷

    ¤Þ¤º Blynk ¤ÎÍøÍѤò¹½À®¤¹¤ë¤ß¤Ã¤Ä¤ÎÍ×ÁǤòÀ°Íý¤·¤Æ¤ª¤­¤Þ¤¹¡£

    • Blynk ¥¢¥×¥ê
      Google Play / AppStore ¤Ç¸ø³«Ãæ¤ÎÀìÍÑ¥¢¥×¥ê¤ò»È¤Ã¤Æ¥æ¡¼¥¶¤¬¹½À®¤·¤¿À©¸æÍѤΥ¢¥×¥ê
    • IoT ¥Ç¥Ð¥¤¥¹
      ÀìÍѤΠBlynk ¥é¥¤¥Ö¥é¥ê¤ò»È¤Ã¤Æ¥æ¡¼¥¶¤¬ºîÀ®¤·¤¿¥×¥í¥°¥é¥à¤òƳÆþ¤º¤ß¤ÎÀ©¸æÂоݤÎÁõÃÖ
    • Blynk ¥µ¡¼¥Ð
      Blynk ¥¢¥×¥ê¤È IoT ¥Ç¥Ð¥¤¥¹¤ÎÏ¢·¸¤òÃç²ð¤¹¤ë¥¯¥é¥¦¥É¥µ¡¼¥Ó¥¹¡Ê¢¨¥ª¡¼¥×¥ó¥½¡¼¥¹¤Ç¤¢¤ê¼«Á°¤Ç¤Î¹½ÃÛ¤â²Äǽ¡Ë

    Android / iOS üËö¤Ë¤Ï¤½¤ì¤¾¤ì¤Î¸ø¼°¥¹¥È¥¢¾å¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤ëÀìÍѤΥ¢¥×¥ê¡ÖBlynk¡×¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£ÍøÍѼԤϤ³¤Î¥¢¥×¥ê¤ò»È¤Ã¤ÆÆÈ¼«¤Î Blynk ¥¢¥×¥ê¤ò¹½À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
    Blynk ¥¢¥×¥ê¤ËÂиþ¤¹¤ë IoT ¥Ç¥Ð¥¤¥¹¤Î¤¿¤á¤Î¥×¥í¥°¥é¥à³«È¯¤Ë¤Ï Arduino IDE ¤ò»ÈÍѤ·¤Þ¤¹¡£¤¢¤é¤«¤¸¤á IDE ¤Ë ESP8266 Íѥ饤¥Ö¥é¥ê¥â¥¸¥å¡¼¥ë¤òƳÆþ¤·¤Æ¤ª¤­¡¢¤½¤³¤Ø Blynk ¤ÎÄ󶡤¹¤ë¥é¥¤¥Ö¥é¥ê·²¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£
    Blynk ¤Î¸ø¼°¥É¥­¥å¥á¥ó¥È¤Ë¤Ï Blynk ¤òÍøÍѤ¹¤ë¾å¤ÇɬÍפȤʤ뤳¤¦¤¤¤Ã¤¿¾ðÊ󡦼ê½ç¤¬¤ï¤«¤ê¤ä¤¹¤¯µ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¡¢¥Í¥Ã¥È¤ò¸¡º÷¤¹¤ì¤Ð¿¤¯¤ÎÍ­ÍѤʵ­»ö¤ò»²¾È¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

    »îºî¤ÎÂêºà¤Ë¤Ä¤¤¤Æ

    ¼ê¸µ¤Î¥Ë¡¼¥º¤Ë´ð¤­¡¢Blynk ¤ò»È¤Ã¤¿±ó³ÖÀ©¸æ¤Î¿È¶á¤Ê±þÍÑÎã¤È¤·¤Æ¼¡¤ÎÆâÍÆ¤òÁÛÄꤷ¤Þ¤·¤¿¡£IoT ¥Ç¥Ð¥¤¥¹¤ÏÂоݤΠPC ¤ÈƱ¤¸ LAN ´Ä¶­¤ØÀßÃÖ¤·¤Þ¤¹¡£

    1. ½êÄê¤Î PC ¤ò Wake On Wan ¤¹¤ë
    2. ½êÄê¤Î PC ¤Ø ping ¤òÂǤÄ
    3. ½êÄê¤Î AC µ¡´ï¤Ø¤ÎµëÅŤò ON / OFF ¤¹¤ë
    4. À©¸æÂоݤΠIoT ¥Ç¥Ð¥¤¥¹¤ò¥ê¥»¥Ã¥È¤¹¤ë

    ³°½ÐÃæ¤Ë¼«Âð¤Î PC ¤òÍøÍѤ·¤¿¤¯¤Ê¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£PC ¤ò¤º¤Ã¤Èµ¯¤Á¾å¤²¤¿¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¯¤Î¤Ï¹¥¤Þ¤·¤¯¤Ê¤¤¤Î¤Ç¡¢¤³¤ì¤Þ¤Ç¤ÏÍ·¤ó¤Ç¤¤¤ë Android üËö¤ò¼«Âð¤ÇÂÔµ¡¤µ¤»¤Æ¤ª¤­ GCM ·Ðͳ¤Ç½êÄê¤Î PC ¤ò Wake On Lan ¤¹¤ë¤È¤¤¤¦ÊýË¡¤ò¤È¤Ã¤Æ¤¤¤Þ¤·¤¿¡£¤½¤ì¤Ï¤½¤ì¤ÇÌäÂê¤Ê¤¯µ¡Ç½¤·¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢É¬Íפʼê½ç¤òƧ¤à¤Î¤¬¤À¤ó¤À¤óÌÌÅݤˤʤäƤ­¤¿¤³¤È¤Ë²Ã¤¨¡¢¤½¤Î¾ì¤Ç¼êÁ᤯ PC ¤Îµ¯¾²¾õ¶·¤ò³Îǧ¤Ç¤­¤Ê¤¤¤³¤È¤ËÉÔÊØ¤ò´¶¤¸¤Æ¤¤¤Þ¤·¤¿¡£³ÎǧÊýË¡¤Ï½êÄê¤Î IP ¥¢¥É¥ì¥¹¤ËÂФ¹¤ë ping ¥Æ¥¹¥È¤Ç½½Ê¬¤Ç¤·¤ç¤¦¡£

    ¾åµ­ 3.¤Ï³ÈÄ¥ÍѤǤ¹¡£¼ê¸µ¤Ç¤Ïα¼é¤ÎÌë¤ÎËÉÈÈÍѤ˼«Âð¤ÎÉô²°¤ÎÅÅÅô¤òǤ°Õ¤Î¥¿¥¤¥ß¥ó¥°¤ÇÅÀÅô¡¿¾ÃÅô¤¹¤ë¤¿¤á¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Þ¤Ç¤Ï¾å¤Î PC ¤ËÀܳ¤·¤¿ USB ÀÖ³°Àþ¥ê¥â¥³¥ó¤ÇÁàºî¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¤½¤ì¤âÌÌÅݤʤΤÇÊ̤μêÃʤ¬¤Û¤·¤¤¤È»×¤Ã¤Æ¤¤¤Þ¤·¤¿¡£

    ¼ÂÁõÊýË¡¤Ë¤Ä¤¤¤Æ

    Wake On Lan ¥Þ¥¸¥Ã¥¯¥Ñ¥±¥Ã¥È¤ÎÁ÷½Ð¤È½êÄê¤Î PC ¤Ø¤Î ping ÂǤÁ¤Ï Blynk ¤Î¡ÖVirtual Pin¡×µ¡Ç½¤ò»È¤Ã¤Æ IoT ¥Ç¥Ð¥¤¥¹Â¦¤ÈÏ¢·È¤¹¤ì¤Ð´Êñ¤Ë¼Â¸½¤Ç¤­¤ë¤È¹Í¤¨¤Þ¤·¤¿¡£Blynk ¥¢¥×¥ê¾å¤ËÇÛÃÖ¤·¤¿¥Ü¥¿¥ó¤ÎÀßÄê¤Ë¤ª¤¤¤Æ¡ÖOUTPUT¡×¤ËʪÍý¥Ô¥ó¤Ç¤Ï¤Ê¤¯Å¬Åö¤Ê²¾ÁÛ¥Ô¥ó¤ÎÈÖ¹æ¤ò³ä¤êÅö¤Æ¤Æ¡¢¼õ¤±Â¦¤Î IoT ¥Ç¥Ð¥¤¥¹Â¦¤Î¥³¡¼¥É¤Ë "BLYNK_WRITE(²¾ÁÛ¥Ô¥óÈÖ¹æ¡Ë" ¥Ï¥ó¥É¥é¤òÄêµÁ¤·¤Æ¤½¤³¤ËɬÍפʽèÍý¤òµ­½Ò¤¹¤ì¤Ð¤è¤¤¤Ï¤º¤Ç¤¹¡£

    • Send data from app to hardware - Blynk ¸ø¼°¥É¥­¥å¥á¥ó¥È - blynkkk.github.io
      Send data from app to hardware
      
      You can send any data from Widgets in the app to your
      hardware.
      
      All Controller Widgets can send data to Virtual Pins on
      your hardware. 
      For instance, code below shows how to get values from
      the Button Widget in the App
      
      BLYNK_WRITE(V1) //Button Widget is writing to pin V1
      {
        int pinData = param.asInt(); 
      }
      
      When you press Button, Blynk App sends 1 On second
      click - it sends 0
      
      This is how Button Widget is set up:
    • Wake On Lan ¥Þ¥¸¥Ã¥¯¥Ñ¥±¥Ã¥È¤Î»ÅÍͤ˴ؤ¹¤ëµ­»ö
    • Espressif ¼Ò¸ø¼°¥Õ¥©¡¼¥é¥à¤Î°Ê²¼¤Îµ­»ö¤ÎËöÈø¤Ë ESP8266 ¤Ç ping ¤ò¼Â¹Ô¤¹¤ë¥µ¥ó¥×¥ë¥³¡¼¥É¤¢¤ê
    ping ·ë²Ì¤ò¥¢¥×¥ê¤ØÄÌÃΤ¹¤ë¤Ë¤Ï¡¢¥¢¥×¥ê¦¤ËÀßÃÖ¤·¤¿¥Ç¡¼¥¿ INPUT ÍѤΥ¦¥£¥¸¥§¥Ã¥È¤Ë½êÄê¤Î²¾ÁÛ¥Ô¥óÈÖ¹æ¤òÀßÄꤷ¤Æ¤ª¤­¡¢¤½¤ÎÈÖ¹æ¤ËÂФ· IoT ¥Ç¥Ð¥¤¥¹Â¦¤Î¥³¡¼¥É¤Ç "Blynk.virtualWrite(²¾ÁÛ¥Ô¥óÈÖ¹æ, ¥Ç¡¼¥¿)" API ¤ò»È¤Ã¤Æ¥Ç¡¼¥¿¤òÁ÷¤Ã¤Æ¤ä¤ì¤Ð¤è¤µ¤½¤¦¤Ç¤¹¡£

    • Virtual Pins - Blynk ¸ø¼°¥É¥­¥å¥á¥ó¥È - blynkkk.github.io
      Virtual Pins
      
      Virtual Pins are designed to send any data from your
      microcontroller to the Blynk App and back. Think about
      Virtual Pins as channels for sending any data. Make sure
      you differentiate Virtual Pins from physical pins on your
      hardware. Virtual Pins have no physical representation.
      
      Virtual Pins can be used to interface with libraries
      (Servo, LCD and others) and implement custom functionality. 
      The device may send data to the Widget to the Virtual Pin
      like this:
      
      Blynk.virtualWrite(pin, "abc");
      Blynk.virtualWrite(pin, 123);
      Blynk.virtualWrite(pin, 12.34);
      
    AC µ¡´ï¤Ø¤ÎµëÅŤΠON / OFF ¤ÎÀ©¸æ¤Ë¤Ï ESP8266 ¥â¥¸¥å¡¼¥ë¤«¤é¤Î 3.3V ½ÐÎÏ¿®¹æ¤Ç¥ê¥ì¡¼¥¹¥¤¥Ã¥Á¤òÁàºî¤¹¤ì¤Ð¤è¤¤¤Ç¤·¤ç¤¦¡£ÆþÎϦ¤È½ÐÎϦ¤ÎÀä±ïÀ­¤Î¹â¤¤¥½¥ê¥Ã¥É¥¹¥Æ¡¼¥È¥ê¥ì¡¼¡ÊSSR¡Ë ¤Ïưºî»þ¤Ë¥«¥Á¥ê¤È²»¤Î¤¹¤ëÍ­ÀÜÅÀ¥ê¥ì¡¼¤ËÈæ¤ÙÃÍÃʤ¬¹â¤á¤Ç¤¹¤¬½©·îÅŻҤµ¤ó¤¬ÅŻҹ©ºî¸þ¤­¤Î¼êº¢¤Ê¥­¥Ã¥È¤òÈÎÇ䤷¤Æ¤¤¤Þ¤¹¡£

    ¢¨Í¾Ã̤ʤ¬¤é¡¢¸Ä¿ÍŪ¤Ë¤Ï¤³¤Î¤è¤¦¤Ë¹âÅ۵¤ò°·¤¦¤â¤Î¤ÏËÜÅö¤Ï¤¢¤Þ¤ê¼«ºî¤·¤¿¤¯¤Ê¤¤¤Ç¤¹¡£¤½¤ÎÊýÌ̤ËÁÇÍܤ¬¤Ê¤¯¤Æ¤âÉôÉʤò·¤¨¤ì¤Ðºî¤ë¤Î¤Ï´Êñ¤Ç¤¹¤¬¡¢¡Ö¼êºî¤ê¤Î³Ú¤·¤µ¡×¤Ê¤É¤è¤ê¤â°ÂÁ´À­¤¬¤â¤Ã¤È¤â½ÅÍפǤ¹¤«¤é¡¢¼êº¢¤Ê²Á³Ê¤Ç·øÏ´¤Ê´°À®ÉʤòÆþ¼ê¤Ç¤­¤ë¤Ê¤é¤½¤ì¤ò»È¤¤¤¿¤¤¤È¤¤¤¦¤Î¤¬ÀµÄ¾¤Ê¤È¤³¤í¤Ç¤¹¡£»Äǰ¤Ê¤¬¤éº£¤Î¤È¤³¤í¤½¤¦¤¤¤¦¾¦Éʤϸ«Åö¤¿¤é¤Ê¤¤¤è¤¦¤Ç¤¹¤¬¡Ê¼ûÍפϤ¢¤ë¤È»×¤¦¤Î¤Ç¤¹¤¬¡¦¡¦¡Ë¡¢¾å¤Î¥­¥Ã¥È¤ò»È¤Ã¤Æ¥ê¥ì¡¼¤Ä¤­ÅŸ»¥±¡¼¥Ö¥ë¤òºî¤ëÊýË¡¤¬²¼µ­¤Î½ñÀҤˤ狼¤ê¤ä¤¹¤¯µ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    ưºî¤ÎÍÍ»Ò

    ¤Ò¤ÈÄ̤ê·Á¤Ë¤Ê¤Ã¤¿¤â¤Î¤¬Æ°ºî¤·¤Æ¤¤¤ëÍͻҤò°Ê²¼¤Îư²è¤Ë¼ý¤á¤Æ¤¤¤Þ¤¹¡£¡Ê1ʬ56Éà ´Ä¶­²»¤¢¤ê¡Ë

    ÆâÍÆ¡§

    • IoT ¥Ç¥Ð¥¤¥¹²ÔÆ¯Ãæ¤Ï»à³è³ÎǧÍѤΠLED ¤¬ 2Éôֳ֤ÇÅÀÌÇ¡¢¤½¤Î¥¿¥¤¥ß¥ó¥°¤Ç¥¢¥×¥ê¤Î TICK ¥Õ¥£¡¼¥ë¥É¡Ê¥Ç¥Ð¥¤¥¹²ÔƯÉÿô¡Ë¤¬¹¹¿·¤µ¤ì¤ë
    • ¥¢¥×¥ê¤Î BOOT PC ¥Ü¥¿¥ó²¡²¼¤Ç IoT ¥Ç¥Ð¥¤¥¹¤¬½êÄê¤Î PC ¤ò Wake On Lan ¤¹¤ë
    • ¥¢¥×¥ê¤Î PING ¥Ü¥¿¥ó²¡²¼¤Ç IoT ¥Ç¥Ð¥¤¥¹¤¬½êÄê¤Î PC ¤Ø ping ¤òÅꤲ¥¢¥×¥ê¤Î OK / NG ¥Õ¥£¡¼¥ë¥É¤Ø·ë²Ì¤ò¥«¥¦¥ó¥È
    • ¥¢¥×¥ê¤Î AC DEVICE ¥Ü¥¿¥ó²¡²¼¤Ç IoT ¥Ç¥Ð¥¤¥¹¤ØÀܳ¤·¤¿ AC µ¡´ï¤Ø¤ÎµëÅŤò ON / OFF
    • ¥¢¥×¥ê¤Î RESTART ¥Ü¥¿¥ó¤òĹ²¡¤·¡Ê3Éðʾå¡Ë¤·¤Æ¥ê¥ê¡¼¥¹¤¹¤ë¤È IoT ¥Ç¥Ð¥¤¥¹¤ÏºÆ»Ïư¤¹¤ë

    ¥ê¥½¡¼¥¹°ì¼°

    º£²ó¤Î Blynk ¥¢¥×¥ê¤ª¤è¤Ó IoT ¥Ç¥Ð¥¤¥¹¤ò¹½À®¤¹¤ëÍ×ÁǤϰʲ¼¤Î¤È¤ª¤ê¤Ç¤¹¡£

    ¢¨³Æ²èÁü¤Ï¥¯¥ê¥Ã¥¯¤Ç¼ÂÀ£É½¼¨

    Blynk ¥¢¥×¥ê¦

    Android / iPhone ¤Ç¤ÎÅö³º Blynk ¥¢¥×¥ê¤Î²èÌÌɽ¼¨

    ¥×¥í¥¸¥§¥¯¥È¤È³Æ¥¦¥£¥¸¥§¥Ã¥È¤ÎÀßÄê

    IoT ¥Ç¥Ð¥¤¥¹Â¦

    ÁõÃÖÁ´ÂΤÎÍÍ»Ò
    ¢¨ESP-WROOM-02 ¥â¥¸¥å¡¼¥ë¤Ï Cerevo ¼ÒÀ½¤Î¥Ö¥ì¥¤¥¯¥¢¥¦¥È´ðÈÄ¡ÖCDP-ESP8266¡×¤È¤È¤â¤Ë»ÈÍÑ
    ¢¨²ÔƯ¾õ¶·³ÎǧÍÑ¤Ë IO4 ¤ËÀÖ¿§ LED ¤ò¡¢AC µ¡´ïÀ©¸æÍÑ¤Ë IO12 ¤Ë¥ê¥ì¡¼¤Ä¤­¥±¡¼¥Ö¥ë¤òÁõÃ夷¤Æ¤¤¤ë¤¬ÉÔÍפʤé¤É¤Á¤é¤â¾Êά²Ä

    ¥ê¥ì¡¼¤Ä¤­ÅŸ»¥±¡¼¥Ö¥ë

    ¥½¡¼¥¹¥³¡¼¥É
    ¡ÊSimpleTimer ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥ó¥¹¥È¡¼¥ë¤¬É¬ÍפǤ¹¡Ë

    ESP8266_WakeOnWan.ino - github.com/mkttanabe

    α°Õ¤¹¤Ù¤­»ö¹à¤Ê¤É

    Blynk ¤ÏÊØÍø¤ÇÍ­ÍѤǤ¹¤¬¸½ºß¿Ê¹Ô·Á¤Ç³«È¯Ãæ¤Ç¤¢¤ë¤¿¤áÍøÍÑ»þ¤Ë¼ã´³Ãí°Õ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤ÅÀ¤â¤¢¤ê¤Þ¤¹¡£º£²ó¼ê¸µ¤Çµ¤¤Å¤¤¤¿ÏÃÂê¤ò¥á¥â¤·¤Æ¤ª¤­¤Þ¤¹¡£

    Blynk ¥é¥¤¥Ö¥é¥êµì¥Ð¡¼¥¸¥ç¥ó¤Ç¤ÎÉÔ¶ñ¹ç¤Ë¤Ä¤¤¤Æ¡Ê½ÅÍסË

    2015-08-06 ¤Ë¥ê¥ê¡¼¥¹¤µ¤ì¤¿ v0.3.0 ¤Þ¤Ç¤ÎBlynk ¥é¥¤¥Ö¥é¥ê¤Ë¤Ï ESP8266 ¥â¥¸¥å¡¼¥ë¤Î¥Ï¥ó¥É¥ê¥ó¥°¤ËÂ礭¤ÊÉÔ¶ñ¹ç¤¬¤¢¤ê¤Þ¤¹¡£Æ±¥â¥¸¥å¡¼¥ë ¡Ý Blynk ¥µ¡¼¥Ð´Ö¤Î»ý³Àܳ¤ËÉÔ°Õ¤ËÀÚÃǤ¬È¯À¸¤·¤¿¾ì¹ç¤Ë̵¸Â¥ë¡¼¥×¤Ë´Ù¤ê¥Ç¥Ð¥¤¥¹¤ò¥ê¥»¥Ã¥È¤·¤Ê¤¤¸Â¤êºÆÀܳÉÔǽ¤È¤Ê¤ëÌäÂê¤Ç¤¹¡£¤³¤ÎÉÔ¶ñ¹ç¤Ï 2015-09-24 ¤Ë¥ê¥ê¡¼¥¹¤µ¤ì¤¿ v0.3.1 ¤Ç¤Ï½¤Àµ¤µ¤ì¤Æ¤ª¤ê¡¢ÀÚÃǤ¬È¯À¸¤·¤¿¾ì¹ç¤ËÀܳ¤ò¼«Æ°Éüµì¤¹¤ëµ¡¹½¤¬Àµ¾ï¤Ëµ¡Ç½¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤Î½¤Àµ¤Ë¤è¤êϢ³²ÔƯ¤¬°ÂÄꤹ¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£Blynk ¤Ç ESP8266 ¤ò»È¤¦¾ì¹ç¤Ïɬ¤º¤³¤Î v0.3.1 °Ê¹ß¤Î¥é¥¤¥Ö¥é¥ê¤ò»È¤¦¤Ù¤­¤Ç¤¹¡£¸ø¼°¥Õ¥©¡¼¥é¥à¾å¤Î°Ê²¼¤Îµ­»ö¤Ë´ØÏ¢¤¹¤ë±þ½·¤¬¤¢¤ê¤Þ¤¹¡£

    Android - iOS üËö´Ö¤Î Blynk ¥¢¥×¥ê¤Î¸ß´¹À­¤Ë¤Ä¤¤¤Æ

    Blynk ¤Ï Android ¤È iOS ¤ËÂбþ¤·¤Æ¤¤¤Þ¤¹¤¬¡¢Î¾Êý¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ÇÅù¤·¤¯Æ°ºî¤¹¤ë Blynk ¥¢¥×¥ê¤ò¹½À®¤¹¤ë¤¿¤á¤Ë¤Ï°Ê²¼¤ÎÅÀ¤Ø¤ÎÃí°Õ¤¬É¬ÍפǤ¹¡£

    • 2015ǯ10·î8Æü»þÅÀ¤Î Android ÈÇ Blynk ¤ÎºÇ¿·¥Ð¡¼¥¸¥ç¥ó¤Ï "1.0RC7 fix"¡¢iOS ÈÇ Blynk ¤ÎºÇ¿·¥Ð¡¼¥¸¥ç¥ó¤Ï "1.3" ¤Ç¤¹¡£¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Ï iOS ÈǤΤۤ¦¤¬¾å¤Ç¤¹¤¬¡¢Android ÈǤÇÍøÍѲÄǽ¤Ê¥¦¥£¥¸¥§¥Ã¥È¤¦¤Á iOS ÈǤǤϤޤÀ¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¤â¤Î¤¬¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡£²¼¿Þº¸¤Ï Android ÈÇ "1.0RC7 fix¡¢±¦¤Ï iOS ÈÇ "1.3" ¤Ç¤Î¥¦¥£¥¸¥§¥Ã¥È°ìÍ÷¤Ç¤¹¡£

      iOS ÈÇ̤¼ÂÁõ¤Î¥¦¥£¥¸¥§¥Ã¥È¤ò Android ÈǤÇÇÛÃÖ¤·¤ÆÊݸ¤·¤¿¥¢¥×¥ê¤ò iOS ÈǤdz«¤¯¤È¤½¤ÎÉôʬ¤¬¶õÇò¤È¤Ê¤ê¤Þ¤¹¡£¤½¤ì¤À¤±¤Ç¤Ï¤Ê¤¯¡¢¤½¤Î¥¢¥×¥ê¤ò iOS ÈǤÇÊݸ¤¹¤ë¤ÈÅö³º¥¦¥£¥¸¥§¥Ã¥È¤Ï¼º¤ï¤ì¤Þ¤¹¡£Í×Ãí°Õ¤Ç¤¹¡£


    • Android ÈÇ¤Ç¤Ï LED ¥¦¥£¥¸¥§¥Ã¥È¤¬Àµ¾ï¤Ëµ¡Ç½¤·¤Þ¤»¤ó
    °Ê¾å¤Î»ö¾ð¤Ë¤è¤ê¡¢¸½»þÅÀ¤Ç¤Ï¡¢Î¾¥×¥é¥Ã¥È¥Õ¥©¡¼¥à´Ö¤Ç¤Î¸ß´¹À­¤Î³ÎÊݤ¬É¬Íפʥ¢¥×¥ê¤Ë¤ª¤¤¤Æ¤Ï iOS ÈǤÇÍøÍѤǤ­¤ë¥¦¥£¥¸¥§¥Ã¥È¤Î¤ß¤ò»ÈÍѤ·¡¢¤Þ¤¿¡¢LED ¥¦¥£¥¸¥§¥Ã¥È¤Ï»È¤ï¤Ê¤¤¤è¤¦¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£º£¸å¤Î²þÁ±¤¬´üÂÔ¤µ¤ì¤Þ¤¹¡£

    ºÇ¸å¤Ë

    Prepare to Blynk! - www.kickstarter.com¡¡¤Ë·ÇºÜ¤µ¤ì¤Æ¤¤¤ë¥¤¥é¥¹¥È

    ¤¬¤ó¤Ð¤ì Blynk¡ª


    (tanabe)
    klab_gijutsu2 at 05:49¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    2015ǯ08·î27Æü

    ESP8266 ¥â¥¸¥å¡¼¥ë¤Î AT ¥³¥Þ¥ó¥É¤Ë SSL ¥¯¥é¥¤¥¢¥ó¥Èµ¡Ç½¤òÄɲ乤ë

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    Ãæ¹ñ Espressif Systems ¼ÒÀ½ ESP8266EX ÅëºÜ¤Î¡ÖESP-WROOM-02¡×¤Ï¶½Ì£¤Ö¤«¤¤¥â¥¸¥å¡¼¥ë¤Ç¤¹¡£ º£Ç¯¡Ê2015ǯ¡Ë¾åȾ´ü¤Ëµ»Å¬¤ò¼èÆÀ¤·¿Íµ¤¤ò½¸¤á¤Æ¤¤¤ë¤³¤ÎÀ½Éʤϰ²Á¤Ç¤¢¤ë¤Ë¤â´Ø¤ï¤é¤º¼«Î©¤·¤¿¥Þ¥¤¥³¥ó¤È¤·¤Æ°·¤¨¤ëÅÀ¤¬ÁÇÀ²¤é¤·¤¯¡¢¤Þ¤¿¡¢½Ð²Ù»þ¤Î¥Õ¥¡¡¼¥à¥¦¥§¥¢¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë AT ¥³¥Þ¥ó¥É¥»¥Ã¥È¤òÍøÍѤ¹¤ì¤Ð¥Û¥¹¥È¦¤ËÉé²Ù¤ò¤«¤±¤º´Êñ¤Ë´Ý¤´¤ÈÄÌ¿®½èÍý¤òÂå¹Ô¤·¤Æ¤¯¤ì¤ë¼ê·Ú¤µ¤Ë¤â¹¥´¶¤¬»ý¤Æ¤Þ¤¹¡£

    ¤¿¤À¡¢¤³¤Î AT ¥³¥Þ¥ó¥É¥»¥Ã¥È¤Ç HTTPS ¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤¹¤ëÊýË¡¤¬¸«Åö¤¿¤é¤Ê¤¤¤³¤È¤òÉԻ׵Ĥ˻פäƤ¤¤Þ¤·¤¿¡£¤¢¤é¤¿¤á¤Æ¥É¥­¥å¥á¥ó¥È¤ò³Îǧ¤¹¤ë¤È¤É¤¦¤ä¤é AT ¥³¥Þ¥ó¥É¤Ç SSL ÄÌ¿®¤ò°·¤¦¤³¤È¤Ï¤Ç¤­¤Ê¤¤¤è¤¦¤Ç¤¹¡£¥×¥í¥°¥é¥Þ¥Ö¥ë¤Ç¤¢¤ë¤³¤È¤¬¤³¤ÎÀ½ÉʤÎÌ¥ÎϤΤҤȤĤǤ¢¤ë¤È¤Ï¸À¤¨ ½Ð²Ù»þ¤Î¾õÂÖ¤Ç SSL ¤òÍøÍѤǤ­¤Ê¤¤¤Î¤Ï¤½¤Î¤³¤È¼«ÂΤ¬»Äǰ¤Ë»×¤ï¤ì¤Þ¤¹¡£AT ¥³¥Þ¥ó¥É¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤½¤Î¤â¤Î¤Ï²¿¤«¤ÈÊØÍø¤Ê¤Î¤Ç¤³¤ì¤ò³ÈÄ¥¤¹¤ë·Á¤Ç SSL ¤Ø¤ÎÂбþ¤ò»î¤ß¤Þ¤·¤¿¡£

    ºÇ½ªÅª¤Ë¤Ï¥µ¡¼¥Ð¾ÚÌÀ½ñ¤Î¸¡¾Ú¤â´Þ¤á´üÂÔÄ̤ê¤Ëưºî¤·¤Þ¤·¤¿¤¬¡¢¤½¤Î²áÄø¤Ç°Õ³°¤Ê¶ÊÀޤ⤢¤ê¡¢¼ê¸µ¤Ç·Ð¸³¤·¤¿¤³¤È¤òÈ÷˺¤ò¤«¤Í¤Æ¤Û¤Ü½çÈ֤ɤª¤ê¤Ëµ­Ï¿¤·¤Æ¤ª¤¯¤³¤È¤Ë¤·¤Þ¤¹¡£¶½Ì£¤Î¤¢¤ëÊý¤ÏÄɤäƤߤƲ¼¤µ¤¤¡£

    AT ¥³¥Þ¥ó¥É³ÈÄ¥¤Ë¤Ä¤¤¤Æ

    ¥á¡¼¥«¡¼¤Ï¼¡¤Î¥Ú¡¼¥¸¤Ç ESP8266 ÍѤΠSDK ¤ò¸ø³«¤·¤Æ¤¤¤Þ¤¹¡£

    2015-08-21 »þÅÀ¤ÎºÇ¿·ÈǤϰʲ¼¤ÎÄ̤ê¤Ç¤¹¡£

    SDK ¥¢¡¼¥«¥¤¥Ö¤òÇÁ¤¤¤Æ¤ß¤ë¤È examples/at/ ¥Ç¥£¥ì¥¯¥È¥ê²¼¤Ë AT ¥³¥Þ¥ó¥É¥»¥Ã¥È¤ò³ÈÄ¥¤¹¤ë¤¿¤á¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤¬¼ýÏ¿¤µ¤ì¤Æ¤ª¤ê¡ÖAT+CIUPDATE¡×¥³¥Þ¥ó¥É¤Ï¾¤Î¥³¥Þ¥ó¥É·²¤È¤ÏÊ̤ˤ³¤³¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬¸«¤Æ¤È¤ì¤Þ¤¹¡£

    examples/at/user/user_main.c

    ¥³¡¼¥É¤ÎËöÈøÉÕ¶á¤Î at_custom_cmd[] ¥Æ¡¼¥Ö¥ë¤Ë¤Ï¡ÖAT+CIUPDATE¡×¤Ë²Ã¤¨¡ÖAT+TEST¡×¤È¤¤¤¦³ÈÄ¥¥³¥Þ¥ó¥É¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£³ÈÄ¥¥³¥Þ¥ó¥É¤ÎÄêµÁ¤ÎÊýË¡¤Ï¼¡¤Îµ­»ö¤ËÀâÌÀ¤¬¤¢¤ê¤Þ¤¹¡£

    In the example of \esp_iot_sdk\examples\at\user\user_main.c, 
    ways are delivered on how to implement a self-defined AT Command,
     AT+TEST¡É.
    The structure, at_funcationType, is used to define four types of
    a command, e.g., ¡ÈAT+TEST¡É. 
    
    "at_testCmd" is a testing command and it¡Çs formatted as AT+TEST=?.
    In the example of AT, the registered callback is ¡Èat_testCmdTest¡É; 
    the testing demand could be designed as the value range of the
    return parameter. If registered as NULL, there will be no testing
    command.
    
    "at_queryCmd" is a query command and it¡Çs formatted as AT+TEST?.
    In the example of AT, the registered callback is ¡Èat_queryCmdTest¡É ; 
    the query command could be designed as returning the current value. 
    If registered as NULL, there will be no query command.
    
    "at_setupCmd" is a setup command and it¡Çs formatted as
    AT+TEST=parameter1,parameter2,........ In the example of AT, 
    the registered callback is "at_setupCmdTest"; 
    the setup command could be designed as the value of the parameter; 
    if registered as NULL, there will be no setup command.
    
    "at_exeCmd" is an execution command and it¡Çs formatted as AT+TEST. 
    In the example of AT, the registered callback is ¡Èat_exeCmdTest¡É; 
    if registered as NULL, there will be no execution command.
    
    °ìÏ¢¤Î½ñ¼°¤Ï¾¤Î¥³¥Þ¥ó¥É¤Ç¤â¸«¤«¤±¤ë¤â¤Î¤Ç¤¹¡£°ìÆÉ¤·¤¿¤È¤³¤í¤Ç¤Ï´û¸¤Î¥³¥Þ¥ó¥É¥»¥Ã¥È¤Ë¥ª¥ê¥¸¥Ê¥ë¤Î AT ¥³¥Þ¥ó¥É¤òÄɲ乤뤳¤È¤Ï¤¢¤Þ¤êÆñ¤·¤¯¤Ê¤¤¤è¤¦¤Ç¤¹¡£

    SDK ¤ËƱº­¤Î¥Ó¥ë¥É¤º¤ß¥Õ¥¡¡¼¥à¤ò½ñ¤­¹þ¤ó¤Ç¤ß¤ë

    SDK ¤Î bin/ ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ï¥á¡¼¥«¡¼Â¦¤¬¥Ó¥ë¥É¤·¤¿¥Õ¥¡¡¼¥à¥¦¥§¥¢¥Ð¥¤¥Ê¥ê·²¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
    ESP-WROOM-02 ½Ð²Ù»þ¤Îɸ½à¥Õ¥¡¡¼¥à¡ÊAT ¥³¥Þ¥ó¥É¥»¥Ã¥È¡Ë¤Ï°Ê²¼¤Î¥Ð¥¤¥Ê¥ê¤«¤é¹½À®¤µ¤ì¤Þ¤¹¡£

    • bin/boot_v1.2.bin ---- ¥Ö¡¼¥È¥í¡¼¥À
    • bin/at/user1.1024.new.2.bin ---- AT ¥³¥Þ¥ó¥É¥×¥í¥°¥é¥àËÜÂÎ
    • bin/blank.bin ---- Îΰè½é´ü²½ÍÑ¡¡Ãæ¿È¤Ï 0xFF * 4096¥Ð¥¤¥È
    • bin/esp_init_data_default.bin --- "Stores default RF parameter values"

    ¼«ºî¤Î¥Õ¥¡¡¼¥à¤ò¥Ó¥ë¥É¤·¤Æ½ñ¤­¹þ¤àÁ°¤Ë¡¢¤Þ¤º¤³¤ì¤é¤òÎý½¬Âæ¤È¤·¤ÆÆâ¢¥Õ¥é¥Ã¥·¥å¥á¥â¥ê¤Ë½ñ¤­¹þ¤ó¤Ç¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£ Àµ¤·¤¯½ñ¤­¹þ¤á¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤ª¤±¤Ð¤¤¤¶¤È¸À¤¦¤È¤­¤ÎÀÚ¤êÌᤷ¤â³Ú¤Ç¤·¤ç¤¦¡£

    ¡Öbin/at/readme.txt¡×ËÁƬ¤Ë¼¡¤Îµ­½Ò¤¬¤¢¤ê¤Þ¤¹¡£

    download:
    boot_v1.2+.bin      	0x00000
    user1.1024.new.2.bin  	0x01000
    blank.bin           	0x7e000 & 0xfe000
    

    ¢¨¡Öuser1.1024.new.2.bin¡×¤Î¡Ö1024¡×¤Ï 1024KB¡Ê8Mbit¡ËÍÆÎ̤Υեé¥Ã¥·¥å¥á¥â¥ê»ÈÍѤòÁÛÄꤷ¤Æ¥Ó¥ë¥É¤µ¤ì¤¿¥Ð¥¤¥Ê¥ê¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£ESP-WROOM-02 ¤Ï 32Mbit ¤Î¥Õ¥é¥Ã¥·¥å¥á¥â¥ê¤òÆâ¢¤·¤Æ¤¤¤ë¤¬¡¢°Ê²¼¤Îµ­»ö¤Ë¤ª¤¤¤Æ¤Ï¤³¤Î¥Ð¥¤¥Ê¥ê¤Î»ÅÍͤ˽स 8Mbit ¶õ´ÖÈϰϤλÈÍѤòÁ°Äó¤È¤¹¤ë¡£

    ¢¨¡Öesp_init_data_default.bin¡×¤Ë¤Ï RF¡ÊRadio Frequency¡Ë¥Ñ¥é¥á¡¼¥¿¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤ¬ÊÝ»ý¤µ¤ì¤Æ¤¤¤ë»Ý¤ÎÀâÌÀ¤¬ SDK ¤Î¡ÖESP8266 IOT SDK User Manual¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ë¡£¼¡¤Îµ­»ö¤Ë¤âÀâÌÀ¤¢¤ê¡£

    ¥Õ¥¡¡¼¥à¥¦¥§¥¢¤Î½ñ¤­¹þ¤ß¤Ï°Ê²¼¤Î¡ÖFlash Download Tool¡×¤ò»È¤¤ USB - ¥·¥ê¥¢¥ëÊÑ´¹´ï·Ðͳ¤Ç¹Ô¤¤¤Þ¤¹¡£¥Ä¡¼¥ë¤Ï Windows ÈÇ¤È Python ÈǤ¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£ ½ñ¤­¹þ¤ß¤Ï¥â¥¸¥å¡¼¥ë¤Î IO0 ¥Ô¥ó¤ò Lo ¤Ë¥»¥Ã¥È¤·¤Æ¡ÖUART Download Mode¡×¤Ø°Ü¹Ô¤·¼¡¤ÎÍ×ÎΤǡ£
    ¡Ê¿Þ¤Ï Windows ÈÇ¡Ë
      ¢¨1024KB ¥Õ¥é¥Ã¥·¥å»ÈÍÑ»þ¤Î¥á¥â¥ê¥Þ¥Ã¥×
      
           - SDK ¤Î¡ÖEspressif IOT SDK User Manual¡×¤è¤ê
      
      Note 
      
      • System param (system parameter area) is the last 16KB offlash. 
      
      • User param is the user parameter area used by Espressif demo code
        ( IOT_Demo or AT ). If users develop their own application, 
        user data can be saved in any available flash area. 
      
      • User Data area ( green area in pictures below ) means the flash
        area that may be available, if program area doesn¡Çt reach the
        maximum size, remaining area can be used to save user data. 
      
    ưºî³Îǧ
    AATTEE00
    
    
    OK
    AT+GMR
    AT version:0.40.0.0(Aug  8 2015 14:45:58)
    SDK version:1.3.0
    compile time:Aug  8 2015 17:19:38
    OK
    AT+CWMODE=1
    
    OK
    AT+CWLAP
    +CWLAP:(1,"GPMAP",-93,"10:6f:3f:XX:XX:XX",1,-47)
    +CWLAP:(0,"000D0BF6C164_G",-91,"00:16:01:XX:XX:XX",5,-32)
    +CWLAP:(3,"hogehogeSSID",-72,"00:22:cf:XX:XX:XX",10,-91)
    +CWLAP:(2,"STWEBKAIGI",-88,"4c:e6:76:XX:XX:XX",10,-27)
    +CWLAP:(4,"elecom2g-DE8564",-90,"00:90:fe:XX:XX:XX",10,-26)
    +CWLAP:(3,"e-timer-DE8564",-90,"02:90:fe:XX:XX:XX",10,-26)
    +CWLAP:(3,"auhome_acyCYh",-92,"8c:4c:dc:XX:XX:XX",1,-31)
    
    OK
    

    ³«È¯´Ä¶­¤ÎƳÆþ

    ESP8266 ¥â¥¸¥å¡¼¥ë¤Î¥Õ¥¡¡¼¥à¥¦¥§¥¢³«È¯¤Ë¤Ï¸½ºß Arduino ¸þ¤±¤Î IDE¡¦¸À¸ì¤òÍѤ¤¤ë¤³¤È¤â²Äǽ¤Ç¤¹¤¬ SDK ¤Ë´Þ¤Þ¤ì¤ë¥³¡¼¥É¤Ï¤¤¤º¤ì¤â¥Í¥¤¥Æ¥£¥Ö¤Î³«È¯´Ä¶­¤òÁ°Äó¤È¤·¤Æ¤¤¤ë¤¿¤áº£²ó¤Ï¤½¤ì¤ò»È¤¤¤Þ¤¹¡£

    ¥á¡¼¥«¡¼¤ÏɬÍפʰ켰¤ò¥¤¥ó¥¹¥È¡¼¥ë¤º¤ß¤Î³«È¯´Ä¶­¡ÊLinux¡Ë¤Î VirtualBox ²¾ÁÛ¥Þ¥·¥ó¥¤¥á¡¼¥¸¤òÇÛÉÛ¤·¤Æ¤ª¤ê¡¢Æ³Æþ¼ê½ç¡¦ÊýË¡¤Ï°Ê²¼¤Îµ­»ö¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    ¥Ý¥¤¥ó¥È¤Ê¤É
    • SDK ¤Î°ì¼°¤òÇÛÃÖ¤·¤¿ PC ¾å¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò "share" ¤Î̾Á°¤Ç VirtualBox ²¾ÁÛ¥Þ¥·¥ó¤Î¶¦Í­¥Õ¥©¥ë¥À¤È¤·¤ÆÀßÄꤷ¤Æ¤ª¤¯
    • ²¾ÁÛ¥Þ¥·¥ó¤Î¥Ç¥¹¥¯¥È¥Ã¥×¾å¤Î "LXTerminal" ¤òµ¯Æ°¤¹¤ë¤È¥¢¥«¥¦¥ó¥È esp8266 ¤Ç¥¿¡¼¥ß¥Ê¥ë¤¬³«¤¯
    • ¥¢¥«¥¦¥ó¥È esp8266 ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Î ./mount.sh ¤ò¼Â¹Ô¤¹¤ë¤È PC ¾å¤Î¶¦Í­¥Õ¥©¥ë¥À¤¬ ~/Share ¤Ë¥Þ¥¦¥ó¥È¤µ¤ì¤ë
    • ¥¢¥«¥¦¥ó¥È esp8266 ¤Î¥Ñ¥¹¥ï¡¼¥É¤Ï "espressif"

    ¢¨²¾ÁÛ¥Þ¥·¥ó¤Î¥¿¥¤¥à¥¾¡¼¥ó¤Ï CST Ë̵þ»þ´Ö¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤¿¤áÊѹ¹¤¬É¬ÍפǤ¹

    ¥Õ¥¡¡¼¥à¥¦¥§¥¢¤ò¥Ó¥ë¥É¤·¤Æ¤ß¤ë

    SDK ¤Î examples/ ²¼¤Ë¤ÏÊ£¿ô¤Î¥µ¥ó¥×¥ë¥×¥í¥¸¥§¥¯¥È¤¬ÇÛÃÖ¤µ¤ì¤Æ¤ª¤ê¡¢ÍøÍѤ¹¤ë¥×¥í¥¸¥§¥¯¥È¤Î¥Õ¥¡¥¤¥ë·²¤ò¤½¤³¤«¤é app/ ²¼¤Ø´Ý¤´¤È¥³¥Ô¡¼¤·¤Æ»È¤¤¤Þ¤¹¡£º£²ó¤ÏÁ°½Ò¤Î¤È¤ª¤ê examples/at/* ¤ò»ÈÍѤ·¤Þ¤¹¡£

    ²¾ÁÛ¥Þ¥·¥ó¦¤Ç app/ ¤Ø°Üư¤· gen_misc.sh ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë¤È¥Ð¥¤¥Ê¥ê¤¬¥Ó¥ë¥É¤µ¤ì¤Þ¤¹¡£ °Ê²¼¤Î¥Ó¥ë¥É³«»Ï»þ¤Î¥ª¥×¥·¥ç¥ó»ØÄê¤Ï¥á¡¼¥«¡¼Â¦¥Ó¥ë¥É¤Ç¤ÎÆâÍÆ¤Ë½à¤¸¤Æ¤¤¤Þ¤¹¡£

    $ pwd
    /home/esp8266/Share/esp_iot_sdk_v1.3.0_15_08_08_build/esp_iot_sdk_v1.3.0/app
    
    $ make clean
    make -C user clean;
    make[1]: Entering directory `/mnt/Share/esp_iot_sdk_v1.3.0_15_08_08_build/esp_iot_sdk_v1.3.0/app/user'
    rm -f -r .output/eagle/debug
    make[1]: Leaving directory `/mnt/Share/esp_iot_sdk_v1.3.0_15_08_08_build/esp_iot_sdk_v1.3.0/app/user'
    rm -f -r .output/eagle/debug
    
    $./gen_misc.sh
    gen_misc.sh version 20150511
    
    Please follow below steps(1-5) to generate specific bin(s):
    STEP 1: choose boot version(0=boot_v1.1, 1=boot_v1.2+, 2=none)
    enter(0/1/2, default 2):
    1
    boot mode: new
    
    STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin)
    enter (0/1/2, default 0):
    1
    generate bin: user1.bin
    
    STEP 3: choose spi speed(0=20MHz, 1=26.7MHz, 2=40MHz, 3=80MHz)
    enter (0/1/2/3, default 2):
    
    spi speed: 40 MHz
    
    STEP 4: choose spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)
    enter (0/1/2/3, default 0):
    
    spi mode: QIO
    
    STEP 5: choose spi size and map
        0= 512KB( 256KB+ 256KB)
        2=1024KB( 512KB+ 512KB)
        3=2048KB( 512KB+ 512KB)
        4=4096KB( 512KB+ 512KB)
        5=2048KB(1024KB+1024KB)
        6=4096KB(1024KB+1024KB)
    enter (0/2/3/4/5/6, default 0):
    2
    spi size: 1024KB
    spi ota map:  512KB + 512KB
    
    
    start...
    
    make[1]: Entering directory `/mnt/Share/esp_iot_sdk_v1.3.0_15_08_08_build/esp_iot_sdk_v1.3.0/app/user'
    DEPEND: xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions
    -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-
    
    ¡ÊÃæÎ¬¡Ë
    
    !!!
    Support boot_v1.2 and +
    Generate user1.1024.new.2.bin successully in folder bin/upgrade.
    boot.bin------------>0x00000
    user1.1024.new.2.bin--->0x01000
    !!!
    

    °Ê¾å¤Î¼ê½ç¤Ç bin/upgrade/ ²¼¤ËÀ¸À®¤µ¤ì¤ë user1.1024.new.2.bin ¤òÁ°½Ð¤Î bin/at/user1.1024.new.2.bin ¤ÎÂå¤ï¤ê¤Ë¥Õ¥é¥Ã¥·¥å¥á¥â¥ê¤Î 0x01000 ÈÖÃϤòµ¯ÅÀ¤Ë½ñ¤­¹þ¤á¤Ð´°Î»¤Ç¤¹¡£

    ¤Ê¤ª¡¢boot*.bin, blank.bin ¤Ï¥æ¡¼¥¶¤Ë¤è¤ë¥Ó¥ë¥É¤ÎÂоݤǤϤ¢¤ê¤Þ¤»¤ó¡£¤³¤ì¤é¤Ï SDK ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤â¤Î¤ò¤½¤Î¤Þ¤Þ»È¤¤¤Þ¤¹¡£

    HTTPS ¥¯¥é¥¤¥¢¥ó¥È½èÍý¤Ï¤É¤Î¤è¤¦¤Ë½ñ¤±¤Ð¤¤¤¤¤Î¡©

    SDK ¤Ë¤Ï¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ¡ÖESP8266 SSL User Manual¡×¤¬Æ±º­¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤·¤«¤·¡¢¸½»þÅÀ¤Ç¤Ï ESP8266 ¥â¥¸¥å¡¼¥ë¤Ç¤Î SSL ÍøÍѤ˴ؤ¹¤ë¾ðÊó¤Ï¾¯¤Ê¤¤¤Î¤¬¼Â¾õ¤Ç¤¹¡£

    ¤Á¤Ê¤ß¤Ë¡¢IBM ½ê°¤Î Neil Kolban »á¤¬ 2015ǯ8·î1Æü¤Ë¸ø³«¤·¤¿¡ÖKolban's book on the ESP8266¡×¤Ïµ»½Ñ¾ðÊ󤬾ܺ٤˵­½Ò¤µ¤ì¤¿µ®½Å¤Ê»ñÎÁ¤Ç¤¹¤¬¡¢Æ±Ãø¤Ë¤ª¤¤¤Æ¤â SSL ½èÍý¤Ë¤Ä¤¤¤Æ¤Ï API ¤Î¾Ò²ð¤Î¤ß¤Ëα¤Þ¤Ã¤Æ¤¤¤Þ¤¹¡£

    ³Æ¹ñ¤ÎÍøÍѼԤâ¼êõ¤ê¤ÎÅÓÃæ¤È¤¤¤Ã¤¿°õ¾Ý¤Ç¼¡¤Î¤è¤¦¤Ê±þ½·¤¬¿ï½ê¤Ç¸«¼õ¤±¤é¤ì¤Þ¤¹¡£


    By helpme -  Tue Jun 30, 2015 5:14 am
    
    Can the ESP8266 support HTTPS websites? Does the Espressif SDK
    support SSL function?
    
    By Angelo Santagata -  Tue Jun 30, 2015 4:51 pm
    
    Alas I no, but I happened to see this ESP8266 SSL Example on their website!
    http://bbs.espressif.com/viewtopic.php?f=21&t=389
    
    hopefully someone can port it to the SDK
    
    ¤È¤¤¤¦¤ï¤±¤Ç¡¢¥á¡¼¥«¡¼Â¦¤Ï²¼µ­¥Ú¡¼¥¸¤Ë HTTPS ¥¯¥é¥¤¥¢¥ó¥È½èÍý¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤ò·ÇºÜ¤·¤Æ¤¤¤Þ¤¹¡£

    Here is a demo code of ESP8266 as TCP SSL client. 
    It is based on ESP8266 SDK without OS.
    
    It just like ESP8266 to be normal TCP client except
    change espconn_xxx to be espconn_secure_xxx
    
    If your SSL packet is larger than 2048 bytes, please
    try to call espconn_secure_set_size
    to enlarge SSL buffer size (max:8192 )
    

    ¤³¤Î¥³¡¼¥É¤ò²¼Éߤ­¤Ë AT ¥³¥Þ¥ó¥É¤ò³ÈÄ¥¤¹¤ì¤Ð¤è¤¤¤È¹Í¤¨¤Þ¤·¤¿¡£

    AT ¥³¥Þ¥ó¥É³ÈÄ¥¤Ç¤Ï SSL ½èÍý¤¬Àµ¾ïưºî¤·¤Ê¤¤¡©¡© (SDK v1.2.0)

    ¤µ¤Ã¤½¤¯¼«ºî¤Î +GETTEST ¥³¥Þ¥ó¥É¤ò½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£
    ¤Á¤Ê¤ß¤Ë¤³¤Î¼Â¸³¤Î»þÅÀ¤Ç»ÈÍѤ·¤Æ¤¤¤¿ SDK ¤Ï 2015ǯ8·î½é½ÜÅö»þ¤ÎºÇ¿·ÈǤÀ¤Ã¤¿ v1.2.0 ¤Ç¤¹¡£

    »îºî¤·¤¿ +GETTEST ¥³¥Þ¥ó¥É¤Ï¼¡¤ÎÆâÍÆ¤Ç¤¹¡£

    AT+GETTEST="hostname" ¤ÇÅö³º¥Û¥¹¥È¤Ø "GET /" ¥ê¥¯¥¨¥¹¥È¤òÁ÷¤ë
    
    AT+GETTEST  --- °ú¿ô¤¬¤Ê¤±¤ì¤Ð www.example.com:80 ¤Ø HTTP ¥ê¥¯¥¨¥¹¥È
    
    AT+GETTEST="www.example.com",0 --- 2nd arg ¤¬ 0 ¤Ê¤é
                                       80È֥ݡ¼¥È¤Ø HTTP ¥ê¥¯¥¨¥¹¥È
    AT+GETTEST="www.example.com",1 --- 2nd arg ¤¬ 1 ¤Ê¤é
                                       443È֥ݡ¼¥È¤Ø HTTPS ¥ê¥¯¥¨¥¹¥È
    
    AT+GETTEST="www.example.com",1,0 --- 3rd arg ¤¬ 0 ¤Ê¤é¥µ¡¼¥Ð¾ÚÌÀ½ñ¸¡¾Ú¤Ê¤·¤Ç
                                         443È֥ݡ¼¥È¤Ø HTTPS ¥ê¥¯¥¨¥¹¥È
    AT+GETTEST="www.example.com",1,1 --- 3rd arg ¤¬ 1 ¤Ê¤é¥µ¡¼¥Ð¾ÚÌÀ½ñ¸¡¾Ú¤¢¤ê¤Ç
                                         443È֥ݡ¼¥È¤Ø HTTPS ¥ê¥¯¥¨¥¹¥È
    
    ¥½¡¼¥¹¥³¡¼¥É¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£
    ¡ÊÃí¡§¤³¤ì¤é¤Ï¤½¤Î¸å¤ÎÄ´ºº·ë²Ì¤âÈ¿±Ç¤·¤¿¤â¤Î¤Ç¤¹¡£ºÇ½é¤Î¼Â¸³¤ÎÃʳ¬¤Ç¤Ï¤º¤Ã¤È¥é¥Õ¤ÊÆâÍÆ¤Ç¤·¤¿¡Ë ¤È¤³¤í¤¬¤³¤Î AT+GETTEST ¥³¥Þ¥ó¥É¤Ï´üÂÔÄ̤ê¤Ë¤Ïưºî¤·¤Þ¤»¤ó¤Ç¤·¤¿¡£HTTP ¥ê¥¯¥¨¥¹¥È¤ÏÀµ¤·¤¯½èÍý¤µ¤ì¤ë¤â¤Î¤Î HTTPS ¥ê¥¯¥¨¥¹¥È¤Ç¤Ï¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤Î¤Ç¤¹¡£
    AATTEE00
    
    
    OK
    AT+GMR
    AT version:0.30.0.0(Jul  3 2015 19:35:49)
    SDK version:1.2.0
    compile time:Aug 11 2015 14:09:10
    OK
    
    
    AT+GETTEST="www.example.com",1
    mode : sta(18:fe:34:a4:0f:a0) + softAP(1a:fe:34:a4:0f:a0)
    add if0
    11
    f 0, 221
    scandone
    add 0
    aid 4
    
    connected with hogehogeSSID, channel 10
    WIFI CONNECTED
    dhcp client start...
    WIFI GOT IP
    ip:10.10.0.19,mask:255.255.255.0,gw:10.10.0.1
    got ip !!!
    start connect to server
    client handshake start. 
    client handshake failed
    reconnect callback, error code -28 !!! 
    
    ¥¨¥é¡¼¥³¡¼¥É -28 ¤Ï SDK ¤Î include/espconn.h ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹
    /* Definitions for error constants. */
    
    #define ESPCONN_OK          0    /* No error, everything OK. */
    #define ESPCONN_MEM        -1    /* Out of memory error.     */
    #define ESPCONN_TIMEOUT    -3    /* Timeout.                 */
    #define ESPCONN_RTE        -4    /* Routing problem.         */
    #define ESPCONN_INPROGRESS  -5    /* Operation in progress    */
    
    #define ESPCONN_ABRT       -8    /* Connection aborted.      */
    #define ESPCONN_RST        -9    /* Connection reset.        */
    #define ESPCONN_CLSD       -10   /* Connection closed.       */
    #define ESPCONN_CONN       -11   /* Not connected.           */
    
    #define ESPCONN_ARG        -12   /* Illegal argument.        */
    #define ESPCONN_ISCONN     -15   /* Already connected.       */
    
    #define ESPCONN_HANDSHAKE  -28   /* ssl handshake failed	 */
    #define ESPCONN_SSL_INVALID_DATA  -61   /* ssl application invalid	 */
    
    ¥Ï¥ó¥É¥·¥§¥¤¥¯¤Ë¼ºÇÔ¤·¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¤¬¤³¤ì¤Ç¤Ï²¿¤â¤ï¤«¤ê¤Þ¤»¤ó¡£¤µ¤Æ¡©

    SDK v1.2.0 ¤Ç¤Î AT ¥³¥Þ¥ó¥É³ÈÄ¥Æâ¤Ç SSL ¤¬µ¡Ç½¤·¤Ê¤¤Íýͳ

    ÉÔ¿³¤Ë»×¤¤¾ðÊó¤òõ¤·¤¿¤È¤³¤íƱ¤¸ÌäÂê¤ËÁø¶ø¤·¤¿¥æ¡¼¥¶¤È¥¹¥¿¥Ã¥Õ¤Î±þ½·¤Ëµ¤¤Å¤­¤Þ¤·¤¿¡£

    Re: SSL connection via AT commands
    
    Postby doughboy ¢ä Tue Apr 21, 2015 11:59 pm
    
    I am writing AT command to support SSL, but it seems none of
    the espconn_secure_* api works. 
    At least when I connect to real ssl servers using real
    cerfificates. (and yes, I have set buffer size to 8196 and
    use the patched ssl library) esp module will
    reset (I think due to wdt timeout). I already reported this
    via email.
    
    Re: SSL connection via AT commands
    
    Postby Espressif_Faye ¢ä Mon Apr 27, 2015 10:22 am
    
    Hi, doughboy,
    
    We debugged on your problem, it's the RAM limitation cause that.
    
    AT commands has only 17KBytes available heap now¡¤
    SSL need 12KBytes free heap size, 
    if you espconn_secure_set_size to set 5KBytes¡¤it is not enough..
    
    So SSL can not be used in AT commands because RAM is limited. 
    
    Sorry for the inconvenience.
    

    AT ¥³¥Þ¥ó¥É¥×¥í¥°¥é¥à¼Â¹Ô»þ¤Ë¤Ï»Ä¥Ò¡¼¥×¤¬ 17KB ÄøÅÙ¤À¤¬¡¢SSL ½èÍý¤Ë¤Ï 12KB ¤Î¥Ò¡¼¥×¤¬É¬Íפǡ¢¤½¤³¤Ë espconn_secure_set_size() ¤Ç¿ô KB ¤Î SSL ¥Ð¥Ã¥Õ¥¡³ÎÊݤò»ØÄꤹ¤ë¤È´°Á´¤Ë¸Ï³é¤·¤Æ¤·¤Þ¤¦¡£¤½¤Î¤¿¤á¡¢AT ¥³¥Þ¥ó¥É¤Ç SSL ¤ò°·¤¦¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡¢¤È¤¤¤¦ÏäǤ¹¡£

    ¥Û¥¹¥È¤Ø¤ÎÀܳÍ×µá¤ÎÁ°¤Ë system_print_meminfo() ¤ª¤è¤Ó system_get_free_heap_size() ¤ò¸Æ¤Ó½Ð¤·¤Æ¤ß¤ë¤È¼¡¤Î·ë²Ì¤Ç¤·¤¿¡£

    
    data  : 0x3ffe8000 ~ 0x3ffe89d8, len: 2520
    rodata: 0x3ffe89e0 ~ 0x3ffeabd4, len: 8692
    bss   : 0x3ffeabd8 ~ 0x3fff5010, len: 42040
    heap  : 0x3fff5010 ~ 0x3fffc000, len: 28656
    
    system_get_free_heap_size=16592 
    

    ¤Ê¤ë¤Û¤É¡£¤Ê¤ª¡¢AT ¥³¥Þ¥ó¥É¥»¥Ã¥È¤Ï SDK ¤Ë¤ª¤¤¤Æ¤Ï¥é¥¤¥Ö¥é¥ê·Á¼°¤Ç¶¡µë¤µ¤ì¤Æ¤ª¤ê¡¢¼«ºî¥³¥Þ¥ó¥É¤òÄɲ乤뤳¤È¤Ï¤Ç¤­¤Æ¤â´û¸¤Î¤â¤Î¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£

    ¤µ¤Æ¡©

    ËÁƬ¤Ë½ñ¤¤¤¿¤è¤¦¤Ë¡¢ESP-WROOM-02 ¤òÄÌ¿®¥â¥¸¥å¡¼¥ë¤È¤·¤Æ°·¤¦¾õ¶·¤Ë¤ª¤¤¤Æ¤Ï¥·¥ê¥¢¥ë·Ðͳ¤Ç¤Î¥³¥Þ¥ó¥ÉÅϤ·¤Ç´Êñ¤ËÄÌ¿®½èÍý¤òÍøÍѤǤ­¤ë¤³¤È¤Ë¤ÏÊØµ¹¤¬¤¢¤ê¤Þ¤¹¡£

    ¤·¤«¤·¡¢¤½¤³¤Ç SSL ¤òÍøÍѤǤ­¤Ê¤¤¤³¤È¤ÏÂ礭¤Ê¥Þ¥¤¥Ê¥¹¤Ç¤¢¤ê¼ÂÍѤòÁÛÄꤹ¤ë¤È»ÈÅÓ¤¬¸ÂÄꤵ¤ì¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£¤½¤Î¤¿¤á´û¸¤Î AT ¥³¥Þ¥ó¥É¥»¥Ã¥È¤ËÂå¤ï¤ë¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¹þ¤ß¤Ç¤Î SSL ½èÍý¤Î¼ÂÁõ¤¬É¬ÍפǤ¢¤ê¡¢¤½¤ÎÊýË¡¤Ï¤¤¤í¤¤¤í¹Í¤¨¤é¤ì¤ë¤â¤Î¤Î¤É¤¦¤â±ó¤Þ¤ï¤ê¤Ê°õ¾Ý¤¬¤¢¤ê¤Þ¤¹¡£

    ¤½¤ì¤Ï¤½¤ì¤È¤·¤Æ¡¢°ìÊý¤Ç¤Ï ESP-WROOM-02 ¤Ï¼«Î©¤·¤¿¥Þ¥¤¥³¥ó¤È¤·¤Æ¤Î¦Ì̤â»ý¤Á¹ç¤ï¤»¤Æ¤¤¤ë¤¿¤á¡¢Í×·ï¤Ë¤è¤Ã¤Æ¤ÏñÂΤǽèÍý¤ò¤Þ¤«¤Ê¤¦¤³¤È¤¬²Äǽ¤Ç¤¢¤ë¤ï¤±¤Ç¡¢¤È¤É¤Î¤Ä¤Þ¤êÀ½Éʽвٻþ¤Î AT ¥³¥Þ¥ó¥É¥»¥Ã¥È¤Ï¡Ö¤ª¤Þ¤±¡×ÄøÅ٤Τâ¤Î¤È³ä¤êÀÚ¤ë¤Ù¤­¤Ê¤Î¤«¤â¡©

    ¤½¤ó¤Ê¤³¤È¤ò¹Í¤¨¤Ê¤¬¤é¡¢SSL ½èÍý¤½¤Î¤â¤Î¤¬Àµ¾ï¤Ëưºî¤¹¤ë¤³¤È¤ò³Îǧ¤¹¤ë¤¿¤á¤ËÁ°·Ç¤Î¥×¥í¥°¥é¥à¤ò AT ¥³¥Þ¥ó¥É¥»¥Ã¥È¤ÈÀÚ¤êÎ¥¤·Ã±ÂΤǵ¯Æ°¤¹¤ë·Á¤ËÊѹ¹¤·¤ÆÆ°ºî¤ò»î¤·¤Æ¤ß¤Þ¤·¤¿¡£
    ¥Û¥¹¥È¤Ø¤ÎÀܳÍ×µáÁ°¤Î¥Ò¡¼¥×¾õ¶·¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¡¢HTTPS ¥ê¥¯¥¨¥¹¥È¤ÏÌäÂê¤Ê¤¯½èÍý¤µ¤ì¤Þ¤·¤¿¡£¤ä¤Ï¤ê¥á¥â¥êÉÔ­¤ÎÌäÂê¤Î¤è¤¦¤Ç¤¹¡£

    
    data  : 0x3ffe8000 ~ 0x3ffe8560, len: 1376
    rodata: 0x3ffe8560 ~ 0x3ffe9764, len: 4612
    bss   : 0x3ffe9768 ~ 0x3fff2b30, len: 37832
    heap  : 0x3fff2b30 ~ 0x3fffc000, len: 38096
    
    system_get_free_heap_size=34856
    

    ¥µ¡¼¥Ð¾ÚÌÀ½ñ¤Î¸¡¾Ú¤Ë¤Ä¤¤¤Æ

    Ω¤Á»ß¤Þ¤Ã¤Æ¤¤¤Æ¤â»ÅÊý¤¬¤Ê¤¤¤Î¤Ç¡¢¤¤¤º¤ì¤Ë¤·¤Æ¤âɬÍפȤʤë SSL ¥µ¡¼¥Ð¾ÚÌÀ½ñ¤Î¸¡¾Ú¤Ë¼ê¤ò¤Ä¤±¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

    SDK ¤ËƱº­¤Î¡ÖESP8266 SSL User Manual¡×¤Ë¤Ï HTTPS ¥¯¥é¥¤¥¢¥ó¥È½èÍý¤Ë¤ª¤¤¤Æ¥µ¡¼¥Ð¾ÚÌÀ½ñ¤ò¸¡¾Ú¤¹¤ëÊýË¡¤¬¼¡¤Î¤è¤¦¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    ¡Ê¥¯¥ê¥Ã¥¯¤Ç¼ÂÀ£É½¼¨¡Ë

    ¾åµ­¥É¥­¥å¥á¥ó¥È¤«¤é¤ÎÈ´¿è

    CA verify function default to be disabled, user can enable it
    by espconn_secure_ca_enable.
    
    3.1. Generate CA Certificate
    
    (1) Put script ¡Èmake_cert.py¡Éand CA certificate into
        the same folder. 
    (2) Run script ¡Èmake_cert.py¡É to generate esp_ca_cert.bin
        which contains all CA certificates
        (2 CA certificates at most) in the same folder. 
        Download address of esp_ca_cert.bin depends on
        espconn_secure_ca_enable.
    
    3.2. CA Verify
    
    STEP 1: ESP8266 connects to server, read esp_ca_cert.bin
            from flash, get the corresponding SSL 
            ctx. Only 2 CA certificates is allowed at most.
    STEP 2: ESP8266 starts TLS handshake, get certificate from
            SSL server, check with the CA in step 1¡§
            • if CA check fail, connection break¡¨
            • if succeed, CA verify pass. 
    
    4.2. espconn_secure_ca_enable
    
    Function: 
      Enable SSL CA (certificate authenticate) function 
    
    Note¡§
      • CA function is disabled by default 
      • If user want to call this API, please call it before 
                     espconn_secure_accept
                     (ESP8266 as TCP SSL server) or 
                     espconn_secure_connect
                     (ESP8266 as TCP SSL client)
    Prototype: 
      bool espconn_secure_ca_enable (uint8 level, uint16 flash_sector) 
    
    Parameter: 
      uint8 level : set configuration forESP8266
                    SSL server/client¡§
                     0x01 SSL client¡¨
                     0x02 SSL server¡¨
                     0x03 both SSL client and SSL server 
    
      uint16 flash_sector : flash sector in which CA
      (esp_ca_cert.bin) is downloaded. For example, 
      flash_sector is 0x3B, then esp_ca_cert.bin need to
      download into flash 0x3B000
    
    Return:
      true : succeed
      false  : fail 
    

    ¡Ömake_cert.py¡×¤Ï SDK ¤Ë¤Ï´Þ¤Þ¤ì¤Þ¤»¤ó¡£²¼µ­¥Ú¡¼¥¸¤Ë¥À¥¦¥ó¥í¡¼¥É¥ê¥ó¥¯¤¬·ÇºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    °Ê²¼¤Î¼ê½ç¤Ç¡Öhttps://www.example.com/¡×¤Î¥µ¡¼¥Ð¾ÚÌÀ½ñ¤Î¸¡¾Ú¤ò»î¤ß¤Þ¤·¤¿¡£

    • DigiCert ¤Î¥ë¡¼¥È¾ÚÌÀ½ñ¤ò¥Ö¥é¥¦¥¶¤«¤é X509 ·Á¼°¡ÊDER ¥¨¥ó¥³¡¼¥É¡Ë¤Ç¥¨¥¯¥¹¥Ý¡¼¥È¤·³ÈÄ¥»Ò¤ò .cer ¤È¤¹¤ë
    • *.cer ¤òÃÖ¤¤¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ç¾åµ­¤Î make_cert.py ¤ò¼Â¹Ô¤·¡Öesp_ca_cert.bin¡×¤òÀ¸À®¤¹¤ë
    • espconn_secure_connect() ¤ÎÁ°¤Ë²¼µ­¹Ô¤òµ­½Ò¤·user1.bin ¤ò¥Õ¥é¥Ã¥·¥å¥á¥â¥ê¥µ¥¤¥º 1024KB ¤Î»ØÄê¤Ç¥Ó¥ë¥É
      espconn_secure_ca_enable(0x01, 0x65)); // 0x01 = client
    • ¾¤Î *.bin ¥Õ¥¡¥¤¥ë¤È°ì½ï¤Ë¡¢esp_ca_cert.bin ¤ò¥Õ¥é¥Ã¥·¥å¥á¥â¥ê¤Î 0x65000 ÈÖÃÏ¡ÊUser Data area¡Ë¤òµ¯ÅÀ¤Ë½ñ¤­¹þ¤à
      ¢¨¥Ó¥ë¥É¤·¤¿ user1.bin ¤Î¥µ¥¤¥º¤Ï 300KB ¤Û¤É¤Ç¤¢¤ê;͵¤ò¤ß¤Æ 400KB ¤È¤·¤Æ
      ¥Ö¡¼¥ÈÎΰè¤Î 4KB ¤È¹ç»»¤¹¤ë¤È 404KB ¤Ë¤Ä¤­ 404 * 1024 = 413696 = 0x65000
      - ²¼¤Î¥á¥â¥ê¥Þ¥Ã¥×¡ÊºÆ·Ç¡Ë¤ò»²¾È¤Î¤³¤È
      ¢¨1024KB ¥Õ¥é¥Ã¥·¥å»ÈÍÑ»þ¤Î¥á¥â¥ê¥Þ¥Ã¥×
      
           - SDK ¤Î¡ÖEspressif IOT SDK User Manual¡×¤è¤ê
      
      Note 
      
      • System param (system parameter area) is the last 16KB offlash. 
      
      • User param is the user parameter area used by Espressif demo code
        ( IOT_Demo or AT ). If users develop their own application, 
        user data can be saved in any available flash area. 
      
      • User Data area ( green area in pictures below ) means the flash
        area that may be available, if program area doesn¡Çt reach the
        maximum size, remaining area can be used to save user data. 
      
    • ´üÂÔÄ̤ê¤Ë¥µ¡¼¥Ð¾ÚÌÀ½ñ¤Î¸¡¾Ú¤¬¹Ô¤ï¤ì www.example.com ¤Ø¤Î HTTPS ¥ê¥¯¥¨¥¹¥È¤ÏÀµ¾ï¤Ë½èÍý¤µ¤ì¡¢¥ë¡¼¥È CA ¤¬ DigiCert ¤Ç¤Ï¤Ê¤¤¥µ¥¤¥È¤Ø¤Î HTTPS ¥ê¥¯¥¨¥¹¥È¤Ë¤ª¤¤¤Æ¤Ï¥Ï¥ó¥É¥·¥§¥¤¥¯¤Î»þÅÀ¤Ç¥¨¥é¡¼¤È¤Ê¤ë¤³¤È¤ò³Îǧ

    ²ò·è¡§SDK v1.3.0 ¤Ê¤é AT ¥³¥Þ¥ó¥É³ÈÄ¥Æâ¤Ç SSL ½èÍý¤¬Æ°¤¯¡ª

    ¤½¤¦¤³¤¦¤·¤Æ¤¤¤ëÆâ¤Ë¡¢2015-08-08 ¤Ë¸ø³«¤µ¤ì¤¿ esp_iot_sdk_v1.3.0_15_08_08 ¤Î¥ê¥ê¡¼¥¹¥Î¡¼¥È¤Î¼¡¤Îµ­½Ò¤¬ÌܤËÈô¤Ó¹þ¤ó¤Ç¤­¤Þ¤·¤¿¡£

    Optimization:
    
    1.Memory optimization to save 12KBytes.
                :
    

    Á°½Ò¤Î¤È¤ª¤ê¡¢SDK v1.2.0 ¤ò»È¤Ã¤Æ¥Ó¥ë¥É¤·¤¿ AT ¥³¥Þ¥ó¥É³ÈÄ¥ÈÇ¤Ç SSL ¤¬µ¡Ç½¤·¤Ê¤«¤Ã¤¿¤Î¤Ï¥á¥â¥êÉÔ­¤¬¸¶°ø¤À¤Ã¤¿¤¿¤á¡¢v1.3.0 ¤Ç 12KB ;͵¤¬½ÐÍ褿¤Î¤Ç¤¢¤ì¤Ð¤¢¤ë¤¤¤Ïưºî²Äǽ¤Ç¤Ï¤Ê¤¤¤«¤È¹Í¤¨¤Þ¤·¤¿¡£ ¼ÂºÝ¤Ë v1.3.0 ¤Ç¥Ó¥ë¥É¤·¤¿ user1.bin ¤Ç AT+GETTEST ¥³¥Þ¥ó¥É¤ò»î¤·¤¿¤È¤³¤í HTTPS ¥ê¥¯¥¨¥¹¥È¤¬Àµ¾ï¤Ë½èÍý¤µ¤ì¤ë¤³¤È¤ò³Îǧ¡¢¥Û¥¹¥È¤Ø¤ÎÀܳÍ×µáÁ°¤Î¥Ò¡¼¥×¾õ¶·¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤·¤¿¡£¤Þ¤º¤Ï¤á¤Ç¤¿¤·¡¢¤Ç¤¹¡£

    
    data  : 0x3ffe8000 ~ 0x3ffe83ac, len: 940
    rodata: 0x3ffe83b0 ~ 0x3ffe9d40, len: 6544
    bss   : 0x3ffe9d40 ~ 0x3fff18b8, len: 31608
    heap  : 0x3fff18b8 ~ 0x3fffc000, len: 42824
    
    system_get_free_heap_size=31376
    

    ưºî¤ÎÍÍ»Ò ¡Êư²è¡§2ʬ19ÉáË

    º£²ó»îºî¤·¤¿ GETTEST ¥³¥Þ¥ó¥É¤Ï½êÄê¤Î¥Û¥¹¥È¤ËÂФ· "GET /" ¤ò¹Ô¤¦¤Î¤ß¤ÎÆâÍÆ¤Ç¤¹¤¬¡¢°Ê¾å¤Î¤è¤¦¤ËÂçÏÈ¤Ç¤ÎÆ°ºî¤ò³Îǧ¤Ç¤­¤¿¤¿¤áº£¸å¤ÏǤ°Õ¤Î URI ¤Î»ØÄê¤ä POST ¥á¥½¥Ã¥É¤Ø¤ÎÂбþ¤Ê¤É¼ÂÍѾåɬÍ×¤ÊÆùÉÕ¤±¤ò¼ê¸µ¤Ç¹Ô¤¦¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£³Ú¤·¤ß¤Ç¤¹¡£

    ¾å¤Îư²è¤Ç»ÈÍѤ·¤Æ¤¤¤ë¸½»þÅÀ¤Î¥Õ¥¡¡¼¥à°ì¼°¤Î¤¦¤Á user1.bin °Ê³°¤Î¥Ð¥¤¥Ê¥ê¤ò°Ê²¼¤Î¥¢¡¼¥«¥¤¥Ö¤Ë¼ý¤á¤Æ¤¤¤Þ¤¹¡£ ¼«Ê¬¤Î´Ä¶­¤Î AP ¤Î SSID ¤È¥Ñ¥¹¥ï¡¼¥É¤ò¥½¡¼¥¹¤Ëµ­½Ò¤·¤Æ user1.bin ¤ò¥Ó¥ë¥É¤·¡¢¿Þ¤ÎÍ×ÎΤǤ³¤ì¤é¤Î¥Ð¥¤¥Ê¥ê°ì¼°¤ò ESP-WROOM-02 ¤Î¥Õ¥é¥Ã¥·¥å¥á¥â¥ê¤Ë½ñ¤­¹þ¤á¤Ð AT+GETTEST ¥³¥Þ¥ó¥É¤¬Æ°ºî¤¹¤ë¤Ï¤º¤Ç¤¹¡£¶½Ì£¤Î¤¢¤ëÊý¤Ï¼«¸ÊÀÕǤ¤Ç¤ª»î¤·²¼¤µ¤¤¡£


    (tanabe)

    klab_gijutsu2 at 18:00¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    2015ǯ04·î21Æü

    ¡ÖTWE-LITE¡×¥Õ¥¡¡¼¥à¥¦¥§¥¢¥×¥í¥°¥é¥ß¥ó¥°¤Î»î¤ß

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    2017-01-13 Äɵ­¡§
    TWE-LITE¡Êµìɽµ­¡ÖTWE-Lite¡×¡Ë¤Î¥á¡¼¥«¡¼¤¬ÊѤï¤êƱ¼Ò¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤Ë´ð¤Å¤¤¤Æ´ØÏ¢²Õ½ê¤Î²þÄû¤ò¹Ô¤¤¤Þ¤·¤¿¡£·ë²Ì¤È¤·¤Æ¡¢2015ǯ4·î¤Ë¸ø³«¤·¤¿¸µ¤Îµ­»ö¤Ë2017ǯ1·î¸½ºß¤Î¿·¤·¤¤¾ðÊó¤ä¥­¡¼¥ï¡¼¥É¤¬ÉôʬŪ¤ËÈ¿±Ç¤µ¤ì¤¿ÆâÍÆ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£Ç°¤Î¤¿¤áÍ×½ê¤ËÃí¼á¤ò²Ã¤¨¤Æ¤ª¤êº®Íð¤Ë¤Ä¤Ê¤¬¤ëÍ×ÁÇ¤ÏÆÃ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¤ÈȽÃǤ·¤Æ¤¤¤Þ¤¹¤¬¡¢µ­»ö»²¾È¤ÎºÝ¤Ë¤Ï¤´Ãí°Õ²¼¤µ¤¤¡£

    ¥â¥Î¥ï¥¤¥ä¥ì¥¹³ô¼°²ñ¼ÒÍͤΠZigBee ̵Àþ¥Þ¥¤¥³¥ó¥â¥¸¥å¡¼¥ë¡ÖTWE-LITE DIP¡×¤Ï¥³¥¹¥È¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬¹â¤¯¿Íµ¤¤Î¤¢¤ëÀ½ÉʤǤ¹¡£¼ê·Ú¤Ë¥Î¡¼¥É´Ö¤Î̵ÀþÄÌ¿®¤ò¼Â¸½¤Ç¤­¤ë¤¿¤á IoT ¤ò¹½À®¤¹¤ëÍ×ÁǤȤ·¤Æ¤â½êÄê¤Î·÷Æâ¤ËÊĤ¸¤¿µ¡´ï´Ö¥Í¥Ã¥È¥ï¡¼¥¯¤Î¤¿¤á¤ÎÆ»¶ñΩ¤Æ¤È¤·¤Æ¤âÍ­ÍѤǤ·¤ç¤¦¡£
    ɸ½à¤Î¤â¤Î¤Ë²Ã¤¨Ê£¿ô¤Îŵ·¿Åª¤ÊÍÑÅӤ˨¤·¤¿¥Õ¥¡¡¼¥à¥¦¥§¥¢·²¤È¤½¤Î¥½¡¼¥¹¥³¡¼¥É¤¬³«È¯´Ä¶­¤È¤È¤â¤Ë̵½þ¤Ç¸ø³«¤µ¤ì¤Æ¤¤¤ë¤³¤È¤â¶½Ì£¿¼¤¯¡¢À½Éʤϥۥ¹¥È PC ¤«¤éÀìÍѤΠUSB ¥¢¥À¥×¥¿ ¡ÊTWE-LITE R¡Ë ¤Þ¤¿¤Ï»ÔÈΤΠUSB ¥·¥ê¥¢¥ëÊÑ´¹¥â¥¸¥å¡¼¥ë¡¿¥±¡¼¥Ö¥ë·Ðͳ¤Ç¼«Í³¤Ë¥Õ¥¡¡¼¥à¤ò½ñ¤­´¹¤¨¤é¤ì¤ë¤è¤¦¤Ë¥Ç¥¶¥¤¥ó¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    ¤³¤Î¤è¤¦¤Ëñ¤Ê¤ëÄÌ¿®¥â¥¸¥å¡¼¥ë¤Ç¤Ï¤Ê¤¯¥×¥í¥°¥é¥Þ¥Ö¥ë¤Ê¥Þ¥¤¥³¥ó¤È¤·¤Æ¤Î¦Ì̤ò»ý¤Á¹ç¤ï¤»¤Ê¤¬¤é²Á³Ê¤¬ÄãÎ÷¤Ç¤¢¤ë¤³¤È¤¬ TWE-LITE DIP ¤ÎÂ礭¤ÊÌ¥ÎϤǤ¹¡£¤Þ¤¿¡¢¡ÖĶ´Êñ¡ª¡×¤Î¼æ¶ç¤ÎÄ̤ê½Ð²Ù»þ¤Îɸ½à¥Õ¥¡¡¼¥à¤Ç¤Ï°·¤¤¤ä¤¹¤µ¤¬ÆÃ¤Ë½Å»ë¤µ¤ì¤Æ¤ª¤ê¡¢¤½¤¦¤¤¤Ã¤¿´Ö¸ý¤Î¹­¤µ¤È±ü¤Î¿¼¤µ¤¬¤³¤ÎÀ½ÉÊ¤ÎÆÃĹ¤È¸À¤Ã¤Æ¤è¤¤¤Ç¤·¤ç¤¦¡£

    »î¤ß¤Î¤­¤Ã¤«¤±

    TWE-LITE ¥æ¡¼¥¶¤Ï¥á¡¼¥«¡¼¤ÎÄ󼨤¹¤ë¥½¥Õ¥È¥¦¥§¥¢»ÈÍѵöÂú·ÀÌó½ñ¤Ë´ð¤Å¤¤¤Æ TWE-NET SDK ¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢µ¬Ìó¤Îǧ¤á¤ëÈϰϤǸø¼°¥Õ¥¡¡¼¥à¤Î¥½¡¼¥¹¥³¡¼¥É¤ò²þÊѤ·¤¿¤ê¤½¤ÎÆâÍÆ¤ò¸ø³«¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£

    ¥Í¥Ã¥È¤ò»²¾È¤¹¤ë¤È¸½»þÅÀ¤Ç¤Ï¼ÂºÝ¤Ë¸ø¼°¥Õ¥¡¡¼¥à¤Ë¼ê¤ò²Ã¤¨¤Æ TWE-LITE DIP ¤ò»È¤Ã¤Æ¤¤¤ëÍøÍѼԤÏÀ½Éʤο͵¤¤ËÈæ¤Ù¤Þ¤À¤¢¤Þ¤ê¿¤¯¤Ê¤¤¤è¤¦¤Ë¸«¼õ¤±¤é¤ì¤Þ¤¹¡ÊÃí¡§2015ǯ04·î»þÅÀ¤Îµ­½Ò¡Ë¡£¤½¤ÎÇØ·Ê¤Ë¤Ï¡¢¤Þ¤º¸ø¼°¤Î¥Õ¥¡¡¼¥à¥¦¥§¥¢·²¤¬½¼¼Â¤·¤Æ¤¤¤ë¤¿¤á²þÊѤÎÉÔÍפʥ±¡¼¥¹¤Î¿¤¤¤³¤È¤¬ÁÛÁü¤µ¤ì¤Þ¤¹¤¬¡¢¤½¤ì¤Ë²Ã¤¨¤Æ¡¢ÀºÌ©¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë³Æ¥Õ¥¡¡¼¥à¤Î¥Ü¥ê¥å¡¼¥à¤Î¤¢¤ë¥½¡¼¥¹¥³¡¼¥É¤Ï¤½¤ÎÆâÍÆ¤òŬÀÚ¤ËÍý²ò¤·¤Ê¤±¤ì¤Ð¼ê¤ò¿¨¤ì¤Ë¤¯¤¤¤È¤¤¤¦»ö¾ð¤â¤¢¤ë¤è¤¦¤Ë»×¤ï¤ì¤Þ¤¹¡£¥á¡¼¥«¡¼¤¬¸ø³«¤·¤Æ¤¤¤ë¤³¤ì¤é¤Î¥Õ¥¡¡¼¥à¤Ï´ðËÜŪ¤Ë¼ÂÍѤòÌÜŪ¤È¤¹¤ë¤â¤Î¤Ç¤¢¤Ã¤Æ¶µ°éÍѤǤϤ¢¤ê¤Þ¤»¤ó¤«¤é¡¢ÍøÍѤ¹¤ë¦¤Ï¥³¡¼¥É¤ÎÀ¤³¦¤ò¤¸¤Ã¤¯¤ê³Ú¤·¤ß¤Ê¤¬¤é¥Î¥¦¥Ï¥¦¤ò³Ð¤¨¤ë¥¹¥¿¥ó¥¹¤ËΩ¤Ä¤³¤È¤¬¹¥¤Þ¤·¤¤¤Ç¤·¤ç¤¦¡£

    ¤¿¤À¡¢¤³¤³¤·¤Ð¤é¤¯ TWE-LITE ¤Ë¿¨¤ì¤¿°õ¾Ý¤Ç¤Ï¡¢¤½¤³¤Ë¡Ö¤Á¤ç¤Ã¤È¤·¤¿Â­¤¬¤«¤ê¡×¤¬¤¢¤ì¤Ð¸ø¼°¥Õ¥¡¡¼¥à¤Î¥³¡¼¥É¤ò¤è¤ê¸«ÅϤ·¤ä¤¹¤¯¤Ê¤ê¡¢¤½¤Î¤³¤È¤¬¤³¤ÎÍ¥¤ì¤¿À½Éʤò¼ê¸µ¤Ç³èÍѤ¹¤ëµ¡²ñ¤ò³È¤²¤ë¤³¤È¤Ë¤â¤Ä¤Ê¤¬¤ë¤è¤¦¤Ë´¶¤¸¤Þ¤·¤¿¡£»×¤¤É⤫¤Ù¤¿¤Î¤Ï "Hello, world!" ¤Î¤è¤¦¤Ë¤â¤Ã¤È¤âñ½ã¤Ç´Ê·é¤ÊÆâÍÆ¤«¤é¤Ï¤¸¤Þ¤ê½ù¡¹¤Ë½èÍý¤¬ÆùÉÕ¤±¤µ¤ì¤Æ¤¤¤¯¥¤¥á¡¼¥¸¤Î¾®¤µ¤Ê¥µ¥ó¥×¥ë¥Õ¥¡¡¼¥à¥³¡¼¥É·²¤Ç¤¹¡£¤Ç¤â»Äǰ¤Ê¤¬¤éº£¤Î¤È¤³¤í¤½¤¦¤¤¤¦¤â¤Î¤Ï¸«Åö¤¿¤ê¤Þ¤»¤ó¡ÊÃí¡§2015ǯ04·î»þÅÀ¤Îµ­½Ò¡Ë¡£¤½¤³¤Ç¡¢¼Â¸³¤ÈÊÙ¶¯¤ò¤«¤Í¤Æ¸½»þÅÀ¤Ç¤Î¼«Ê¬¤ÎÅþãÅÀ¤Ê¤ê¤Ë¤½¤¦¤¤¤¦¥³¡¼¥É¤ò½ñ¤¤¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£°ìÏ¢¤Î²áÄø¤Ç¤Îµ¿ÌäÅÀ¡¦ÉÔÌÀÅÀ¤Î²ò·è¤Ë¤Ï¸À¤¦¤Þ¤Ç¤â¤Ê¤¯¸ø¼°¥Õ¥¡¡¼¥à¤Î¥½¡¼¥¹¤È¾åµ­¤Î SDK ¥Þ¥Ë¥å¥¢¥ë¤¬Èó¾ï¤Ë»²¹Í¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤Î»î¤ß¤Ïº£¸å¤â·Ñ³¤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢¤Þ¤º¤Ï¤³¤³¤Þ¤Ç¤Î¥½¡¼¥¹¥³¡¼¥É¤Èưºî¤ÎÍͻҤò¸ø³«¤·¤Þ¤¹¡£¶½Ì£¤Î¤¢¤ëÊý¤ÏÇÁ¤¤¤Æ¤ß¤Æ²¼¤µ¤¤¡£

    ¢¨Ëܵ­»ö¤Ë·ÇºÜ¤Î¥½¡¼¥¹¥³¡¼¥É¤Ë¤Ï¸ø¼°¥Õ¥¡¡¼¥à¥¦¥§¥¢¤Î¥½¡¼¥¹¤«¤é¤Î
    ¡¡°úÍѤ¬´Þ¤Þ¤ì¤Þ¤¹¡£¼è¤ê°·¤¤¤ËºÝ¤·¤Æ¤ÏÃøºî¸¢É½µ­¤ò³Îǧ¤Î¾å¡¢Á°·Ç¤Î
     ¡Ö¥â¥Î¥ï¥¤¥ä¥ì¥¹¥½¥Õ¥È¥¦¥§¥¢»ÈÍѵöÂú·ÀÌó½ñ¡×¤ÎÆâÍÆ¤ò½å¼é¤·¤Æ²¼¤µ¤¤¡£
      ¤Ê¤ª¡¢Ëܵ­»ö¤Ç¤Î³Æ¥½¡¼¥¹¥³¡¼¥É¤Î·ÇºÜ¤Ê¤é¤Ó¤Ë¥á¡¼¥«¡¼¸ø¼°¥µ¥¤¥È¾å¤Î
      ¸Ä¡¹¤Î¥Ú¡¼¥¸¤Ø¤ÎľÀܤΥê¥ó¥¯¡¦¸ø¼°Ê¸½ñ¤«¤é¤Î¾ðÊó¤ÎÈ´¿è¤Ë¤Ä¤¤¤Æ¤Ï
      ¤¤¤º¤ì¤â»öÁ°¤Ë¥â¥Î¥ï¥¤¥ä¥ì¥¹Íͤè¤ê¾µÂú¤òÆÀ¤Æ¤¤¤Þ¤¹¡£
    
    ¢¨Ëܵ­»ö¤ÎËÜʸ¤ª¤è¤ÓËܵ­»ö¤Ë·ÇºÜ¤Î¥½¡¼¥¹¥³¡¼¥É¤Ë¤Ï¸í¤ê¤¬´Þ¤Þ¤ì¤Æ
    ¡¡¤¤¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¤½¤Î¤³¤È¤¬¤¤¤«¤Ê¤ë»³²¤Ë·Ò¤¬¤Ã¤¿¤È¤·¤Æ¤â
    ¡¡É®¼Ô¤ª¤è¤Ó KLab ¤Ï°ìÀÚ¤ÎÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£¤¢¤é¤«¤¸¤á¤´Î»¾µ²¼¤µ¤¤¡£
    

    µ»½Ñ¾ðÊó¤Ë¤Ä¤¤¤Æ

    TWE-LITE ÍÑ¥×¥í¥°¥é¥ß¥ó¥°¤ËɬÍפʾðÊó¤Ï¿´ô¤ËÅϤꡢ¥á¡¼¥«¡¼¸ø¼°¥µ¥¤¥È¤Î¾ðÊó¤äÁ°·Ç¤Î TWE-NET SDK ¥Þ¥Ë¥å¥¢¥ë¡¢¤Þ¤¿¡¢NXP ¼ÒÀ½ JN5164 ÍѤΥڥê¥Õ¥§¥é¥ë ¡ÊTWE-LITE ¤Î I/O ¥Ý¡¼¥È¤Þ¤ï¤ê¡Ë API ¤Î¥Þ¥Ë¥å¥¢¥ëÅù¤¬¼ç¤Ê¾ðÊ󸻤Ȥʤê¤Þ¤¹¡£¸å³¤Î¥½¡¼¥¹¥³¡¼¥É¤ò»²¾È¤¹¤ë¾å¤ÇºÇ¾®¸ÂɬÍפʤâ¤Ã¤È¤â´ðËÜŪ¤Ê»ñÎÁ»°ÅÀ¤ò°Ê²¼¤ËÈ´¿è¤·¤Þ¤¹¡£
    ¢¨¿Þ¤Ï¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¤µ¤ì¤Þ¤¹

    TWE-LITE DIP ¤Î¥Ô¥óÇÛÃÖ   ¡Ê¥á¡¼¥«¡¼¸ø¼°¥µ¥¤¥È¤Î¡ÖĶ´Êñ¡ªTWEɸ½à¥¢¥×¥ê¡×¥Ú¡¼¥¸¤è¤ê¡Ë

    TWE-LITE ¥Õ¥¡¡¼¥à¥¦¥§¥¢¥³¡¼¥É¤Îưºî¥Õ¥í¡¼   ¡ÊÁ°·Ç¤Î SDK ¥Þ¥Ë¥å¥¢¥ë¤è¤ê¡Ë

    Test01¡§ LED ¤òÅÀÌǤµ¤»¤ë

    ¤Þ¤º¤Ï¥Þ¥¤¥³¥ó¡¦ÅŻҹ©ºî¤ÎÀ¤³¦¤Ç¤Î¡ÖHello, world!¡×¤Ë¤¢¤¿¤ë LED ¤ÎÅÀÌÇ¡¢¤¤¤ï¤æ¤ë¡ÖL ¥Á¥«¡×¤ò¹Ô¤¤¤Þ¤¹¡£¥Í¥Ã¥È¥ï¡¼¥¯ÄÌ¿®¤Ï¹Ô¤¤¤Þ¤»¤ó¡£

    ưºî¤ÎÍÍ»Ò

    ÁõÃ֤μ̿¿¤È¹½À®¿Þ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    ¥½¡¼¥¹¥³¡¼¥É  GitHub

    ¥æ¡¼¥¶ÄêµÁ¤Î¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥éÆâ¤Ç 1Éüþ´ü¤Î E_EVENT_TICK_SECOND ÄÌÃΤ˸Ʊþ¤·½ÐÎϥݡ¼¥È¤Î Lo, Hi ¤ò¥È¥°¥ë¤¹¤ë

    Test02¡§ ¥¹¥¤¥Ã¥ÁÁàºî¤Ë LED ¤Î¾õÂÖ¤òϢư¤µ¤»¤ë

    ¾å¤Î Test01 ¤ÏÁ´¼«Æ°¤«¤Ä¥¨¥ó¥É¥ì¥¹¤Ç¤¹¤¬¡¢º£Å٤Ͽʹ֤ÎÁàºî¤ËÈ¿±þ¤µ¤»¤Æ¤ß¤Þ¤¹¡£¥¿¥¯¥È¥¹¥¤¥Ã¥Á¤Î ON/OFF ¤Ë LED ¤ÎÅÀÅô/¾ÃÅô ¤¬Ï¢Æ°¤·¤Þ¤¹¡£¥Í¥Ã¥È¥ï¡¼¥¯ÄÌ¿®¤Ï¹Ô¤¤¤Þ¤»¤ó¡£

    ưºî¤ÎÍÍ»Ò

    ÁõÃ֤μ̿¿¤È¹½À®¿Þ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    ¥½¡¼¥¹¥³¡¼¥É  GitHub

    ´ûÄê¤Î¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥é cbToCoNet_vMain() Æâ¤Ç¥¿¥¯¥È¥¹¥¤¥Ã¥Á¤Î¾õÂ֤˱þ¤¸¤Æ LED ¤Î¾õÂÖ¤òÊѲ½¤µ¤»¤ë

    Test03¡§ ¥·¥ê¥¢¥ë·Ðͳ¤Ç¥Ç¥Ð¥Ã¥°¥á¥Ã¥»¡¼¥¸¤ò½ÐÎÏ

    ¥×¥í¥°¥é¥ß¥ó¥°¤Ë¤Ï¥Ç¥Ð¥Ã¥°¤Î¤¿¤á¤Î¼êÃʤ¬ÉԲķç¤Ç¤¹¡£Test02 ¤Î¥³¡¼¥É¤Ë¡¢¥·¥ê¥¢¥ëÀܳ·Ðͳ¤Ç PC ¾å¤Î¥¿¡¼¥ß¥Ê¥ë¥¢¥×¥ê¤Ø¥È¥ì¡¼¥¹Ê¸¤ò½ÐÎϤ¹¤ë½èÍý¤ò²Ã¤¨¤Æ¤ß¤Þ¤¹¡£PC ¤È¤ÎÀܳ¤Ë¤ÏÀìÍѤΠUSB ¥¢¥À¥×¥¿ ¡ÖTWE-LITE R¡×¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£¡¡¡Ê»ÔÈΤΠUSB ¥·¥ê¥¢¥ëÊÑ´¹¥â¥¸¥å¡¼¥ë¡¿¥±¡¼¥Ö¥ë¤âÍøÍѤǤ­¤Þ¤¹¡Ë¡¡¥Í¥Ã¥È¥ï¡¼¥¯ÄÌ¿®¤Ï¹Ô¤¤¤Þ¤»¤ó¡£

    ưºî¤ÎÍÍ»Ò

    ÁõÃ֤μ̿¿¤È¹½À®¿Þ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    ¥½¡¼¥¹¥³¡¼¥É  GitHub

    µ¯Æ°»þ¤Ë UART ¤È¥Ç¥Ð¥Ã¥°½ÐÎÏÍѤνé´ü²½¤ò¹Ô¤¤ vfPrintf() ´Ø¿ô¤ò»È¤Ã¤Æ¥·¥ê¥¢¥ë¤Ø¥È¥ì¡¼¥¹Ê¸¤ò½ÐÎÏ

    Test04¡§ ¥¹¥¤¥Ã¥Á²¡²¼¤Ç¥á¥Ã¥»¡¼¥¸¤òÁ÷¿® ¡Á ¼õ¿®Â¦¤Ï LED ¤ÇÈ¿±þ

    ̵ÀþÁ÷¼õ¿®¤ò¹Ô¤¤¤Þ¤¹¡£Test02 ¤ÎÁõÃÖ¤ÈÆ±¤¸¤â¤Î¤ò¤â¤¦¤Ò¤È¤ÄÍѰդ·¤Þ¤¹¡£¥¿¥¯¥È¥¹¥¤¥Ã¥Á¤¬²¡²¼¤µ¤ì¤ë¤È¥á¥Ã¥»¡¼¥¸¤ò¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¤·¡¢¼õ¿®¤·¤¿Â¦¤Ï LED ¤ò°ìÄê»þ´ÖÅÀÅô¤µ¤»¤Þ¤¹¡£

    ưºî¤ÎÍÍ»Ò

    ÁõÃ֤μ̿¿¤È¹½À®¿Þ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    ¥½¡¼¥¹¥³¡¼¥É  GitHub

    ¥¹¥¤¥Ã¥Á²¡²¼»þ¤Ë ToCoNet_bMacTxReq() ¤Ë¤è¤ê¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¤ò¼Â¹Ô¡£´ûÄê¤Î¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥é cbToCoNet_vTxEvent() ¤ª¤è¤Ó cbToCoNet_vRxEvent() Æâ¤ÇÁ÷¼õ¿®ÄÌÃΤؤÎÂбþ¤ò¹Ô¤¦

    Test05¡§ ÅÅÎϾÃÈñ¤òÍÞÀ©¤·¤¿Á÷¿®ÀìÍÑ¥³¡¼¥É¤ÈÁõÃÖ

    ¾åµ­ Test04 ¤Ç¤ÎÁ÷¿®½èÍý¤òÆÈΩ¤µ¤»¡¢¾ÃÈñÅÅÎϤòÍÞ¤¨¤ë¤³¤È¤òÌÜŪ¤Ë¥á¡¼¥«¡¼¸ø¼°¤Î¡Ö̵Àþ¥¿¥°¥¢¥×¥ê¡ÊApp_Tag¡Ë¡×¡ÊÃí¡§2015ǯ04·î»þÅÀ¤Ç¤Î̾¾Î¤Ï¡ÖSamp_Monitor¡×¡Ë¤Î²¡¤·¥Ü¥¿¥ó¡¦¼§µ¤¥¹¥¤¥Ã¥ÁÂбþµ¡Ç½¤Ë¤ª¤±¤ë»Òµ¡½èÍý¡ÊEndDevice_Input¡Ë¤Ç¤Î°Ê²¼¤ÎÍ×½ê¤ò¼è¤êÆþ¤ì¤¿ÆâÍÆ¤Ç¤¹¡£

    • TWE-LITE ¤Î¥â¡¼¥ÉÀßÄê¥Ó¥Ã¥È 1 (M1) ¤¬ GND ¤ËÀܳ¤µ¤ì¤Æ¤¤¤ì¤Ð¡Ê¤¹¤Ê¤ï¤Á M1 ¤¬ Lo ¤Ç¤¢¤ì¤Ð¡Ë¡¢¥Ç¥¸¥¿¥ëÆþÎÏ 1 (DI1) ¤ÎΩ¤Á¾å¤¬¤ê (Lo -> Hi) ¤òÁ÷¿®¤Î¥È¥ê¥¬¡¼¤È¤¹¤ë
      ¡Êŵ·¿Åª¤Ë¤ÏÊ¿»þ¤¬Æ³Ä̾õÂ֤μ§µ¤¥ê¡¼¥É¥¹¥¤¥Ã¥Á¤¬¼§³¦¤«¤éÎ¥¤ìÀÚÃǤµ¤ì¤¿¾õ¶·¡Ë
      • Ω¤Á¾å¤¬¤ê¥È¥ê¥¬¡¼¤Î¾ì¹ç ÀáÅŤΤ¿¤á DI1 ¤ÎÆâÉô¥×¥ë¥¢¥Ã¥×¤ò̵¸ú²½¤¹¤ë¡£¤½¤Î¤¿¤á¤³¤Î¾ì¹ç¤Ï³°Éô¥×¥ë¥¢¥Ã¥×Äñ¹³¤òÀßÃÖ¤¹¤ë¡£¡Ê¸ø¼°¥µ¥¤¥È¾å¤Îµ­»ö¤ò»²¹Í¤Ë 1M¦¸ Äñ¹³¤ò»ÈÍÑ¡Ë
    • M1 ¤¬ GND ¤ËÀܳ¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð DI1 ¤ÎΩ¤Á²¼¤¬¤ê (Hi -> Lo) ¤ò¥È¥ê¥¬¡¼¤È¤¹¤ë
      ¡Êŵ·¿Åª¤Ë¤ÏÊ¿»þ¤¬ÈóƳÄ̾õÂ֤Υ¿¥¯¥È¥¹¥¤¥Ã¥Á¤¬²¡²¼¤µ¤ì¤¿¾õ¶·¡Ë

    • Á÷¿®¤ò½ª¤¨¤¿¤é¤¹¤ß¤ä¤«¤Ë Sleep ¾õÂ֤ذܹԤ· DI1 ¤Î¾õÂÖ¤¬ÊѲ½¤¹¤ë¤È Sleep ¤«¤éÉüµ¢¤¹¤ë

    ¼õ¿®Â¦¤Ï Test04 ¤Î¤â¤Î¤ò¤½¤Î¤Þ¤Þ»È¤¤¤Þ¤¹¡£°Ê²¼¤Îư²è¡¦¼Ì¿¿¤Ç¤ÏÁ÷¿®Â¦¤ÎÁõÃ֤ϼ§µ¤¥ê¡¼¥É¥¹¥¤¥Ã¥Á¤ò»È¤Ã¤Æ¤ª¤êΩ¤Á¾å¤¬¤ê¸¡½Ð¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤Á¤Ê¤ß¤Ë¤³¤ÎÁõÃÖ¤ÎÂÔµ¡¡ÊSleep¡Ë¾õÂ֤ξÃÈñÅÅή¤ò¬¤Ã¤¿¤È¤³¤í 3¦ÌA¡Ê0.003mA¡Ë¤Ç¤·¤¿¡£°ìÈÌ¤Ë CR2032 ¤ÎÊüÅÅÍÆÎ̤Ϥª¤è¤½ 225mAh ¤Ç¤¢¤ë¤³¤È¤«¤é¡¢²¼µ­¤Î¥µ¥¤¥È¤òÍøÍѤ·¤ÆÃ±½ã·×»»¤¹¤ë¤ÈÂÔµ¡·Ñ³²Äǽ´ü´Ö¤Ï 225mAh / 0.003mA * 0.7 ¡á 52500»þ´Ö ¡á 2187.5Æü ¢â 5.99ǯ¤È¤Ê¤ê¤Þ¤¹¡£¼ÂºÝ¤ÎÅÅÃÓ¼÷Ì¿¤ÏÁ÷¿®ÉÑÅ٤ˤè¤Ã¤ÆÂ礭¤¯ÊѤï¤ë¤Ç¤·¤ç¤¦¡£

    ÅÅÃÓ¼÷Ì¿¥«¥ê¥­¥å¥ì¡¼¥¿ - www.digikey.jp

    ưºî¤ÎÍÍ»Ò

    ÁõÃ֤μ̿¿¤È¹½À®¿Þ¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    ¥½¡¼¥¹¥³¡¼¥É  GitHub

    ÅŸ»ÅêÆþľ¸å¤ä¥ê¥»¥Ã¥È¸å¤Ï¤Þ¤º¤½¤Î¤Þ¤Þ Sleep ¾õÂ֤ذܹԡ£DI1 ¤Î¾õÂÖ¤¬ÊѲ½¤¹¤ë¤Èµ¯¾²¤·¤ÆÁ÷¿®¤ò¹Ô¤¤¤Õ¤¿¤¿¤Ó Sleep ¤Ø¡£DI1 ¤ÎΩ¤Á¾å¤¬¤ê¡¿Î©¤Á²¼¤¬¤ê¤Î¤É¤Á¤é¤ÇÁ÷¿®¤ò¹Ô¤¦¤«¤Ï M1 ¤Î Lo / Hi ¾õÂ֤ǷèÄꤹ¤ë

    ÉÕÏ¿¡§¡Ö̵Àþ¥¿¥°¥¢¥×¥ê¡×¥«¥¹¥¿¥Þ¥¤¥º¤Îµ­Ï¿

    2015ǯ4·î¡¢¼ê¸µ¤Î¼Â¸³ÅªÍ×·ï¤Ø¤ÎÂбþ¤Î¤¿¤á¤ËÁ°·Ç¤Î¸ø¼°¥¢¥×¥ê¡Ö̵Àþ¥¿¥°¥¢¥×¥ê¡ÊApp_Tag¡Ë¡×¡ÊÅö»þ¤Î̾¾Î¤Ï¡ÖSamp_Monitor¡×¡Ë¤Î¿Æµ¡¡ÊParent/¡Ë¤ª¤è¤Ó»Òµ¡¡ÊEndDevice_Input/¡Ë¥³¡¼¥É¤Î¥«¥¹¥¿¥Þ¥¤¥º¤ò»î¤ß¤Þ¤·¤¿¡£°Ê²¼¤Ï¤½¤Îµ­Ï¿¤Ç¤¹¡£

    Êѹ¹¤ò²Ã¤¨¤¿¥½¡¼¥¹¡¦¥Ø¥Ã¥À

    ¢¨¥Ù¡¼¥¹¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï 2015ǯ4·î20ÆüÅö»þ¤ÎºÇ¿·ÈÇ¡ÖSamp_Monitor v1.4.1 ¦Â¡×¤Ç¤¹¡Ê2017ǯ1·î¸½ºß¤Ï´û¤Ë¸ø³«½ªÎ»¡Ë
    ¢¨Êѹ¹²Õ½ê¤Ï¼±Ê̻ҡÖMODIFIED_BY_KLAB¡×¤Ç¶èÊ̤·¤Æ¤¤¤Þ¤¹

    Êѹ¹ÆâÍÆ

    EndDevice_Input¡§

    • ¥»¥ó¥µ¥â¡¼¥É¤¬ PKT_ID_BUTTON¡Ê²¡¤·¥Ü¥¿¥ó¡¦¼§µ¤¥¹¥¤¥Ã¥Á¡Ë ¤Î¾ì¹ç¡¢°ìÅÙ¤ÎÁ÷¿®´°Î»¤Ç¤¿¤À¤Á¤Ë¥¹¥ê¡¼¥×¾õÂ֤ذܹԤ»¤º½êÄê¤Î²ó¿ô·«¤êÊÖ¤·Á÷¿®¤ò¹Ô¤Ã¤Æ¤«¤é°Ü¹Ô¤¹¤ë (diff)

    Parent¡§

    • ÅŻҥ֥¶¡¼¤ÎÀܳ¤òÁÛÄꤷ DO4 ¤Î»ÈÍѤòÄɲᣥ»¥ó¥µ¥â¡¼¥É¤¬ PKT_ID_BUTTON ¤Î»Òµ¡¤«¤é¥Ñ¥±¥Ã¥È¤ò¼õ¿®¤·¤¿¾ì¹ç¡¢DO1 ¤Î LED ¥È¥°¥ë¤Ë¹ç¤ï¤» DO4 ¤Î¾õÂÖ¤â¥È¥°¥ë¤¹¤ë
    • PKT_ID_BUTTON ¤Î»Òµ¡¤«¤é¤Î¼õ¿®È¯À¸¸å¤Ï¿Æµ¡¤¬¥ê¥»¥Ã¥È¤µ¤ì¤ë¤Þ¤Ç DO1 ¤Î LED ¤òÅÀÌǤµ¤»¤ë¡Ê¼õ¿®Í­Ìµ¤ò»ö¸å¤ËÌܤdzÎǧ¤¹¤ë¤¿¤á¤ÎÊØµ¹¡Ë (diff)

    °Ê²¼¤Îư²è¡¦¼Ì¿¿¤Ç¤Ï»Òµ¡Â¦¤ÎÁõÃ֤ϼ§µ¤¥ê¡¼¥É¥¹¥¤¥Ã¥Á¤ò»ÈÍѤ·Î©¤Á¾å¤¬¤ê¸¡½Ð¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£¤·¤¿¤¬¤Ã¤Æ¤³¤Î»Òµ¡¤Î¥Ñ¥é¥á¡¼¥¿ÀßÄê¤Ë¤ª¤¤¤Æ¡Öm¡§¥»¥ó¥µ¼ïÊ̤ÎÀßÄê¡×¤Ë¤Ï 0xFE¡¢¡Öp¡§¥»¥ó¥µ¸ÇÍ­¥Ñ¥é¥á¡¼¥¿¤ÎÀßÄê¡×¤Ë¤Ï 1 ¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£

    ưºî¤ÎÍÍ»Ò

    ÁõÃ֤μ̿¿¤È¹½À®¿Þ¡¡¾å¡§¿Æµ¡¡¡²¼¡§»Òµ¡¡¡¡Ê¥¯¥ê¥Ã¥¯¤ÇÂ礭¤¯É½¼¨¡Ë

    ¡ÊÈ÷¹Í¡Ë

    2017ǯ1·î13Æü»þÅÀ¤Ç¤ÎºÇ¿·ÈÇ SDK ¡Ö2014/8·î¹æ¡×¤Ë¼ýÏ¿¤µ¤ì¤Æ¤¤¤ëµì Samp_Monitor v1.3.2 ¤Î»Òµ¡Â¦¥½¡¼¥¹¥³¡¼¥É¤Ë¤ÏËÜÍè¤Î°Õ¿Þ¤È¤Ï°Û¤Ê¤ë¤â¤Î¤È¹Í¤¨¤é¤ì¤ë¥í¥¸¥Ã¥¯¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£

    1. »Òµ¡¤Î¥Ñ¥é¥á¡¼¥¿ÀßÄêÆâÍÆ¤ò¥»¡¼¥ÖÎΰ褫¤éÆÉ¤ß½Ð¤¹¥¿¥¤¥ß¥ó¥°
      ¡Ê/TWESDK/Wks_ToCoNet/Samp_Monitor/EndDevice_Input/Source/EndDevice_Input.c¡Ë
      ¢¨ µì Samp_Monitor v1.4.1¦Â ¤Ç²þ½¤¤µ¤ì¤Þ¤·¤¿
    2. »Òµ¡¤Î¥»¥ó¥µ¥â¡¼¥É¤¬ PKT_ID_BUTTON (0xFE) ¤Î¾ì¹ç¤Î¸ÇÍ­¥Ñ¥é¥á¡¼¥¿ Ω¤Á¾å¤¬¤ê (1) / Ω¤Á²¼¤¬¤ê (0) »ØÄê¤ËÂФ¹¤ë½èÍý
      ¡Ê/TWESDK/Wks_ToCoNet/Samp_Monitor/EndDevice_Input/Source/ProcessEv_Button.c¡Ë
      ¢¨ µì Samp_Monitor v1.3.3 ¤Ç²þ½¤¤µ¤ì¤Þ¤·¤¿

    ¤½¤Î¤¿¤á¡¢º£¤Î»þÅÀ¤Ç¡Ö̵Àþ¥¿¥°¥¢¥×¥ê¡×¤ò»È¤¦¾ì¹ç¤ÏñÂΤÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤ëÈǤòÍøÍѤ¹¤ë¤Û¤¦¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£


    (tanabe)
    klab_gijutsu2 at 16:37¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(14)
    2015ǯ02·î17Æü

    mbed ¤È Parse ¤Çºî¤ë¹âÎð¼ÔÀ¤ÂÓ°ÂÈݳÎǧ¥·¥¹¥Æ¥à

    ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

    2017-01-30 Äɵ­¡§
    2017ǯ1·îËö¤Î Parse.com ¥µ¡¼¥Ó¥¹½ªÎ»¤Ëȼ¤¤°Ê²¼¤Îµ­»ö¤òÄɲä·¤Þ¤·¤¿¡£Â¾¥µ¡¼¥Ó¥¹¤Ø¤Î°Ü¹Ô¤Ë´Ø¤¹¤ë¾ðÊóÅù¤òµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£

    ¤µ¤è¤Ê¤é Parse - Åö¥Ö¥í¥°

    ¸Ä¿ÍŪ¤Ë¡¢¹âÎð¼ÔÀ¤ÂӤΰÂÈݤòÆü¾ïŪ¤ËÀŤ«¤Ë³Îǧ¤Ç¤­¤ë»ÅÁȤߤ¬¤Û¤·¤¤¤È»×¤Ã¤Æ¤¤¤Þ¤·¤¿¡£Í×·ï¤È¤·¤ÆÁÛÄꤷ¤Æ¤¤¤¿¤Î¤Ï¼¡¤ÎÆóÅÀ¡£¸½ÃϤˤϥ¤¥ó¥¿¡¼¥Í¥Ã¥È¤Ø¤ÎÀܳ´Ä¶­¤¬À°¤Ã¤Æ¤¤¤Þ¤¹¡£

    • ¸½ÃϤǤÎÈï´Æ»ë´¶¤ä¹´Â«´¶¤¬´õÇö¤Ç¤¢¤ë¤³¤È
    • ¾ðÊó¤ò¼«Ê¬¤Ç¥Ï¥ó¥É¥ê¥ó¥°¤Ç¤­¤ë¤³¤È
    ¼Â¸½ÊýË¡¤ò¹Í¤¨¤ë¤È°Æ³°Çº¤Þ¤·¤¯¡¢¤è¤¯¤¢¤ë¥ê¥â¡¼¥È¥«¥á¥é¤ÎÎà¤Ï¼ê·Ú¤ÊÈ¿ÌÌ Æü¾ï¤òÀ¸¡¹¤·¤¯´Æ»ë¤¹¤ë¤è¤¦¤Ç£Î£Ç¡¢¼«ºî¤ÎÁªÂò»è¤Ï¤¢¤ì¤É PC ¤ò¥Õ¥í¥ó¥È¥¨¥ó¥É¤È¤¹¤ë¤³¤È¤Ë¤Ï²¿¤«¤ÈµíÅá´¶¤¬¤¢¤êµ¤¤¬¿Ê¤Þ¤º¡¢¤Þ¤¿¡¢³Æ¼ÒÍͤˤè¤ëÍ¥¤ì¤¿¥µ¡¼¥Ó¥¹¤Î¿ô¡¹¤Ë¤â´Ø¿´¤Ï¤¢¤ë¤â¤Î¤Î¹±¾ïŪ¤ËÈñÍѤ¬¤«¤«¤ë¤³¤È¤ÏÅöÁ³¤È¤·¤Æ¤â¼«Ê¬¤¬¸Ä¿ÍŪ¤Ë˾¤à½ÀÆðÀ­¡¦³ÈÄ¥À­¤ËŬ¹ç¤¹¤ë»ÅÁȤߤò¤Ê¤«¤Ê¤«¸«½Ð¤¹¤³¤È¤¬¤Ç¤­¤ºÆ³Æþ¤Ë¤Ï»ê¤é¤º¤Ë¤¤¤Þ¤·¤¿¡£
    °ÊÁ°¤«¤éƬ¤ÎÃæ¤Ç¤È¤­¤É¤­¤½¤¦¤¤¤¦¥ë¡¼¥×¤ò½ä¤é¤»¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡¢ÀèÆü¤Õ¤È¥Þ¥¤¥³¥ó¤È¥¯¥é¥¦¥É¥µ¡¼¥Ó¥¹¤òÁȤ߹ç¤ï¤»¤ÆÍøÍѤ¹¤ë¤³¤È¤ò»×¤¤¤Ä¤­¤Þ¤·¤¿¡£ÀÞ¤«¤é¤Î¡Ö¥â¥Î¤Î¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡ÊInternet of Things : IoT¡Ë¡×¤ÎĬή¤Ë¤â¹çÃפ¹¤ë¤¿¤á¤½¤Î»ëÅÀ¤«¤é¤âÌÌÇò¤½¤¦¤Ç¤¹¡£

    ¥Þ¥¤¥³¥óÊýÌ̤ˤϺ£¤Þ¤Ç¤Û¤È¤ó¤ÉÆëÀ÷¤ß¤¬¤Ê¤«¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢¾ðÊó¼ý½¸¤ò·Ð¤ÆÁªÂò¤·¤¿ mbed ¥Þ¥¤¥³¥ó¥Ü¡¼¥É¤òÍøÍѤ¹¤ë¤³¤È¤Ç¥Õ¥í¥ó¥È¥¨¥ó¥É¤ÎÁõÃÖËÜÂΤ⤽¤ì¤òư¤«¤¹¤¿¤á¤Î¥×¥í¥°¥é¥à¤â¼êÁ᤯ºî¤ë¤³¤È¤¬¤Ç¤­¤Þ¤·¤¿¡£¥Ð¥Ã¥¯¥¨¥ó¥É¤Ë¤Ï¥á¥¸¥ã¡¼¤Ê BaaS ¤Î¤Ò¤È¤Ä¤Ç¤¢¤ë Parse ¤òÍøÍѤ·¥µ¡¼¥Ð¦½èÍý¤â¥·¥ó¥×¥ë¤Ë»Å¾å¤²¤Æ¤¤¤Þ¤¹¡£É¬ÍפÊÈñÍѤÏÁõÃÖºàÎÁʬ¤Î¤ª¤è¤½ 1Ëü±ßÄøÅÙ¡Ê2015ǯ2·î¸½ºß¡Ë¤Î¤ß¤Ç¥¯¥é¥¦¥É¥µ¡¼¥Ó¥¹¤Ï¼ê¸µ¤Ç¤Ï̵ÎÁÏÈÆâ¤Ç¤æ¤Ã¤¿¤ê¤È»È¤¨¤Æ¤ª¤ê¡¢º£¸å¤â¤¤¤í¤¤¤í¼ê¤ò²Ã¤¨¤Æ¤¤¤¯¤Ä¤â¤ê¤Ç¤¹¡£¤Ê¤«¤Ê¤«ÊØÍø¤Ê¤â¤Î¤Ë¤Ê¤Ã¤¿¤Î¤Ç¸½»þÅÀ¤Ç¤ÎÆâÍÆ¤È¹½À®¤ò¾Ò²ð¤·¤Þ¤¹¡£Î¥¤ì¤ÆÊë¤é¤¹²È²¤òµ¤¤Ë·ü¤±¤Æ¤ª¤é¤ì¤ëÊý¤Î¤´»²¹Í¤È¤Ê¤ì¤Ð¹¬¤¤¤Ç¤¹¡£

    Á´ÂÎÁü¤ò¿Þ¤Ë¼¨¤·¤Þ¤¹¡£

    ưºî¤ÎÍÍ»Ò

    ÁõÃÖ¤ÎÆ°¤­¤È¥¯¥é¥¦¥É¥µ¡¼¥Ó¥¹¤È¤ÎÏ¢·È¤ÎÍͻҤò°Ê²¼¤Îư²è¤Ë¼ý¤á¤Æ¤¤¤Þ¤¹¡£

    ư²è£±¡§ÁõÃÖ¤¬¿Í´Ö¤ò¸¡ÃΤ¹¤ë¤È Parse ¥µ¡¼¥Ð¤Ø¥Ç¡¼¥¿¤òÁ÷½Ð

    ư²è¤ÎÆâÍÆ
    ¡Ê̵²»¡¡1ʬ15ÉáË

    1. ÁõÃ֤صëÅÅ ¡Á ½é´ü²½¤¬´°Î»¤¹¤ë¤Þ¤ÇÁ´ LED ¤¬ÅÀÌÇ
    2. ÀÖ³°Àþ¥»¥ó¥µ¤¬¿Í¤ò¸¡ÃΤ·ÀÖ LED ¤¬ÅÀÅô ¡Á Parse ¥µ¡¼¥Ð¤Ø¸¡ÃξðÊó¤òÁ÷½Ð
    3. PC ¾å¤Î¥Ö¥é¥¦¥¶¤Ç¤Ï Parse ¥¢¥×¥ê¡ÖAnpi¡×¤Î¡ÖDetected¡× ¥¯¥é¥¹¡Ê¥Æ¡¼¥Ö¥ë¡Ë¤Î¥Ç¡¼¥¿¤òɽ¼¨Ãæ
    4. ɽ¼¨¤ò¹¹¿·¤·¤Æ¿·¤·¤¤¥Ç¡¼¥¿¤¬Äɲäµ¤ì¤Æ¤¤¤ë¤³¤È¤ò³Îǧ
    5. Gmail ¤ÇÁ°Æü¼õ¿®¤·¤¿¥ì¥Ý¡¼¥È¥á¡¼¥ë¡Ê¿Í¤ò¸¡ÃΤ·¤¿ÆüÉÕ»þ¹ï¤Èµ¤²¹¾ðÊó¤Îľ¶á¤Î°ìÍ÷¡Ë¤òɽ¼¨¤·¤Æ¤ß¤ë
    6. ºÇ¸å¤Ë¤Õ¤¿¤¿¤ÓÁõÃÖ¤ÎÀÖ³°Àþ¥»¥ó¥µ¤Ë¼ê¤ò¤«¤¶¤·¤ÆÈ¿±þ¤ò»î¤·¤Æ¤ß¤ë

    ư²è£²¡§ÁõÃ֤Ρֶ۵ޥܥ¿¥ó¡×¤¬Ä¹²¡¤·¤µ¤ì¤ë¤È¤½¤Î¾ì¤Ç¥á¡¼¥ëÄÌÃÎ

    ư²è¤ÎÆâÍÆ
    ¡Ê´Ä¶­²»¡Ü¥Ö¥¶¡¼²»¤¢¤ê¡¡30ÉáË

    1. ¶ÛµÞ¥Ü¥¿¥ó¤ò²¡¤¹¤ÈÁõÃ֤ΠLED ¤¬È¿±þ ¡Á û»þ´Ö¤Î²¡²¼¤Ï¤½¤Î¤Þ¤Þ¼õ¤±Î®¤µ¤ì¤ë
    2. 2ÉÃÄøÅÙĹ²¡¤·¤¹¤ë¤ÈÁàºî¼Ô¤Ë¥Ö¥¶¡¼¤ÇĹ²¡¤·¤Î¼õ¤±Æþ¤ì¤òÅÁ¤¨ Parse ¥µ¡¼¥Ð¤Ø¶ÛµÞ¥Ü¥¿¥ó²¡²¼¤òÄÌÃÎ
    3. ¥Ü¥¿¥ó²¡²¼¤¬¥á¡¼¥ë¤ÇÄÌÃΤµ¤ì¤ë

    mbed ¤Ë¤Ä¤¤¤Æ

    ARM ¼Ò ¤Ë¤è¤Ã¤Æ³«È¯¤µ¤ì¤¿ mbed ¤Ï ARM ¥Þ¥¤¥³¥óÅëºÜ¤Î¥³¥ó¥Ô¥å¡¼¥¿¥Ü¡¼¥É¤ÈÀìÍѤγ«È¯´Ä¶­¤Ë¤è¤Ã¤Æ¹½À®¤µ¤ì¡Ö¹â®¥×¥í¥È¥¿¥¤¥Ô¥ó¥°¥Ä¡¼¥ë¡×¤Î¥­¥ã¥Ã¥Á¥Õ¥ì¡¼¥º¤ÎÄ̤ꥷ¥ó¥×¥ë¤Ê¼ê½ç¤Ç¼êÁ᤯°·¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤ËÀ߷פµ¤ì¤Æ¤¤¤Þ¤¹¡£¸½ºß¤µ¤Þ¤¶¤Þ¤Ê mbed ¥Ü¡¼¥É¤¬ÈÎÇ䤵¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢º£²óÁª¤ó¤À¤Î¤Ï¤â¤Ã¤È¤âÂåɽŪ¤Ê¡Ömbed NXP LPC1768¡×¤Ç¤¹¡£Cortex-M3 ¥×¥í¥»¥Ã¥µ¤òºÜ¤»¤¿¤³¤Îñ»°ÅÅÃÓÆóËÜʬ¤Û¤É¤ÎÂ礭¤µ¤Î¥Ü¡¼¥É¤Ë¤Ï¿ÍÍ¤ÊÆþ½ÐÎϥݡ¼¥È¤Ë²Ã¤¨¥¤¡¼¥µ¥Í¥Ã¥ÈÍÑ¥³¥ó¥È¥í¡¼¥é¤Þ¤Ç¤â¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

    ½é¤á¤Æ mbed ¤Ë¿¨¤ì¤ë¾ì¹ç¤Ï mbed.org ¤Ø¤Î¥æ¡¼¥¶ÅÐÏ¿¤¬É¬ÍפǤ¹¡£À½ÉÊ¤ËÆ±º­¤Î USB ¥±¡¼¥Ö¥ë¤Ç¡¡mbed LPC1768 ¤ò PC ¤ØÀܳ¤¹¤ë¤È¥Ü¡¼¥É¾å¤Î¥¹¥È¥ì¡¼¥¸¤¬¥Þ¥¦¥ó¥È¤µ¤ì¤Þ¤¹¡£¥¹¥È¥ì¡¼¥¸¾å¤Î¡ÖMBED.HTM¡×¤ò¥Ö¥é¥¦¥¶¤Ø¥í¡¼¥É¤¹¤ë¤È¥æ¡¼¥¶ÅÐÏ¿²èÌ̤ØÁ«°Ü¤¹¤ë¤Î¤Ç¤½¤³¤ØÉ¬ÍפʾðÊó¤òÅêÆþ¤·¤Þ¤¹¡£ÅÐÏ¿¤¬´°Î»¤¹¤ë¤È mbed ¤Î¥ª¥ó¥é¥¤¥ó¥³¥ó¥Ñ¥¤¥é¤ò¥Ö¥é¥¦¥¶¤«¤éÍøÍѤǤ­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£C, C++ ¤Ç¥³¡¼¥É¤òµ­½Ò¤·¡ÖCompile¡×¥Ü¥¿¥ó¤ò²¡¤¹¤È¥µ¡¼¥Ð¦¤Ç¥Ó¥ë¥É¤¬¹Ô¤ï¤ì¡¢¤½¤³¤ÇÀ¸À®¤µ¤ì¤¿¼Â¹Ô·Á¼°¤ò¥À¥¦¥ó¥í¡¼¥É ¡Á mbed ¤Î USB ¥¹¥È¥ì¡¼¥¸¤Ø¥³¥Ô¡¼¤·¤Æ¥Ü¡¼¥É¤Î¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤ò²¡²¼¤¹¤ë¤È¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£¤½¤³¤«¤éÀè¤Ï¡¢¥³¡¼¥É¤òÊÔ½¸¤·¤¿¤ê´û¸¤Î¥é¥¤¥Ö¥é¥ê¤ò¥¤¥ó¥Ý¡¼¥È¤·¤¿¤ê mbed ¥Ü¡¼¥É¤òÁõÃ夷¤¿²óÏ©¤Ë¼ê¤ò²Ã¤¨¤¿¤ê¡¢¡¢¤È¤¤¤Ã¤¿¼ê½ç¤Î·«¤êÊÖ¤·¤Ç¤¹¡£ºîË¡¤É¤ª¤êºÇ½é¤Ï¤Þ¤º¤¢¤ì¤³¤ì¥µ¥ó¥×¥ë¥³¡¼¥É¤ò¥Ó¥ë¥É¤·¤ÆÆ°¤«¤·¤¿¤ê¤½¤ì¤Ë¼ê¤ò²Ã¤¨¤Æ»î¤·¤¿¤ê¤È¤¤¤¦¤³¤È¤«¤é»Ï¤á¤Þ¤·¤¿¡£¤Ê¤ª¡¢mbed ¥Ü¡¼¥É¤Î¥³¥ó¥È¥í¡¼¥é¤Ï USB ²¾ÁÛ¥·¥ê¥¢¥ë¥Ý¡¼¥È·Ðͳ¤Ç¥Û¥¹¥È PC ¤È¤Î¥·¥ê¥¢¥ëÄÌ¿®¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤ª¤ê PC ¦¤Ç¥¿¡¼¥ß¥Ê¥ë¥¢¥×¥ê¤ò»È¤¨¤Ð¥Ç¥Ð¥Ã¥°¤Ë¤âÊØÍø¤Ç¤¹¡£

    mbed ¤ÎÀ¤³¦¤Ç¤Ï¥³¥ß¥å¥Ë¥Æ¥£¤¬È¯Å¸¤·¤Æ¤ª¤êÍÍ¡¹¤Ê»ñ»º¤¬¶¦Í­¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤ï¤«¤ê°×¤¯Í­ÍѤʵ­»ö¡¦Ê¸½ñ¤â¿ô¿¤¯Â¸ºß¤¹¤ë¤Î¤Ç¤È¤Æ¤â»²¹Í¤Ë¤Ê¤ê¤Þ¤¹¡£

    ÁõÃ֤ˤĤ¤¤Æ

    À½ºî¤·¤¿ÁõÃ֤κàÎÁ¤ÈÁȤßΩ¤ÆÊý¡¢À©¸æÍÑ¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£

    ºàÎÁ

    ¡Ê¢¨²Á³Ê¤Ï¤¤¤º¤ì¤â2015ǯ1·î»þÅÀ¤ÎÀǹþ³Û¡Ë

    • ¥Þ¥¤¥³¥ó¥Ü¡¼¥É mbed NXP LPC1768 ¡ï5,800¡¡½©·îÅÅ»ÒÄ̾¦
    • ¾ÇÅÅ·¿ÀÖ³°Àþ¥»¥ó¥µ¡¼¥â¥¸¥å¡¼¥ë¡¡(SB612A)¡¡¡ï600¡¡½©·îÅÅ»ÒÄ̾¦
    • LAN ¥³¥Í¥¯¥¿ (mbedÍÑ¥¤¡¼¥µ¥Í¥Ã¥ÈÀܳ¥­¥Ã¥È)¡¡¡ï514¡¡¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹
    • IC ²¹ÅÙ¥»¥ó¥µ (LM61BIZ)¡¡¡ï200¡¡¡Ê4¸ÄÆþ¡Ë¡¡½©·îÅÅ»ÒÄ̾¦
    • ÅŻҥ֥¶¡¼¡¡(PKB24SPCH3601)¡¡¡ï150¡¡½©·îÅÅ»ÒÄ̾¦¡¡¡¡
      ¢¨ÉÔÍפʤé¾Êά²Ä
    • ¥Ö¥ì¥Ã¥É¥Ü¡¼¥É¡¡(EIC-801)¡¡¡ï257¡¡¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹
    • ¥¸¥ã¥ó¥×¥ï¥¤¥ä¡¡(¸Ç¤¤¥ª¥¹¡Á¥ª¥¹) ¡¡¡ï257¡¡¡Ê70ËÜÆþ¡Ë¡¡¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹
    • ¥¸¥ã¥ó¥×¥ï¥¤¥ä¡¡(½À¤é¤«¤¤¥ª¥¹¡Á¥á¥¹)¡¡¡ï691¡¡¡Ê50ËÜÆþ¡Ë¡¡¥¹¥¤¥Ã¥Á¥µ¥¤¥¨¥ó¥¹
    • ÀÖ¿§ LED¡¡¡ï350¡¡¡Ê100¸ÄÆþ¡Ë¡¡½©·îÅÅ»ÒÄ̾¦¡¡¡¡
      ¢¨ÉÔÍפʤ饫¡¼¥Ü¥óÄñ¹³¤È¤È¤â¤Ë¾Êά²Ä
    • 75 ¦¸ ¥«¡¼¥Ü¥óÄñ¹³¡¡¡ï100¡¡¡Ê100ËÜÆþ¡Ë¡¡½©·îÅÅ»ÒÄ̾¦¡¡¡¡
      ¢¨ÉÔÍפʤé LED ¤È¤È¤â¤Ë¾Êά²Ä
    • ²¡¤·¥Ü¥¿¥ó¡¦¥Ô¥ó¥³¥Í¥¯¥¿¡¦Æ³Àþ¡¡¶á½ê¤Î¥Û¡¼¥à¥»¥ó¥¿¡¼¤Ç 5¡Á600 ±ß¤¯¤é¤¤¤Ç¹ØÆþ¡¡
      ¢¨ÉÔÍפʤé¾Êά²Ä
    • ŬÅö¤Ê¥±¡¼¥¹¡¡ÇÑÊªÍøÍÑ
    ¢¨¾åµ­»²¹Í²Á³Ê·× ¡ï9,519
    ¢¨LAN ¥±¡¼¥Ö¥ë¤È DC 5V USB-A¥¿¥¤¥× ¤Î AC ¥¢¥À¥×¥¿¤Ï¼ê»ý¤Á¤Î¤â¤Î¤òÍøÍÑ

    ÁȤßΩ¤Æ

    LAN ¥³¥Í¥¯¥¿¤Ç¤¢¤ë¡ÖmbedÍÑ¥¤¡¼¥µ¥Í¥Ã¥ÈÀܳ¥­¥Ã¥È¡×¤ÎÁȤßΩ¤Æ¤Î¤ß¥Ï¥ó¥À¤Å¤±¤¬É¬ÍפǤ¹¤¬¡¢¤½¤Î¾¤ÎÇÛÀþ¡¦¥Ñ¡¼¥Ä¤Î¼è¤ê²ó¤·¤Ï¤¹¤Ù¤Æ¥Ö¥ì¥Ã¥É¥Ü¡¼¥É¾å¤Ç¹Ô¤¦¤¿¤áºàÎÁ¤¬Â·¤Ã¤Æ¤¤¤ì¤ÐÁõÃÖ¤ÎÁȤßΩ¤Æ¤Ï´Êñ¤Ç¤¹¡£¼Ì¿¿¤Î¤è¤¦¤Ë¥Ö¥ì¥Ã¥É¥Ü¡¼¥É¾å¤ÎÇÛÀþ¤Ë¤Ï¸Ç¤¤¥¸¥ã¥ó¥×¥ï¥¤¥ä¡¢¥»¥ó¥µ¤ä¥Ö¥¶¡¼¤ÎÀܳ¤Ë¤Ï¥ª¥¹¡Ý¥á¥¹¤Î½À¤é¤«¤¤¥¸¥ã¥ó¥×¥ï¥¤¥ä¤ò»È¤¤¤Þ¤·¤¿¡£¼ÂÂÎÇÛÀþ¿Þ¤ò¤¢¤ï¤»¤Æ·ÇºÜ¤·¤Þ¤¹¡£¡Ê¥¯¥ê¥Ã¥¯¤Ç³ÈÂç¡Ë

    ¤à¤­½Ð¤·¤Î¤Þ¤Þ¤Ç¤Ï°·¤¤¤Ë¤¯¤¤¤Î¤ÇÁ°¤ËÇã¤Ã¤¿ PC Íѥѡ¼¥Ä¤Î³°È¢¤òºÆÍøÍѤ·¤Æ´Êñ¤Ê¥±¡¼¥¹¤òÍѰդ·¤Þ¤·¤¿¡£ÁǺबÇö¤¤¥×¥é¥¹¥Á¥Ã¥¯¤È»æ¤Ê¤Î¤Ç²Ã¹©¤·¤ä¤¹¤¯Âѵ×À­¤â¤½¤ì¤Ê¤ê¤Ë¤¢¤ê¤½¤¦¤Ç¤¹¡£

    ¾ÇÅÅ·¿ÀÖ³°Àþ¥»¥ó¥µ¥â¥¸¥å¡¼¥ë¤ÏÇò¤¤¥ì¥ó¥º¤ÎÉôʬ¤òϪ½Ð¤·¤Ê¤¤¤Èµ¡Ç½¤·¤Ê¤¤¤¿¤á¥µ¥¤¥º¤Ë¹ç¤ï¤»¤Æ¥±¡¼¥¹¤ËÀÚ¤ê¹þ¤ß¤òÆþ¤ì¤Þ¤·¤¿¡£Â¬Äê¸íº¹·Ú¸º¤Î¤¿¤á¤Ë IC ²¹ÅÙ¥»¥ó¥µ¤â³°¤Ë°ú¤­½Ð¤·¤Æ¤¤¤Þ¤¹¡£³°´Ñ¤òÉÔÆ©ÌÀ¤Ë¤·¤Æ¤¤¤ë¤Î¤ÏÀßÃÖÀè¤Ç¤Î¸ºß´¶¤òÍÞ¤¨¤ë¤¿¤á¤Ç¡¢LED ¤Ïưºî³ÎǧÍѤȳä¤êÀÚ¤ê¥È¥é¥Ö¥ë¤¬µ¯¤³¤Ã¤¿¾ì¹ç¤Î¤ßÅÀÌǾõÂÖ¤ò¸«¤ë¤³¤È¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

    ¥×¥í¥°¥é¥à

    ¾åµ­¤ÎÁõÃÖ¹½À®¤Ë¤¢¤ï¤»¤ÆºîÀ®¤·¤¿ mbed LPC1768 ÍÑ¥×¥í¥°¥é¥à¤ò°Ê²¼¤Î¾ì½ê¤Ç¸ø³«¤·¤Æ¤¤¤Þ¤¹¡£

    Parse ¥µ¡¼¥Ð¾å¤ÎÂиþ½èÍý¤È¤ÎÏ¢·È¤Î¤¿¤á¤Ë main.cpp ¤ÎËÁƬ¤ËÅö³º Parse ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î ID ¤È REST API ¥­¡¼¤òµ­½Ò¤¹¤ë·Á¤Ë¤·¤Æ¤¤¤Þ¤¹¡£¸ø³«¤·¤¿¥½¡¼¥¹¤Ç¤ÏÉú»ú¤Ë¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¸å½Ò¤Î¼ê½ç¤ÇÅö³º Parse ¥¢¥×¥ê¤Î¥³¥Ô¡¼¤òºîÀ®¤·¤½¤Î ID ¤È¥­¡¼¤ò¤³¤³¤Ëµ­½Ò¤·¤Æ¥ê¥Ó¥ë¥É¤¹¤ì¤Ð¼ÂºÝ¤ËÏ¢·È¤ò»î¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Parse ¾å¤Î½êÄê¤Î ID ¤È¥­¡¼¤Ï Parse ¤Ø¤Î¥í¥°¥¤¥ó¸å¡¢[Dashboard] - [¡Ê¥¢¥×¥ê̾¡Ë] - [Settings] - [Keys] ¤«¤é³Îǧ¤Ç¤­¤Þ¤¹¡£

    ÁõÃ֤ˤϼ±ÊÌÍѤËǤ°Õ¤Î̾Á°¤ò¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Ì¾Á°¤Ï mbed ¥Ü¡¼¥É¤Î USB ¥¹¥È¥ì¡¼¥¸¾å¤Î "id.txt" ¥Õ¥¡¥¤¥ë¤Ëµ­½Ò¤·¤Þ¤¹¡£¤³¤Î̾Á°¤ÏÁõÃÖ¤¬¿Í¤ò¸¡ÃΤ·¤¿ºÝ¤Ë Parse ¥µ¡¼¥Ð¤ØÁ÷½Ð¤¹¤ë¾ðÊó¤Î¤Ò¤È¤Ä¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£

    ÁõÃÖ¤¬¿Í¤ò¸¡ÃΤ¹¤ë¤¿¤Ó¤Ë Parse ¥µ¡¼¥Ð¤Ø¥Ç¡¼¥¿¤òÁ÷¤ë¤Î¤ÏÉԷкѤʤΤǡ¢¥Ç¡¼¥¿Á÷½Ð¤ÎºÇû´Ö³Ö¤ò°Ê²¼¤ÎÄêµÁ¤Ç»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
    #define HTTPS_REQUEST_INTERVAL 1800 // 30ʬ

    ¥¯¥é¥¦¥É¥µ¡¼¥Ó¥¹¤Ë¤Ä¤¤¤Æ

    ÁõÃÖ¤ÎÂиþ½èÍýÍѤËÍѰդ·¤¿ Parse ÍѤΥµ¡¼¥Ð¥³¡¼¥É¤È¡¢¤½¤Î¥³¡¼¥É¤«¤é¥á¡¼¥ëÁ÷¿®¤Î¤¿¤á¤Ë¸Æ¤Ó½Ð¤·¤Æ¤¤¤ë Mailgun ¥µ¡¼¥Ó¥¹¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£

    Mailgun ¤Î½àÈ÷

    Mailgun ¤Ï¿¤¯¤Î¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì¤ËÂбþ¤·¤¿¥¯¥é¥¦¥É¥á¡¼¥ë¥µ¡¼¥Ó¥¹¤Ç¤¹¡£REST API ¥»¥Ã¥È¤Ë²Ã¤¨ Python, Ruby, Java, C#, PHP ÍѤΥ饤¥Ö¥é¥ê¤¬¸ø³«¤µ¤ì¤Æ¤ª¤ê¡¢¼«ºî¤Î¥³¡¼¥É¤Ç´Êñ¤Ë¥á¡¼¥ëÁ÷¿®¤ò¥Ï¥ó¥É¥ê¥ó¥°¤Ç¤­¤ëÊØÍø¤Ê¥µ¡¼¥Ó¥¹¤Ê¤Î¤Çº£²ó¤ÎÏÃÂê¤È¤Ï̵´Ø·¸¤Ë¥¢¥«¥¦¥ó¥È¤òºî¤Ã¤Æ»î¤·¤Æ¤ß¤ë¤Î¤âÎɤ¤¤Ç¤·¤ç¤¦¡£¥µ¥¤¥ó¥¢¥Ã¥×»þ¤Ë¥¯¥ì¥¸¥Ã¥È¥«¡¼¥É¾ðÊó¤ÎÆþÎϤÏÉÔÍפǤ¹¡£

    http://www.mailgun.com/

    Mailgun ¤Ë¥¢¥«¥¦¥ó¥È¤òºîÀ®¤¹¤ë¤È°ì·ï¤Î¡ÖSandbox Domain¡×¤¬³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹¡£¤³¤Î Mailgun Subdomain ¤Ï¥Æ¥¹¥ÈÍѤȤµ¤ì¤Æ¤ª¤ê¥á¡¼¥ëÁ÷¿®¤Ï 300·ï/Æü¤Þ¤Ç¤È¤¤¤¦À©Ì󤬤¢¤ê¤Þ¤¹¤¬¡¢¼«Á°¤Î¥É¥á¥¤¥ó¤¬¤¢¤ì¤Ð¤½¤ì¤òÅÐÏ¿¤¹¤ë¤³¤È¤Ç¤³¤ÎÀ©Ìó¤Ï¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£¤Ê¤ª¡¢ÌµÎÁÏȤϤ³¤Îµ­»ö¤Î»þÅÀ¤Ç 10,000·ï/·î¤Þ¤Ç¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£[¾ÜºÙ]
    ¤Á¤Ê¤ß¤Ë¼ê¸µ¤Ç¤Ïº£¤Î¤È¤³¤í°ìÆü 300·ï¤â¥á¡¼¥ë¤òÁ÷¿®¤Ç¤­¤ì¤Ð¤Þ¤º½½Ê¬¤Ê¤Î¤Ç¤Ò¤È¤Þ¤º Sandbox Domain ¤ò¤½¤Î¤Þ¤Þ»È¤Ã¤Æ¤¤¤Þ¤¹¡£

    Parse ¤«¤é¤Î Mailgun API ¸Æ¤Ó½Ð¤·¤Ë¤ª¤¤¤Æ¤Ï Mailgun ¥¢¥«¥¦¥ó¥È¤ËɳÉÕ¤±¤é¤ì¤¿¡ÖAPI Key¡×¤ò»ÈÍѤ·¤Þ¤¹¡£Parse ¤Ï Mailgun ¤È¸ø¼°¤ËÏ¢·È¤·¤Æ¤¤¤ë¤¿¤á¤´¤¯¥·¥ó¥×¥ë¤Ê¥³¡¼¥Éµ­½Ò¤Ç Mailgun API ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

    Parse ¤Î½àÈ÷

    Parse ¤Ï Facebook »±²¼¤Î Parse.com ¤¬³«È¯¡¦±¿±Ä¤¹¤ë¸½ºß¤â¤Ã¤È¤â¥á¥¸¥ã¡¼¤Ê BaaS¡ÊBackend as a Service¡Ë ¤Î¤Ò¤È¤Ä¤Ç¤¹¡£¥æ¡¼¥¶´ÉÍý¡¦¥Ç¡¼¥¿¥¹¥È¥¢¡¦¥¹¥Þ¥Û¤Ø¤Î¥×¥Ã¥·¥åÄÌÃΡ¦¥¢¥¯¥»¥¹²òÀÏ¡¦¥Û¥¹¥Æ¥£¥ó¥°¡¦SNS Ï¢·È¡¦°ÌÃÖ¾ðÊóÏ¢·È¤Ê¤É¿¤¯¤Îµ¡Ç½¤«¤é¹½À®¤µ¤ì¤Æ¤ª¤êÂоݥץé¥Ã¥È¥Õ¥©¡¼¥à¡¦¸À¸ì¤â¹­ÈϤǤ¹¡£ÌµÎÁÏȤ⹭¤¯ 30¥ê¥¯¥¨¥¹¥È/Éäޤǡ¢¥×¥Ã¥·¥åÄÌÃÎ 100Ëü·ï/·î¤Þ¤Ç¤Ï̵ÎÁ¡¢¤Þ¤¿¡¢¥¢¥¯¥»¥¹²òÀϵ¡Ç½¤â¼«Í³¤ËÍøÍѤǤ­¤Þ¤¹¡£[¾ÜºÙ]

    https://parse.com/

    °ìÈÌ¤Ë BaaS ¤Î¼ç¤ÊÌÜŪ¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÂиþ¥µ¡¼¥Ð¦µ¡Ç½¤òÂåÂØ¡¦Êä´°¤¹¤ë¤³¤È¤Ë¤¢¤ê¡¢¥µ¡¼¥Ð¤Î´ÉÍý±¿ÍѤ䥵¡¼¥Ð¦¥³¡¼¥É³«È¯¤ËƧ¤ß¹þ¤à¥³¥¹¥È¤òÍÞÀ©¤·¥¢¥×¥êËÜÂΤγ«È¯¤ËÃíÎϲÄǽ¤È¤Ê¤ë¤³¤È¤¬ÍøÍѼԤˤȤäƤΥá¥ê¥Ã¥È¤Ç¤¹¤¬¡¢Parse ¤Ë¤Ï¥µ¡¼¥Ð¾å¤Ç¥æ¡¼¥¶¥³¡¼¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Î¤Ç¤­¤ë¡ÖCloud Code¡×¤È¤¤¤¦¤·¤¯¤ß¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤òÍøÍѤ¹¤ë¤³¤È¤Çɸ½à¤Îµ¡Ç½¤Î¤ß¤Ç¤Ï¥«¥Ð¡¼¤Ç¤­¤Ê¤¤¸ÇÍ­¤ÎÍ×·ï¤ËÂбþ¤Ç¤­¤ë;ÃϤ¬Â礭¤¯¤Ê¤ê¡¢¤Þ¤¿¡¢¥Õ¥í¥ó¥È¥¨¥ó¥É¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò°ìÀÚȼ¤ï¤º½êÄê¤Î¥µ¡¼¥Ð¥³¡¼¥É¤Î¤ß¤ò Parse ¥µ¡¼¥Ð¾å¤Ç¼Â¹Ô¤¹¤ë¤È¤¤¤Ã¤¿»È¤¤Êý¤â²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£º£²óºî¤Ã¤¿ÁõÃÖ¤Ï Parse ¥µ¡¼¥Ð¾å¤ËÀßÃÖ¤·¤¿¼«ºî¥³¡¼¥É¤ò¤½¤Î¤Þ¤Þ¸Æ¤Ó½Ð¤·¤ÆÉ¬ÍפʽèÍý¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤Î¤è¤¦¤ËÌÜŪ¤Ë±þ¤¸¤Æ½ÀÆð¤ËÍøÍѤǤ­¤ë¤³¤È¤¬ Parse ¤ÎÌ¥ÎϤΤҤȤĤȸÀ¤Ã¤Æ¤è¤¤¤Ç¤·¤ç¤¦¡£

    Parse ¥µ¡¼¥ÐÍѤ˺îÀ®¤·¤¿¥³¡¼¥É¤ò https://github.com/mkttanabe/Anpi ¤Ç¸ø³«¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥³¡¼¥É¤ò¼«Ê¬¤Î Parse ¥¢¥«¥¦¥ó¥È´Ä¶­¤Ç»ÈÍѤ¹¤ë¼ê½ç¤ò°Ê²¼¤Ëµ­½Ò¤·¤Þ¤¹¡£

    1. ¡ÖAnpi¡×¥¢¥×¥ê¤È¡ÖDetected¡×¥¯¥é¥¹¤ÎºîÀ®

    Parse ¤Ø¥í¥°¥¤¥ó¸å¡¢[Dashboard] - [Create a new App] ¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¡ÖAnpi¡×¤È¤¤¤¦Ì¾Á°¤Î¥¢¥×¥ê¤òºîÀ®¤·Æ±¥¢¥×¥ê¤Î [Core] ¤Ø°Üư

    [Dashboard] - [Anpi] - [Core] - [Data] ¤Î [+ Add Class] ¤ò¥¯¥ê¥Ã¥¯¤·¤Æ Custom ¥¿¥¤¥×¤Î¡ÖDetected¡×¥¯¥é¥¹¤òºîÀ®
    ¢¨¤³¤³¤Ç¤¤¤¦¡Ö¥¯¥é¥¹¡×¤È¤Ï Parse ÍѸì¤Ç¤¢¤ê¡¢¡Ö¥Æ¡¼¥Ö¥ë¡×¤Î³µÇ°¤È¤Û¤ÜƱ¤¸¤â¤Î¤Ç¤¹

    [+Col] ¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ Detected ¥¯¥é¥¹¤Ë¼¡¤Î³Æ¥«¥é¥à¤òÄɲᣥ«¥é¥àʤӤÏǤ°Õ¤ËÄ´À°²Ä

    • ¡Öposted¡×Date ·¿
    • ¡ÖdeviceId¡×String ·¿
    • ¡ÖdeviceAddress¡×String ·¿
    • ¡Ötemperature¡×Number ·¿

    ÁõÃÖ¤«¤é¼õ¿®¤·¤¿¿Í¸¡ÃξðÊó¤Ï¤³¤Î Detected ¥¯¥é¥¹¤Î¥Ç¡¼¥¿¤È¤·¤ÆÊݸ¤µ¤ì¤Þ¤¹¡£

    2. Parse ¥³¥Þ¥ó¥É¥é¥¤¥ó¥Ä¡¼¥ë¤ÎƳÆþ¤È Cloud Code ¤Î¥»¥Ã¥È¥¢¥Ã¥×

    Parse ÍѤγ«È¯¤ò¹Ô¤¦ PC ¤Ë¤ÏÀìÍѤΥ³¥Þ¥ó¥É¥é¥¤¥ó¥Ä¡¼¥ë¤ÎÀßÃÖ¤¬É¬ÍפǤ¹¡£¸ø¼°¥É¥­¥å¥á¥ó¥È¡ÖCloud Code¤È¤Ï¡×¤ÎËÁƬ¤ÎÀâÌÀ¤Ë¤½¤Ã¤Æ³«È¯´Ä¶­¤Ø¥Ä¡¼¥ë¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£¥¤¥ó¥¹¥È¡¼¥ë¤¬½ª¤ï¤Ã¤¿¤éǤ°Õ¤Î³«È¯ÍÑ¥Õ¥©¥ë¥À¤Ø°Üư¤·¡Öparse new¡×¥³¥Þ¥ó¥É¤Ç¡ÖAnpi¡×¥¢¥×¥êÍÑ Cloud Code ¤Î¿÷·Á¤òÀ¸À®¤·¤Þ¤¹¡£

    $ parse new Anpi
    Email: your@mail.com
    Password:
    1:Anpi
    Select an App: 1
    

    github.com/mkttanabe/Anpi ²¼¤Î Parse/Anpi/cloud/main.js ¤ÎÆâÍÆ¤ò³«È¯ÍÑ¥Õ¥©¥ë¥À²¼¤Î Anpi/cloud/main.js ¤Ø¾å½ñ¤­¤·¡¢ËÁƬ¤Î²¼µ­¤Î²Õ½ê¤ò¼«Ê¬¤Î Mailgun ¥É¥á¥¤¥ó¤È API Key¡¢Á÷¿®Àè¤È¤¹¤ë¥á¡¼¥ë¥¢¥É¥ì¥¹¤Ç½ñ¤­´¹¤¨¤Þ¤¹¡£

    var MAILGUN_DOMAIN = 'sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org';
    var MAILGUN_KEY    = 'key-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    var MAILGUN_TO     = 'Makoto Tanabe <XXXXXXXXXXXXX@XXXXX.XXXX>';
    var MAILGUN_FROM   = 'Safety Alert <postmaster@' + MAILGUN_DOMAIN + '>';
    

    ³«È¯ÍÑ¥Õ¥©¥ë¥À²¼¤Î Anpi/ ¤Ø°Üư¤·¤½¤³¤«¤é¡Öparse deploy¡×¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤ÈÇÛ²¼¤Î³Æ¥Õ¥¡¥¤¥ë¤¬ Parse ¥µ¡¼¥Ð¤ØÅ¾Á÷¤µ¤ì¤Þ¤¹¡£

    $ cd Anpi
    $ parse deploy
    Uploading source files
    Finished uploading files
    New release is named v1
    

    Parse ¥µ¡¼¥Ð¤ØÅ¾Á÷¤·¤¿¥³¡¼¥É¤Îưºî¤Ï ¸ø¼°¥É¥­¥å¥á¥ó¥È¡ÖCloud Code¤È¤Ï] - [¤Ï¤¸¤á¤Ë] - [¥·¥ó¥×¥ë¤Ê´Ø¿ô] ¤Ëµ­½Ò¤µ¤ì¤¿ÊýË¡¤Ç³Îǧ¤Ç¤­¤Þ¤¹¡£

    3. ¥¸¥ç¥Ö¤ÎÅÐÏ¿

    ¾å¤Î¼ê½ç¤Ç deploy ¤·¤¿ main.js ¤Ë¤Ï Detected ¥¯¥é¥¹¾å¤Îľ¶á 30·ï¤Î¥Ç¡¼¥¿¤ò¥á¡¼¥ë¤Ç¥ì¥Ý¡¼¥È¤¹¤ë¤¿¤á¤Î¥¸¥ç¥ÖÍÑ´Ø¿ô¡Öreport¡×¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥¸¥ç¥Ö¤ÎÅÐÏ¿¡¦ÊÔ½¸¡¦ºï½ü¤Ï [Dashboard] - [Anpi] - [Core] - [Jobs] ¤«¤é¹Ô¤¤¤Þ¤¹¡£¿Þ¤Î UI ¤«¤éǤ°Õ¤ÎÆâÍÆ¤ÇÀßÄê²Äǽ¤Ç¤¹¡£

    ¢¨ÌµÎÁÏȤΠParse ¥¢¥«¥¦¥ó¥È¤Ç¤ÏÊ£¿ô¤Î¥¸¥ç¥Ö¤òƱ»þ¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó

    °Ê¾å¤Î¼ê½ç¡¦ÀßÄê¤Ç¡¢º£²óºîÀ®¤·¤¿ mbed ¥Ù¡¼¥¹¤ÎÁõÃÖËÜÂΤȳƥ¯¥é¥¦¥É¥µ¡¼¥Ó¥¹¤¬Ï¢·È¤·¤Æ²Ôư¤·¤Þ¤¹¡£¥¢¥¤¥Ç¥£¥¢¼¡Âè¤Ç±þÍѤâ²Äǽ¤Ç¤·¤ç¤¦¡£¤³¤¦¤¤¤¦»ÅÁȤߤòÄ㥳¥¹¥È¤Ç¼«ºî¤Ç¤­¤ë»þÂå¤Ë¤Ê¤ê¤Þ¤·¤¿¡£


    (tanabe)
    klab_gijutsu2 at 07:54¡Ã¤³¤Îµ­»ö¤ÎURL¨¢Comments(0)¨¢TrackBack(0)
    BlogÆâ¸¡º÷
    Archives
    ¤³¤Î¥Ö¥í¥°¤Ë¤Ä¤¤¤Æ
    DSAS¤È¤Ï¡¢KLab ¤¬¹½ÃÛ¤·±¿ÍѤ·¤Æ¤¤¤ë¥³¥ó¥Æ¥ó¥Ä¥µ¡¼¥Ó¥¹ÍѤÎLinux¥Ù¡¼¥¹¤Î¥¤¥ó¥Õ¥é¤Ç¤¹¡£¸½ºß5¥ö½ê¤Î¥Ç¡¼¥¿¥»¥ó¥¿¤Ë¤Æ¹½ÃÛ¤·¡¢±¿ÍѤ·¤Æ¤¤¤Þ¤¹¤¬¡¢²æ¡¹¤ÏDSAS¤ò¤è¤ê»È¤¤¤ä¤¹¤¯¡¢¤è¤ê°ÂÁ´¤Ë¡¢¤½¤·¤Æ¤è¤ê¾ÊÎϤDZ¿ÍѤǤ­¤ë¤³¤È¤òÌܻؤ·¤Æ¡¢Æü¡¹²þÎɤ˶Ф·¤ó¤Ç¤¤¤Þ¤¹¡£
    ¤³¤Î¥Ö¥í¥°¤Ç¤Ï¡¢¤½¤ó¤Ê DSAS ¤Ç»È¤Ã¤Æ¤¤¤ëµ»½Ñ¤Î¾Ò²ð¤ä¡¢¼Â¸³¤·¤Æ¤ß¤¿·ë²Ì¤ÎÊó¹ð¡¢¥È¥é¥Ö¥ë¤Ë´¬¤­¹þ¤Þ¤ì¤¿»þ¤Î·Ð¸³Ã̤ʤɡ¢¹­¤¯¿¼¤¯¡¢¿§¡¹¤ÊÏÃÂê¤ò¿¥¤ê¤Þ¤¼¤Æ¾Ò²ð¤·¤Æ¤¤¤­¤¿¤¤¤È»×¤¤¤Þ¤¹¡£
    ºÇ¿·¥³¥á¥ó¥È