概要
NanoPi-NEOとMPDとOLEDで音楽再生サーバの続編。
ソフトウェア側・ハードウェア側ともに大幅進化させ、
- LCD表示でカバーアート完全カラー化!!
- I2S-DAC 搭載で 192Hz 24bit 再生OK!! HighRes シール対応!
- 15w+15w の TDA7297 激安パワーアンプ搭載!! あとはスピーカ繋ぐだけ!
の完全体になった。今回下記写真のソフトおよびハードを作る。
(写真のスピーカScandyna MicropodSEは含まれません)
ソフトウェア側
概要
主な仕様
- 曲名、アーティスト名・アルバム名の表示。長い場合は自動スクロールします。
- 現在の再生位置の表示 (タイトルの下のアンダーバーです)
- Freq,BitDepth,Ch の表示
- アルバムジャケットイメージの表示(taglib使用)
- 物理ボタンで、「前の曲」、「再生・一時停止」、「次の曲」が操作可能
- 一時停止中は、現在日時を表示。(New!) ついでにCPU温度も表示
- 日本語でOK
- New! OLEDの他にLCDもサポート!
- New! マルチディスプレイサポート(笑)
- New! 完全C言語で1本化
- New! LCDは縦置き・横置きレイアウト両対応
- New! LCD,OLEDへの表示は更新部分のみ転送のため、(そこそこ)滑らかなスクロール
というわけで以下の集大成でもある。
- 音楽ファイル(mp3,m4a,flac,etc...)から、taglibでCoverArtを抽出する
- freetype2 で文字列描画 (実践編)
- NanoPi-NEOと5種のLCDと2種のOLED
- 画像の誤差拡散による2値化 ~ガンマ値考慮Ver.+~
- [NanoPi-NEOでOpenCV CapしてOLED表示](NanoPi-NEOでOpenCV CapしてOLED表示)
インストール手順
の「4. OLED表示のセットアップ」の替わりに以下を実施。
まずはソースコードを取得
cd /root
git clone https://github.com/blue777/NanoPi-NEO
cd NanoPi-NEO
LCD関係を必要に応じ修正。
nano usr_displays.h
#include <vector>
#include "common/display_st7735_spi.h"
#include "common/display_ili9341_spi.h"
#include "common/display_ili9328_spi.h"
#include "common/display_ili9225_spi.h"
#include "common/display_ssd1306_i2c.h"
void SetupDisplays( std::vector<DisplayIF*>& iDisplays )
{
// iDisplays.push_back( new Display_SSD1306_i2c(180,0) );
// iDisplays.push_back( new Display_SSD1306_i2c(180,2) ); // for SH1306
// iDisplays.push_back( new Display_ILI9341_spi_TM24(270) );
// iDisplays.push_back( new Display_ILI9341_spi_TM22(270) );
// iDisplays.push_back( new Display_ILI9341_spi_TM22(0) );
iDisplays.push_back( new Display_ILI9328_spi_TM22(270) );
// iDisplays.push_back( new Display_ILI9225_spi(270) );
// iDisplays.push_back( new Display_ST7735_spi(90) );
}
NanoHat OLEDを使う場合は、
iDisplays.push_back( new Display_SSD1306_i2c(180,0) );
を活性化し他は無効化。
各コンストラクタの第1引数は、LCDの回転角度。0,90,180,270のいずれか。OLEDは、0,180のみ。
レイアウトはQVGAで確認しているが、それ以外でも、それっぽく表示されるはずである。
マルチディスプレイするときは、複数登録したうえで各LCDのCSを適切に設定する必要がある。
編集したら、パッケージのインストールとコンパイル。
apt install libcv-dev libopencv-dev opencv-doc
apt install fonts-takao-pgothic
apt install libtag1-dev
g++ -O3 -std=c++11 mpd_gui.cpp -o mpd_gui.cpp.o -pthread `pkg-config --cflags opencv` `pkg-config --libs opencv` `freetype-config --cflags` `freetype-config --libs` `taglib-config --cflags` `taglib-config --libs`
あとは、自動起動するように構成
nano /etc/rc.local
・
・
・
/root/NanoPi-NEO/mpd_gui.cpp.o &
OS側の設定変更
npi-config を起動しOSの設定を変えます。
各種無効になっていたりするので、設定変更し有効化します。
・I2S DAC使う場合
Advanced Options --> I2S を選択し、有効にする
・SPI (LCD用) 使う場合
Advanced Options --> spi0 --> Enable --> spidev0.0 を選択
ハードウェア側
パーツリスト
写真の工作例の場合のパーツリスト。
NanoPi-NEO使っているがNEO 2でもOK.
No | パーツ名 | 値段 | 入手先 | 備考 |
---|---|---|---|---|
1 | NanoPi-NEO(2) | $7.99~14.99 | NanoPi-NEO or NanoPi-NEO2 | いずれか1つ |
2 | NanoPi Neo Heat Sink | $2.99 | http://www.friendlyarm.com/index.php?route=product/product&path=82&product_id=134 | |
3 | ケース | 108円 | 100円ショップ(Seria) | 8cm四方くらいのもの |
4 | 2.2inch LCD(ILI9328) | 1750円 | http://www.aitendo.com/product/10943 | ILI9341系でもOK |
4 | I2S-DAC(PCM5102) | 700円~1000円くらい | eBayで入手。ES9023かPCM5102のどちらか。NanoHat Pcm5102aでも良いがケースの大きさと要相談。 | I2S-DAC省略してNanoPi-NEOのLineOut出力でもOK |
5 | パワーアンプ(TDA7297) | 290円 | https://www.amazon.co.jp/gp/product/B010RYGL3I | |
6 | 配線材 | 105円 | https://www.amazon.co.jp/gp/product/B01MTAD3GA | LCDやI2S-DACの接続に使う |
7 | DCジャック | 120円 | http://akizukidenshi.com/catalog/g/gC-06569/ | 内側から取り付けるタイプじゃないと工作が難しくなる |
8 | スピーカ端子(WBT-0735) | 16590円 | yodobashiとか | 余っていたので付けた。昔はもっと安かった気がする。明らかなアンバランス。 |
9 | その他配線材 | |||
10 | ネジ各種 | |||
11 | MicroSD | 1000円くらい? | 16GB以上推奨 | |
12 | 電源アダプタ | 650円 | http://akizukidenshi.com/catalog/g/gM-01801/ | USB→DC Plugで自作も可 |
スピーカ端子は置いておくとして、約6000円程度でシステムが出来上がることになる。
配線概要
NanoPi-NEO(SPI関連) ⇒ LCD
NanoPi-NEO(I2C関連) ⇒ OLED (写真では付けていない)
NanoPi-NEO(I2S関連) ⇒ I2S DAC ⇒ TDA7297(パワーアンプ) ⇒ スピーカ端子
NanoPi-NEO(GPIO関連) ⇒ プッシュボタン (写真では付けていない)
電源(+5V) ⇒ NanoPi-NEO
電源(+5V) ⇒ I2S DAC
電源(+5V) ⇒ パワーアンプ
パワーアンプ(TDA7297)
概要
290円で買える15w + 15w の激安アナログアンプである。
定格では 6~18[V]の電圧が必要となっているが、4[V]程度でも音は出る。
今回USBと同じ5[V]で使用するため、発熱量も少なくなる。
とりあえず改造
ノーマルのままだと音そんなに良くないので、改造推奨である。
改造とは、「コンデンサ総とりかえ」である(笑
コンデンサの音が良い順にあげていくと、個人的評価はこんな感じに思える。
(是非聞き比べしてみてほしい)
種類 | コメント |
---|---|
フィルムコンデンサ(超高級品) | 双信SEコンなど。聞いたこと無いですが分類上1位です |
積層セラミックコンデンサ(C0G特性) | 比較視聴したこと無いですが分類上2位です |
積層セラミックコンデンサ(X7R特性) | 癖は少なめ。 |
フィルムコンデンサ(一般系) | 手軽に買える価格帯のクラス。癖あるのが多い。音作りには最適 |
電解コンデンサ | 癖あったり音はまちまち。 |
セラミックコンデンサ(F特性) | 使ってはイケナイ |
を踏まえて以下のコンデンサに換装した。
役割 | パーツ名 | 個数 | 入手先 |
---|---|---|---|
入力 LowCut Filter | 積セラ 4.7uF 25v (X7S) | 2 | 指定部品 http://akizukidenshi.com/catalog/g/gP-09481/ |
電源デ力ップリング | 積セラ 0.1uF 630v (X7R) | 1 | 指定部品 http://akizukidenshi.com/catalog/g/gP-10149/ |
電源デ力ップリング | MUSE KZ 100uF~470uFくらい | 1 | 基板に乗る範囲でhttp://akizukidenshi.com/catalog/g/gP-04609/ など |
MUTE回路用 | MUSE KZ 47uFくらい | 1 | 容量足りない場合、ポップ音出る。http://akizukidenshi.com/catalog/g/gP-04614/ など |
MUSE KZは音作りされた電解コンデンサなので多用し過ぎに注意。
MUSE FGやUTSJもまたしかり。
とりあえず、こんな感じで大化けし、誰も290円のアンプとは信じないレベルには達する。
(290円だと音が出るだけでありがたいレベル。で見てはいけない)
そして、基板のシルク印刷、SP出力の+-が反転しているので注意。
詳細は仕様書参照.
http://www.st.com/ja/audio-ics/tda7297.html
I2S DAC
概要
ES9023やPCM5102は、いずれもMCLKが無くても動くI2D-DACである。
それが重宝され、いろいろ使われている。
試聴上の解像度はES9023のほうが高め。
Spec:
PCM5102 | ES9023 | |
---|---|---|
freq | 384kHz | 192kHz |
bit | 32bit | 24bit |
配線
本家:
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2
NanoPi-NEO2 Pin# | NanoPi-NEO2 Name | PCM5102 | ES9023 |
---|---|---|---|
1 | VDD_5V | VCC | +5V |
2 | USB-DP1 | - | - |
3 | USB-DM1 | - | - |
4 | USB-DP2 | - | - |
5 | USB-DM2 | - | - |
6 | GPIOL11/IR-RX | - | - |
7 | SPDIF-OUT/GPIOA17 | - | - |
8 | PCM0_SYNC/I2S0_LRC | LRCK | LRCK |
9 | PCM0_CLK/I2S0_BCK | BCK | SCK |
10 | PCM0_DOUT/I2S0_SDOUT | DATA | DATA |
11 | PCM0_DIN/I2S0_SDIN | - | - |
12 | GND | GND | GND |
※PCM5102,ES9023は、上記eBayで販売されている製品でのシルク印刷の端子名です。
※ES9023のMCLKは接続しなくてOK
LCD
概要
NanoPi-NEOと5種のLCDと2種のOLEDにて、一番見やすかったLCDを採用。
SPI-LCDのマルチディスプレイ環境は、CSを適切なGPIOに割り当ててあげれば、表示可能です。
ただし、ILI9328ではCSが特殊(タイミング依存が強い)なため、SPIのみにおけるマルチディスプレイは対応不可です。
一番簡単なマルティディスプレイはOLEDとLCDの組み合わせになります。
LCD配線はNanoPi-NEOと5種のLCDと2種のOLEDを参照。
ボタン
NanoHat OLEDの回路図を参考に、3ボタン配線すると、前の曲、再生/一時停止、次の曲が制御できるようになります。
NanoHat OLEDの場合は、そのままで3つのボタンが使えます。
ケース加工・配線・組み立て
- アクリルケースは、リュータの「小径丸のこ刃」で加工すると楽です。
- 今回は、スピーカ端子、NanoPi-NEO、LCD、I2S-DAC、TDA7297の順で組み付けましたが、最後はスペースが無くかなり苦戦します。特にスピーカ端子回りがキツくなると思います。
工作例Part2
安定化電源と、NanoPi-NEO2、NanoHat-PCM5102a、LCDを組み合わせ、まとも(そう)なアルミケースに組み込んだ例。
もちろん、USB-DACの接続もOK.
安定化電源は、LM350を使用。LM350の出力電圧調整に半固定抵抗を使ってはイケナイ。
100Ω+300Ωの固定抵抗の組み合わせでちょうど5.0[V]が出てくる。
三端子レビューレータ7805での+5V生成より、LM350での生成のほうが、音ははるかに良いように感じる。
なお、平滑コンデンサは、8200uF 16V を3本。合計150円@秋月である。
そして、この工作例においては、NanoPi-NEOが裏面CPUであることが幸いし、アルミケースへ直接放熱接続している。そのため、CPU温度も25~40度でとてもよく安定する。
良く考えた結果が裏面なのかは置いておくとして、こういった組み込み時においてNanoPi-NEO(2)は、非常に使いやすい素材である。(安いし、初期状態でピンヘッダハンダ付けされていないし)
おわりに
応用例
音出る一体型のシステムになったので、いろいろできますね。
- USB-Camera と OpenCV顔認識組み合わせて不審者検出し、パトカーのサイレン音を鳴らす。救急車を鳴らしてはいけない。
- カッコウ時計。
- crontabと組み合わせて、目覚まし時計。
- ジェスチャーセンサ付けて、非接触側で次の曲/前の曲
コメント
今回(組み込み一体システム)の製作に至った経緯は、TDA7297が思いのほが音良かったからです。
今回のパッケージでは、スペースとお金の都合上、NanoPi,DAC,PowerAmpともに共通電源としていますが、制限なければ完全独立電源化し、いろいろ弄ってみたい素材ではありました。
DACはチャージポンプで負電圧を生成していますが、トランスで負電圧生成したものを入れたらどうなるか?(壊れるかも知れませんがw)や、PowerAmpにもう少し電圧高めに入れたりとか、改造ライフを楽しむことができるかと思います。
ソフトウェア・ハードウェア共に弄りがいのあるものだと思いますので、是非遊んでみてください。