Raspberry Pi Zero W(H)のPythonバージョン統一とNode-red の使用法

# はじめに

RaspberryPiの中でパフォーマンスと、省エネ性、コストが一番ベストと思われる
Raspberry Pi Zero W（H)を使いこなすうえで少し、困惑したので備忘録的に記載します。

以前　8/29に投稿した記事で、私はRaspberry Pi OS（Legacy）でDesktopに対応しているものをインストールしました。2022年10月現在クリーンインストールした状態では、下記の通りのバージョンです。

Linuxのバージョン
```
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.103+ #1529 Tue Mar 8 12:19:18 GMT 2022 armv6l GNU/Linux
pi@raspberrypi:~ $ 
```

Raspbian OSのバージョン
```
pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster
```

PインストールされているPython
```
pi@raspberrypi:~ $ python -V
Python 2.7.16
pi@raspberrypi:~ $ python --version
Python 2.7.16
pi@raspberrypi:~ $ python3 -V
Python 3.7.3
pi@raspberrypi:~ $ python3 --version
Python 3.7.3
pi@raspberrypi:~ $ 
```
ターミナルでのデフォルトは　Python 2.7.16
Thonny Python IDEではPython 3.7.3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/10b0ee6a-2ccc-4d45-c31e-5a383b578521.png)

となっており
Python　2.7.16
Pythoon 3.7.3　　の、2つのバージョンがインストールされています。

その結果、Pythonで実行したいプログラムを、参考にしたWEBからの情報をもとに実行しようとするも動いたり、動かなかっり　ごちゃごちゃ状態に。。。
単に私が、バージョンを気にしていなかったからという話もありますが。

（Pythonのバージョンによって書式やライブラリが異なるためです。）
〈ご参考情報〉
https://www.acrovision.jp/career/?p=3146
https://and-engineer.com/articles/YKUFOxQAACgAq_Z-
# Python3のみ実行できる環境に変更

方法は下記WEBを参考にさせていただきました。
https://www.ingenious.jp/articles/howto/raspberry-pi-howto/python-3-change/


インストール直後を調べると、python 2.7とpython 3.7の両方のバージョンがインストールされています。

```
pi@raspberrypi:/usr/bin $ ls -l | grep python
lrwxrwxrwx 1 root root         34  3月  5  2019 arm-linux-gnueabihf-python-config -> arm-linux-gnueabihf-python2-config
lrwxrwxrwx 1 root root         36  3月  5  2019 arm-linux-gnueabihf-python2-config -> arm-linux-gnueabihf-python2.7-config
-rwxr-xr-x 1 root root       2974 10月 11  2019 arm-linux-gnueabihf-python2.7-config
lrwxrwxrwx 1 root root         36  3月 26  2019 arm-linux-gnueabihf-python3-config -> arm-linux-gnueabihf-python3.7-config
lrwxrwxrwx 1 root root         37  1月 23  2021 arm-linux-gnueabihf-python3.7-config -> arm-linux-gnueabihf-python3.7m-config
-rwxr-xr-x 1 root root       3297  1月 23  2021 arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root         37  3月 26  2019 arm-linux-gnueabihf-python3m-config -> arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root         26  3月  8  2019 dh_pypy -> ../share/dh-python/dh_pypy
-rwxr-xr-x 1 root root       1056  3月  5  2019 dh_python2
lrwxrwxrwx 1 root root         29  3月  8  2019 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx 1 root root         23 10月 11  2019 pdb2.7 -> ../lib/python2.7/pdb.py
lrwxrwxrwx 1 root root         23  1月 23  2021 pdb3.7 -> ../lib/python3.7/pdb.py
lrwxrwxrwx 1 root root         31  3月 26  2019 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx 1 root root         26  3月  8  2019 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx 1 root root          7  3月  5  2019 python -> python2
lrwxrwxrwx 1 root root         14  3月  5  2019 python-config -> python2-config
lrwxrwxrwx 1 root root          9  3月  5  2019 python2 -> python2.7
lrwxrwxrwx 1 root root         16  3月  5  2019 python2-config -> python2.7-config
-rwxr-xr-x 1 root root        154 12月 30  2018 python2-pbr
-rwxr-xr-x 1 root root    2984816 10月 11  2019 python2.7
lrwxrwxrwx 1 root root         36 10月 11  2019 python2.7-config -> arm-linux-gnueabihf-python2.7-config
lrwxrwxrwx 1 root root          9  3月 26  2019 python3 -> python3.7
lrwxrwxrwx 1 root root         16  3月 26  2019 python3-config -> python3.7-config
-rwxr-xr-x 2 root root    4275580  1月 23  2021 python3.7
lrwxrwxrwx 1 root root         36  1月 23  2021 python3.7-config -> arm-linux-gnueabihf-python3.7-config
-rwxr-xr-x 2 root root    4275580  1月 23  2021 python3.7m
lrwxrwxrwx 1 root root         37  1月 23  2021 python3.7m-config -> arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root         10  3月 26  2019 python3m -> python3.7m
lrwxrwxrwx 1 root root         17  3月 26  2019 python3m-config -> python3.7m-config
lrwxrwxrwx 1 root root         29  3月  5  2019 pyversions -> ../share/python/pyversions.py
```


