内容の正確さについては保障ができません。 参考にされる場合にはどうか自己責任で行ってください。 よろしくお願いします。
開発は終わりました。最新のタイプはNetwork Appliance 3です。
以前の版でマイコンを使ったWebサーバとFTPサーバ等を実現したのですが、 実現した機能がPCで出来ることと同等であるがために比較対象がPCになってしまい、あらばかりが目立つという結果になって しまいました。
その反省から、「PCと同等(あるいはそれ以上)の性能が出せて、PCだと不便なこと」 を実現させないと実用にならないことが分かったので、 MP3デコーダチップを載せてオーディオプレイヤ風にしてみることにしました。 ただ普通のオーディオプレイヤでは面白くないので、センサ情報で挙動を変えたり、 ネットワーク機能を利用できるように設計しています。
Network Appliance 2 (rev.b)は次に挙げる機能を持っています。
192kbpsまでのMP3ファイルの再生と、 128kbpsまでのSHOUTcast形式のインターネットラジオの再生を確認しています。 FTPを使ったファイルの送受信では最高で40kbytes/sec程度のスピードが出ます。
音楽プレイヤとしての操作は、Webインタフェースや赤外線リモコン、Telnetによるコマンド操作 で行います。
リアルタイムOSを利用しているので、 192kbps のMP3ファイル再生と、FTPでのファイルをアップロードと、 Web経由での音量の調節を同時に行っても再生はほとんど途切れません。
図. Network Appliance 2 rev.b
|
|
|
|
|
|
(この基板を秋月電子製のRenesas H8/3069 ネットワークボードに接続する) | (写真中のリモコンで遠隔操作が可能(数字ボタンとインターネットラジオ局が対応している)。本体の黄色い基板がリモコン受信回路) |
秋月電子通商製のRenesas H8/3069 ネットワークボードは、 Renesas H8/3069マイコンを中心として、 DRAM 2MByte, LANコントローラチップ(RTL8019AS)とその周辺部品が搭載したボードです。 ここでは動作周波数が25MHzとなるようにボードの発振子を交換しています。 このネットワークボードに積み重ねる形で自作の基板を接続し、次の部品を接続します。
これらの部品を搭載するPCB(プリント回路基板)は、 EagleというPCB設計用のツールを使って設計し、 Olimex社に発注しました。
MP3デコーダチップ・SDメモリカードとネットワークボードの間は SPIバスで接続していて、 マイコン側ではSCIモジュールを使って制御します。 SDメモリはSPIモードで使います。 照度センサ・温度センサにはそれぞれTPS851(東芝)とLM35(ナショナルセミコンダクタ) を使っていて、両者とも出力はアナログ電圧なのでマイコンのAD変換器に接続しています。
リモコンデコード用マイコン(AVR tiny45V)とネットワークボードの間は MP3デコーダ・SDメモリカードとは別のSPIバスに接続しています(つまり、SPIバスは2系統です。負荷分散などのため)。 こちらのSPIバスには速度は必要ないので、GPIOを用いて実現しています。
図. 回路図(リモコン受信機部分を除く)
ITRON仕様準拠の TOPPERS/JSPカーネルを用いています。また、TCP/IPプロトコルスタックとしてTINETを用いています。
SDメモリカードにアクセスするのに自前のFATファイルシステムモジュールを用いています。 設計開始時点では適当なファイルシステムのプログラム がなかったので自前で用意しています (現在ではChaN氏のFATファイルシステム・モジュール 等があるので簡単にファイルシステムを実装できます)。 UNIXのシステムコール風のインタフェースでファイルを扱うことができるように なっています。
FAT12/16/32のファイルシステムにアクセス可能です。 ディレクトリには対応していますが、ロングファイルネームには対応していません。 ロングファイルネームでは長いファイル名を扱わなくてはならず、 ファイル名の格納用に大きなメモリ領域が必要になります。 AVRなどのRAMの少ないマイコンに移植するのが困難になると思われるので、 無理に対応させる必要は無いと考えています。
ネットワークプログラムとして、現時点でWebサーバ,NTPクライアント,FTPサーバ, Telnetサーバ,ダイナミックDNS 登録更新機能, DNSリゾルバ, インターネットラジオの再生などを実装しています。
SDメモリカードからのプログラムの動的ロード機能などもサポートしています。 たとえばリモコンによる操作は、ファームウエアではなく、 SDメモリカードからロードするプログラムによって実現されています。 また、Telnetでのプログラムの実行もこの機能を用いて実現しています。
動的ロード機能では、オブジェクトコードを適当なメモリ領域(場所はどこでもよい)に読み出し、 このときにリンクします。 ロードさせるプログラムは、再配置可能オブジェクトコードとなるようにコンパイルします。 リンクが実行時に行われるので、 ファームウエアの側で用意していない関数等を用いると、 実行時(プログラム起動時)にリンクに失敗して終了します。
本体ファームウエア(H8/3069)・CGIプログラム・リモコンデコード用ファームウエア(AVR tiny45V用)等の ソースコードを含みます。書きなぐりのコードなので、信頼性もそれなりです。
プログラムの開発には次のものを使っています。
開発はWindows XP HomeでCygwin環境で行っています。
アーカイブ内のサフィックスexeのファイルは、H8マイコン用の実行ファイルなのでPCで実行させないでください。
本体ファームウエアについては、Makefileとtinetのヘッダファイル等(route_cfg.cとtinet_app_config.h)を 省いています。利用の際には利用環境に合わせて補完してください、特別な設定は必要ないと思います。
環境構築の仕方によってコンパイルに失敗したり、バイナリが動かなかったりと 再現性が低いと思われたので、あえてMakefile等のファイルを削っていたのですが、 参考のために上のアーカイブで削ったファイルをおいておきます。 上のソースコードと時期が異なるので若干の不整合(ファイル名が変わっているなど)があるかもしれません。 検証のための環境が手元にないので確認できていません。 (2010/09/04更新)
ChaN 氏の FatFS のライセンスと同等の条件にしました。 ソースコード自体には次の文章は入っていないので、ソースコードの再配布の際はソースコードに埋め込むか、 添付のドキュメント等に記載するようにしてください。 バイナリとして配布するときは記載等は必要ありません。 (2010/09/04更新)
Copyright (C) 2007, Nobutaka Kito, all right reserved. * Network Appliance 2 ソフトウエアはフリー・ソフトウェアであり、また無保証です。 * 用途に制限はありません。あなたの責任の下において、個人的・非営利的な ものから商用製品の開発に及ぶ目的に使用・改変・再配布することができます。 * ソース・コードを再配布するときは、上記の著作権表示を保持しなければなりません。
ライセンスについて、以前よく考えずにTOPPERSライセンスと記述しましたが、 実際TOPPERSライセンスを読んでみたらこのプログラムに対しては適切ではなさそうなので、 上の条件に差し替えます。 内容的に矛盾しないと思うので上の内容でお願いします。
センサデータ(温度、照度、湿度、気圧)を10分おきにファイルに書き込み保存するプログラムを動かし、 データを収集しました。このプログラムはSDメモリカードに収められていて、上述したプログラムの動的なロード機能を用いて、 本体起動時にメモリにロードされて動きます。
収集したデータの一部を掲載します。データのグラフ化は、Network Appliance 2本体でも できるのですが(telnet接続して、コマンドを実行する。SVG形式でグラフを生成する)、遅いので、PCで行いました。
約3年前の2007年5月30日の照度のデータを下に示します。日付の選択に特に意味はありません。 これを見ると、前日の就寝時刻がおおよそ1時頃で、家に帰ってくるのが22時過ぎ であることが明瞭に分かります。 Network Appliance が目覚まし時計機能を持っていたら、睡眠時間は比較的高い精度で計測できる と思われます。
図. 2007年5月30日の照度の記録(縦軸: lx, 横軸: 時刻)
このようなデータと併せて、当時の雑記帳を組み合わせて眺めてみると、このころの状況が分かってきます。
気圧のデータも示します。今度は、約2年前の2008年2月26日のデータです。 きれいに、右肩下がりになっています。 明らかに天気が悪そうですが、 goo天気の過去のデータを見ると、 確かに天気が悪かったことが分かります。 天気の予測にはある程度使えるのかもしれません。
図. 2008年2月26日の気圧の記録(縦軸: hPa, 横軸: 時刻)