最終更新日:161018  原本2011-06-11 
インターネットラジオ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個ThinkAboutPCB1,800
VS1053bギミック基板 完成品1個ThinkAboutPCB1,860
WIZnet組み込み用イーサネットモジュール WIZ550ioWIZ550IO1個switch-science WIZ550io v1.21,944
ICソケット ( 8P)JS-1179FN1-08N1個秋月電子通商P-0629310
SPI SRAM 1Mビット(M68AF127B)23LC1024-I/P1個RSオンライン769-7345P200
ICソケット (16P) (10個入)2227-16-031個秋月電子通商P-00007100
Hex Buffer/Converter(Non Inverting)HCMOS-IC TC74HC4050AP1個マルツパーツ館¥80
ピンヘッダ 1×40 (40P)1個秋月電子通商C-0016735
ピンヘッダ 2×40 (80P)1個秋月電子通商C-0008250
分割ロングピンソケット 1x42FHU-1x42SG1個秋月電子通商C-0577980
分割ロングピンソケット 2x42FHU-2x42SG1個秋月電子通商C-05780100
電解コンデンサー100μF25V85℃(ルビコンPK)25PK100MEFC5X112個秋月電子通商P-03122@10x2
電解コンデンサー10μF50V85℃ (ルビコンPK)50PK10MEFC5X112個秋月電子通商P-03116@10x2
積層セラミックコンデンサー0.1μF50V (25個入)FK28Y5V1H104ZN0061セット秋月電子通商P-06165@100(10/p)x3
タクトスイッチ(白色)1個秋月電子通商P-03648
フルカラーRGBLED付ロータリーエンコーダ ツマミ付セットEC12PLRGBSDVBF-D-25K-24-24C-611個秋月電子通商P-05773
2.1mm標準DCジャック 基板取付用 MJ-179PHMJ-179PH1個秋月電子通商C-06568
セラミック発振子コンデンサ内蔵タイプ 16MHzCSTLS16M0X55-B01個秋月電子通商P-00525
カーボン抵抗(炭素皮膜抵抗) 1/4W100Ω (100本入)1セット秋月電子通商R-25101
カーボン抵抗(炭素皮膜抵抗) 1/4W330Ω (100本入)1セット秋月電子通商R-25331
カーボン抵抗(炭素皮膜抵抗) 1/4W3.3kΩ (100本入RD25S 3K31セット秋月電子通商R-25332
カーボン抵抗(炭素皮膜抵抗) 1/4W10kΩ (100本入)RD25S 10K1セット秋月電子通商R-25103
カーボン抵抗(炭素皮膜抵抗) 1/4W47kΩ (100本入)RD25S 47K1セット秋月電子通商R-25473
カーボン抵抗(炭素皮膜抵抗) 1/4W100kΩ (100本入)RD25S 100K1セット秋月電子通商R-25104
トランジスタ2SA1359Y(40V3A)(2個入)2SA1359-Y>1セット秋月電子通商I-04401
トランジスタ2SC1815GR 60V150mA (20個入)2SC1815GR>1セット秋月電子通商I-00881
多回転半固定ボリューム たて型 3296W (10kΩ3296W-1-1031個秋月電子通商P-00975
超小型LCDキャラクタディスプレイモジュール(16×2行 白抜き)SD1602VBWB-XA-G-G1個秋月電子通商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データを再生します。
・なお、音楽再生中に局情報設定はできないので、電源をいったん落として下さい。。