見出し画像

LINEのメッセージでRaspberryPIのLEDをON/OFFしてみる(その2)LEDを光らせる

今日はLINEでメッセージを送ってLEDを点灯するとこまでやってみたいと思います。💪

ただ点灯させるだけじゃつまらないので、点灯状態か消灯状態か調べることができるようにしてみました。


1、回路図

GPIO4をonするとLEDが点灯します。GPIO4の出力の状態はGPIO17に接続されているので、GPIO17を見ればLEDが点灯しているか消灯しているか分かるようになっています。

スクリーンショット 2021-01-02 10.09.08

2、プログラム


前回のオウム返しのプログラムから、メッセージを受信しているモジュールは

def handle_message(event):

であることが分かります。

また、受信したメッセージは

event.message.text

で取り出せることが分かります。

event.message.textを if文で判断してLEDの点灯、消灯を制御すれば良いことになります。


from flask import Flask, request, abort
from linebot import (
   LineBotApi, WebhookHandler
)
from linebot.exceptions import (
   InvalidSignatureError
)
from linebot.models import (
   MessageEvent, TextMessage, TextSendMessage,
)
#@@@@
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup( 4, GPIO.OUT)
GPIO.setup(17,GPIO.IN)
app = Flask(__name__)
line_bot_api = LineBotApi('CfLvwfkkrYwDYCUvXMPBvRJfiTepJgntQE2x4zOzPbMbcl2UMQSHNPAOqNRUcpcqVldaWT5b6MSO3q/xUDoyoKKpB3XSp/gS60fM7YJVL+RaXH/v6KDARfrFLSwDh54XyRPq035U2lli8FbmzlFIXAdB04t89/1O/w1cDnyilFU=')
handler = WebhookHandler('7cc4b7dd9c7d3784345995692568c195')

@app.route("/callback", methods=['POST'])
def callback():
   # get X-Line-Signature header value
   signature = request.headers['X-Line-Signature']
   # get request body as text
   body = request.get_data(as_text=True)
   app.logger.info("Request body: " + body)
   # handle webhook body
   try:
       handler.handle(body, signature)
   except InvalidSignatureError:
       print("Invalid signature. Please check your channel access token/channel secret.")
       abort(400)
   return 'OK'

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
   #@@@@
   lineRes = event.message.text
   botRes ='LEDを点けたり消したりします'
   
   if lineRes == '点けて':
       GPIO.output(4, 1)    # LED点灯    
       botRes ='点けました!'
   if lineRes == '消して':
       GPIO.output(4, 0)    # LED点灯    
       botRes = '消しました!'
       
   if lineRes == '教えて':
       if GPIO.input(17):
           botRes = '点いてます'
       else:
           botRes = '消えてます'
   
   line_bot_api.reply_message(
       event.reply_token,
       TextSendMessage(text=botRes))

if __name__ == "__main__":
   app.run()


3、動かしてみる

これは一応、外部サーバーとして動作しているので、ローカルな環境じゃなく外出先からもコントロールできますよ。💮

画像2

4、まとめ

やっぱり外部に接続するにはESP32よりRaspberryPiを使った方が簡単ですね。

センサなどを接続したい場合は、RaspberryPiにESP32やPICなどのCPUを接続して計測や制御はそちらのマイコンにやらせてWEB系のI/FはRaspberryPiでやるのが良さそうですね。

今回はテキストしか送り返してないけど、スタンプや画像、動画、音声なども送れます。

では🤚







この記事が気に入ったらサポートをしてみませんか?