Raspberry Pi Zero 2を使ってみる その2(カメラ、Thonny、Node-RED)
はじめに
今回はRaspberry Pi Zero 2にカメラを取り付けてみました。
少し古い書籍を読みながら試していたときは、コマンドを入力してもエラーが出て撮影できないことがありました。苦戦していた記憶があるのですが、今回はすんなり使えました。
Node-REDを起動して、別のPCでエディタにアクセスして作業しています。かなり快適になりました。Zero 2でブラウザを開くと、動作が遅いんですよね...
▼以前の記事はこちら
ヒートシンクの取り付け
効果があるのかどうかは分からないのですが、ヒートシンクを取り付けてみました。
▼こちらを購入してみました。
▼他にもいろいろ取り付けた様子
カメラの設定・撮影
カメラの種類
カメラは2種類購入してみました。
▼一つめは小型カメラです。
もう一つ、暗視カメラを購入しました。送料を無料にしようとすると買ってしまいますよね...
▼こちらを購入しました。
https://www.digikey.jp/ja/products/detail/seeed-technology-co-ltd/114992264/12396940
▼Seeed Studioでの販売ページはこちら
▼これと同じタイプかな?と思います。
Raspberry Pi Zero系は、カメラの端子の幅が狭いです。他のカメラを使うときは、専用のケーブルが必要です。
▼私はこちらを購入したのですが、短いので取り付けにくいような気がします。
▼長めのケーブルも販売されています。
Arducam Raspberry Pi Zero用カメラケーブルセット 1.5インチ 2.8インチ 5.9インチ リボン フレックス 延長...
▼部屋を暗くしてスマートフォンのカメラで撮影すると、赤く光っていました。赤外線LEDが2つあります。
カメラの有効化
Raspberry Piのデスクトップ環境をインストールしていると、Raspberry Pi用の設定画面があります。そこからI2CやSPI、シリアルポートなどを有効化できます。
しかし、私は以前の記事で別のデスクトップ環境をインストールしたので、設定画面がありません。コマンドでカメラを有効化します。
▼こちらの記事が参考になりました。
https://rb-station.com/blogs/article/raspberry-pi-i2c-activation
raspi-configコマンドで、ソフトウェアの設定画面が表示されます。
▼root権限で実行する必要がある場合は、sudoをつけて実行してみてください。
▼Interface Optionsを選択します。
▼Legacy Cameraの選択肢を選んで、有効化します。
コマンドで撮影
公式のGetting Startedのページにカメラの使い方が書かれていました。raspistillやraspividで撮影できます。
▼こちらのページです。
https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/0
▼以下のコマンドで撮影できます。
raspistill -o nodered.jpg
▼他のコマンドはこちらに書かれているようです。
https://www.raspberrypi.org/app/uploads/2013/07/RaspiCam-Documentation.pdf
▼こちらの記事も参考になりました。
https://igarashi-systems.com/sample/translation/raspberry-pi/usage/raspistill.html
▼小型カメラではにわを撮影してみました。
暗視カメラでも撮影してみました。
▼明るい状態で撮影した写真がこちら。若干紫がかっています。
▼部屋を暗くして撮影するとこんな感じ。ちょっとホラー...
Pythonのプログラムで撮影
公式のGetting StartedのページにPythonでの撮影方法も書かれていたので試してみました。
▼こちらのページです。
https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/4
デスクトップ環境で使えるテキストエディタが何も入っていなかったので、今回はPython用のThonnyをインストールしました。
▼Thonnyのページはこちら
▼以下のコマンドでインストールします。
sudo apt install thonny
▼DevelopmentにThonnyが追加されました。
▼起動できました!
▼シンプルにしたプログラムがこちら。<ユーザー名>は変更してください。
import picamera
camera = picamera.PiCamera()
camera.resolution = (800, 600)
camera.start_preview()
camera.capture('/home/<ユーザー名>/python.jpg')
camera.stop_preview()
▼撮影できました!
Node-REDでRaspberry Pi Zero 2の操作
起動時にNode-REDを起動する
Node-RED MCUの記事でも触れていたのですが、Raspberry Piの起動時にNode-REDを起動させることができます。
▼「起動時に自動起動する」の項目に書かれています。
https://nodered.jp/docs/getting-started/raspberrypi
▼自動起動を設定するためのコマンドはこちら
sudo systemctl enable nodered.service
▼やっぱり自動起動させたくないときのコマンドはこちら
sudo systemctl disable nodered.service
▼以前の記事はこちら
別端末からエディタにアクセス
Raspberry Pi Zero 2で起動しているNode-REDに、WindowsのPCからアクセスします。自動起動と合わせると、Zero 2に電源を入れたらアクセスできるようになります。
http://<IPアドレス>:1880でアクセスするので、IPアドレスを確認します。
▼「エディタを開く」の項目に書かれています。
https://nodered.jp/docs/getting-started/raspberrypi
▼以下のコマンドでIPアドレスを確認できます。
hostname -I
▼こちらのコマンドでは他の情報も表示されます。
ip a
rebootとshutdown
execノードでrebootやshutdownを実行してもいいのですが、ノードがあったので使ってみました。
▼execノードについては、以前の記事でも使いました。
▼こちらのノードをインストールしました。
https://flows.nodered.org/node/node-red-contrib-rpi-shutdown
▼右のメニューの、パレットの管理からノードを追加できます。
▼injectノードで実行すると、rebootしたり、shutdownしたりできます。
▼ソースコードを見てみると、メッセージが届いたときにchild_processでコマンドを実行するようになっています。シンプルなノードですね。
https://github.com/pokiiio/node-red-contrib-rpi-shutdown/tree/master
フォルダ内のファイルを確認
execノードでdirコマンドを実行してみました。
▼Picturesフォルダのファイルを確認するフローはこちら
▼debugノードを見ると、空白や改行文字で区切られていることが分かります。
▼splitノードで、空白や改行文字で分割してみました。
▼ファイルごとに分割されています。
撮影して画像を送信する
execノードでコマンドを実行できるということは、撮影もできるということです。
▼raspistillコマンドを実行するフローがこちら
撮影した写真を、WindowsのPCでも起動しているNode-REDに、HTTP通信で送信してみます。
httpノードを使った、ローカルファイルを返すフローがクックブックにありました。
▼こちらです
https://cookbook.nodered.jp/http/serve-a-local-file
画像を送受信する場合のファイル形式は、バイナリバッファにしています。
Raspberry Pi Zero 2側では、http in/outノードと、read fileノードを使っています。
▼Zero 2側のフローはこちら
このフローの場合、http://<IPアドレス>:1880/pictureにアクセスすると、画像がダウンロードされます。
▼出力形式はバイナリバッファです。
Windows側では、http requestノードと、write fileノードを使っています。
▼Windows側のフローはこちら。送信できました!
▼先程のURLを指定して、出力形式はバイナリバッファにしています。
フロー上に画像が表示されていますが、画像を扱うノードをインストールして使っています。
▼node-red-contrib-image-toolsノードです。
https://flows.nodered.org/node/node-red-contrib-image-tools?utm_source=pocket_mylist
▼こちらの記事で紹介されていました。
最後に
書いてみるとNode-REDの内容が多くなりました。このRaspberry Pi Zero 2をデバイスにまとめると、Node-REDを持ち歩いているようになりそうですね。
IPアドレスが分かるとNode-REDにアクセスできるのは便利な反面、コマンドを自由に実行できてしまいます。セキュリティ的には危ないですね。ログインするときにパスワードを入力するなどの対策が必要になりそうです。
カメラは簡単に使えました。取り替えも簡単なので、様々な種類のカメラを試すことができそうです。