LoginSignup
0
0

More than 1 year has passed since last update.

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

Posted at

はじめに

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

となっており
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

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

image.png

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

image.png

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

image.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

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

待ちます待ちます。 5分以上??(´;ω;`)
image.png

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

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

image.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デスクトップのブラウザをは使ってはいけない。
 他のマシンからブラウジングしましょう。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0