5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[ESP32]LINEbotからロボットアームを動かす/LINEbot編

Last updated at Posted at 2019-10-25

※本記事は[ESP32]LINEbotからロボットアームを動かす/ロボットアーム編と合わせて御覧ください。

#1.概要
LINEbotからメッセージを送信して、ESP32を動かしたいお気持ち。そしてロボットアームを動かしてリモコンのボタンを押したいお気持ち。
ロボットアーム側についてはこちらをご覧ください

仕組みはこんな感じ。
通常状態では何も動かない。
スライド1.JPG
botに『冷房』と送信されたときだけロボートアームが動く~
スライド2.JPG

ESP32側のコードは上記のリンクからどうぞ。

#2.LINEbotのコード

linebot.py
from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import os, json 
import time
import numpy as np

app = Flask(__name__)

line_bot_api = LineBotApi('access_token') 
handler = WebhookHandler('channel_secret') 

@app.route("/callback", methods=['POST'])
def callback():

    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
 
    try: 
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'


global state
state=0
@app.route("/ToI", methods=["GET"])
def handle_get_request():
    global state
    
    tmp = state
    state = 0
    print("accept_"+str(tmp))
    line_bot_api.push_message("user_id",TextSendMessage(text="accept_"+str(tmp)))
    
    return str(tmp)


dry = ["今日じめじめしとるなぁ、除湿しとくな","除湿まかしとき!"]
cool = ["ええよー、冷しとくで!","今日暑かったもんなぁ、しっかり冷やしとくわ!"]
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    text = event.message.text
    global state
    
    
    if text == "ToI! 除湿して!":
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text=dry[np.random.randint(2)]))
        state = 1

    elif text == "ToI! 冷房して!":
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text=cool[np.random.randint(2)]))
        state = 2

    else:
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text=text))


if __name__ == "__main__":
    port = int(os.environ.get('PORT', 8000))
    app.run(host ='0.0.0.0',port = port)

LINEbot側は大体こんな感じ。
ESP32から"/ToI"あてにGETリクエストが飛んできて、現在のstateを返している。ユーザーから命令があると、stateが変更され、ロボットアームが動く。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?