見出し画像

未知の領域への第一歩:ついに手に入れたRaspberry Piの始まり

はじめに

三年前から始めたnote.comでの記事つくり。自己紹介の記事で、Raspberry Piについて言及していました。

私の経歴をご覧いただきお分かりになるでしょうか。C言語を得意としながら、unixはほとんど手を染めていません。このため、Raspberry Piには少しコンプレックスがあります。

記事中で追記の通り、その後UnixはChromeBook購入後、環境構築をする中で少しずつ慣れてきました。そして今回、さまざまなご縁を感じながら、ついにとうとうRaspberry Piを手にしました。

今回はスタートラインに立てた喜びと、実際に走り始めるまでの顛末を読み物としてまとめることにしました。
たぶん私のたどった道は多くの人が躓いていると思うし、またそれぞれ様々な方法で乗り越えたりあきらめたりしていると思います。また、日々進化するモジュールを複数扱っていると、それらの組み合わせは膨大になり、同じ道をたどれたかどうかも分かりません。なので、読み物程度に流し読みしていただければ幸いです。

使う目的その1 MQTTブローカーを使いたい

SALZmini2022を元にして通信プロトコルをIoTでよく使われているMQTTを使って行いたいと思いました。MQTTを使うためには、MQTTbrokerというものを用意する必要があります。

ちょっとした実験を行う程度であれば、無料で使えるサービスもあります。
私はBeebotteというサービスを見つけ、試しています。

インターネット上で使えるので、離れた場所からあれこれできるのはとても便利です。ですが、通信量に制限があるため、自在に使えるものではなさそうです。

通信量の制限によって、発想の自由が奪われるのは避けたいと思ったので、24時間連続稼働できる小型PCを探すことにしました。Raspberry Piが24時間稼働できるものかは正直わかっていません。でも試すならこれかなと思いました。

使う目的その2 Node-RED-MCUを使ってみたい

もう一つ、試してみたい事。それは、Node-RED-MCUを使うことでした。イベントで堺のものづくり工房Open Creation Lab.との出会いがありました。

実はこちら、Node-RED-MCUについての本を執筆されるほどのオーソリティで、Node-RED-MCUを用いた制作を行われています。

はじめてのNode-RED MCU Edition
ビジュアルプログラミングでマイコンを動かそう!

https://www.kohgakusha.co.jp/books/detail/978-4-7775-2249-1

最初は、SALZ mini MQTTを作るにあたり、マイコン部分はPlatform.ioで作り、PCやスマホからアクセスできるコントロール部をNord-Redのdashboard機能を用いる予定でした。Node-REDをインストールするあたりまでは、結構すんなりいきます。
ならば、Node-RED-MCUを動かすこともできるのでは?
軽く考えていました。

Raspberry Piを手に取るまで

購入するにあたり、ネット情報をよく読み後悔しない買い方をしようと思いました。
そもそも、始めるにあたり、何が必要かもわかりません。
Raspberry Pi本体、SDメモリぐらいは分かりますが、ケースはいるのか?キーボード、マウスはいるの?モニタはどうする?などと考えていくと困ってしまいます。

Raspberry Piを発注

最初につまづきたくなかったので、スターターキットを購入することにしました。

共立プロダクツ
RASPi4-RGL8GB [RaspberryPi4 モデルB 8GB スターターセット レギュラー]

https://www.yodobashi.com/product/100000001005732723/

●セット内容・シングルボードコンピュータ ラズベリーパイ4 モデルB 8GB / Raspberry Pi OS インストール済みSD付(Ver.2020-05-27) / RASPi4-SDST8GB・Raspberry Piケース Official for Pi 4 B+ 赤/白 / RPI4-OFCR/W・MicroHDMI Cable / 1m・ACアダプター 5.1V/3.0A USB Type-Cコネクタ出力

到着後も、取り掛かる気持ちが乗らずしばらく寝かせていました。

ようやく重い腰を上げ取り掛かる

進めるところまでやってみることにしました。
まず、手持ちのPCにRaspberry Pi Imagerというソフトをインストールします。

インストールするOSの種類、初期設定を行い、SDメモリに書き込みます。20分ぐらい放っておけば終了します。

モニタ、キーボード、マウスをつなげば良いはずですが、意外とモニタ、キーボード、マウスってないものですね。モニタはHDMIでつながるのですが、裏に回って配線をあれこれするのが面倒です。キーボード、マウスも無線なので、有線のものを探してこなければ、と思うとまた腰が重たくなります。

後で知ったことですが、うちのキーボード、マウスは無線ですが、USBのレシーバーを使ってやり取りするタイプだったので、問題なく認識できました。USBハブにいくつかレシーバーを挿していたので、そのままUSBハブをRaspberry Piに挿し込むことで使えるようになりました。

結局この時は家のテレビに映し、壊れたキーボード、マウスを繋げました。
画面はトリミングされ、端が見えません。壊れたキーボードから、謎の文字がどんどん打ち込まれます。。。

