VBA(Excel)で、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]を参照する必要があります。
Comments