上記の実行結果からデフォルトで使用されるPythonは、Python 2.7へのシンボリックリンク（ショートカットのようなもの）になっています。
デフォルトで使用するPythonをPython 3.7に切り替えるには、このシンボリックリンクをPython 3.7へのシンボリックリンクに変更すればよいとのこと。
以下のコマンドを実行し、現在のPythonのシンボリックを削除します。

```
pi@raspberrypi:/usr/bin $ sudo unlink python
pi@raspberrypi:/usr/bin $ python -V
bash: /usr/bin/python: そのようなファイルやディレクトリはありません
```

以下のコマンドを実行し、Python3.7へのシンボリックリンクを作成します。

```
pi@raspberrypi:/usr/bin $ sudo ln -s python3 python
pi@raspberrypi:/usr/bin $
```
Python 3.7へのシンボリックリンクが作成されていることを確認します。
```
pi@raspberrypi:/usr/bin $ ls -l | grep python
lrwxrwxrwx 1 root root         34  3月  5  2019 arm-linux-gnueabihf-python-config -> arm-linux-gnueabihf-python2-config
lrwxrwxrwx 1 root root         36  3月  5  2019 arm-linux-gnueabihf-python2-config -> arm-linux-gnueabihf-python2.7-config
-rwxr-xr-x 1 root root       2974 10月 11  2019 arm-linux-gnueabihf-python2.7-config
lrwxrwxrwx 1 root root         36  3月 26  2019 arm-linux-gnueabihf-python3-config -> arm-linux-gnueabihf-python3.7-config
lrwxrwxrwx 1 root root         37  1月 23  2021 arm-linux-gnueabihf-python3.7-config -> arm-linux-gnueabihf-python3.7m-config
-rwxr-xr-x 1 root root       3297  1月 23  2021 arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root         37  3月 26  2019 arm-linux-gnueabihf-python3m-config -> arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root         26  3月  8  2019 dh_pypy -> ../share/dh-python/dh_pypy
-rwxr-xr-x 1 root root       1056  3月  5  2019 dh_python2
lrwxrwxrwx 1 root root         29  3月  8  2019 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx 1 root root         23 10月 11  2019 pdb2.7 -> ../lib/python2.7/pdb.py
lrwxrwxrwx 1 root root         23  1月 23  2021 pdb3.7 -> ../lib/python3.7/pdb.py
lrwxrwxrwx 1 root root         31  3月 26  2019 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx 1 root root         26  3月  8  2019 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx 1 root root          7 10月 24 12:50 python -> python3
lrwxrwxrwx 1 root root         14  3月  5  2019 python-config -> python2-config
lrwxrwxrwx 1 root root          9  3月  5  2019 python2 -> python2.7
lrwxrwxrwx 1 root root         16  3月  5  2019 python2-config -> python2.7-config
-rwxr-xr-x 1 root root        154 12月 30  2018 python2-pbr
-rwxr-xr-x 1 root root    2984816 10月 11  2019 python2.7
lrwxrwxrwx 1 root root         36 10月 11  2019 python2.7-config -> arm-linux-gnueabihf-python2.7-config
lrwxrwxrwx 1 root root          9  3月 26  2019 python3 -> python3.7
lrwxrwxrwx 1 root root         16  3月 26  2019 python3-config -> python3.7-config
-rwxr-xr-x 2 root root    4275580  1月 23  2021 python3.7
lrwxrwxrwx 1 root root         36  1月 23  2021 python3.7-config -> arm-linux-gnueabihf-python3.7-config
-rwxr-xr-x 2 root root    4275580  1月 23  2021 python3.7m
lrwxrwxrwx 1 root root         37  1月 23  2021 python3.7m-config -> arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root         10  3月 26  2019 python3m -> python3.7m
lrwxrwxrwx 1 root root         17  3月 26  2019 python3m-config -> python3.7m-config
lrwxrwxrwx 1 root root         29  3月  5  2019 pyversions -> ../share/python/pyversions.py
pi@raspberrypi:/usr/bin $
```

