インターネットラジオ2.1
インターネットラジオ 2.1
- 1.初めに
初代のインターネットラジオは非力な8ビットマイコンでどこまでやれるかをテーマにインターネットラジオを作り、128kbpsのmp3ストリームの再生に成功しました。
ただ、ファームウェアサイズがぎりぎりでDHCPが使用できない・登録局数が20局までとか、イーサネットのバッファを最大限取るためにWebでの局情報の設定を諦め、シリアル経由で設定していました。
Kimio_Kosaka先生のArduino IDEで ATtiny/ATmega 開発環境を作るを参考にさせてもらって、このHPのArduino-IDEでUSBaspを使うで各種AVRマイコンをArduino-IDEで開発しています。
現在はプログラムメモリが128Kバイト、EEPROMが4kバイトのATMEGA1284Pも使えるようになりました。
今回はDHCPを使用し、登録局も80局まで可能となっています。
また登録作業もWeb経由で行えます。使用したイーサネットモジュールがMACアドレス内蔵のため、スケッチにMACアドレスすら記述する必要がありません。
- 2.回路図

ArduinoのSPIバスを経由して、VS1053bモジュール、イーサネットモジュール(WIZ550IO)、SRAM(128K)が乗っかっているだけです。
あとは情報を表示するための16X2液晶とスイッチ付きフルカラーロータリーエンコーダーがあるくらい。
電源は5Vですが、VS1053bモジュールは3.3Vで動作しますのでレベルシフタに74HC4050APを使用しています。
イーサネットモジュールは3.3Vですが、入力は5Vトレラントなので直結しています。
WIZ820IOの時は開発者とのメールのやりとりで5Vトレラントだけど3.3Vでやったほうがいいよと言われましたが、WIZ550IOは今のところ問題ありません。
初代インターネットラジオはピン数が足りなくてI2CのLCDを使用していましたが、ATMEGA1284PのI/Oは十分にありますので、スタンダードなLCDを使用しました。
スイッチ系は、ソフトウェアで弱プルアップしていますので、外付けのプルアップ抵抗は不要です。
VS1053bモジュールはデータシート通りの回路です。(ThinkAboutPCBで販売中のVS1053bギミック基板 完成品[VS1053bGKAN]を使用しています。)
- 3.配線図

