====== DSair Wi-Fi Specification ======
This page describes Wi-Fi interface specification of DSair2. DSair2 supports http REST like API. You can control DCC and Marklin locomotives and turnouts via http.
本ページでは、FlashAirベースで開発されたDSairに、ユーザーの皆様が開発・製作した機器やソフトウェアを接続してコントロールするための仕様を公開します。世界で唯一のオープンな無線・Wi-Fi対応のDCCコマンドステーションとして、活用いただければ幸いです。
ここに掲載した仕様・コマンドについて、ライセンスはございません。個人利用、クラブ利用、商用利用を含め、常識の範囲でご自由にお使い下さい。
===== 接続方法 =====
FlashAirカードにWi-Fiで接続してください。SSIDは、初期はFlashAir_******(******は任意の英数字)、パスワードは12345678です。
FlashAir W-04においては電源投入後、10-20秒程度で、Wi-Fi接続が可能になります。DSairのアプリのConfig画面で、SSIDとパスワードは簡単に変更可能です。なお変更後は切断されます。SSIDとパスワードを変更した物に再設定してください。
同時接続モード(FlashAirがアクセスポイントにもなり、無線LANルータにも接続されるモード)の場合は、数分の時間が掛かる場合があります。
DSairへのコマンドの渡し方は、FlashAirの[[https://flashair-developers.com/ja/documents/api/commandcgi/|CGIコマンド]]の[[https://flashair-developers.com/ja/documents/api/commandcgi/#131|共有メモリアクセス]]を使用します。
注: DSairLiteではRaspberryPi PicoWをベースとしているため、FlashAirコマンドを模した機能をサーバーに実装しています。
DSair2の場合:
http://flashair/command.cgi?op=131&ADDR=0&LEN=64&DATA=DSair内部コマンド
DSairLiteの場合:
http://192.168.42.1/command.cgi?op=131&ADDR=0&LEN=64&DATA=DSair内部コマンド
DSair内部コマンドを変えることで、任意の命令をDSairに送って制御できます。
===== DSairへの命令・コマンド =====
==== 関数一覧/Function list ====
^Function ^Command ^Example ^Notes ^
|線路電源,Power|PW(PowerFlag) | PW(1)|PW(0)で線路電源OFF、PW(1)でONです。|
|進行方向,Direction|DI(LocoAddr,Direction) |DI(49155,1) | |
|ファンクション,Function|FN(LocoAddr,FuncNo,FuncVal) |FN(59140,2,1) | |
|車両速度,LocSpeed|SP(LocoAddr,Speed,Speedstep)|SP(59140,0,2) | |
|ポイント,Turnout|TO(AccAddr,AccDirection)|TO(14337,0) | |
|アナログ,AnalogPWM|DC(AnalogSpeed,AnalogDirection)|DC(300,2)| 線路電源OFFの時だけ使用可能。 |
|S88在線センサ,S88 Sensor |gS8()|gS8(1)| S88在線センサのデータ収集スタート |
^Parameters ^Meanings ^Notes ^
|PowerFlag|OFF=0, ON=1|線路電源の状態を切り替えます。|
|Direction|FWD=1, REV=2| 0はFWDと見なします。|
|FuncNo|0-28|F0~F28に相当します|
|FuncVal|OFF=0, ON=1| ファンクションの状態です。|
|Speed|0-1023|1023で最高速度です。512で50%です。|
|Speedstep|0-2|DCCのとき128Stepは2です。MM2モードの時は0を指定してください。|
|AccDirection|分岐方向=0, 直進方向=1|ポイントの切り替え方向です。|
|AnalogSpeed| 0-1023 |アナログ電圧(スピード)。0が停止、1023が最大電圧です。 |
|AnalogDirection| 0 or 1:FWD, 2:REV|アナログの極性。0または1はFWD, 2はREVとなります。 |
Example of speed command is the follwoing.\\
DSairにコマンドを送る例としては、以下のようになります。
http://flashair/command.cgi?op=131&ADDR=0&LEN=64&DATA=SP(59140,0,2)
You can only send as HTTP GET command.\\
HTTP GETコマンドを送るだけです。
==== コマンドの送信間隔 ====
0.5秒(500ms)間隔程度で、コマンドを送信してください。
他のWi-Fiデバイスからコマンドを同時に打ち込んだ場合、後着優先となります。
==== Address meanings / アドレスの考え方 ====
LocAddr and AccAddr define 16bit address space including DCC and Marklin Motorola2. This means you can control locootives and turnouts as 16bit address.\\
LocoAddr, AccAddrのアドレスには、DCCとメルクリンの二つのプロトコルを包含し、さらに車両とアクセサリもカバーした16bitのアドレス空間が定義されています。
^Address type ^range ^Meaning ^Notes ^
|Marklin Motorola 2 Locomotives| 0x0000-0x07FF | 0(0x0000) - 255(0x00FF) | |
|DCC Locomtoives| 0xC000-0x1FFF | 0(0xC000) - 9999(0xE70F) | |
|Marklin Motorola 2 accessory| 0x3000-0x37FF | 1(0x3000) - 320(0x3140) | |
|DCC accessory| 0x3800-0x3FFF | 1(0x3800) - 2044(0x3FFC) | |
実際にコマンドに使用する場合には、10進数に直して使用してください。たとえば0xC000->49152となります。
DCCアドレス3を動かす場合は、LocoAddrには49152+3=**49155**を指定すると、DCCアドレス3の車両が動きます。
MM2アドレス3の場合は、LocoAddrには0+3=**3**を指定すると、MM2アドレス3の車両が動きます。
ポイントの場合は、0x3800(16進数)->14336(10進数)をオフセット値にして、DCCポイントアドレス5の場合は、14336-1+5=14340を指定すると、ポイントが切り替わります。ポイントの場合は1はじまりなので、-1しておくことが大事です。
==== JavaScriptでの操作 ====
jQueryを使用した場合は、以下のようなコードでコマンドを送信できます。
function onChangeSpeed(inSpeed) {
var url = "/command.cgi?op=131&ADDR=0&LEN=64&DATA=SP(49155," + inSpeed + ",2)";
$.get(url, function (data) {});
}
===== 状態・ステータスの読み出し =====
==== 取得方法 ====
共有メモリの128バイト目以降からサイズ264バイト(ASCII TEXT)に、制御状態や車両・ポイントデータが含まれているので、これを解析することで、制御状態を把握することができる。
/command.cgi?op=130&ADDR=128&LEN=264
N,0,0,0,155,00,2,22,00000000000;000000000000000;0000000000000000000000000000000000000000000000000000000000000000;0000,00,0,00000000/0000,00,0,00000000/0000,00,0,00000000/0000,00,0,00000000/0000,00,0,00000000/0000,00,0,00000000/0000,00,0,00000000/0000,00,0,00000000
==== パワーオン状態の確認 ====
FlashAirの共有メモリのアドレス128にサイズ1のデータが格納されており、ここがYのときは線路電源ON、Nか0x00のときは線路電源OFFと判断します。
取得:
/command.cgi?op=130&ADDR=128&LEN=1
セット:
(setPowerコマンドで自動的にセットされます)
==== ステータスデータの一覧 ====
Status Data from DSair2(FlashAir shared memory) is ASCII text data.
データはすべててテキストである。S88データは、BASICからs88start命令が実行されると表示開始されます。実態は、gs8というコマンドをDSair2に送ると、S88機能が動作する流れになっています。
^IndexByte ^Size ^Parameter ^Definition ^Notes ^
|0 | 1 | 線路電源 | ON="Y", OFF=0x00| 線路の電源状態を示します|
|1 | 1 |- | カンマ(,)| 区切り文字|
|2|1 | エラー番号||
|3| 1 |- | カンマ(,)| 区切り文字|
|4|1 | FIRMWARE_VER||
|5| 1 |- | カンマ(,)| 区切り文字|
|6|1 | 制御車両数|(0-15, 16進数)| |
|7| 1 |- | カンマ(,)| 区切り文字|
|8-10|3 | 線路電圧|120=12.0V|
|11| 1 |- | カンマ(,)| 区切り文字|
|12-13|2 | 出力電流|10=1.0A|
|14| 1 |- | カンマ(,)| 区切り文字|
|15|1 | ハードウェアVer||
|16| 1 |- | カンマ(,)| 区切り文字|
|17-18|2 |送信回数||
|19| 1 |- | カンマ(,)| 区切り文字|
|20| 1 | S88台数(1-2)| |
|21| 1 | S88データ1バイト目Low| S88デコーダ1台目(16bitの場合) |
|22| 1 | S88データ1バイト目High|S88デコーダ1台目(16bitの場合) |
|23| 1 | S88データ2バイト目Low|S88デコーダ1台目(16bitの場合) |
|24| 1 | S88データ2バイト目High|S88デコーダ1台目(16bitの場合) |
|25| 1 | S88データ3バイト目Low| S88デコーダ2台目(16bitの場合) |
|26| 1 | S88データ3バイト目High|S88デコーダ2台目(16bitの場合) |
|27| 1 | S88データ4バイト目Low|S88デコーダ2台目(16bitの場合) |
|28| 1 | S88データ4バイト目High|S88デコーダ2台目(16bitの場合) |
|29| 1 | S88データ予約| |
|30| 1 | S88データ予約| |
|31| 1 | 区切り| |
|32-46|15| CV応答データ(@CV,CVNo,Value,)||
|47|1|区切り||
|48-111|64| ポイント状態||
|112|1|区切り||
|113-|152|車両データ8台分|LocAddr,Spd,Dir,Func|
===== 活用方法 =====
操作コマンドのインターフェースが公開されているので、Wi-Fiスロットルを自分で作ることが出来ます。
* ESP-WROOM-02や32、M5Stack、ラズパイピコWを使って、独自にスロットルを作る
* スマホアプリを自分で独自に構築してみる
* ホスト側に実装してコマンドステーションを作ってみる
===== FAQ =====
^質問^回答^
|競合ですがコマンドステーションにこの仕様を実装して良いですか|常識の範囲でご自由にお使い下さい。|
|スロットルを作りたいです。|常識の範囲でご自由にお使い下さい。|
|ロイヤリティは発生しますか|発生しません。常識の範囲でご自由にお使い下さい。|
|使用するのに許可は必要ですか|必要ありません。常識の範囲でご自由にお使い下さい。|
|この仕様を変更して新しい仕様を作っても良いですか|常識の範囲でご自由にお使い下さい。|
|この仕様をライブラリに実装して売ってもいいですか|常識の範囲でご自由にお使い下さい。|
|この仕様を印刷して売っても良いですか|常識の範囲でご自由にお使い下さい。|
|この仕様を雑誌や本に記載しても良いですか|常識の範囲でご自由にお使い下さい。|
===== サポートについて =====
[[https://desktopstation.net/bb/|デジタル鉄道模型フォーラム]]で対応します。当社へのメールでの直接のサポート依頼は一切承りません。また、当社が開発した製品同士以外との接続に関するトラブルや、不具合については関知しません。ご自分で開発された機器やソフトは、ご自分でメンテナンス・サポートをお願いいたします。
なお、搭載報告・販売報告等はWelcomeです。ここで事例として、ご紹介します。
===== 活用事例 =====
* [[http://powerele.sblo.jp/article/184775189.html|DSairのWebアプリの作り方]] 電機屋の毎日
* HMX社 WiFi Throttle [[https://note.com/hmx_1972/|URL]]
* TRAINO Pocket-Throttle [[https://traino.jpn.org/|URL]]
* DSair, SL_Sound3用WiFiコントローラ [[https://dmh.sakura.ne.jp/model/wifi_controller/|URL]]