VSCodeの拡張機能SSH FSをインストール
エクスプローラに SSH FILE SYSTEMS が追加されるので右クリックしてCreate a SSH FS configuration
Windowの場合PuTTYが必要とのこと。
Nameは任意
Locationは設定ファイルの場所
GrobalはVsCode自体に設定される。
Workspaceはディレクトリ単位、ディレクトリを開いておく必要がある。
環境毎にWorkspaceを用意する方がいいかも。
Host:raspberrypi3plus.local or IPアドレス
Username:pi
Password:[ラズベリーパイに設定されているパスワード]
Root:接続時のトップディレクトリ
Username, Passwordは設定しない場合接続時に入力する(password: true を設定する必要あり)。
Workspaceに保存した場合.vscode/settings.jsonファイルが作成される。
{ "sshfs.configs": [ { "host": "raspberrypi3plus.local", "name": "pi", "username": "pi", "password": true } ] }
接続したい場合はSSH FILE SYSTEMSの接続対象を右クリック → Connect as Workspqce folder
Raspberry PI上にPythonプログラムを作成する
SSHなどで接続してラズパイ上で作成してもいいがここまでの手順でVSCode上から作成することもできるようになっている。
サンプルコード
/home/pi/project/dtest/main.py (Raspberry pi)
import sys from flask import Flask app = Flask(__name__) @app.route("/") def index(): msg = "Hello remote debug!" return msg if __name__ == '__main__': # デバッグ時の処理 if (len(sys.argv) > 1) and (sys.argv[1] == "debug"): import ptvsd print("Waiting attach debugger...") ptvsd.enable_attach(address=('0.0.0.0', 30001)) ptvsd.wait_for_attach() app.run(host="0.0.0.0", port=3000, debug=False)
debug=TrueにしておくとFlaskのデバッグ機能と競合してうまく動作しない。
動作確認
ラズパイにSSHなどで接続して以下のコマンドssh pi@raspberrypi3plus.local
cd project/dtest/
python3 main.py
cd project/dtest/
python3 main.py
ラズパイ上でブラウザを開いて
http://127.0.0.1:3000/
へアクセス
あるいは同一ネットワーク上のPCから
http://raspberrypi3plus.local:3000/
へアクセス(IPアドレス指定だとうまくいかないかも)
ライブラリが足りていない場合インストール(恐らく初期状態だとptvsdがない)
pip3 install ptvsd
"Hello remote debug!"
と表示されたら成功
参考
Visual Studio Codeからリモートデバッグする。
.vscode/launch.json に以下を追記。なければ作成。
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "attach", "pathMappings": [ { "localRoot": "ssh://pi", "remoteRoot": "/home/pi/project" } ], "port": 30001, "host": "raspberrypi3plus.local" } ] }
localrootは恐らく
ssh://[設定名]/
になる。
Ctrl(Cmd)+Shift+P → Open Workspace Configuration FileのSSF FSから確認できる。
remoteRoot はラズパイ上へのルートパス
恐らくSSHで接続した時のRootを指定する。
portはデバッグ用のポート番号。
ptvsd.enable_attach(address=('0.0.0.0', 30001)) で指定している(使用されていない)ポート番号。
host
ホスト名かIPアドレスを指定。
引数debugを付与してラズパイのpythonプログラム起動。
python3 main.py debug
return msgあたりにブレイクポイントを貼ってデバッグ実行(F5)
http://raspberrypi3plus.local:3000/
にアクセスして確認。
参考
https://qiita.com/sinsi404/items/dd0afe1ed038d542d1f1
https://qiita.com/informationsea/items/5c9f05c81a41fb885460
https://donjayamanne.github.io/pythonVSCodeDocs/docs/debugging_remote-debugging/
https://community.plot.ly/t/code-in-if---name-----main---runs-twice/5868