[piCorePlayer] PicorePlayerでロータリーエンコーダを使ってみた


こんにちは

久しぶりのブログの更新です。 

しばらくの間、Arechlinuxから離れてPiCorePlayerを触っていました。 3年ほど前にもインストールなどして遊んでいたのですが、本体で何も出来なかったのでArchlinuxに移っていました。

 久しぶりに、PiCorePlayerで検索してみたら面白い記事が見つかりましたので、早速実現に向けて。

 

参考にした記事は以下の通りです。 

PiCorePlayerにLCDとswitch数個とRotary Encoder1個を取り付けたもので、普通のラジオとしても使えるようです。

raspberry Pi(B)をraspberry Pi2に変更したらほとんどの問題が解決してしまいました。 チョット残念な気もします。

 

https://github.com/terba/slimmer/wiki

Building a player

Terényi, Balázs edited this page on 6 Jul · 11 revisions

 

必要なハードウェア

  • Rapsberry Pi (Model B)
  • USB Spearkr
  • Character LCD (HD44780 20×4 又は16×2)(秋月さんより入手)
  • Rotary Encoder (P-00292 秋月さんより入手)
  • 3 momentary Switches (秋月さんより入手)

必要なソフトウェア

  • piCorePlayer
  • Pikeyd
  • LCDProc
  • Slimmer

セットアップ

ほとんどは記事の通りに進めれば問題はありません。ここでも記事の通りに進めます。

 

piCorePlayerのインストール

 

piCorePlayerは以下のところからDownload出来ます。

 

https://sites.google.com/site/picoreplayer/home

 

Downloadをクリックして

 

最新版をインストールします。 

私の場合は

The normal version of pCP3.21

をダウンロードしました

 

piCorePlayer3.21.zip がダウンロードできますので、解凍して

piCorePlayer3.21.imgファイルが出来ます。

これをSDカードに書き込んで、Raspberry Piに入れて立ち上げれば

PiCorePlayerを立ち上げることが出来ます。

piCorePlayerのセットアップ

login

sshが使えますので、 

piCorePlayerへのloginはtcです。

$ ssh tc@192.168.xxx.xxx

$ passwd: はpiCorePlayerのホームページに記載されています。

viの代わりにnanoを使う

viの代わりにnanoを使いたい時には

 

$ tce-load -w nano

loadしたままでは使用できませんので

 

$ tce-run nano

で一度立ち上げておけば、rebootするまでは使えます。

rebootしたり電源をoffした場合は

 

$ tce-run nano

で使えるようになります。

Slimmer binary bundle

 

$ cd /tmp && wget https://github.com/terba/slimmer/releases/download/v1.2.1/slimmer-bundle.tar.bz2

解凍して

 

$ tar jxvf slimmer-bundle.tar.bz2

SDカードにコピーします。

 

