概要
スマートフォンからlineを使用してRaspberryPi4を動かしてモーターを回転させる。ngrokを使用してローカルの開発環境で稼働させているネットワークサービスを一時的にネット上に外部公開して、RaspberryPi4と通信する。
特定のワードをLINE Messaging APIに送信 → RaspberryPi4がサーボモータを動かして開錠・施錠
時間を指定しての動作
LINEのリッチメニューを使用してワンタッチで動作
詳細
スマートフォンからlineを使用してRaspberryPi4を動かしてモーターを回転させる。ngrokを使用してローカルの開発環境で稼働させているネットワークサービスを一時的にネット上に外部公開して、RaspberryPi4と通信する。
使用物品
- RaspberryPi4
- マイクロサーボ9g SG-90
- LINEを使用できるデバイス
メインコード
from __future__ import unicode_literals
import os
import sys
import function
from argparse import ArgumentParser
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookParser
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
channel_secret = os.getenv('', None)
channel_access_token = os.getenv('', None)
if channel_secret is None:
print('Specify LINE_CHANNEL_SECRET as environment variable.')
sys.exit(1)
if channel_access_token is None:
print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')
sys.exit(1)
line_bot_api = LineBotApi(channel_access_token)
parser = WebhookParser(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:
events = parser.parse(body, signature)
except InvalidSignatureError:
abort(400)
for event in events:
if not isinstance(event, MessageEvent):
continue
if not isinstance(event.message, TextMessage):
continue
message = event.message.text
reply = event.message.text
if message.count('開錠'):
function.unlock()
reply = "開錠しました"
elif message.count('施錠'):
function.lock()
reply = "施錠しました"
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=reply)
)
return 'OK'
if __name__ == "__main__":
arg_parser = ArgumentParser(
usage='Usage: python ' + __file__ + ' [--port <port>] [--help]'
)
arg_parser.add_argument('-p', '--port', type=int, default=8000, help='port')
arg_parser.add_argument('-d', '--debug', default=False, help='debug')
options = arg_parser.parse_args()
app.run(debug=options.debug, port=options.port)
モータの回転
# 鍵をかけるようにモータを回転
def lock():
GPIO.setmode(GPIO.BCM)
GPIO.setup(gp_out, GPIO.OUT)
servo = GPIO.PWM(gp_out, 50)
servo.start(0.0)
servo.ChangeDutyCycle(9.5)
time.sleep(0.5)
GPIO.cleanup()
# 鍵をあけるようにモータを回転
def unlock():
GPIO.setmode(GPIO.BCM)
GPIO.setup(gp_out, GPIO.OUT)
servo = GPIO.PWM(gp_out, 50)
servo.start(0.0)
servo.ChangeDutyCycle(5.5)
time.sleep(0.5)
GPIO.cleanup()
-
qeqe
さんが
2024/09/20
に
編集
をしました。
(メッセージ: 初版)
-
qeqe
さんが
2024/09/20
に
編集
をしました。
-
qeqe
さんが
2024/09/20
に
編集
をしました。
-
qeqe
さんが
2024/09/20
に
編集
をしました。
-
qeqe
さんが
2024/09/20
に
編集
をしました。
-
qeqe
さんが
2024/10/29
に
編集
をしました。
-
qeqe
さんが
2024/10/30
に
編集
をしました。
-
qeqe
さんが
2024/10/30
に
編集
をしました。
ログインしてコメントを投稿する