PimoroniからPi zeroを取り寄せたので
今回はOSがインストールできていることを前提として、Pi zeroがいったいどのくらいの実力があるか探って見ました。使ったセンサーは,WebCameraと以前WROOM-02の記事を書いた時に取り上げたFLIR Lepton赤外線カメラです。尚スピード的に不利になるので日本語環境はインストールしていません。
実行はエネループ充電池使用。
プログラムを作っている時は別として、今回の実験は全てパナソニックモバイル電源2,900mAhを使ってみました。少なくても2時間以上問題なく動作します。
Openframeworksをインストールして、いつもの3Dテストを実行。
結構早い!!。これならなんとか使えそう。(3DPrimitivesExampleの実行結果)
開発環境は、使い慣れてきたOpenframeworksを使用。Openframeworksのインストール詳細は、raspberry pi | openFrameworksを参照。最初にRaspberry Pi Configurationを起動して、i2c,spiをON。さらにGPUメモリーを128Kbに設定後、以下のコマンドを実行します。
sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade
cd
wget http://openframeworks.cc/versions/v0.9.3/of_v0.9.3_linuxarmv6l_release.tar.gz
mkdir openFrameworks
tar vxfz of_v0.9.3_linuxarmv6l_release.tar.gz -C openFrameworks --strip-components 1
cd /home/pi/openFrameworks/scripts/linux/debian
sudo ./install_dependencies.sh
make Release -C /home/pi/openFrameworks/libs/openFrameworksCompiled/project
Pi3と比較してビルドにかなり時間がかかるので、気長に終わるのを待ちましょう。ご存知のように高速なグラフィックやサウンド関連のアプリが初心者でもサクサク作れます。
FLIR Lepton公開ソースを使ってサーモグラフィーを作る。
標準のソースをコンパイルすると画像が荒い。
FLIR Leptonサーマルカメラは、メーカーで公開しているソースをコンパイルすると、上記のようなサーモグラフィーが簡単に実現できます。ただし、画像が荒く最低最高温度が表示されないので、面白くないのも事実。このソフトはQt4を使っています。サーモグラフィーの特徴が端的に表れるのは、物体を掴んだ時。手を離すと物体に移った体温が指の形を保ったまま徐々に消えて行くところです。以下FLIR Lepton Hookup Guide - learn.sparkfun.comを参考に以下の手順でインストール。まず配線ですが、この記事通りだとSPI通信がうまくいかないので、下図のようにCSを一つ上にずらすこと(CLKの直右に刺す)。
記事に従って以下のようにインストール&実行(現状の公開ソースは内容が多少変わっている)。sparkfunの記事中で画像が表示されない場合は、センサーを入れ直すような説明があるが、非常に危ない(高額センサー破損の危険)ので絶対実行しないこと。CSの変更で確実に画像が表示されます。
最初にRaspberry Pi Configurationを起動して、SPI,i2cを使える状態にしてから、以下のコマンドを実行。
sudo apt-get install qt4-dev-tools
unzip LeptonModule-master.zip
cd LeptonModule/software/raspberrypi_video
qmake && make
sudo ./raspberrypi_video
さらに解像度を上げる。
Qtに慣れていないので少し苦労しましたが、過去WROOM-02の記事にも書いたように、解像度を2倍に補間すると、かなり詳細に表示できるようになります。ただし、 ディスプレイ接続ではPi zeroの機動性が生かせません。Pi zeroをWebサーバーにして動画として配信できれば、iPhoneでもMacでもPi3でもブラウザで確認できるのに......。
画像解像度を上げるには、修正したソース LeptonThread.cpp をダウンロード(急いで作ったので効率的に書き換えるのも面白そう。まだまだスピードを上げる余地あり)。上記raspberry_videoディレクトリの中にあるLeptonThread.cppに重ね書きしてから、qmake && make 、sudo ./raspberry.videoで再コンパイル&実行。
Openframeworksを使ってサーモグラフィー画像をJpeg配信してみる。
ちょうど1年くらい前に紹介したofxHTTPと上記ライブラリを利用して、Jpeg配信できました。これだとPi zeroの機動性が存分に発揮されます。おまけで、画像中の最高・最低温度も表示させました。以前作ったiPhone+WROOM-02の環境に比べて大幅にスピードが上がる上にソフト作成はPi zero側だけでOKなので、かなりお手軽です。iPhoneのテザリングを有効にして、Pi zero側のWifi接続先をiPhoneに設定すれば、外出OK。
単なるカメラ画像ではなく、Openframeworksで加工した動く画像をどのようにしてMJPEG配信させるか疑問だったのですが、ofFboを使えば簡単に配信できることが分かりました。今回は試しにLEPTONの動画と、温度を確認するための文字を合成しています(画像の拡大も同時に実行している)。これを応用すれば、メモリーの許す限りOpenframeworksで作った魅力的な画像をほとんどすべてMJPEG配信できることになります。スピードの速いPi3とクラウドパイを組み合わせると面白そう。ofxHTTPとofFBOを利用したMJPEG配信については、次に説明する私の作った自作ソースダウンロードファイル中にあるofApp.cppを見れば確認できます。簡単。
左のディスプレイはPi zero直結(配信画像とイーサネッット経由接続数を表示)。右はiMac中央はiPhone上のサファリでPi zeroの配信している画像を表示している。結構刺激的です。単独で画像を表示しながら同時に画像配信をしていることを考慮すると、この種のlinuxボードとしては納得のスピードです。しかもソフト中ではSPI通信で受け取ったグレースケールデータの解像度を2倍に補間。そして4倍に拡大して表示。さらにカラー変換。i2c通信で取り出したセンサーチップ温度から画像中の最高最低温度の計算結果をリアルタイムに表示させ、複雑なMJPEG配信までさせるという頭がこんがらかってしまうような処理がPi zero単独でできてしまってます。
実行方法ですが、OpenframeworksへofxHTTPライブラリ(addon)の追加が必要です。
GitHub - bakercp/ofxHTTP: A suite of HTTP tools, including clients and servers.を参考に、
Openframeworksのディレクトリに入って
cd addons
git clone https://github.com/bakercp/ofxIO
git clone https://github.com/bakercp/ofxMediaType
git clone https://github.com/bakercp/ofxSSLManager
git clone https://github.com/bakercp/ofxTaskQueue
git clone https://github.com/bakercp/ofxNetworkUtils
git clone https://github.com/bakercp/ofxJSON
git clone https://github.com/bakercp/ofxHTTP
さらに私の自作ソース LEPTON.zip をダウンロードして解凍したら、フォルダごと
cd ../apps/myApps
の中に入れて、
cd LEPTON
make
make run
make に30分以上かかるのでここでも気長に待ちましょう。make runは実行コマンド。binフォルダの中に実行ファイルができているので、X Window からダブルクリックしてもプログラム実行可能。一度makeすれば、ソースの修正等、再makeはさほど時間はかかりません。
Pi版Openframeworksの良いところは、本来持っているスピードと、ssh接続した端末からでもPi zero本体の画像アプリを実行(Pi zero側でX Windowを起動しなくても良い)できることです。これは上記画像で確認できますが、CPUに負担が掛らないので、非力なPi zeroには断然有利です。方法があるのでしょうが、Qtで作ったアプリはXwindow上からしか実行できません。
ofxHTTPを使ってWeb上でPiのIOも操作できるみたいですが、また今度。
最後に感想
すごいですね、Pi zero。安い上に開発環境もスピードもEdisonやWroom-02(ESP8266)を完全に上回っています。専用のWifiとUSB拡張ボードをつければ、IOT制御では相当な実力ですぞ。