$ cp slimmer-bundle/* /mnt/mmcblk0p2/tce/optional/

librariesのダウンロード

必要なlibrariesをダウンロードします。

 

$ tce-load -w curl icu libftdi

—————————–

 

curl.tcz.dep OK

gnutls.tcz.dep OK

nettle.tcz.dep OK

p11-kit.tcz.dep OK

libssh2.tcz.dep OK

libgcrypt.tcz.dep OK

Downloading: ipv6-4.9.35-pcpCore_v7.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

wget: server returned error: HTTP/1.1 404 Not Found

md5sum: ipv6-4.9.35-pcpCore_v7.tcz.md5.txt: No such file or directory

Error on ipv6-4.9.35-pcpCore_v7.tcz

libftdi.tcz.dep OK

libusb-compat.tcz.dep OK

libusb.tcz.dep OK

libudev.tcz.dep OK

glib2.tcz.dep OK

pcre.tcz.dep OK

——————————–

もしもipv6 kenerl driverでエラーなど問題が起きたら

pv6-X.X.X-pcpCore のX.X.Xに部分にエラーで表示された番号を入れて以下のコマンドを実行します。

上の例では

ipv6-4.9.35-pcpCore_v7 ですのでこれを入れます。

 

$ echo "http://picoreplayer.sourceforge.net/tcz_repo/" > /opt/tcemirror

と入れたあとに

$ tce-load -w ipv6-4.9.35-pcpCore_v7

 

 

 

Downloading: ipv6-4.9.35-pcpCore_v7.tcz

Connecting to picoreplayer.sourceforge.net (216.34.181.96:80)

ipv6-4.9.35-pcpCore_ 100% |*******************************|   324k  0:00:00 ETA

ipv6-4.9.35-pcpCore_v7.tcz: OK

———————————-

以下を再度入力します。

$ echo "http://repo.tinycorelinux.net/" > /opt/tcemirror

もう一度

 

$ tce-load -w curl icu libftdi

を繰り返します。


 

curl.tcz.dep OK

gnutls.tcz.dep OK

nettle.tcz.dep OK

p11-kit.tcz.dep OK

libssh2.tcz.dep OK

libgcrypt.tcz.dep OK

Downloading: libgpg-error.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libftdi.tcz.dep OK

libgpg-error.tcz     100% |*******************************| 36864   0:00:00 ETA

libgpg-error.tcz: OK

Downloading: libgcrypt.tcz

libusb-compat.tcz.dep OK

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libusb.tcz.dep OK

libgcrypt.tcz          0% |                               |     0  --:--:-- ETAlibudev.tcz.dep OK

glib2.tcz.dep OK

libgcrypt.tcz        100% |*******************************|   384k  0:00:00 ETA

libgcrypt.tcz: OK

Downloading: libssh2.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

pcre.tcz.dep OK

libssh2.tcz          100% |*******************************| 69632   0:00:00 ETA

libssh2.tcz: OK

Downloading: libtasn1.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libtasn1.tcz         100% |*******************************| 40960   0:00:00 ETA

libtasn1.tcz: OK

Downloading: p11-kit.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

p11-kit.tcz          100% |*******************************|   260k  0:00:00 ETA

p11-kit.tcz: OK

Downloading: gmp.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

gmp.tcz              100% |*******************************|   228k  0:00:00 ETA

gmp.tcz: OK

Downloading: nettle.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

nettle.tcz           100% |*******************************|   260k  0:00:00 ETA

nettle.tcz: OK

Downloading: libidn.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libidn.tcz           100% |*******************************| 77824   0:00:00 ETA

libidn.tcz: OK

Downloading: gcc_libs.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

gcc_libs.tcz         100% |*******************************|   944k  0:00:00 ETA

gcc_libs.tcz: OK

Downloading: gnutls.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

gnutls.tcz           100% |*******************************|   912k  0:00:00 ETA

gnutls.tcz: OK

Downloading: curl.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

curl.tcz             100% |*******************************|   240k  0:00:00 ETA

curl.tcz: OK

Downloading: icu.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

icu.tcz              100% |*******************************| 12364k  0:00:00 ETA

icu.tcz: OK

Downloading: libmount.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libmount.tcz         100% |*******************************|   120k  0:00:00 ETA

libmount.tcz: OK

Downloading: bzip2-lib.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

bzip2-lib.tcz        100% |*******************************| 32768   0:00:00 ETA

bzip2-lib.tcz: OK

Downloading: pcre.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

pcre.tcz             100% |*******************************|   380k  0:00:00 ETA

pcre.tcz: OK

Downloading: libelf.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libelf.tcz           100% |*******************************| 32768   0:00:00 ETA

libelf.tcz: OK

Downloading: gamin.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

gamin.tcz            100% |*******************************| 16384   0:00:00 ETA

gamin.tcz: OK

Downloading: glib2.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

glib2.tcz            100% |*******************************|  1192k  0:00:00 ETA

glib2.tcz: OK

Downloading: libudev.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libudev.tcz          100% |*******************************| 32768   0:00:00 ETA

libudev.tcz: OK

Downloading: libusb.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libusb.tcz           100% |*******************************| 40960   0:00:00 ETA

libusb.tcz: OK

Downloading: libusb-compat.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libusb-compat.tcz    100% |*******************************|  8192   0:00:00 ETA

libusb-compat.tcz: OK

Downloading: libftdi.tcz

Connecting to repo.tinycorelinux.net (89.22.99.37:80)

libftdi.tcz          100% |*******************************| 24576   0:00:00 ETA

libftdi.tcz: OK

これで tce-load -w curl icu libftdi は終わりです。

install the bundle

 

$ tce-load -i lcdproc-server pikeyd slimmer

Configure LCDd

 

$ sudo vi /usr/local/etc/LCDd.conf  see my HD44780 config.

my HD44780 configは

https://raw.githubusercontent.com/wiki/terba/slimmer/configs/LCDd.conf

で見ることが出来ます。

viの代わりにnanoも使えます。

今私が使っている「LCDd.conf」を紹介します。

Keyの設定をどうして良いのかわからない部分もありますが一応動作している様です。間違った設定をしている可能性もあります。

 

———————————————–

 

[server]

DriverPath=/usr/local/lib/lcdproc/

Driver=hd44780

Bind=127.0.0.1

Port=13666

User=nobody

Hello="Raspbmc is starting"

WaitTime=5

ServerScreen=on

ToggleRotateKey=Enter

PrevScreenKey=Left

NextScreenKey=Right

 

[menu]

MenuKey=Escape

EnterKey=Enter

UpKey=Up

DownKey=Down

 

[hd44780]

ConnectionType=raspberrypi

Size=16x2 or 20x4 (どちらか一方を使う)

pin_D4=25

pin_D5=24

pin_D6=23

pin_D7=18

pin_EN=8

pin_RS=7

 

Device=/dev/lcd

CharMap=hd44780_default

——————————————-

[hd44780]

の中の設定で

Size-16×2

は LCDが16×2のものを使ったためこのような設定となりましたが、

記事では 20x 4のLCDを使っています。

pin_D4〜pin_D7 及び Pin_ENとPin_RSは自分のLCDの配線を設定してください。

 ここで設定しているものは、Raspberry Pi(Model +)とLCD(HD44780 )との接続でよく使われているものだと思います。もちろん別の接続もありえます。

start LCDd

 

$ sudo /usr/local/etc/init.d/lcdproc-server start

「Raspbmc is starting」がLCDに表示されます。

Configure Pikyed

 

$ sudo vi /usr/local/etc/pikeyd.conf  See my config.

my configは

https://raw.githubusercontent.com/wiki/terba/slimmer/configs/pikeyd.conf

で見ることができます。

私の設定は 途中を省いてありますが以下の様になっています。

pikeyd.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_ENTER       11

KEY_BACKSPACE   17

KEY_SPACE       22

# Set up a rotary encoder generating up & down arrow keys, using GPIOs 2 and 27 for gray code input

ROT 2 27 KEY_RIGHT KEY_LEFT

——————————————————-

なお重要なことですが、次の図のようなことをしておかないと、認識しなくて動作しません。

 

GPIO 11, GPIO 17 GPIO 22にスイッチを取り付けますが、この場合、電源3.3Vに10kΩの抵抗でプルアップします。また信号線に対して直列に1kΩの抵抗を入れます。

Rotary encoderは GPIO 2及びGPIO 27を使用しますが、この場合電源3.3Vに10kΩの抵抗でプルアップし、信号線に対しては抵抗を入れません。

 

他のスイッチと同様に信号線に対して1kΩの抵抗を直列に入れたところ、認識できませんでした。

evtest

スイッチを押して信号を認識できるかどうかのテストは以下のコマンドでできます。

 

tce-load -iwl evtest

evtest /dev/pikeyd

ただし最初はこれでテストができたのですが、rebootなど繰り返した後には使用できなくなるトラブルに見舞われました。

2度目にtce-load -iwl evtest とすると既にloadされていると言ってくるので

evtestとすると無いと言って実行できません。

その様な時には

 

tce-load -i evtest

evtest

とすればevtestが実行できます。

evtestを実行すると  event 0 又は1を聞いてきますが、その時event 1を選択してください。

あとは、画面を見ながら、スイッチやrotary encoderを回せば、eventが表示されるはずです。

私は、これが分かるまで(プルアップの抵抗が必要だと言うこととevtestの件について)1週間ほど時間を費やしてしまいました。 

start Pikeyd

pikeydをスタートさせます。

 

$ sudo /usr/local/etc/init.d/pikeyd start

Configure slimmer

slimmer.confi は

以下の様にします。

 

OPTIONS="-- lmshost 192.168.xxx.xxx --lmsport 9000 --input /dev/pikeyd --volume 50 --encoding ISO-8859-2"

lmshost : Logitech Media ServerのIPアドレスです。

lmsport : Logitech Media serverのPortのアドレスです。

Start slimmer

 

$ sudo /usr/local/etc/init.d/slimmer start

これらのconfig fileをバックアップするためには、以下のことを行います。なおこれらは一度行えばOKです。 ただし設定などを変更した場合は

save config filesのコマンドsudo filetool.sh -b を忘れずにおこなってください。

Backup (config file)

 

cat >> /opt/.filetool.lst <<EOF

/usr/local/etc/pikeyd.conf

/usr/local/etc/LCDd.conf

/usr/local/etc/slimmer.conf

EOF

Backup ( install at boot)

 

cat >> /mnt/mmcblk0p2/tce/onboot.lst <<EOF

lcdproc-server.tcz

pikeyd.tcz

slimmer.tcz

EOF

Backup (start at boot)

 

cat >> /opt/bootlocal.sh <<EOF

/usr/local/etc/init.d/lcproc-server start

/usr/local/etc/init.d/pikeyd start

/usr/local/etc/init.d/slimmer start

EOF

save config files

 

$ sudo filetool.sh -b

Reboot

 

$ sudo reboot

 

試作品

あり合わせの基板に20×4 のLCDとスイッチ4個、ロータリエンコーダ1個を取り付けて試作品を作って見ました。

 

こちらは「もどきラジオ」の試作品で使用していたLCD 16×2に表示させたもの。

問題点

 

piCorePlayerを導入して2週間ほど経ちましたが、色々問題が生じています。

音量調整

piCoreplayerを立ち上げた当初は音が全く鳴らなくてどこを調整して良いかわかりませんでした。3年前に音量に関してのメモを残していたのを思い出して事なきを得ましたが、これはいつも起きる問題です。

 

piCorePlayerをsshでloginして端末上でalsamixerと入れてreturnするといつもエラーで表示できません。これもちゃんとした回答がわかっていません。

Linuxでは問題なく開くのですが。

で最終的には

 

amixer -c 1 set PCM 100% 

とすれば音量を100%に設定できます。

この場合の -c 1 はカード番号 1 つまりUSB Speaker(私の場合は pebbles)を示します。 

これを起動時に読み込んでもらうには

sudo nano /opt/bootlocal.sh に追加しておきます。

その後 sudo filetool.sh -b は忘れずに。 これで音量設定については一応問題はなくなりました。

音声の途切れ

 

せっかくのラジオなのですが、音声が途切れて困っています。

これはまだ未解決です。

よく見ると、LCDの表示ととの兼ね合いで途切れが生じている様です。

ネットのスピードも遅いので、 バッファの設定など問題があるのかもしれません。

あるいはRaspberry Pi(B)と言う古い機種が影響しているのかもしれませんが?

近いうちにRaspberry Pi2を使ってテストしてみようと思います。

立ち上がりが遅い

なぜかわかりませんが、電源をONしてから音が出るまでに時間がかかっています。

 Wifiの接続に時間が掛かっていることはわかっているのですが、それ以外にサーバとの間の接続にも時間が掛かっているのかもしれません。

ここらへんの問題についてはおいおい解決して行こうと思っています。

Raspberry Pi(B)をRaspberry Pi2に変えてみた

今まで使っていたRaspberry Pi(B)をRaspberry Pi2に変えてみました。 一切の設定の変更もしないで、SDカードと、USB Wifiドングル、試作品をそのまま差し替えて使ってみました。 何も問題なくすぐに立ち上がりました。と言っても数十秒はかかりますが。 さすがに6倍は早いと言われているPi2です。音声の途切れも、LCDのもたつきもほとんどなく快適に動作しました。

こうなるとますますRaspberry Pi(B)の用途が減ってくるような。

Raspberry Pi2のUSBポートにUSB Wifiのモジュールが繋いでありますが、電流不足で動作しません。外部のUSBポートに接続して動作させています。 USB スピーカは動作しているようです。

 

試作品-2

100円ショップを利用して、新しい基板を取り付けた試作品を作りました。

 

改良

LMSをPicorePlayer自身で持つことができるので、これを設定して試作品−2を単独で使えるように設定しました。

その様子は別記事で紹介します。

 

 

 

 

 

 

 

 

 

コメント