RasPi2とaitendoの2.2インチ液晶M022C9328SPIを繋ぐ

aitendoで1,750円で売っている2.2インチ、解像度 240x320 の液晶、M022C9328SPI を RasPi2に繋いで、コンソールや画像を出力してみた。 f:id:sunasaji:20170529010831j:plain

www.aitendo.com

結線など

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” を選択

f:id:sunasaji:20170529004901p:plain

(3) “P4 SPI” を選択

f:id:sunasaji:20170529005650p:plain

(4) “Yes” を選択

f:id:sunasaji:20170529011507j:plain

(5) “OK” を選択

f:id:sunasaji:20170529011550j:plain

(6) 再起動

$ sudo reboot

コンソールを表示

SSH等で、RasPiにログインして、下記を実行すると、液晶にコンソールが表示される。RasPiにUSBキーボードを繋ぐとログインできる。

$ con2fbmap 1 1

f:id:sunasaji:20170529011901j:plain

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を使ってキャスターと鉄の台の角度を固定した。これで問題ない程度に固まってくれた。

スーパーX|多用途接着剤スーパー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

動いている所はこんな感じ。


GWSサーボ S125-1T/2BB/JRタイプ + 秋月サーボドライバAE-PCA9685

RasPiにWin機からmDNSでアクセスする

Raspberry Pi Type B に Raspbian (RASPBIAN JESSIE WITH PIXEL, 2017-03-02版)をインストールして、DHCPIPアドレスを取得するように設定した。 母艦にはデスクトップの 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