これは基板の表面から見た配線図です。表記のないランドのチップ部品は0.1u積層セラミックコンデンサです。
- 4.部品表
部品名 型番 数量 購入元 備考
基板 1個 ThinkAboutPCB 1,800
VS1053bギミック基板 完成品 1個 ThinkAboutPCB 1,860
WIZnet組み込み用イーサネットモジュール WIZ550io WIZ550IO 1個 switch-science WIZ550io v1.2 1,944
ICソケット ( 8P) JS-1179FN1-08N 1個 秋月電子通商P-06293 10
SPI SRAM 1Mビット(M68AF127B) 23LC1024-I/P 1個 RSオンライン769-7345P 200
ICソケット (16P) (10個入) 2227-16-03 1個 秋月電子通商P-00007 100
Hex Buffer/Converter(Non Inverting) HCMOS-IC TC74HC4050AP 1個 マルツパーツ館 ¥80
ピンヘッダ 1×40 (40P) 1個 秋月電子通商C-00167 35
ピンヘッダ 2×40 (80P) 1個 秋月電子通商C-00082 50
分割ロングピンソケット 1x42 FHU-1x42SG 1個 秋月電子通商C-05779 80
分割ロングピンソケット 2x42 FHU-2x42SG 1個 秋月電子通商C-05780 100
電解コンデンサー100μF25V85℃(ルビコンPK) 25PK100MEFC5X11 2個 秋月電子通商P-03122 @10x2
電解コンデンサー10μF50V85℃ (ルビコンPK) 50PK10MEFC5X11 2個 秋月電子通商P-03116 @10x2
積層セラミックコンデンサー0.1μF50V (25個入) FK28Y5V1H104ZN006 1セット 秋月電子通商P-06165 @100(10/p)x3
タクトスイッチ(白色) 1個 秋月電子通商 P-03648
フルカラーRGBLED付ロータリーエンコーダ ツマミ付セット EC12PLRGBSDVBF-D-25K-24-24C-61 1個 秋月電子通商 P-05773
2.1mm標準DCジャック 基板取付用 MJ-179PH MJ-179PH 1個 秋月電子通商 C-06568
セラミック発振子コンデンサ内蔵タイプ 16MHz CSTLS16M0X55-B0 1個 秋月電子通商 P-00525
カーボン抵抗(炭素皮膜抵抗) 1/4W100Ω (100本入) 1セット 秋月電子通商 R-25101
カーボン抵抗(炭素皮膜抵抗) 1/4W330Ω (100本入) 1セット 秋月電子通商 R-25331
カーボン抵抗(炭素皮膜抵抗) 1/4W3.3kΩ (100本入 RD25S 3K3 1セット 秋月電子通商 R-25332
カーボン抵抗(炭素皮膜抵抗) 1/4W10kΩ (100本入) RD25S 10K 1セット 秋月電子通商 R-25103
カーボン抵抗(炭素皮膜抵抗) 1/4W47kΩ (100本入) RD25S 47K 1セット 秋月電子通商 R-25473
カーボン抵抗(炭素皮膜抵抗) 1/4W100kΩ (100本入) RD25S 100K 1セット 秋月電子通商 R-25104
トランジスタ2SA1359Y(40V3A)(2個入) 2SA1359-Y> 1セット 秋月電子通商 I-04401
トランジスタ2SC1815GR 60V150mA (20個入) 2SC1815GR> 1セット 秋月電子通商 I-00881
多回転半固定ボリューム たて型 3296W (10kΩ 3296W-1-103 1個 秋月電子通商 P-00975
超小型LCDキャラクタディスプレイモジュール(16×2行 白抜き) SD1602VBWB-XA-G-G 1個 秋月電子通商 P-02985
- 5.組立概要
①インターネットラジオ基板を組み立てる。
後述の完成図外観を参考にされて下さい。基本的に部品の値はシルク印刷されています。ATMEGA1284Pと表面実装の定電圧レギュレーターはThinkAboutPCBからの出荷時に実装済みです。
ATMEGA1283Pとレギュレーター以外は通常のリード部品ですので、ハンダ付けはさほど難しくないですが、トランジスタのピン間が狭いのでショートしやすいです。ハンダ吸い取り線をご用意いただくことをお勧めします。
シルク印刷のない部品は0.1uF積層セラミックコンデンサです。
②通常のイーサネットシールドはW5100チップを使っていますが、WIZ550IOはW5500を使用していますので、そのままだとイーサネットライブラリが動きません。
「WIZ_Ethernet_Library-IDE1.5.x-master.zip」の右メニューの「Download ZIP」からダウンロードして適当なフォルダに解凍して下さい。「Ethernet」というフォルダができます。
「C:\・・・Arduinoインストールフォルダ\libraries\」の中に「Ethernet」というフォルダがあるので「EtherNetOrg」などとリネームし、代わりに上記のEthernetライブラリを移動してきます。
通常のEthernetアプリケーションであれば上記だけでいいですが、インターネットラジオを行う場合はいくつか変更点があります。
・「Ethernet」フォルダの中の「utility」フォルダの中に「socket.cpp」というファイルがありますがこれをメモ帳等で開きます。
15行目「W5100.writeSnMR(s, protocol | flag);」とかかれているところを「W5100.writeSnMR(s, protocol | flag | 0x20);」と変更
・同じフォルダにある「w5500.cpp」をメモ帳等で開く
28行目から31行目を下記のように変更する。
for (int i=0; i<MAX_SOCK_NUM; i++) {
uint8_t cntl_byte = (0x0C + (i<<5));
write( 0x1E, cntl_byte, 2); //0x1E - Sn_RXBUF_SIZE
write( 0x1F, cntl_byte, 2); //0x1F - Sn_TXBUF_SIZE
}
↓
for (int i=0; i<MAX_SOCK_NUM; i++) {
uint8_t cntl_byte = (0x0C + (i<<5));
// write( 0x1E, cntl_byte, 2); //0x1E - Sn_RXBUF_SIZE
write( 0x1F, cntl_byte, 2); //0x1F - Sn_TXBUF_SIZE
}
write( 0x1E, (0x0C + (0<<5)), 8);
write( 0x1E, (0x0C + (1<<5)), 2);
write( 0x1E, (0x0C + (2<<5)), 1);
write( 0x1E, (0x0C + (3<<5)), 1);
write( 0x1E, (0x0C + (4<<5)), 1);
write( 0x1E, (0x0C + (5<<5)), 1);
write( 0x1E, (0x0C + (6<<5)), 1);
write( 0x1E, (0x0C + (7<<5)), 1);
両方ともインターネット経由のストリームデータ受信に最適化した内容となっています。
・Ethernet.hにバグがあり、なぜか「#endif」がなくコンパイルエラーになります。。7行目の「#」を「#endif」に変更して下さい。
③インターネットラジオに特化したAVRhardware.zipファイルを用意しました。
展開してマイドキュメントの「Arduino」の「hardware」フォルダに入れて下さい。Arduino-IDEはArduino.orgの Ver. 1.7.8 で確認しています。
④Kimio_Kosaka先生のArduino IDEで ATtiny/ATmega 開発環境を作るを参考にして、AVRISP-mk2あるいはThinkAboutPCBのUSBaspライタを使って書き込む準備をして下さい。ターゲット側ISP端子は「<RED」と書かれている2×3ピンヘッダーです。
⑤Arduino-IDEで「ツール」「マイコンボード」で「ATMEGA1284P / Ext.16MHz」を選択する
⑥同じく「ツール」「書き込み装置」で、環境に合わせて「AVRISP-mkII」あるいは「USBasp」を選択する。
⑦「ツール」「ブートローダーを書き込む」をクリックしヒューズビットを書き込む。(「ブートローダー」と出ていますが、この場合はブートローダーはダミーでヒューズビットのみ書き込まれます)
⑧「InternetRadio201.ino」からスケッチをダウンロードして書き込みます。
最新のイーサネットライブラリはMACアドレスをスケッチに書き込まなければならないようです。MACアドレスはWIZ550ioに記載されています。
それをスケッチの76行目に設定して下さい。
⑨初期化とインターネットラジオ局情報を書き込みます。
それぞれの詳細は後述します。
- 6.完成図外観
【表側】

ATMEGA1284Pの上、ISP端子の左側にショートピン3つがありますが、これはSPI関係の信号(MOSI,MISO,CLK)をぶった切るためのものです。
ISPで書き込むときもSPI信号を使うので、同じSPIバス上に他の機器が接続されていると上手く書き込めない時があります。その場合はこのショートピン3つをはずすことによって他のSPI機器をバスから外すことができます。
【表側(ユニットをはずした状態)】

イーサネットモジュールとmp3デコーダーユニットをはずした状態です。
mp3デコーダーユニットの下にトランジスタ・抵抗がありますので、ある程度高さが必要です。mp3デコーダーユニットはピンヘッダで基板に直付けはできません。
【裏側】

特に難しいハンダ付け部分はありませんね
中央あたりにハンダブリッジ用ランドがありますが、これが表面でやっていたSPI機器の接続部分になります。
特にスケッチをいじらないようでしたらショート用のピン・ソケットをハンダ付けせずに、イーサネットモジュール、音源モジュール、SRAMをはずしてスケッチを書き込み、その後ランドを3か所(MOSI,MISO,SCK)ハンダ付けして、全SPI機器を接続すればOKです。
- 7.スケッチの動作について
・スケッチはArduino-IDE1.0.5で作成しています(2014/4/12現在)。
・インターネットラジオ放送中ではロータリーエンコーダーをプッシュするとロータリーエンコーダーで局を選択できます。(後述の局情報の登録を事前に行なって下さい)
・また、セットスイッチを押さずにロータリーエンコーダーを回すと音量調整できます。
・放送局のトラブルなどで15秒程度ネットからのデータが途切れると自動リセットが掛かるようになっています。
・自動リセットが掛かっても相変わらず受信できない場合は、Web設定で別のチャンネルを指定して下さい。
・わたしの自宅の回線(200Mbps)では128kbpsのビットレートの局が安定して受信できます。遅い回線を使用されている方はビットレートの低い局の登録を試してみて下さい。
- 8.局情報の登録方法について
・電源を投入するためにロータリーエンコーダーを押しますが、IPアドレスが表示されるまで押し続けて下さい。WebSettingModeに入ります。
・LCDの上段に「Web Setting Mode」と表示されて、下段にDHCPでインターネットラジオ用に払い出されたIPアドレスが表示されたらロータリーエンコーダーから指を離して下さい。
・同じネットワークアドレス内にあるパソコンからURLにIPアドレスを入れてインターネットラジオにアクセスして下さい。
(ルーター越しに設定できなくもないですがそのためにはルーターにポートを開けるためにIPマスカレードの設定を行う必要がありますし、ポートを開けるとハッキングされるなどの脆弱性が高まりますのでお勧めできません)

・はじめはめちゃくちゃな表示になっていますが慌てずに右上の「局情報オールクリア」のボタンをクリックします。EEPROM4Kのうちのほとんどをを初期化するので10~20秒程度時間がかかります。
・ウェブブラウザの別ウインドウで「Radionomy」を表示します。
・登録したい局が見つかったらその局の右側に「Listen to this radio station in your mediaplayer」というボタンがありますので右クリックでデスクトップ等に保存します。
・保存された局情報ファイルをメモ帳などで開くとラジオ局に接続するためのURLが表示されます。そこの「http://streaming.radionomy.com/」以下のディレクトリ名を、局名・m3uテキストにセットします。局名は単にその局の識別子で16文字までしか入りませんので、長いようなら適当に編集して下さい。
・最後に「これを聞きたい」というチャンネルの左にある「選局」ボタンをクリックすると、リセットが掛かり選択された局からのmp3データを再生します。
・なお、音楽再生中に局情報設定はできないので、電源をいったん落として下さい。。