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