このところ「VS Codeでほにゃらら」と題し、VS Code+PlatformIOで、マイコンボード向けのクロス開発を試してきました。中には同じように小さなボートでもセルフ開発できるボードもあります。そうです Raspberry Piであります。今回は、VS Codeで Raspberry Pi用ソフトの開発もできることを確認して行きたいと思います。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
(2021/2/4 追記:VS CodeからのRaspberry Piリモート接続は、Armv7以降のアーキテクチャのCPU搭載機でないと利用できないようです。つまり、初代やZeroはArm1176JZF<Armv6>なので不可です。最近 Pi ZeroにVS Codeからリモート接続しようとしてエラーになったときのエラーメッセージで知りました。Pi2、Pi3, Pi4は大丈夫な筈。私が確認しているのはPi3だけですが。)
VS Code環境を使って、Raspbian OS(Linux)を走らせているRaspberry Pi上のソフトウエアを開発しようとする場合、3つの方法があるかと思います。
-
- PC上のVS CodeからRemote-SSHでRaspberry Piに接続
- PC上のVS Code+PlatformIOとRaspberry Pi上のPlatformIO-CLIの連携
- Raspberry Pi上にVS Codeを載せてしまう
やり方はそれぞれ異なりますが、Raspberry Piボード上のセルフ開発になることは変わりがありません。今回は、1番のケース
Windows 10のPC上にインストールしたVS CodeからRemote-SSHでラズパイに接続、ソースコードを編集、ビルドして走らせる
というのを試してみようと思います。やってみると思いの他簡単。VS Codeの Remote Development using SSH というページを見ながらセッティングしてみます。VS Codeは、勿論インストール済。Windows 10PC上のVS Codeの場合、最初のステップはOpenSSHクライアントが使えるようにしておくことです。Windowsのオプション機能なので、
設定>アプリと機能>オプション機能
で追加できる筈。私の場合、何時やったのか記憶が定かでないのですが、すでにOpenSSHクライアントは有効になってました。よって何もしない。
その次は、VS Codeの拡張機能であるRemote-SSHをインストールすることです。例によってVS Codeの拡張機能は、クリック一発で導入できるのでこれまた簡単。
勿論、接続を受け付ける側の ラズパイ上で、SSHサーバが走っていなければなりません。私の場合、元々、Teratermでラズパイにリモートログインして作業していたので、ラズパイ立ち上げさえすれば、SSHの口が開いています。
よって、後はコマンドパレットから、Remote-SSHでリモートのHOSTに接続を選択するだけ!
Remote-SSH接続をすると、VS Codeの新しいインスタンスが生成されるようで、もう一つウインドウが開きます。元の方がPC上のフォルダを開いているローカルなVS Codeで、新しく開いた方がリモートのラズパイのディレクトリにアクセスするVS Codeです。
当然ながら初回はログイン名@ホスト名またはIPアドレスと、パスワードを聞かれます。そしてSSHで接続した後、なにやらPC側からラズパイ側に「仕掛け」をしているみたいで、ちょっと時間がかかります。2回目以降は、ラズパイのディレクトリへのパスが普通にローカル・ストレージ上のフォルダなどと並んで表示されているのでこれをクリックするだけで、即座に別ウインドウが開き、Remote-SSH接続になります(パスワードは聞かれます)ローカル同様にどのディレクトリ(あるいはワークスペース)を開くのか聞かれるので、指定すればローカルストレージとまったく変わりませぬ。こんな感じ。
そのままVS Codeで編集をしていると、PC上のローカルなファイルを編集しているのと変わりません。そして、VS Codeからターミナルを開けば、
Raspbianの上のBash
多分ね、makeよりもいろいろ簡単にビルドできるような仕組みもあるんじゃないかと思いますが、とりあえず、ありものでOK。
いままでは、Teratermでラズパイに接続し、Teratermのウインドウの中で、Vim使ってファイル編集していました。エディタを実行しているCPUがラズパイからPCに移っただけで、gccなどツールチェーンはラズパイ上の同じものです。しかし、VS Code、便利だ。TeratermとVimには申し訳ないけれども、VS Codeで良い気がする。。。バチが当たるぞなもし。