この日はこれであきらめました。
ともかくRaspberry Piに触れた喜びでいっぱいでした。

2回目の挑戦

今度はPCモニタに接続し、正常に使えるキーボード、マウスをつないでみました。
コマンドプロンプトが表示されています。

sudo raspi-config

設定画面が開きました。
まずしたいことは別のPCからRaspberry Piを覗き見ることができるようにすることです。
sshコマンドを使えば、簡単に覗き見ることができるようです。
LAN接続して、sshの設定をし、

hostname -I

でIPアドレスを確認し、別PCからsshで接続します。

成功!

これで、Raspberry Piに直接モニタ、キーボード、マウスを繋がなくてもよくなりました。

今度はVNCに挑戦

VNCを使えば、コマンドだけでなく、GUIの画面を別のPCから見ることができます。似たようなサービスは使ったことありますが、今までVNCを使ったことがありません。情報はたくさんありますので、NVC Viewerをインストールし、接続を試みます。

最初は成功していたGUIの画面がどこをどういじったか全く出なくなりました。しかも、あまり事例がないみたいで、ネットで調べてもズバリの情報が出てきません。
諦めが肝心です。

SDメモリを抜き取り、PCに挿し、Raspberry Pi Imagerを立ち上げました。

やっぱり実績のあるの32ビットOSでないとダメか。。。

最初試したのは64ビットOSでした。やっぱり実績のあるの32ビットOSでないとダメかと思い、進めてみることにしました。
すると今度は、何か違うメッセージが出てsshが効かなくなりました。
こちらはなんとなく感づいていましたが、セキュリティが正しく働いていることが原因でした。

ssh-keygen -R raspberrypi.local

で、認証のための鍵を壊し、作り直せばよいようでした。
他にも2、3エラーが出ていましたが、結果的にはOKになりましたが、なぜうまくいったのかは分かりません。
32ビットOSだからうまく行ったということはないと思います。

sshは繋がるようになったのですが、VNCは相変わらずうまく接続できません。

こんな感じのエラーが発生します。

訳すと:
選択したセキュリティ設定でVNC Serverに接続できません。VNC Server を RealVNC の最新バージョンにアップグレードするか、暗号化レベルを弱くしてください。

かなり親切なメッセージだと思うのですが、私には何をどうすればよいのか分かりません。
悩むより動いた方が良いと思い、

SDメモリを抜き取り、PCに挿し、Raspberry Pi Imagerを立ち上げました。

32ビットOSを再度焼き直し、sshでの接続も無事完了しました

実はここまでのところの操作をメモ書きしていました。
そのメモを見直していると、ほとんどおまじないのようなコマンド群を見つけました。

sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo apt clean
sudo reboot

ラズパイのUpdate、Upgradeを行うようです。
これらを実行した後、VNCを試してみると。。。

渋い釣り人の壁紙が出てきました。

あまりの嬉しさにスクリーンショットを撮るのを忘れていました。この画像は後から壁紙を持ってきました。

OSをアップデートして、エラーメッセージの「VNC Server を RealVNC の最新バージョンにアップグレードする」を解消したと思われます。うまく行った後に合点がいきました。

ここからはどんどん進みます。
Node-REDをセットアップし、Node-RED-MCUをセットアップしました。

Node-RED-MCUの動作確認をしてみます。AtomMatrixをつないでみます。
USBの認識は/dev/ttyUSB0としてOKです。
サンプルスクリプトを読み込ませ、「MCU」タブ「Configuration」で「Add config...」

 ESP32|Espessif
 esp32/m5atom_matrix
 /dev/ttyUSB0
で「Build」してみましたがエラーになってしまいます。

(略)
"python" has been detected
Adding ESP-IDF tools to PATH...
WARNING: directory for tool xtensa-esp32-elf version esp-2021r2-patch5-8.4.0 is present, but tool was not found
ERROR: tool xtensa-esp32-elf has no installed versions. Please run '/home/xxxx/esp32/esp-idf/install.sh' to install it.
(略)

このあたりから迷走し始めました。
ネットでヒットした対策を片っ端から試してみました。
そもそもUnixをきちんと理解できていない状態で、適当にあれこれやるので、うまく行く訳がありません。
しばらくもがいた後、あきらめることにしました。

SDメモリを抜き取り、PCに挿し、Raspberry Pi Imagerを立ち上げました。

32ビットOSを再度焼き直し、ssh、VNCでの接続も無事完了しました

少しずつレベルが上がってきています。
Node-REDまではうまく行っている感じがします。

問題はNode-RED-MCUのセットアップです。
Node-RED-MCUを使うためにはModdable SDKとESP-IDFのインストールが必要なのですが、ESP-IDFの設定がうまく行っていない感じがします。環境変数のセットとかでしょうか。。。

今回はNode-RED-MCUのセットアップにxs-devコマンドを使ってみます。

