2018年02月12日

FlashAirアプリの重連対応(課題アリ)

FlashAirアプリを重連対応させました。iPadでのスクリーンキャプチャ画像です。

DBL LOCボタンが追加:
DS_iPad_App1.png

入力ダイアログ:
DS_iPad_App2.png

自分が重連させないので手を抜いてましたが、強い要望に応えて対応しました。なお、すっぺさんから報告されていたDesktopStationSoftwareの重連がイベントスクリプトで動かないバグも、既に修正済みなので近日中に公開します。

重連マニアが多いと言うことで、みなさん、毎夜、峠を攻めるのでしょうか・・・頭文字Dみたいですね。

□ダウンロード

リビジョンR0cです。SD_WLANフォルダは、SDカードにそのままコピーするWebアプリのファイルです。

DSshieldFlashAir_r0c.zip ※2/14 まともに動かないというのでいったん公開中止。

2/14 r0d テスト版 DSshieldFlashAir_r0d.zip

□変更点

・重連に対応。半角数字、半角カンマで3つまで対応します。つまり、"4,5,6"という書き方まで。
・jQueryUIで初めてダイアログ表示に挑戦。慣れるのに数時間かかりましたが、コツは分かりました。意外と楽。

□なんで日本語じゃなくて英語なのか

最終的に規模の大きい海外への進出を狙っていることと、DesktopStationの機器を導入されている方々を含め、DCCやメルクリンを楽しまれている皆様は、リテラシーの高い方ばかりなので問題ないかなと思ってます。

逆に、「日本語で書かれているのは読みにくくて困るからやめてくんろ」と、海外の方には何度も言われております・・・。ユーザーの皆さんが、全部英語にしても良いなら、英語にしますが・・・。

□今後

Webアプリのボタンと実際に動くまでの反応が遅いのですが、原因は、W-03のWifiの遅さもあるとは思うのですが、ArduinoUNOでの文字列処理の遅さもあるようです。さすがに、貧弱なマイコンでたかだかコマンド解析の文字列処理ですら辛いのかもしれません。今回コマンドがかなり伸びてしまって、時間を食っているように思います。

次のバージョンでは、まずはコマンドの短縮化(2文字化)を実施します。command.cgiの仕様的にバイナリで書き込むのが難しそうなので、そこが非常にネックです。マイコン叩くならHEXで叩けないとダメでしょう。Arduinoで使っているATMEGA328Pのようなショボいマイコンでは、ASCIIの文字処理のオーバーヘッドって結構デカいんです。
posted by yaasan at 19:50 | Comment(1) | 鉄道模型

2018年02月10日

DSシールド関連のスケッチを更新

MZI NET SHOPさまからのご指摘で、メルクリンデジタル車両を動かせないバグがありました。

メルクリンユーザーの方、申し訳ありません(今まで誰もいなかった??)
バグの内容はしょうもないもので、速度ステップ切り替えがなぜかDCC専用の固定値になっていて、上手く動いていませんでした。

□変更後のスケッチ

DSshield_r0d.zip
DSshieldAUTO_r0e.zip
DSshieldFlashAir_r0b.zip

□変更内容

・速度ステップを固定値にしていたものを修正(DSshield)
・DCC速度ステップ128の指定の値をMM2車両に設定すると、動かない動作を修正
posted by yaasan at 17:57 | Comment(0) | 鉄道模型

Webアプリの開発中・・・・

FlashAirが、一部のコアなファンに大人気なので、機能強化してます。ポテンシャルは、非常に高いので、機能強化を進めていきます。FlashAirのWebアプリを現在は最重要戦略機種と位置づけます。

・Wifi通信での軽量化。HTML圧縮を使用予定。
・DesktopStationSoftwareで作ったレイアウトファイルをインポートする機能を付ける。パソコンなしでも、編集は出来ませんがiPad上でポイント操作ができます。ユーザー間で同じ画面を共有可能。
・jQueryなどのライブラリを最新版に差し替え。見た目が少し変わります。
・4重連までをサポート。ただし、端末ごとに保存する形なので、ユーザー間で共有できません。

あと、最終的にはFlashAir専用機種を出そうかなと思ってます。Arduino UNOの限界も分かったので電源強化したケース付きの新商品を出したいなと考え中です。デジトラックス、Roco、ロクハンなどのコンペチターと、そのほかにアナログ専用で出しているメーカーとの完全対決を行える機種に仕上げたいと思います。
posted by yaasan at 09:19 | Comment(4) | 鉄道模型

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) | 鉄道模型