IoT最強プラットフォームを目指して、RaspberryPi3にopenFrameworksをインストールして、ofxZmqをWindow(openGL)無しでも動くようにする(その1)
(編集中)
raspberry Piは安くて早くて、arduinoと違ってネットワークに簡単に繋がる利点があります。
また、ネットワークはzeroMQを使えば、高速・安定・簡単に書けることも覚えてしまいました。
さらに、openFrameworksは様々な用途のライブラリaddonをいろいろな人が開発していて、様々な用途に便利に使えます。
そこで、raspberry Piの上のopenFrameworksでzeroMQが使える環境を整えておきたいと思います。
デバイス制御などの用途では、GUI Windowがあることが却ってネックになってしまうことがあるので、
サーバー向けにGUI無しでも動かせるようにしておきます。
1. 最新のRaspbian(jessie)を普通にインストールする.
2. openFrameworksのソースをダウンロードしてインストールする.
このページを参考にします。
raspberry pi | openFrameworks
ARMv6版とARMv7版が選択肢にありますが、Raspbianではv6、Armlinuxではv7を選ぶとよいようです。
3. zeromqのcpp bindingsをダウンロードして/usr/includeにコピー
http://zeromq.org/bindings:cpp
> cd /usr/include/
> sudo wget https://raw.githubusercontent.com/zeromq/cppzmq/master/zmq.hpp
4. 作者に感謝しながら、ofxZmqをダウンロード
cd /home/pi/openFrameworks/addons
wget --no-check-certificate https://github.com/satoruhiga/ofxZmq/archive/master.tar.gz
tar xvzf master.tar.gz
mv ofxZmq-master ofxZmq
rm master.tar.gz
6. 空の新規プロジェクトを作る
RaspberryPiでは、残念ながらプロジェクトジェネレータを使えないそうなので、ファイルコピーで空のプロジェクトを用意します。
cp -R /home/pi/openFrameworks/examples/empty/emptyExample /home/pi/openFrameworks/apps/myApps/myRpiApp
cd /home/pi/openFrameworks/apps/myApps/myRpiApp
make
make run
7. ofxZmqをプロジェクトに追加するためaddons.makeを編集。
> cd ~/openFrameworks/apps/myApps/myRpiApp
> nano addons.makeofxZmq
8. sodiumをリンクするようにconfig.makeを編集
PROJECT_LDFLAGSの行を探して、コメントアウトを解除。
PROJECT_LDFLAGS=-Wl,-rpath=./libs -lsodium
9. ofxZmqのexampleのソースコードをコピーして持ってくる
cd ~/openFrameworks/apps/myApps/myRpiApp/src
cp /home/pi/openFrameworks/addons/ofxZmq/example/src/testApp.cpp ./
cp /home/pi/openFrameworks/addons/ofxZmq/example/src/testApp.h ./
main.cppを次のように編集します。
#include "ofMain.h" //define _NO_WINDOW #ifdef _NO_WINDOW #include "ofAppNoWindow.h" #endif // _NO_WINDOW #include "testApp.h" int main(int argc, char* argv[]) { #ifndef _NO_WINDOW ofSetupOpenGL(1024, 768, OF_WINDOW); #else ofAppNoWindow window; ofSetupOpenGL(window, 0, 0, OF_WINDOW); #endif ofRunApp(new testApp()); ruturn 0; }
もしくは、
ofSetFramerate(0);
をしておく。
10. platform.hppにZMQ_USE_EPOLLの定義を追加
nano ~/openFrameworks/addons/ofxZmq/libs/zmq/src/platform.hpp
#define ZMQ_USE_EPOLL
#define ZMQ_HAVE_UIO 1ZMQ_HAVE_UIOはstruct iovecが多重定義になるのを防ぐのに必要だとのこと。
コンパイルを通すために適当に立てたフラグなので、環境に合わせてちゃんといろいろ設定しないとダメかもしれない。[2]を参考に。要確認。
11. makeして実行
> make
> make run
GUIなしにすると、キー入力も拾ってもらえませんので、testApp.cppを適当に書き換える必要があります。
これで、IoT最強に成れるのではないだろうか!
[1] osdevlab.blogspot.jp
[2] github.com
[3] qiita.com