xs-devコマンドはModdable SDKの開発環境構築を自動化するためのツールですが、Windowsでの情報がなかったため、私には縁のないものと思っていました。

でもRaspberry Piだったらうまく行くかもしれません。
期待を込めてやってみることにしました。

xs-devコマンドを使うためには、事前にNode.jsとnpmのインストールが必要です。これらを行い、xs-devコマンドにチャレンジしました。

が、結果はNG。

このあたりで、半ばあきらめモードになってきました。
Node-REDとMQTTブローカーができればそれでいいのでは?と思うようになってきました。

こんな時頼れるのが、近くの知り合いです。

Open Creation Lab.さんに相談しました

すると、すぐに返事がきました。先日、イベントでラズパイ+Node-RED-MCUを複数台セットアップされたとのことでした。
アドバイスは、

ラズパイでしたら、下記の組み合わせでスンナリ入ります。
Raspberry pi os:bullseye x64
nodejs: 18.x
ここまで入れてmoddable とESP-IDFのインストールはxs-devにおまかせするのが楽です。
次にnode-red入れて、node-red-mcu入れて、mcuノード入れると使えるようになります。

というものでした。
このアドバイスを頂き、まず大切なことを知りました。

ソフトウェアのバージョンを意識して合わせないとダメなんだ。

ラズパイのOSは何も考えず、最新版(bookworm)をインストールしていました。
64ビットか32ビットを気にしておけばそれでよいと思っていました。

node.jsも同様です。確認してみると、20.Xが入っていました。

気持ちを強く持ち、再チャレンジします。

ついにとうとううまくできました

以下の手順でうまくいきました。

1.Raspberry Pi Imagerを使って、Raspberry Pi OS:Bullseye x64をSDメモリに焼きこむ。

OSの選択が深めなので気を付ける。

Raspberry Pi OS (other)を選ぶ
Raspberry Pi OS (Legacy,64-bit)を選ぶ(LiteやFullに注意)

2.sshを使ってアクセスする。

必要に応じて、ssh-keygen -R (ラズパイ名).localを行い、鍵をリセットする。

3.ラズパイのUpdate、Upgradeを行う。20分程度待つ。

sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo apt clean
sudo reboot

4.nodejs:18.xのインストール

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

実はこのコマンドにたどり着くまでに、数回こけています。

5.バージョンを確認する

node -v
	v18.17.1

6.xs-devのインストールを行い、実行する 最後に再起動を行う

sudo npm install -g xs-dev
sudo xs-dev setup --target-branch public
sudo reboot

7.VNCで確認する。

壁紙の夕焼けがまた沁み入ります
sudo xs-dev setup --device lin
xs-dev run --example helloworld ←確認コマンド
	エラー
xs-dev setup
xs-dev run --example helloworld ←確認コマンド
	動いた!

このあたり、なぜなのかわ分かりません。でも動いたんです。この事実を大切にしたいです。

8.Node-REDのインストール

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

9.Node-REDを起動し、「Manage Pallet」-「Install」タブで「mcu」を検索

@moddable-node-red/mcu
@ralphwetzel/node-red-mcu-plugin
を追加

10.Node-REDを再立ち上げる

ふう。

Buildして。。。
Done

どなたかが書かれていましたが、「Done」のメッセージが沁みます。よかった。よかった。

さいごに

このようにして、ようやく私はNode-RED-MCUの環境を手に入れました。WindowsやChromebookなど、いくつかの環境にNode-REDを入れてみたのですが、そもそもNode-REDの勉強がこれからなのと、Node-RED-MCUにたどり着かなかったために、中途半端な状態で終わっていました。

今回の学びポイントは「ソフトウェアのバージョンを意識して合わせないとダメなんだ。」ということに尽きます。
インストール時にはバージョン指定できるかの確認。また、インストール後は必ずバージョンの確認が必要です。
この感覚は私が昔Unixを触っていた90年代頃とさほど変わっていませんでした。

どれからもソフトウェアはどんどん良くなっていくため、インストール手順は変わっていくことでしょう。
でも大事なことは、手順ではなく「行き詰ったときに相談できる人」とのつながりを持つということだと思います。

はじめてのRaspberry Pi。SDメモリにOSが入れられるので、簡単に入れ替えや再インストールができてしまいます。
また、スタンドアローンで使用するというよりも、LAN上でリモート接続して使用できる点も素晴らしい。
今のところは取り掛かれていませんが、GPIOピンがあるので、電子工作しやすいのも素晴らしい点だと思います。
多くの人が魅せられていることも理解できました。

新しいデバイスを手に入れて、これからさらにできることの可能性が広がりました。

最後までお読みいただきありがとうございました。

#RaspberryPi #ラズパイ #NodeRed #NodeRedMCU #MQTT #ssh #VNC #nodejs #bullseye #xsdev #OpenCreationLab #奮闘記 #読み物

いいなと思ったら応援しよう!