メンバーメニュー

ようこそ、ゲストさん

トップ > カテゴリ一覧 > ウェブクロウ > Arduinoからwebcrowにテ゛ータ送信方法

質問

  • Arduinoからwebcrowにテ゛ータ送信方法
  • 本文:

    ArduinoでLEDの信号を取得してLEDの状態(ONなら1、OFFなら0)をイーサネットシールドでwebcrowに送信し、LEDの状態を表示させたいです。

    webcrowの接続方法とLEDの状態表示方法を
    教えて頂きたいです。

    現在のプログラム(接続、送信部分)
    client.connect(http://アカウント名.webcrow.jp,ポート);
    client.print("GET ディレクトリ/***php?LED=");
    client.print(LED);
    client.print("Host: ");
    client.print(http://アカウント名.webcrow.jp);
    client.print("Connection: close");
    client.print();

    宜しくお願いします。

  • 緊急度:緊急投稿者:seigi01さん投稿時間:2017/04/12 11:10
質問に対する回答は締め切られました

回答 No.5920

  • この回答がベストアンサーです

  • 本文:

    arduinoはよく知りませんが、ちょっと見の感想では、


    > client.print("GET ディレクトリ/***php?LED=");
    > client.print(LED);

    1. 普通は、副作用を伴う(つまり、サーバーの
    内部状態を変化させる)コマンドを送る場合は、GETは使いません。
    POST を使います。
    ( ま、GETでも動くとは思いますが。)
    ... とは、いっても、POSTだと、パラメータの送り方が、GETとは変わってくるので(単純にGETをPOSTに置き換えたのではダメ)、最初の動作確認の段階では、GETの方が楽かな。
    ( ただ、GETだと、webcrowのキャッシュがもしかしたら、悪い影響を与えるかもしれません。ON を2回送ったのに、1回しか受け取らないような。)

    2. client.print が、改行を一緒に送るような仕様だと、
    上の二つのコマンドは、2行に分けてはいけません。
    1回のclient.print で、"GET ディレクトリ/***php?LED="とLEDを送る必要があります。

    3. ディレクトリ/***php は、/ディレクトリ/***php の形でないとだめかも。

    > client.print("Host: ");
    > client.print(http://アカウント名.webcrow.jp);

    4.ここは、http://アカウント名.webcrow.jp でなく、単に
    client.print("Host: アカウント名.webcrow.jp");
    じゃないですかね。上と同じく、2回に分けては多分ダメです。


    > client.connect(http://アカウント名.webcrow.jp,ポート);

    5. これも、client.connect(アカウント名.webcrow.jp,ポート);ではないですかね。client.connectの仕様がわからないので、http:// を付けるのが正しいのかもしれませんが。

    6. もしかしたら、
    client.print(host: アカウント名.webcrow.jp);
    の後に、もう一つ余分な改行を送らないと返事がこないかもしれません。
    client.print('');

  • 投稿者:ジョバンニさん 投稿時間:2017/04/12 11:37
質問者からのコメント

ご回答有難うございます。
phpファイルのプログラムは大丈夫そうでしょうか?
書き込むdatファイルには何も書かなくてよろしいのですか?

<?php
// 'white' という名前で Arduino からGET送信されたLEDの状態をGET
$strLEDVal = $_GET['LED']; //white

// データを保存するテキストファイルの相対パス
$strDataFilePath = 'ディレクトリ/**.dat';

// データを保存するテキストファイルを追記モードでオープン
$fp = fopen($strDataFilePath, "a");

// 送信された値をテキストファイルに書き込み
fwrite($fp, $strLEDVal);

// ファイルポインタをクローズ
fclose($fp);

?>

回答 No.5921

  • 本文:


    > 2. client.print が、改行を一緒に送るような仕様だと、

    もしかして、client.printだと改行無しで、client.println だと改行付きなのかな? その場合は、適宜読み替えて。


    > phpファイルのプログラムは大丈夫そうでしょうか?

    ま、大まかなところは良さそうですが、そこまで人に聞いてしまっては、楽しみが無くなってしまうのでは?

    (ファイルのパーミッションに注意すれば。)

  • 投稿者:ジョバンニさん 投稿時間:2017/04/12 13:22
質問者からのコメント

>2 client.printlnで改行で合っていると思います。

あまり知識が無い為、色々試しては見たのですが、手詰まりの状態です。
間違っているところがあれば教えて頂きたいです。

回答 No.5927

  • 本文:


    > あまり知識が無い為、色々試しては見たのですが、手詰まりの状態です。

    phpのプログラムの方の動作は、普通にブラウザで、
    http://アカウント名.webcrow.jp/ディレクトリ/***php?LED=LED
    にアクセスしたときと全く同じだから、
    arduino抜きにいくらでもテストできるはず。

    まあ、受け取った内容を表示したければ、デバグ用に

    echo $strLEDVal;

    とか、追加しておいた方が目に見えるので判り易いですけど。


    arduino側のプログラムもデータを送りっぱなしでなく、サーバーからの返事を受け取ってどこかに表示するなりした方がいいかと。

  • 投稿者:ジョバンニさん 投稿時間:2017/04/12 14:45
質問者からのコメント

php側のプログラムは正常に作動してるみたいです。

Arduino側のプログラムでwebcrowのphpに接続できてないようです。

回答 No.5928

  • 本文:


    > Arduino側のプログラムでwebcrowのphpに接続できてないようです。

    # 一ヶ所間違いを指摘し忘れました(HTTP/1.1の追加)。
    たぶん、次のサンプルコードで、いけるのではないかな?

    if( client.connect("アカウント名.webcrow.jp",80)){
    Serial.println("connected");
    client.print("GET /ディレクトリ/***php?LED=");
    client.print(LED);
    client.println(" HTTP/1.1");
    client.println("Host: アカウント名.webcrow.jp");
    client.println("");
    /* ここでサーバーの応答を読み込み */
    }else{
    Serial.println("connection failed");
    }

    本当は、この後に、サーバーからの応答があるはずなので、それを読み込まないといけないはずだけど。

  • 投稿者:ジョバンニさん 投稿時間:2017/04/12 16:43
質問者からのコメント

ありがとうございます。

1回試してみます。

回答 No.5931

  • 本文:

    あと、もし引っ掛かるところがあるとすれば、
    「ホスト名から、IPアドレスを検索する部分」
    arduinoのような低レベルの機械だと、その辺の機能が抜けているかもしれない。

    その場合は、アカウント名.webcrow.jp のIPアドレスを調べておいて、
    たとえば、これが、157.112.191.51のような値なら、
    最初の client.connect の部分を

    byte server[] = { 157, 112, 191, 51 }; // 区切りはコンマ
    if (client.connect(server, 80)) { ...

    のように書きなおす。

    client.println("Host: アカウント名.webcrow.jp") の方は、そのまま。(書きなおさない)

  • 投稿者:ジョバンニさん 投稿時間:2017/04/13 08:47
質問者からのコメント

試してみましたがサーバーに接続できませんでした。

webcrowのサーバーに接続する場合、webcrowにログインが必要なんですかね?