測定したデータをESP8266を使ってOPi上のファイルに書き込むというのは、例えば「ダイソーのモバイルバッテリーに入っている18650の放電テスト 1~2回目」あたりでやっている。
このように、OPi上のサーバーをThingSpeakみたいな感じのデータ・ロガーとして使うのは非常に便利だ。
ESP8266の側にデータを保存する仕組みが必要ないので単純化できるし、時系列な測定に必須の時刻の管理もサーバー側に任せておけばいい。
つまり、センサー側で用意するものがほとんど無い。
以上の主旨からは若干外れるが、センサー側のESP8266でやってるのと同じことをPCから、しかもコマンド・ラインからやる方法を試したので覚書き。
いろいろ探し回った挙句、「telnetで、VBS+WSH の sendkeys を使う」やここの「Rev2. コマンドラインから直接HTTPでリクエストする。」というのを見つけたので真似してみた。
「VBS」と「senfkeys」は小耳にはさんだことが有るような無いような、「WSH」は完全に初耳状態だ。
WSH = Windows Script Host ここらあたりが参考になった。
というか、気が向いたらあとで読むかも。
上にも書いたように、INA219の測定値を記録するためのPHPがすでにOPi上に置いてあるので、とりあえずこれを使ってみることにする。
こんなの。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php ini_set( 'display_errors', 1 ); $strGetTHP = time(); $strGetTHP .= ","; $strGetTHP .= $_GET['sv']; $strGetTHP .= ","; $strGetTHP .= $_GET['bv']; $strGetTHP .= ","; $strGetTHP .= $_GET['c_mA']; $strGetTHP .= "\n"; $strDataFilePath = '/var/www/html/test/byINA219_log.csv'; $fp = fopen($strDataFilePath, "ab"); fwrite($fp, $strGetTHP); fclose($fp); ?> |
ついでながら、ESP8266からはこんな感じでデータを送っている。
1 2 3 4 5 6 7 8 9 10 11 12 |
String postStr = "/byINA219_log.php?"; postStr +="&sv="; postStr += String(shuntvoltage); postStr +="&bv="; postStr += String(busvoltage); postStr +="&c_mA="; postStr += String(current_mA); postStr += "\r\n\r\n"; client.print(String("GET ") + postStr + " HTTP/1.1\r\n" + "Host: " + serverOPoPC2 + "\r\n" + "Connection: close\r\n\r\n"); |
この書式を真似て送ればいいだけのことだろう。
上のサイトにならって、
testtelnet.batを以下のようにし、
1 2 |
start "Test" cscript testtel.vbs |
testtel.vbsを以下のようにした。
1 2 3 4 5 6 7 8 9 10 |
set WshShell = WScript.CreateObject("WScript.Shell") WshShell.AppActivate "Test" WScript.Sleep 1000 WshShell.SendKeys "telnet 192.168.11.16 80~" WScript.Sleep 1000 WshShell.SendKeys "GET /byINA219_log.php?sv=10&bv=20&c_mA=30~" WScript.Sleep 1000 WshShell.SendKeys "~" WScript.Sleep 1000 WshShell.SendKeys "exit~" |
実行すると、Opi上のbyINA219_log.csvにデータが追加される。
追記(2017/08/19)
久しぶりにやってみたらエラーで書き込めない。
1 |
WshShell.SendKeys "GET /byINA219_log.php?sv=10&bv=20&c_mA=30~" |
とするところを
1 |
WshShell.SendKeys "POST /byINA219_log.php?sv=10&bv=20&c_mA=30~" |
としていた(上では修正済み)からだ。
GETやらPUTやらPOSTやら、ごっちゃになっているし、違いも良く分からない。
Bad Request
Your browser sent a request that this server could not understand.
とだけ言ってくる。
仕方ないので、サーバーのログ、
/var/log/apache2/access.log
を眺めてみる。
ESP8266からもデータを送ってきているのでそれもログに記録されている。
赤線こそが性懲りもなく間違ったコマンドを試している証拠のログだ。
Firefoxから手動でphpにデータを渡してみた時のログが青線で示されている。
当然、問題なくデータは書き込まれている。
このログを見て、
「GETじゃん。なんだよPOSTって…。」
とやっと間違いに気づく。