デフォルトで使用されるPythonのバージョンがPython 3.7に変更されていることの確認。

```
pi@raspberrypi:/usr/bin $ python --version
Python 3.7.3
pi@raspberrypi:/usr/bin $ python -V
Python 3.7.3
pi@raspberrypi:/usr/bin $ 
```
これでPythonのバージョンは3に統一できました。

こうすることでPython のプログラム書式やライブラリがPython3で統一され、
ごちゃごちゃしていたものが、すっきり　ターミナルでもThonny Python IDEでも安定して動作するようになりました。


# Node redのインストール

https://nodered.jp/docs/getting-started/raspberrypi
を参考にインストールを実行しました。
```
pi@raspberrypi:~ $ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
```
インストール中の画面は下記のような画面となります。
ターミナル上の文字を取ろうと　CTL＋Cを押したらインストールが止まってしまったので画面キャプチャにて。(笑)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/8df4ab9c-1713-e117-ae88-857180f90655.png)

インストール終了すると下記画面となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/92c685cb-053b-3ce4-0bbb-3093b2b40ec4.png)

デスクトップ上では　プログラミングにNode-REDが追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/4a49a00d-0d82-5797-c202-7a91350f3605.png)

メニューオプションMenu -> Programming -> Node-REDを選択することによって、 Raspbian DesktopでNode-REDサービスを起動するターミナルが開きバックグラウンドで、Node-REDが動作します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/c7b5ffc8-e6ba-ac4e-c499-7f20faec4839.png)

この後、Node-REDはブラウザで操作しますので
デスクトップでブラウザをクリックして起動します。　　
（Raspberry Pi Zero W(H)　上では起動しません。）
インストールされてないようですのでchromeをインストールします。

```
pi@raspberrypi:~ $ sudo apt-get install chromium-browser
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  chromium-common chromium-sandbox libjsoncpp1 libminizip1 libre2-5
  libu2f-udev
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  chromium-browser-l10n chromium-codecs-ffmpeg-extra
提案パッケージ:
  webaccounts-chromium-extension unity-chromium-extension adobe-flashplugin
以下のパッケージは「削除」されます:
  chromium
以下のパッケージが新たにインストールされます:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra
アップグレード: 0 個、新規インストール: 3 個、削除: 1 個、保留: 0 個。
124 MB のアーカイブを取得する必要があります。
この操作後に追加で 275 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://archive.raspberrypi.org/debian buster/main armhf chromium-codecs-ffmpeg-extra armhf 92.0.4515.98~buster-rpt2 [1,589 kB]
取得:2 http://archive.raspberrypi.org/debian buster/main armhf chromium-browser armhf 92.0.4515.98~buster-rpt2 [118 MB]
取得:3 http://archive.raspberrypi.org/debian buster/main armhf chromium-browser-l10n all 92.0.4515.98~buster-rpt2 [4,073 kB]
124 MB を 2分 3秒 で取得しました (1,008 kB/s)                                  
(データベースを読み込んでいます ... 現在 98956 個のファイルとディレクトリがインストールされています。)
chromium (90.0.4430.212-1~deb10u1) を削除しています ...
update-alternatives: /usr/bin/x-www-browser (x-www-browser) を提供するために自動モードで /usr/bin/dillo を使います
以前に未選択のパッケージ chromium-codecs-ffmpeg-extra を選択しています。
(データベースを読み込んでいます ... 現在 98925 個のファイルとディレクトリがインストールされています。)
.../chromium-codecs-ffmpeg-extra_92.0.4515.98~buster-rpt2_armhf.deb を展開する準備をしています ...
chromium-codecs-ffmpeg-extra (92.0.4515.98~buster-rpt2) を展開しています...
以前に未選択のパッケージ chromium-browser を選択しています。
.../chromium-browser_92.0.4515.98~buster-rpt2_armhf.deb を展開する準備をしています ...
chromium-browser (92.0.4515.98~buster-rpt2) を展開しています...
以前に未選択のパッケージ chromium-browser-l10n を選択しています。
.../chromium-browser-l10n_92.0.4515.98~buster-rpt2_all.deb を展開する準備をしています ...
chromium-browser-l10n (92.0.4515.98~buster-rpt2) を展開しています...
chromium-codecs-ffmpeg-extra (92.0.4515.98~buster-rpt2) を設定しています ...
chromium-browser (92.0.4515.98~buster-rpt2) を設定しています ...
update-alternatives: /usr/bin/x-www-browser (x-www-browser) を提供するために自動モードで /usr/bin/chromium-browser を使います
update-alternatives: /usr/bin/gnome-www-browser (gnome-www-browser) を提供するために自動モードで /usr/bin/chromium-browser を使います
chromium-browser-l10n (92.0.4515.98~buster-rpt2) を設定しています ...
mime-support (3.62) のトリガを処理しています ...
hicolor-icon-theme (0.17-2) のトリガを処理しています ...
gnome-menus (3.31.4-3) のトリガを処理しています ...
libc-bin (2.28-10+rpt2+rpi1+deb10u1) のトリガを処理しています ...
man-db (2.8.5-2) のトリガを処理しています ...
desktop-file-utils (0.23-4) のトリガを処理しています ...

```

