qeqe が 2024年10月30日16時25分29秒 に編集
コメント無し
本文の変更
概要 - スマートフォンからlineを使用してRaspberryPi4を動かしてモーターを回転させる。ngrokを使用してローカルの開発環境で稼働させているネットワークサービスを一時的にネット上に外部公開して、RaspberryPi4と通信する。 特定のワードをLINE Messaging APIに送信 → RaspberryPi4がサーボモータを動かして開錠・施錠 時間を指定しての動作 LINEのリッチメニューを使用してワンタッチで動作
![イメージ画像](https://camo.elchika.com/285340bb271ebb93b6609a295c746e67f896bdba/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65303033366234312d353734662d346535382d383865652d6235613731343039343039642f61343534393637632d656637392d343132392d613930662d306132393861326134636135/)
![イメージ画像](https://camo.elchika.com/6aa25394d7ee564bb3ede7b2ae552f3e90b29b96/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65303033366234312d353734662d346535382d383865652d6235613731343039343039642f61633434336663372d613531642d346331642d396236342d653830313532393031613030/)
詳細 - スマートフォンからlineを使用してRaspberryPi4を動かしてモーターを回転させる。ngrokを使用してローカルの開発環境で稼働させているネットワークサービスを一時的にネット上に外部公開して、RaspberryPi4と通信する。 使用物品 - - RaspberryPi4 - マイクロサーボ9g SG-90 - LINEを使用できるデバイス ```python:メインコード 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) ``` ```python:モータの回転 # 鍵をかけるようにモータを回転 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() ``` 参考文献 - - https://qiita.com/t-funaki/items/2a3bbed8f63d2dc660a3 - https://note.com/khe00716/n/n34bb4c087fdc#b6oEZ - https://qiita.com/sunaga70/items/6821772a9bcbdbbc2c03