LINE Botからobnizで学習リモコン操作 -AzureBotService-が上手くいかず、LEDとサウンドをLINEから操作した！

はじめに
自分の学習の記録、忘備録としての内容になります。
Qiita初投稿のため、見にくい箇所、不備等があると思います。
内容: AzureBotServiceを使い、LINEBOTからobnize学習リモコンを操作し用としましたが、うまくいかず次回持越し。
その代わり、LINE-AzureBotService-obnizeを連携させてLINEからLED操作の確認をしてみました。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442827/f92f13ee-a31f-0d86-4416-39b1116021a3.png  width=40%>
[完成動画](https://www.youtube.com/watch?v=o1KuKXoKFgc)


単純に右と言うと、右方向にLEDが流れ、サウンドもそれに合わせて段階的に鳴るという簡単なものになっています。

<h3>学習リモコン失敗</h3>
以前、ラズパイで学習リモコンを作り、動作確認できていたため、これをobnizを使ってLINEからBotで登録、送信をできるようにしようと考えたのですが、失敗しました。
以前は下記記事を参考にPython+hubotで作成していました。

[格安スマートリモコンの作り方](https://qiita.com/takjg/items/e6b8af53421be54b62c9)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442827/e0f7e279-2d4d-6145-feeb-b7351571a4f8.png width=40%>

今回obnizのパーツライブラリのページを参考にやってみました。
受信側
https://obniz.io/ja/sdk/parts/IRSensor/README.md

IRSensor
リモコンで使われる赤外線の信号を検出します。
信号を読み込むことはできました。

送信側
https://obniz.io/ja/sdk/parts/InfraredLED/README.md

http://akizukidenshi.com/download/OSI5FU5111C-40.pdf

InfraredLED
赤外線LEDを操作します。特に、リモコンのような赤外線で信号を送るためのクラスです。
回路を変えてみたりして、試したのですがどうしても上手く送信されず今回は断念しました。
また再チャレンジします。


<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442827/22e413f7-1bdd-1fd1-d8a9-c32a1f35897e.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442827/46ffee71-635f-8fe8-649b-7cd8e47c2fde.png width=40%>

このIoTホームキットを使った方が早い気がします。
https://obniz.io/ja/lessons/iothome/lessons_iothome_ir

----------------------------------------
<h3>基本に返りobnizでLEDを点灯するところから行いました。</h3>
まずは準備です！
<h3>AzureBotService、LINEの設定</h3>
前回同様この記事を参考にさせていただきました。
    　[祝 LINE チャンネル追加！Azure Bot Service で翻訳チャットボット作成
　　　　　 (1)Azure Bot Service から LINE 接続 編](https://qiita.com/annie/items/1926fc16731fcaad0666#%E6%BA%96%E5%82%99)

<h4>Install obniz.js</h4>
一通り連携ができたらobnizをnpmからインストールします。
AppServiceEditorのconsole画面を開いてインストールします。
![obniz006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442827/5e2a8352-5053-3920-0796-019cd52ec47f.png)


AppServiceEditorのbot.jsを編集します。


![obniz008.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442827/7c4c7228-2cd0-ac13-6c37-cb04bb909c2e.png)

```node.js:bot.js
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

const { ActivityHandler } = require('botbuilder');
const Obniz = require("obniz");
var obniz = new Obniz("自分のobniz ID");   

class EchoBot extends ActivityHandler {        
    constructor() {
         super();
        // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.

        this.onMessage(async (context, next) => {
            await context.sendActivity(`You said '${ context.activity.text }'`);

            var led_G = obniz.wired("LED", {anode:1, cathode:0});
            var led_R = obniz.wired("LED", {anode:2, cathode:0});
            var led_Y = obniz.wired("LED", {anode:3, cathode:0});  
            var led_W = obniz.wired("LED", {anode:4, cathode:0});    
            var speaker = obniz.wired("Speaker", {signal:9, gnd:11});            
            let replyText = '';
              
            switch(context.activity.text) {
                case '右':
                     replyText = '右方向に進むよ！';

                     obniz.display.clear();
                     obniz.display.print("Right");
                     
                     led_G.output(true);  
                     speaker.play(1000); //1000hz                    
                     await obniz.wait(500);                        
                     led_R.output(true);  
                     speaker.play(1300); //1300hz                        
                       await obniz.wait(500);       
                     led_Y.output(true); 
                     speaker.play(1600); //1600hz                         
                       await obniz.wait(500);                      
                     led_W.output(true); 
                     speaker.play(1900); //1900hz                         
                       await obniz.wait(500);                                  
                                        
                     speaker.stop();                      
                     await obniz.wait(500); 

                     led_G.output(false); 
                     led_R.output(false);      
                     led_Y.output(false);                    
                     led_W.output(false); 
                     
                     await obniz.wait(500); 
                     
                     led_G.output(true);                      
                     led_R.output(true);     
                     led_Y.output(true);                   
                     led_W.output(true);                       
                     await obniz.wait(500);  

                     led_G.output(false); 
                     led_R.output(false);      
                     led_Y.output(false);                    
                     led_W.output(false);                                                 
                     break
                     
                case '左':

              //右の反対なので省略します//                                               

                     break                                        

                case 'OFF':
                     replyText = 'OFFにしたよ！';
                     
                     obniz.display.clear();
                     obniz.display.print("OFF");
                     led_R.output(false);
                     led_G.output(false);     
                     break 
                case 'おしまい':
                       replyText = 'obniz OFFにしたよ！';

                       await obniz.wait(2000); 
                       obniz.display.clear();
                        obniz.close();
                    break
                default:
                     replyText = '理解できません！';
                     
                        obniz.display.print("XXXXXXXXXX");
                        led_R.output(false);
                        led_G.output(false);  
                        break 
             }

             const responseMessage =replyText; 
             await context.sendActivity(responseMessage);

            // By calling next() you ensure that the next BotHandler is run.
            await next();            
        });

        this.onMembersAdded(async (context, next) => {
            const membersAdded = context.activity.membersAdded;
            for (let cnt = 0; cnt < membersAdded.length; ++cnt) {
                if (membersAdded[cnt].id !== context.activity.recipient.id) {
                    await context.sendActivity('Hello and welcome!');
                }
            }
            // By calling next() you ensure that the next BotHandler is run.
            await next();
        });
    }
}

module.exports.EchoBot = EchoBot;

```
<h3>やってみた感想</h3>
リモコンの信号の発信で時間がかかってしまいました。

LINE-AzureBotService-obnizeの連携に関しては、簡単ですが一通りの流れはつかめたかと思います。
色々繋がってくると、できる事がどんどん広がってきますね。
この先、obnizのセンサー側の値をとってLINEに反映させる部分はまだやっていませんので、学習リモコンのリベンジと合わせ、やっていきたいと思います。
また、技術的な部分に時間がかかり、もっと楽しいモノづくりに行けていないので、もう少し切り替えを早くしていきたいと思っています。