
Raspberry Pi で Python 演習
Raspberry Pi 4 でJupyterLabを実行し,PCからJupyterLabを利用するための設定をまとめておきます。ここでのゴールは,PCからJupyterLabでPythonコードを開発して,RaspberryPiのGPIOに接続した外部機器(LEDやDCモータ)を制御することです。

Raspberry Pi 4 や Raspberry Pi Zero では,USB Gadget Driver (OTGドライバ)を利用することで,Raspberry PiをUSBの子機として動作させることができます。Raspberry Pi 4の場合,USB給電が可能ですので,USBケーブル1本ですみますし,インターネットにもブリッジ接続でつなげることができます。PCからRaspberryPiへのアクセスは,ターミナルからSSHで接続するか,VNCリモートデスクトップで接続できます。
Raspberry Pi のOSの準備
公式サイトからRaspberry Pi Imager をダウンロードしてインストールします。
Imagerを起動して,SDカードにOSをインストールします。Raspberry Pi 4 では64bitのOSをインストールできますが,この後の設定だけではうまく環境構築ができないようなので,Legacy, 32bit 版をインストールしましょう。

インストール時に,ホスト名やユーザ名の変更,WiFi設定など事前に行うことができます。

イメージの書き込みが終了したら,PCにSDカードをマウントします。この場合,/Volumes/bootfs がSDカードのディレクトリです。
そして,sshという空ファイルを作成します。
$ touch /Volumes/bootfs/ssh
config.txtを編集します。ファイルの最後にdtoverlay=dwc2を追加します。
$ vi /Volumes/bootfs/config.txt
cmdline.txtを編集します。rootwait のあとに,半角スペースを入れてから,modules-load=dwc2,g_ether を追加します。
$ vi /Volumes/bootfs/cmdline.txt
Raspberry Pi の起動
SDカードをRaspberry Pi に装着します。
データ通信ができるUSBケーブルを用いて,PCとRaspberryPiを接続します。
PCでUSB接続のインターネット共有を有効にします。
→ MacOSでは,インターネット共有でRNDIS/Ethernet Gadget を選択PCのターミナルから,SSH接続します。初期PWは raspberry です。
$ ssh pi@raspberrypi.local
システムをアップデートします。インターネット接続ができていない場合は,上記のインターネット共有の設定を確認してください。
$ sudo apt update
$ sudo apt upgrade -y
Pythonライブラリをインストールします。制御系設計用のライブラリやJupyterLabをインストールします。PythonやNumpy,Matplotlib,GPIO用のライブラリなどの基本的なものは標準でインストールされています。ただし,Numpyはアンインストールして入れ直します。
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libopenblas-dev
$ sudo apt remove python3-numpy
$ sudo pip3 install control
$ sudo pip3 install slycot
$ sudo pip3 install sympy
$ sudo pip3 install jupyterlab
JupyterLabの設定をします。以下のコマンドを実行します。
$ jupyter lab --generate-config
$ vi ~/.jupyter/jupyter_lab_config.py
そして,該当箇所を以下のように変更します.起動時にブラウザが起動しないようにする設定やパスワードの設定をします.パスワードは control です.
c.ExtensionApp.open_browser = False
c.ServerApp.ip = '*'
c.ServerApp.password = 'sha1:f11c457757ec:03959a3edadc01be08a48bfcd34d2b0ee18a5963'
control -->
sha1:f11c457757ec:03959a3edadc01be08a48bfcd34d2b0ee18a5963
JupyterLabの起動
PCからRaspberryPiにSSH接続し,つぎのコマンドを実行してJupyterLabを起動します。
$ jupyter lab
バックグラウンドで起動する場合は,以下のようにします。
nohup jupyter lab &
RaspberryPi 上のJupyterLabにアクセスする
PCのブラウザからRaspberryPi 上のJupyterLabにアクセスします。
http://raspberrypi.local:8888/lab
接続先は,ターミナルに表示されています。ただし,localhost の部分を raspberrypi.local に変更してください。nohup の場合は,nohup.outの中をみます。

パスワードを聞かれたら,control を入力します。
動作が遅い時もありますが,お茶でも飲みながらのんびり待ちましょう。ノートブックを作成し,サンプルコードを実行してみましょう。
ひとまず,制御工学の勉強ができる環境が整いました.Pythonで制御工学を学ぶには,拙書「Pythonによる制御工学入門」がおすすめです.
このあと,DCモータとエンコーダをRaspberryPiのGPIOピンに接続して,PythonでDCモータを制御することに挑戦します.
pigpioライブラリを利用する
$ sudo systemctl enable pigpiod
$ sudo systemctl start pigpiod