はじめてのRaspberry Piと新たなRPi Connect

## はじめに
あけましておめでとうございます。新年1本目の投稿です。しばらく投稿をサボっている間にRaspberry Piを購入し、色々遊んでいました。そのうち、一部を書いていこうと思います。

また、この記事ではRaspberry PiをRPiと呼びます。

## 購入品/経緯
まず、今回はRPi 3 Model Bの動作確認済みジャンク(中古かもしれませんが、店頭でジャンク扱いでした)を共立電子シリコンハウスで購入しました。お値段なんと¥3000也。

元からPine64 A+というSBC(シングルボードコンピューター)は持っていたのですが、少々不安定なのとネットワーク関連で遊ぶには貧弱でした。そこで元から気になっていた「RPiが欲しい」となるのですが、**非常に高いのです**。学生が気軽に買える金額ではありません。

そして同じスペックながらも、RPiに触れてみようと思い、2世代前のフラッグシップを購入しました。

## スペック
| 項目 | 詳細 |
|-:|:-|
| SoC | Broadcom BCM2837 |
| CPU | ARM Cortex-A53 Quad-Core 1.2GHz |
| メモリー | LPDDR2 1GB SDRAM |
| ストレージ | MicroSD 64GB(Class10) |
| 無線 | IEEE 802.11 b/g/n |
| Bluetooth | Bluetooth 4.2/BLE |
| 電源 | 5V=2.5A(USB Micro-B) |

無線関連以外はPine64と同じか、少し劣る(メモリー)のですが、体感とベンチマークスコアはRPiが若干勝っていました。安定感は流石RPiと言ったところです。(※だからと言ってYouTubeのサイトを開こうものならフリーズします。)

ちなみにこの記事で使っているデバイスはiPad 第9世代 Wi-Fiモデルで、OSはiPadOS 18.3 Beta2です。RPi OSは執筆時の最新版より1つ前のものです。

## OSの書き込み
OSは無難にRPi imagerでMicro SDに書き込みます。いろんなバリエーションを試しましたが、RPi OS Desktop版(32bit)が良さそうです。私はFull版(プリインストールアプリが多い)を選択し、セットアップは全てimager設定で済ませておきました。**RPi imagerの強みは、書き込み前にセットアップを終わらせておくことができること**だと思います。

体感速度は変わりませんでしたが、アプリとの相性が32bitの方が良さそうです。このことは次章で述べます。

## 必要なソフトのインストール
私は中学生であるうえに、他の趣味の物欲を満たしすぎて(ラップトップ)PCなんて買えないので、SBCで開発をする訳ですが、64bit版ではArduino IDEが動作しません。というか動作はするものの、Arduino DUE用のボードライブラリがインストール出来ないのです。私の開発スタイルが「1台の高性能なArduino DUEはひたすら使い回す」なので、ライブラリが入らないと困ります。だから32bit版をインストールしています。

Arduino IDEのインストールはGUI環境で行います。[公式サイト](arduino.cc)からファイルをDLし、RPi上で解凍して実行するだけです。

そしてDUE用ライブラリをインストールすれば完了です。

そして後々使っていくRPi Connectはプリインストールされていました。Full版をインストールしたからでしょうか。

## とりあえずPythonを走らせる
とりあえずRaspberry **Pi**と言っているくらいですからPythonで`hello world`くらいはしておきましょう。

```Python:hello_world.py
print("hello world!")
```
以上。まぁ標準ソフトのThonnyで実行したのですが、なんで1行のためにこれをやったんだ？

## 【本編】RPi Connectのセットアップと実使用
いつごろからかは知りませんけど、公式からRPi Connectというものが存在します。これは、**VNCでゴチャゴチャせずともリモートデスクトップにアクセスできる**ツールで、なんとWeb上でアクセスできてしまいます。つまり、**どんな環境でもLinuxが動作します**(擬似的に)。iPadでLinuxが動くことになるので、嬉しいです。

SSH接続してコマンドを実行するにしても、設定が面倒なので今回はRPi Connectでデスクトップ環境にアクセスしてみようと思います。

使用にはRPi IDは必要です。他のアカウントとの連携によるサインインは不可なので、**GitHubあたりとの連携は是非実装していただきたい**です。

このIDでRPi側でもセットアップすると、RPiではないログインデバイスで、RPiデバイスが表示されるので接続します。

一応両方のデバイスでログインが成功するとこんな感じでデバイスが表示されます。
![IMG_0026.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/1e4e0c76-6c93-9807-d611-e69b13095390.jpeg)
この画面で「Connect via」を選択すると「Screen sharing」と「Remote shell」の2つのオプションが表示されます。ここでは、前者と後者に分けて紹介していこうと思います。

### 画面共有`Screen sharing`
これは、RPi上で表示されている内容をWebブラウザ上で全く同じものを表示する機能です。アクセスしている側が適切な入力機器を用意していれば操作も可能です。私はiPadで試してみましたが、**別で物理キーボードを用意する必要があります**。物理マウスがあれば直良しですが、なくてもタッチ操作で十分操作できました。

肝心の操作遅延ですが、フリーズしていない(しかけていない)状態であればGUI環境の遅延が最大1秒程度、キーボード操作はほぼ遅延なく操作できました。**2世代前のRPiに対しての期待は遥かに超えています。意外と快適です。**

一応、僕の環境での動作状況を以下の表にまとめておきます。
| ソフト | 動作状況 |
|-:|:-|
| LXTerminal | ⚪︎ |
| Terminator | ⚪︎ |
| Python 3.11(Terminator) | ⚪︎ |
| Thonny | ⚪︎ |
| LibreOffice Writer | △(少し重い) |
| Arduino IDE(32bit/1.8.19) | ⚪︎(但しコード保存時にフリーズの可能性) |
| Chromium | ×(フリーズ) |

この中でも特にChromiumなんかは世代が新しければそれなりに快適に動作するのではないかと思います。遠隔で操作できるとは言え、RPiなので舐めていましたが、作り込みは素晴らしかったと思います。

1つ思った注意点が、画面接続状態からモニターのHDMIケーブルを切断した際に接続が切れることです。**あくまで同じ画面を映しているだけ**なので、映す対象がなかったら動作しないということでしょうか。<font color=red>操作が間違っているのであればコメントまでお願いします<font>。

### 遠隔シェル`Remote shell`
これは、遠隔でターミナルを操作できる機能です。CUI(コマンドライン)環境で完結できる機能なら動作します。例えば、「アップデートするの忘れてた…」みたいな時は可能です。あと、明らかに画面共有より快適です。

画面です。
![IMG_0027.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/a335c8b0-e6b9-8ffd-1414-ec249018d724.jpeg)
結構広くて、ターミナルとして使うぶんには非常に快適でした。しかも、CUI環境上でGUIっぽく振る舞うconfigも普通に動作しました。
![IMG_0029.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/3475c22e-96c0-80b0-884a-4d8cdc62e377.jpeg)
CUI環境で使う人なら、別にこの環境でもいいんじゃないかってくらいにはサクサク動いてくれて、予想外でした。キーボードのレスポンスも相変わらず良好です。

そして、これはどちらのモードにも言えるのですが、**セットアップが楽で、作り込まれていて芸が細かい**と思いました。

## おわりに
本年最初の投稿が~~えらく~~非常に遅くなりましたが、RPiとはこんなにも面白いのかと実感しました。今度RPi 5Bを買おうかな？とか思っています。それではこれからも執筆を頑張っていきますのでよろしくお願いします。

それではまた〜(これ使うの久しぶりだな〜)