RasPi2とaitendoの液晶M022C9328SPIで動画を再生
こちらの記事に書いたaitendoの液晶、M022C9328SPI で、動画を再生してみた。
取り付けた液晶に映像を出力するために、fbcpを使った。再生にはomxplayerを使った。結構なめらかに再生される。
fbcp でフレームバッファ出力を /dev/fb1 に出す
RasPiは、デフォルトではフレームバッファデバイスの /dev/fb0 に映像を出力していて、通常はHDMI端子に繋いだ外部ディスプレイに映像が表示される。 しかしSPIで取り付けた液晶のデバイスは /dev/fb1 となる。デフォルトでは、こちらには映像が出ない。 そこで、fb0 のデータを fb1 にコピーするツール、fbcp を使う。cmakeを使ってコンパイルする。 下記のページを参考にした。 sioslab.blog.fc2.com
(1) install cmake
コンパイルにcmakeを使うので、入れる。
$ sudo apt-get install cmake
(2) git clone
ソースを頂く。
$ git clone https://github.com/tasanakorn/rpi-fbcp $ cd rpi-fbcp
(3) build
ビルドする。
$ mkdir build $ cd build $ cmake .. $ make
(4) install
インストール。
$ sudo install fbcp /usr/local/bin/fbcp
(5) 実行
$ fbcp &
omxplayerで、サンプル動画を再生する
画面解像度に合うMP4のサンプル動画をWebで拾って試した。
$ omxplayer samplevideo.mp4
こんな感じになる。
小さな画面で、綺麗にぬるぬる動いてくれて嬉しい。
RasPi2とaitendoの2.2インチ液晶M022C9328SPIを繋ぐ
aitendoで1,750円で売っている2.2インチ、解像度 240x320 の液晶、M022C9328SPI を RasPi2に繋いで、コンソールや画像を出力してみた。
結線など
ILI9328 のコントローラチップが載っているので、端子を半田付けして RasPiと結線するだけで動いた。 結線や設定は、こちらのサイトを参考にした。 albertlabo.wiki.fc2.com
fbtftモジュールの設定
(1) fbtftモジュールをロードするよう設定
/etc/modules-load.d/fbtft.conf に以下を追加
spi-bcm2835 fbtft_device
(2) fbtftモジュールのオプションを設定
/etc/modprobe.d/fbtft.conf に以下を追加
options fbtft_device name=hy28b rotate=90
SPI有効化
Raspbian Jessieでの手順。
(1) raspi-configを起動
$ sudo raspi-config
(2) “5 Interfacing Options” を選択
(3) “P4 SPI” を選択
(4) “Yes” を選択
(5) “OK” を選択
(6) 再起動
$ sudo reboot
コンソールを表示
SSH等で、RasPiにログインして、下記を実行すると、液晶にコンソールが表示される。RasPiにUSBキーボードを繋ぐとログインできる。
$ con2fbmap 1 1
RasPiに Processing を入れたけれど重すぎた
RasPiを使ったインスタレーション的なものを作りたかったので、RasPiに視聴覚表現用プログラミング言語の Processingを入れて試してみた。 結果としては、Raspberry Pi Type B では 1.3フレーム/秒程度の描画しかできず、重くて私の用途には使い物にならなかったので、ボツにするつもり。 X over ssh経由だったので表示負荷も比較的小さかったと思うので、RasPi + Java + 画像処理系言語 ってのがきつかったのかなと思っている。 あとアプリケーションをエクスポートして実行しても、ほぼ描画速度は変わらなかった。またRasPi2でやっても重かった。 ただ、やったことは念のためメモしておく。
Processing は下記のリリースページから最新の 3.3の arm版 (processing-3.3-linux-armv6hf.tgz) をダウンロードした。 github.com
上記のリリースページは、こちらの記事から、辿れた。 makezine.jp
下記のように、ダウンロードして展開・実行すると、Processingの IDEが立ち上がってコードの入力や編集ができ、特に問題なくエディタも動作した。
$ wget https://github.com/processing/processing/releases/download/processing-0257-3.3/processing-3.3-linux-armv6hf.tgz $ tar xzvf processing-3.3-linux-armv6hf.tgz $ cd processing-3.3 $ ./processing
黒字に白文字が右から左にスクロールする下記のサンプルを書いて動かしてみたけど、かなりもっさり。 Windows版 Processing でも試してみたら、30フレームでもぬるぬる動いたのに比べ、RasPiでは1.3フレーム/秒がせいぜいだった。
int x,y; int speed; void setup() { size(640, 480); frameRate(10); background(0); x = 0; y = 30; speed = 2; } void draw() { if(x==0){ x+=400; } x -= speed; background(0); text("text print sample",x,y); }
書き方も何か重いのかもしれないけれど、やはり RasPiは RasPiか。適材適所ということで、Processing は母艦に任せよう。
あと、Processing のテキストやオブジェクトの動かし方に関する処理もメモしておく。
・文字の描画は text関数で行える。 www.d-improvement.jp
・テキストエリアの幅は、textWidth関数で取得できる。
textWidth() \ Language (API) \ Processing 2+
・日本語のフォントを単純に processingで使うと文字化けするけど、下記の手順でフォントのデータを出力しておくと、表示できた。
Processing で日本語を表示する
・オブジェクトを動かす処理はここも参考になった。 www.d-improvement.jp
サーボで動く回転台を作成
上に乗せた物を、サーボモータで回すための台を作成
百均のダイソーで、サーボで回せそうな回転台が置いてないか探していたら、園芸コーナーで植木鉢を動かすためのキャスター付きの台があった。200円で安いけれど、台は鉄製でしっかりしているので工作に流用することにした。
ただそのままだと、回転台を正転・逆転させるたびに、キャスター部分がクルクルと動いて、回転の邪魔になった。そこで、キャスターを回転方向に固定して、セメダインスーパーXを使ってキャスターと鉄の台の角度を固定した。これで問題ない程度に固まってくれた。
更に、サーボモータの回転部分の部品にピンバイスで穴を空けて、園芸用の針金で、鉄の台を固定。
サーボがかさばったので、段ボールでサーボ固定用円盤を作って、中心にサーボモータ本体を固定した。
サーボモータのトルクが案外強かったので、カメラとかプロジェクタとかなら上に置いて動かせるはず。
RasPiで秋月のサーボドライバ基板(AE-PCA9685)を使ってサーボモータを駆動する
360度回転する、こちらのサーボを使用。 GWSサーボ S125-1T/2BB/JRタイプ(360度回転): サーボ 秋月電子通商 電子部品 ネット通販
ドライバには、16チャンネルもある秋月のドライバ、AE-PCA9685を使用。950円。端子の半田付けは必要。 akizukidenshi.com
下記のページがわかりやすく、参考になった。SCL,SDA等の表記を見ながら配線した。 arkouji.cocolog-nifty.com
以下、気づいたことをメモ。
Raspbian (RASPBIAN JESSIE WITH PIXEL, 2017-03-02版) を使ったところ、i2c-tools, python-smbus, git はインストール済だった。
I2Cの有効化は下記の手順でできた。
「sudo raspi-config」を実行
「5 Interfacing Options」を選択
「P5 I2C」を選択
「Would you like the ARM I2C interface to be enabled?」に「Yes」を回答
「The ARM I2C interface is enabled」が出るので、「OK」を押す記事中で紹介されている下記のリポジトリからは直接は Pythonコードをダウンロードできなくなっている。 github.com こちらを見ると、Python のパッケージ管理コマンド pipでインストールできるようになっているとのこと。 ただ、pipを使うとサンプルコードは付いてこないので、ソースからインストールするのがおすすめのようだ。
私が動作確認した手順は下記の通り。
(1) 下記のコードを git cloneする。 github.com 以下のコマンドで cloneできた。
$ git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
(2) インストールする。
$ cd Adafruit_Python_PCA9685 $ sudo python setup.py install
(3) サンプルコードを実行する。 コードを変更しなくても、サーボモータが動いて、動作確認できた。
$ cd examples $ sudo python simpletest.py
動いている所はこんな感じ。
RasPiにWin機からmDNSでアクセスする
Raspberry Pi Type B に Raspbian (RASPBIAN JESSIE WITH PIXEL, 2017-03-02版)をインストールして、DHCPでIPアドレスを取得するように設定した。 母艦にはデスクトップの Windows10 を使い、WiMaxの回線を「インターネット接続の共有」でLANで共有する形にした。 LANケーブルで Win機と RasPi を接続するだけで良いので楽なのだけれど、母艦からRasPiのIPアドレスが一意にわからないため面倒だ。 ちょっと調べると、mDNSという仕組みを使うと、LAN内のマシンにホスト名でアクセスできるようだ。そのために avahi-daemon を RasPi側に設定すると良いらしい。 下記のページが参考になった。私の環境では、最初から avahi-daemon と libnss-mdns は入っていた。 d.hatena.ne.jp
最初、下記のページを見て、Win10で mDNSで他のホストにアクセスできるのかと思った。けれど、これだけやっても、母艦の Winから RasPiのホスト名.local に pingを打っても応答がなかった。どうやらこれは、外からWin機にmDNSでアクセスするための設定であるようだ。よく読むと記事タイトルにもそう書いてあるけど。 moguno.hatenablog.jp
ググったところ、他にも Winから RasPiにアクセスできない人たちは居て、それをやりたい場合は Win側にもサービスが要るらしい。 結局、下記の Appleのプリントサービスツール(約5MB) を入れたら pingが通るようになった。
ダウンロード - Bonjour Print Services (Windows)
上記ツールはこちらに紹介されていた。 stackoverflow.com