デジタル鉄道模型フォーラムのご案内:
DCCやメルクリンなどのデジタル鉄道模型を楽しむ方が集まって、様々な話題でコミュニケーションできる場です。ぜひご登録ください!登録・利用は無料です。

2018年02月08日

DSシールドをFlashAirでタブレット・スマホから制御する その4

DSシールドをFlashAirでタブレット・スマホから制御する その1その2その3の続きです。

最新版のFlash AirのW-04をお使いの方、ファームウェアのバージョンにご注意ください。

※当社では一世代古いW-03でしか試せてません・・・。
W-04のファームウェア4.00.02で動作したとのことです!!W-04はWifiスピードが上がっているので、たぶん、W-03よりも多少は気持ちよく動くはずです。

Taka@さんが早速試されていますが、いろいろ情報共有して、1点問題点が見つかりました。

まだ購入していないので試せてませんが、FlashAir Developerのサイトでは、4.00.01以降でないとSPIが使用できない旨が記載されています。

4.00.00では、iSDIOがSPIをサポートしていないので、ArduinoUNOからFlashAirをたたけない致命的な状況です。なぜこんな状況でリリースしたんだと思いますが、ファームウェア完成してない(テストしきっていない)けど、とりあえず出しちゃえ、っていうのは電機メーカーあるあるです・・・。知り合いからの伝聞ですが、あの速いビューン!っていうやつのファームウェアも・・・。

なお、古いバージョンの物をお持ちでも、アップデータがあるので、面倒くさいですが以下の通り作業すれば最新版になります。

無線LAN搭載SDHC/SDXCメモリカード FlashAirトレードマーク(TM)ソフトウェア更新ツール(SD-UWAシリーズ<W-04>)

□ファームウェアバージョンの確認の仕方

隠しファイルのCONFIGを見ると書いてあります。

[Vendor]
CIPATH=/DCIM/100__TSB/FA000001.JPG
APPMODE=4
APPNETWORKKEY=********
VERSION=F15DBW3BW4.00.00
CID=**************
PRODUCT=FlashAir
VENDOR=TOSHIBA
APPAUTOTIME=3000000
MASTERCODE=***********
LOCK=1

posted by yaasan at 20:14 | Comment(1) | 鉄道模型

DSシールドをFlashAirでタブレット・スマホから制御する その3

DSシールドとFlashAirで、タブレット・スマホから制御する技術的な仕組みを解説します。やってることは、そんなに難しくないです。

アーキテクチャ:
FlashAir_Architecture.png

□Webアプリについて

iPadなどで表示する画面は、純粋なHTML5+JavaScriptのWebアプリになっています。ライブラリにはjQueryを使っています。よく端末によっては画面が崩れるというのは、UIライブラリをちゃんとしたものを選定していないためです。今後、この部分はOnsenUIを使用するつもりです。

ArduinoUNOとの通信は、FlashAirの中にある共有メモリをアドレス0番地から32バイト分使用し、以下のようにGETコマンドを発行し、command.cgiのAPIを使って共有メモリに書き込んでます。


http://flashair/command.cgi?op=131&ADDR=0&LEN=32&DATA=操作コマンド


操作コマンドは、setLocoSpeedとかの、シリアルで使っているコマンドと同じにしてあります。いわゆる手抜きですが、同じ方が使い回せますし、シンプルなので良いのです。

HTMLでGETコマンドを使うと、以下のような感じでJavaScript上で書いてもらえれば動作します。DCCアドレス3(49152+3=49155)のスピードを512(50%)としてます。


var url = GetUrl() + "http://flashair/command.cgi?op=131&ADDR=0&LEN=32&DATA=setLocoSpeed(49155,512)";
var request = createXMLHttpRequest();
request.open("GET", url, true);
request.send("");


Webアプリの画面系は、見てもらえば良い通り、ほぼスクラッチでメーターなどをCanvasを使って実装しています。ボタン、タブなどはjQueryUIの機能を使ってます。

特に何も隠してないので、改造していただいて、Arduino UNOと連動してセンサーを表示するとか、新しく画面を作り直して専用の物にするとか、自由にできます。

DCCパケットを作る面倒な部分は全部、ArduinoUNO側でやるので、自動運転制御とか、無線で操作するソフトとか、自由に作っていただければなと思ってます。

□Arduino UNO側

DSシールドの標準機能に加えて、FlashAirにアクセスするためのiSDIOのライブラリを取り込んでいます。また定期的に共有メモリを見に行って、新しく入っていないかを確認する処理が動いています。


boolean SDIO_ReadSharedMem()
{
memset(buffer_sharedMem, 0, 32);
digitalWrite(chipSelectPin, LOW);
uint8_t aResult = card.readExtMemory(1, 1, 0x1000, 32, buffer_sharedMem);
digitalWrite(chipSelectPin, HIGH);

if (!aResult)
{
return false;
}
else
{
if( buffer_sharedMem[0] == 0x00)
{
return false;
}
else
{
return true;
}
}
}


共有メモリに書き込まれるコマンドは、DesktopStationSoftwareと互換なので、データが入っていたら、DCCパケットの更新処理を動かす、という仕組みです。パケットを作るとか面倒なことは全部DScoreがやるので、インターフェースだけ作り込めばOKです。
posted by yaasan at 08:24 | Comment(0) | 鉄道模型