ラズベリーパイをweb経由で遠隔操作 その2
3年ほど前に書いたラズベリーパイをweb経由で遠隔操作するという記事にアクセスが多いようなのでpart2を書きました
当時はラズパイやpythonを始めたばかりということもあって、Apacheを導入してPHPと連携するという少し遠回りな方法を取っていました
今回はもっと簡単に、作成済みのプログラムにwebサーバー機能を搭載して遠隔操作できるようにしてみたいと思います
Flaskのインストール
今回はpythonで簡単にwebサーバーを実装できるFlaskというライブラリを使用します
ラズパイのターミナルを開き次のコマンドを入力してFlaskをインストールします
pip install flask
既存のプログラムに追記
ライブラリをインポートします
次のコードをプログラムの先頭に記述します
from flask import Flask # Flaskのインポート
import threading # マルチスレッド用
次にwebサーバーとしての動作を記述します
メイン処理でFlaskを動かしてしまうとプログラムが停止してしまうので、関数化して新しいスレッドとして実行するようにします
以下は自作の温度制御プログラムにhttp://192.168.1.XX:5000/user/commandの形で外部からアクセスする場合のコードです(重要な部分は、最初の6行と最後の1行だけ)
def flask_thread():
USER = "user"
app = Flask(__name__)
@app.route('/<user_name>/<command>')
def index(user_name, command):
if user_name != USER:
return "Don't Access!"
if command == 'tamago': # 温泉卵の温度制御を開始する
ReadTemperProcess('temper_onsen_tamago.csv') # 工程を読み込む
OnFileButton(1) # スタートボタンを押す
elif command == 'stop': # 制御を停止する
g.start = False
elif command == 'ondo': # siriが読み上げる温度のテキストを返す
return "電気ケトルの温度は、" + str(g.temper) + "℃です"
elif command == 'jikan': # siriが読み上げる残り時間のテキストを返す
if len(g.list_dt_sv) == 0 or g.start == False:
return "現在、停止中です"
msg = ""
if g.file_name.find("onsen_tamago") is not None:
msg = "。ただいま温泉卵を調理中です。"
# 残り時間の計算
rt = g.list_dt_sv[len(g.list_dt_sv)-1] - g.now_time
s = rt.total_seconds()
hours, remainder = divmod(s, 3600)
minutes, seconds = divmod(remainder, 60)
if int(hours) == 0:
return "温度工程の残り時間は、" + '{:02}分{:02}秒です'.format(int(minutes), int(seconds)) + msg
else:
return "温度工程の残り時間は、" + '{:02}時間{:02}分{:02}秒です'.format(int(hours), int(minutes), int(seconds)) + msg
return ""
app.run(host='0.0.0.0', port=5000)
ごちゃごちゃ書いていますが、必要なのは最初の6行と最後の1行だけで、それ以外の部分はコマンドに応じた処理を書いています
最後に、メインプログラムの初期化の後に次のコードを記述します
th = threading.Thread(target=flask_thread) # Webサーバースレッド
th.start()
これでプログラム実行時にwebサーバー用のスレッドが実行されます
このプログラムの実行後、ブラウザにURL(http://192.168.1.XX:5000/user/command)を入力してラズパイにアクセスすると、コマンドに応じた処理が実行され、ブラウザ画面にreturn の中身が表示されます
たったこれだけで既存のプログラムに、web経由で遠隔操作する機能を追加することが出来ました。
番外編: Siriを使って遠隔操作する
iPadやiPhoneには“ショートカット”という、強力なマクロ機能があります
Webページを開いたり、音楽を再生したり、カメラやセンサーなどを操作したり、振動させたりと、本体の持つ機能を連続的に実行することができます
作成したマクロはSiri経由で実行することも出来ます
“Hey Siri、部屋消灯” → ラズパイのURLにアクセス → リレーOFF
といった事が可能です
ここでは、先ほどのラズパイのURLにアクセスして、取得したテキストを読み上げさせてみます
iPadのショートカットを起動し、上部の+ボタンを押してマクロを追加・作成します
マクロ作成画面が開いたら、右側のコマンド一覧から
Web → Webリクエスト → URLの内容を取得、を選択
項目が追加されたらエディットボックスに先ほどのラズベリーパイのURLを入力します(http://192.168.1.XX:5000/user/command)
次に右側のコマンド一覧から
書類 → テキスト → テキストを読み上げる、を選択
すると自動で”URLの内容”を読み上げるに設定されます
最後に、一番上のエディットボックスにマクロのタイトルを入力します
このタイトルが音声起動するときのキーワードになります
ここでは、「現在の温度は?」にしました
家には7台のラズパイのうち、2台を低温調理用と電気毛布用に使っています(七人のラズパイ!)
その2台にSiriからアクセスして、現在の温度を読み上げさせてみます(地声はカット)
こんな感じで、ラズパイの遠隔操作 & 状況取得を行うことができました
これを応用すれば色んなことが出来そうですね(ワクワク
1件の返信
[…] 次回記事を書きました(2022/11/29) […]