こんにちは
「もどきラジオ」の状況を少し紹介します。
WaveShare3.5″TFTとjiveliteを使ったpiCorePlayerが動いている「もどきラジオ」ですが、これにRotary Encoderを3つも付けた新しい「もどきラジオ」に進化しました。本来ならばタッチパネル付きの3.5″TFTをつかった「もどきラジオ」なので、タッチパネルで選局などをするのはあたりまえですが、画面が小さいので指で押すのは難しくといって専用のスティックをつかうのも?
ということで、道から少し外れてこれにRotary encoderは使えないものかと考えました。
つまり目標としたsqueeze radioに「もどきラジオ」を少しでも近づけるということです。
ネットで調べてみるとjiveliteとRotary Encoderを使ったようすをYoutubeで見せているサイトは沢山あるようですが、記事にしたものはあまり見かけません。
jiveliteは、keyboard を取り付けてコントロールすることが出来ます。 keyboardの代わりにSwitchやRotary Encoderを取り付けて、pikeydを使ってjiveliteにデータを送ることが可能なように見えます。
これを調べるまでに、またまた1週間以上もの日数がかかってしまいました。
このPiCorePlayerはLMS(Logitech Media Server)を内部に持っているので、外部のサーバを使わずに済むはすなのですが、何故かjiveliteが動作しません。 LMSを立ち上げた後に、jiveliteが立ち上がるようなのですが、LMSがバックグラウンドで動いていないようで、その終わりを待っているように見受けられます。 なんだか表現がおかしいのですが、感覚的にそう見えます。 piCorePlayerの動きを理解していないのでなんとも言えないのですが。 ということで、現在(2017.11)は外部のLMSを使用しています。
WaveShare3.5″TFTとRaspberry Pi2との接続の図を載せていると思っていたら記事に入っていませんでしたので、遅まきながらここに公開したいと思います。これはあくまでも個人的に作ったものなので、配線ミスがあるかもしれません。自己責任で。
目次
JiveliteとRotary encoder
jiveliteを動かしているpiCorePlayerにkeyboardを接続して画面をタッチしなくても操作できることは周知の通りです。
そこで「もどきラジオ」も3.5″TFTの画面とタッチパネルだけでは寂しいので、できれば本来のラジオの良さである電源スイッチと音量調整と、選局ができればいいなと思っていました。
自分で少し資料を見つけては調べていたのですが、ふとpikeydとjiveliteはリンクしているのではと思い早速テストをしてみたところ ビンゴー!
まさにpikeyd.confに書いたKeyコードをjiveliteが読み込んでくれました。
試作品
早速2日ほどを掛けて試作品を製作しました。といってもパネル面の加工のみですが。
今度は、黄色のまな板を使いました。加工が簡単(40分ほど)ですぐに作れます。
右下は電源スイッチ、その上は音量調整、左の縦に2つ並んでいるつまみは、上がUP,Downを、下がLEFT, RIGHTを真ん中がENTERです。
ま、これだけあればほとんどの設定は可能です。
この図は音量調整をしている時に画面に現れる画像です。
左上のUP,Downつまみで選局をしているところです。
pikeyd
3.5″TFTはGPIOの一部を使用していますが、使わない部分が、いくつかあります。
これをpicked.confに割り当てます。
忘れていましたが、jiveliteだけを追加した場合は、pikeydなどのいくつかはインストールされていませんので
「[Raspberry Pi] PicorePlayerでロータリーエンコーダを使ってみた」
の記事に書いてあるようにいくつかのソフトをインストールをしておいてください。 多分 slimmerはいらないと思いますが。
start Pikeyd
pikeydをスタートさせます。
$ sudo /usr/local/etc/init.d/pikeyd start
これらのconfig fileをバックアップするためには、以下のことを行います。なおこれらは一度行えばOKです。 ただし設定などを変更した場合は
save config filesのコマンド
sudo filetool.sh -b
を忘れずにおこなってください。
Backup (config file)
cat >> /opt/.filetool.lst <<EOF
/usr/local/etc/pikeyd.conf
EOF
Backup ( install at boot)
cat >> /mnt/mmcblk0p2/tce/onboot.lst <<EOF
pikeyd.tcz
EOF
Backup (start at boot)
cat >> /opt/bootlocal.sh <<EOF
/usr/local/etc/init.d/pikeyd start
EOF
save config files
$ sudo filetool.sh -b
$ cd /usr/local/etc
以下はRaspberry Pi2にloginして
$/usr/local/etcの中を見たところです。
——————————————-
usr/local/etc$ ls
init.d/ pcp/ pkcs11/ pointercal ssh/ ts.conf
libnl/ pikeyd.conf pki/ slimmer.conf s sl/ udev/
——————————————–
ここにpicked.confがありますので
私の場合は以下のように修正しました。
——————————————–
#joy.cfg
#format:
# [keycode from /usr/include/linux/input.h] [whitespace] [GPIO pin no]
# Not limited to a single key. A GPIO press will emit all defined keys in order.
#KEY_LEFT 0
#KEY_RIGHT 1
#KEY_UP 4
#KEY_DOWN 7
#KEY_W 0
#KEY_A 5
#KEY_S 6
#KEY_D 7
#KEY_1 8
#KEY_2 9
#KEY_3 10
#KEY_4 11
#KEY_5 14
#KEY_6 15
#KEY_7 17
#KEY_8 18
#KEY_9 21
#KEY_0 22
#KEY_MINUS 23
#KEY_EQUAL 24
#KEY_ESC 25
#KEY 21
#KEY_E 21
#KEY_L 21
#KEY_L 21
#KEY_O 21
KEY_ENTER 16
# Set up a rotary encoder generating up & down arrow keys, using GPIOs 4 and 17 for gray code input
#ROT 5 6 KEY_A KEY_S
ROT 19 20 KEY_EQUAL KEY_MINUS
ROT 5 6 KEY_DOWN KEY_UP
ROT 13 26 KEY_LEFT KEY_RIGHT
#define I/O expanders before using them
#XIO(tag) gpio_int_pin/chip_addr:register_no
#MCP23008 only has a single 8-bit bank
#XIO_M 17/0x20/MCP23008
#define an MCP23008 expander at address 0x20 with interrupt wired to GPIO-17
#MCP23017 has two 8-bit banks
#XIO_A 17/0x20/MCP23017A
#XIO_B 17/0x20/MCP23017B
#KEY_O XIO_M:1
#KEY_L XIO_M:2
#KEY_E XIO_A:6
#KEY_E XIO_B:6
ここで使ったKEYは
KEY_ENTER
KEY_EQUAL KEY_MINUS (音量調整)
KEY_DOWN KEY_UP
KEY_LEFT KEY_RIGHT
です。 音量調整のためのKEYを見つけるのには時間がかかりました。
Shutdown
さてjiveliteが動いているpiCorePlayerのshutdownですが、これも少し悩みました。いつも悩んだり、調査などにかける時間は1週間単位ですが、これも1週間ほど悩みましたが、やっと少しだけわかりかけています。
Raspberry PiのマイクロUSBからの電源供給
Raspberry Piの電源は基本的にマイクロUSBから供給されていると書かれています。 実際にそうなんでしょうが、一つ非常に悩んだことがありました。
つまり電源用のshutdown回路は別の記事「[Raspberry Pi2] もどきラジオの電源回路が動き始めました。」で公開してありますが、この回路は単純でパネル面に取り付けた電源スイッチをOFFすると、まずRaspberry piのGPIOピンを通して電源がOFFになったことを伝えます。この信号によってRaspberry Piは安全にshutdownを行います。そのあとに5秒ほどしたらRaspberry Piの電源をOFF(マイクロUSB)します。 つまりマイクロUSBから供給している電源をOFFするということです。
でここで非常に悩んだのは、Wifiのドングルを取り付ける為に外部にUSBハブ(外部から電源を供給できるタイプ)などを取り付けると、マイクロUSB以外にも、そこからUSBを使ってRaspberry PiのUSBとも接続を行います。
でこういう状態で自作の電源用shutdown回路を取り付けて、パネル面の電源スイッチをOFFすると、5秒ほどしてマイクロUSBの電源がOFFされるのが確認できます。 この時まだPythonで作ったソフトが動いていな状態では、マイクロUSBからの電源供給が停止してもRaspberry Piに電源が供給されていて電源がOFFにならないのです。
これはUSBハブから接続したUSBを通して電源が供給されているからです。(これはRaspberry Piに接続されているUSBを取り外すとRaspberry Piの電源がOFFするので確認できました。)
本来ならば電源供給はマイクロUSBでなかったのか、という疑問が頭を持ち上げたのです。 もしRaspberry PiのUSBポートだけでUSBハブを使っていなかったら、多分Raspberry Piの電源はOFFになったことでしょう。
でPythonで作った電源shutdown用のソフトが正常に動くようになって、これをパネル面上の電源スイッチで起動したところ、すぐにRaspberry Piがshutdown処理に入ったことが確認でき、その後5秒後にマイクロUSBからの電源供給がOFFされると、Raspberry Piの電源はUSBハブからのUSBが接続された状態でも電源がOFFされたのが確認できました。
ということは、USBハブを使った場合にはRaspberry Piを安全にShutdown(Poweroff)しないと、マイクロUSBからの電源をOFFしてもUSBハブ側から電源が供給され続けRaspberry Piの電源はOFFにならないということです。 これがわかるまで1週間もの時間をついやしましたが、非常に大事なことを勉強することができました。
考えてみたら、piCore Playerは全てメモリ上で動いています。つまり突然電源をOFFにしても壊れることはありませんが、通常のRaspberry Pi上で動いているLinux類は全てSDカードを通して動作しているでしょうから、突然電源をOFFすると壊れる部分があることも考えられます。 これを考えると外部にUSBハブ(外部に電源を持っていて電源供給するタイプ)を取り付けることはマイクロUSBからの電源供給が突然OFFになってもUSBからの電源供給があるので、OFFにならないという点で安全と言えるかもしれません。
もしもUSBハブを使わない場合はどうなるのでしょうか。RasPi3の場合は? 残念ながらRaspberry Pi3を持っていないので確認のしようがありません。
Power_switch.py
これは別の記事「[Raspberry Pi2]piCorePlayerにシャットダウン用のスイッチを取り付けました」で紹介しているswitch.pyと同じものですが、これをどこで起動するか、が実はjiveliteを走らせていると問題になるのです。
別の記事では
——————————————————
なおこのソフトは TweaksのUser Command #2で起動するようにしておきます。
sudo python /home/tc/python_scripts/switch.py
として問題はありませんでしたが、ここにswitch.pyを入れておくとjiveliteが起動しないのです。
でどこに入れたかというと
/opt/bootlocal.shの中に以下を追加しました。
sudo python /home/tc/python_scripts/power_switch.py &
power_switch.pyとswitch.pyは同じ内容ですが、置いた場所が違います。で上記のようになりました。
これでパネル面の電源スイッチをOFFするとpower_switch.py(switch.py)が直ぐに起動してRaspberry Piをshutdwonします。其の後5秒後にRsapberry Piの電源がOFFされます。
回路図
WaveShare3.5″TFTとRaspberry Pi2との配線図を公開します。
手配線は面倒なので、いずれ基板を作ってみたいと思っています。今Kicadの勉強中です。
コメント