デスクトップから　インターネット　ウェブブラウザを選択
または、デスクトップのインターネットをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/5dc3c949-2be7-4d3c-ee6d-549e21bed7be.png)

待ちます　待ちます、何秒かかるの。。。分単位だな。。
起動したらアクセス先として
http://localhost:1880　を入力してアクセス。

待ちます待ちます。　5分以上？？(´;ω;｀)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/3bb1d942-23ed-8646-e865-241854c91eac.png)


と　Raspberry Pi Zero W(H)では、パフォーマンス的に厳しいので、Raspberry Piデスクトップのブラウザは使ってはいけません。
（CPU使用率を見ると100％　はりつきでした。全く仕事になりません。）

他のマシンからブラウジングしましょう。
Raspberry Pi Zero W(H)のIPアドレスを入力します。
 http://（ip-address）:1880
下記は、パソコンからラズパイへアクセスした、Node-RED画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741340/721f2127-3da9-42d1-e1fc-7788221b0c42.png)

Node-REDのエディタ画面が表示されスムースに編集作業できることが確認できます。

ちなみに

Raspberry Pi Zero W(H)の制限されたメモリ容量のため、 基盤となるNode.jsプロセスに未使用のメモリを早く解放するよう 追加引数とともにNode-REDを起動するのがよいらしく、ターミナル上で下記コマンドで実行するほうが良いとのこと。

node-red-pi --max-old-space-size=256

```
pi@raspberrypi:~ $ node-red-pi --max-old-space-size=256
24 Oct 15:37:14 - [info] 

Welcome to Node-RED
===================

24 Oct 15:37:14 - [info] Node-RED バージョン: v3.0.2
24 Oct 15:37:14 - [info] Node.js  バージョン: v16.18.0
24 Oct 15:37:15 - [info] Linux 5.10.103+ arm LE
24 Oct 15:37:43 - [info] パレットノードのロード
24 Oct 15:38:23 - [info] 設定ファイル: /home/pi/.node-red/settings.js
24 Oct 15:38:23 - [info] コンテキストストア : 'default' [module=memory]
24 Oct 15:38:23 - [info] ユーザディレクトリ : /home/pi/.node-red
24 Oct 15:38:23 - [warn] プロジェクトは無効化されています : editorTheme.projects.enabled=false
24 Oct 15:38:23 - [info] フローファイル     : /home/pi/.node-red/flows.json
24 Oct 15:38:25 - [info] サーバは http://127.0.0.1:1880/ で実行中です
24 Oct 15:38:25 - [warn] 

---------------------------------------------------------------------
フローのクレデンシャルファイルはシステム生成キーで暗号化されています。

システム生成キーを何らかの理由で失った場合、クレデンシャルファイルを
復元することはできません。その場合、ファイルを削除してクレデンシャルを
再入力しなければなりません。

設定ファイル内で 'credentialSecret' オプションを使って独自キーを設定
します。変更を次にデプロイする際、Node-REDは選択したキーを用いてクレ
デンシャルを再暗号化します。 

---------------------------------------------------------------------

24 Oct 15:38:25 - [info] フローを開始します
24 Oct 15:38:25 - [info] フローを開始しました
```

# まとめ
Rasp berry Pi Zero W(H)を　ハードのパフォーマンスと、省エネ性、コストを考え選択したが、ソフトの使いこなしには、結構ノウハウが必要です。

・インストールされているPythonのバージョンが複数あるので注意
・GUI系は非常にプア（CPU貧弱、メモリも少ない）、OSが軽い分しゃあないか。
・Node-RED使えますが、Raspberry Piデスクトップのブラウザをは使ってはいけない。
　他のマシンからブラウジングしましょう。

以上　お役に立つかどうかわかりませんが、備忘まで。