PyCharmでリモートのラズベリーパイのプロジェクトを開発します

###背景###
最近ラズベリーパイを使ってIoTプロジェクトを開発しています。純粋なウェブ開発、アプリ開発とは違うのは、実際にセンサーと繋がってデータを取得することがあります。もちろんモックサーバーのようなモックセンサーを作れば、大分楽ですが、楽しさがなくなります。
私、普段ローカルプロジェクトをPyCharmを使って開発をしています。もしリモートのラズベリーパイにあるプロジェクトもPyCharmを介して開発を進めれば、とても便利になります。
この記事は↑について説明します。

###目標###
![スクリーンショット 2021-07-24 13.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/87baf6e7-ef70-3e4c-7717-e8aec1842522.png)

上のフローでは、ローカルPCで開発したものを手動でリモートのラスベリーパイにアップロードし、そしてリモートの環境でさらに実行する必要があります。

下のフローでは、ローカルPCで開発したものを自動的にリモートのラズベリーパイにアップロードします。そして、***ローカルPCにインストールされてあるpycharmのPython InterpreterはリモートのPython Interpreterに指しています。***そのため、Pycharmから直接リモートのPythonファイルが実行できます。

###操作###

####1. ローカルのプロジェクトディレクトリーをPycharmから新規作成します。(既存プロジェクトならそのまま開きます)####

####2. リモートでプロジェクトのディレクトリーを作成します####

```
pi@raspberrypi:~ $ mkdir TestIoT
```

####3. Project Interpreterを設定します####
![スクリーンショット 2021-07-24 13.15.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/d17ae016-8285-b6d2-ba64-86dfbfa9c37f.png)

![スクリーンショット 2021-07-24 13.16.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/485803f3-672f-c28d-0d46-9932f9e5e461.png)

####4. SSH Interpreterを設定します####
![スクリーンショット 2021-07-24 13.20.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/cac8ee41-6c44-abb4-a3b0-662a1ed3160a.png)

![スクリーンショット 2021-07-24 15.33.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/eb1279cc-e681-202c-0c05-1d50a1b7d4f2.png)

####5. Python Interpreter設定、とディレクトリーマッピング設定####
![スクリーンショット 2021-07-24 13.24.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/987071f4-e199-c118-a441-e3146113453a.png)
PycharmのPython InterpreterをリモートのPython Interpreterに指します。

①リモートのPython Interpreterを以下のコマンドで確認します

```
pi@raspberrypi:~/TestIoT $ which python3
/usr/local/bin/python3
```

②リモートのプロジェクトパースを以下のコマンド確認します。

```
pi@raspberrypi:~ $ cd TestIoT/
pi@raspberrypi:~/TestIoT $ pwd
/home/pi/TestIoT
```

ちなみに、\<Project root\>はPycharmから新規作成したローカルの開発ディレクトリーです。(もしくは既存のプロジェクトディレクトリーです)
環境設定->Project->Project Structureで確認します。
![スクリーンショット 2021-07-24 15.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/44fcf38c-68d2-5913-4fa2-bc33f418cd0f.png)


![スクリーンショット 2021-07-24 15.34.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/34054afc-f4f9-c911-bcd6-01bc32f0b1f4.png)
Overwriteをして確定します。
※リモートのフォルダーは新規作成のフォルダではない場合は、要注意。

####6. リモートInterpreterとディレクトリーマッピングを確認します####
![スクリーンショット 2021-07-24 13.29.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/bd1e66fa-0e2f-097a-0744-8bd0c9b59831.png)
設定したら、①と②は変わります。

####7. ディレクトリーマッピング設定したら、自動アップロードが始まります。####
![スクリーンショット 2021-07-24 13.37.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/e3ac799f-64db-4392-db4f-f0f7bc10ca05.png)

####8. 動作確認####
![スクリーンショット 2021-07-24 15.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/3f3e051c-e401-990b-832e-2fa5cb958ae3.png)

![スクリーンショット 2021-07-24 15.42.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191439/175014ce-2174-b136-17c7-095cdbc65b07.png)
ローカルで新規Pythonファイルを作成し、実行したら、実はリモートのPythonファイルが実行されます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/hnri48PrEbE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

###まとめ###
要するには、PyCharmのPython InterpreterをリモートのPython Interpreterに指しことによって、PycharmからラズベリーパイのPythonコードを実行できます。ついでに、ディレクトリーマッピングの設定もできます。それによって、Pycharmの編集は直ちに、リモートに反映されれます。