« ダブルクリックで拡大ポップアップさせる方法 | Main | スカーロイの煙室戸交換 »

VBA(Excel)で、DSairを制御する

Dsair

DSairには、DSBasicという立派な制御言語がありますが、wifi経由のhttp通信で制御するので、VBA(Visual Basic for Application)でも制御できるはずだと思いプログラミングしてみました。

ちょっと落とし穴にはまったのは、エクセルのVBAではhttp通信のキャッシュ?がかかってしまい、同じ命令をGetリクエストすると、メモリ値が変化しているはずなのに最初と同じリプライが返ってくることでした。これはネットで、無意味なコマンドを文字列につけて送るというテクニックが紹介されていましたので、Getリクエストの文字列に時刻文字列をつけて送ってクリアしました。こういう現象は、JavaScript で動いているサーバーではおきることがあるらしいですが、詳しい理屈は私には理解できませんでした。

最低限の機能のマクロつきブックをサンプルとしてアップロードしておきますので、興味のある方は自分のエクセルで、いろいろプログラム書き加えて遊んでください。DSBasicの方がVBAより制御向きだと思いますが、CV値の管理とかにはVBAの方が向いているかもしれません。DesktopStationさんには、CV値書き替え関連のDSair Wi-Fi Specificationのコマンド公開を是非お願いしたいと思います。また永末さんところの赤い箱は、VBAの制御ライブラリーが提供されていたので、そのVBAマクロからの移植とか赤い箱とDSAir両用プログラムの開発とかには使えるかもしれません。
このエクセルマクロプログラムをお試しになった方あれば、是非コメントをください。

ココログの新仕様では、画像以外のファイルはアップロードできなくなったようです。今回、DesktopStationさんのHPからダウンロードしていただけるようになりました。下記アドレスからダウンロードしてください。
https://desktopstation.net/follow/DSAir_excelmacro.zip

 

☆4/4追記

vbaでDSair2へwifi 経由でコマンドを送信しているのは下記の関数です。一部略

Function HTTPDSAir(DSAir) As String

Set httpReq = CreateObject("MSXML2.XMLHTTP")

httpReq.Open "GET", "http://flashair" + DSAir

httpReq.Send

HTTPDSAir = httpReq.responseText

Set httpReq = Nothing

End Function

運転コマンドはDSAirに /command.cgi?op=131&ADDR=0&LEN=64&DATA=DSair内部コマンド という文字列を入れます

共有メモリ読み出しは  /command.cgi?op=130&ADDR=128&LEN=264 です

上に書いたようにhttpのキャッシュを回避するために、
この文字列には意味のない文字列(プログラム例では時間文字列)を加えます。

なおこのプログラムを使用するためには参照設定で[Microsoft HTML Object Library]を参照する必要があります。

 

|

« ダブルクリックで拡大ポップアップさせる方法 | Main | スカーロイの煙室戸交換 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



« ダブルクリックで拡大ポップアップさせる方法 | Main | スカーロイの煙室戸交換 »