Skip to content

Files

Latest commit

 Cannot retrieve latest commit at this time.

History

History
162 lines (117 loc) · 7.8 KB

3-b-practical-bot.md

File metadata and controls

162 lines (117 loc) · 7.8 KB

3-b. LINE Messaging API を利用した本格Botの開発 (後半)

Pico Wとの連携

せっかく手元にPico Wがあるので,今の温度を教えてくれるBotを作ってみます.

本来であれば

  1. ユーザーが送信したLINEメッセージをトリガーとしてPico Wに送信し,
  2. Pico Wが温度を計測してユーザーに送信する

とよいのですが,諸々の事情から今回は

  1. Pico Wが定期的に温度をスプレッドシートに記録し,
  2. ユーザーからリクエストがあったとき,最新の値を送信する

システムをつくります.

1. Pico Wが計測した温度をスプレッドシートに記録する

スプレッドシートのセットアップ

  1. LINE Botが使用するスプレッドシートとは別に,Pico Wが記録するスプレッドシートを作成します.
    Google Driveにアクセスし,任意の場所で左上の新規スプレッドシートをクリックします.

  2. 先ほど作成したスプレッドシートと混合しないようにするために
    左上の無題のスプレッドシートをクリックして名前をPico Wに変更しておきます.

  3. 上部の拡張機能からApps Scriptを開き,書きかけのmyFunction関数を削除して以下のコードに置き換えます.

    function doPost(e){
        let sheet = SpreadsheetApp.getActive().getActiveSheet();
        sheet.appendRow([new Date(), e.postData.contents]);
    }
  4. 左上の無題のプロジェクトをクリックして名前をPico Wに変更しておきます.

  5. 右上のデプロイ新しいデプロイをクリックし,種類を選択の右にある歯車⚙からウェブアプリを選択します.

  6. 表示された設定のうち,アクセスできるユーザー全員に変更し,デプロイをクリックします.

  7. アクセスを承認をクリックし,ご自身のGoogleアカウントを選択します.
    Google hasn't verified this appと表示されますが,左下に小さく表示されたAdvancedから
    Go to Pico W(unsafe)をクリックします.

  8. スプレッドシートの編集などを求める権限リクエストが表示されますので,Allowをクリックして許可します.

  9. 問題なければ,デプロイIDとウェブアプリのURLが発行されます.
    このうちウェブアプリのURLをコピーして,メモ帳などのアプリケーションに記録しておきます.

  10. Windowsの方はコマンドプロンプト(Win+R→cmd→Enter)またはWSL上のBash,Macの方はターミナル.appで以下のコマンドを実行します.
    PowerShellではcurlcurl.exeとする必要があります.

    curl -X POST -H "Accept: application/json" -H "Content-type: application/json" -d "テストメッセージ" ウェブアプリのURL

実行後,

<!DOCTYPE html><html>〜スクリプトが完了しましたが、何も返されませんでした。〜</html>

と出力されますが,スプレッドシートに正しく情報を記録できていればOKです.

Pico Wのセットアップ

  1. Thonnyを開いて,Pico Wへ以下のコードを書き込んでください.
    Wi-Fiのパスワードとデプロイ時に発行されるURLの挿入を忘れないようにしてくださいね.

    import network
    from time import sleep
    import machine
    import urequests
    
    ssid = "KIT-EVENT"
    password = "要置き換え"
    url = "https://script.google.com/macros/s/この部分を置き換える必要があります/exec"
    
    def connect():
        # Wi-Fiに接続
        wlan = network.WLAN(network.STA_IF)
        wlan.active(True)
        wlan.connect(ssid, password)
        while wlan.isconnected() == False:
            print("Waiting for connection...")
            sleep(1)
        ip = wlan.ifconfig()[0]
        print(f"Connected on {ip}")
        return ip
    
    
    def send_sheet(message):
        headers = {
            "Content-Type": "application/json"
        }
        response = urequests.post(url, data=message, headers=headers)
        if response.status_code == 200:
            print("Notification sent successfully")
        else:
            print("Failed to send notification, status code:", response.status_code)
        response.close()
    
    
    def get_outside_sensor_temp():
        sensor_temp = machine.ADC(28)
        conversion_factor = 3.3 / (65535)
        reading = sensor_temp.read_u16() * conversion_factor
        temperature = reading/0.01 - 50
        return temperature
    
    try:
        ip = connect()
        while True:
            # LEDが光っている間は送信中
            machine.Pin("LED", machine.Pin.OUT).on()
            send_sheet(str(get_outside_sensor_temp()))
            machine.Pin("LED", machine.Pin.OUT).off()
            sleep(3)
    
    except KeyboardInterrupt:
        machine.reset()

実行後,スプレッドシートに値が記録されていればOKです.

2. ユーザーのリクエストに応じて最新の温度を送信する

前半の制作物を活用して実装します.
あえて説明を減らしています.よくわからない箇所は検索や周囲の人に頼りながらやってみましょう.

  1. 前半で作成したLINE Botというタイトルのスプレッドシート・Google Apps Scriptプロジェクトを開きます.

  2. doPost関数に,以下のように実装します.

    • ユーザから教えてというテキストメッセージが送信されたら,
      Pico Wシートに記録された温度の値を返信する

      💡ヒント
      1. 予めPico WのシートからLINEシートの特定の位置に,スプレッドシートのIMPORTRANGE関数を利用してデータを取り込んでおく
        // GAS単体でも実現できます

      2. // TBDの箇所に,上記関数で取り込んだセルの内容を送信する
        参考:Google Apps Script と LINEを使ったオウム返しBotの作成方法

    • その他のテキストメッセージや,テキストでないメッセージが送信されたら,
      このBotの使い方を教えるメッセージを返信する

Botのカスタマイズ

ここまでできたら,ぜひLINE Developersのコンソール画面やLINE Official Account Managerをいろいろ触ってみてください.
友達登録後に自動でメッセージを送信したり,ご自身で開発するWebアプリケーションにLINEログインの機能を追加したりすることが簡単にできます.

APIの扱いに慣れている人は,Messaging APIリファレンス を参照してより高度なBotの開発に挑戦してみましょう.
グループトークで活躍できるBotを作ったり,企業の公式LINEでよくあるリッチメニューやボタンを作ったりすることだってできます.

Chat GPTなどの生成系AIと連携させることでより簡単に高機能なBotを作れるかもしれません.ぜひいろいろと試してみましょう!
困ったときは遠慮なく近くのCore-team Memberにお声掛けくださいね.

4-(a) MQTT・クラウドサービスを使った本格IoT へ進む
4-(b) 他のボードやセンサ,ディスプレイなどを試してみる へ進む

目次に戻る