『ネットオウルユーザーコミュニティ』の提供に伴い、『Q&A掲示板』は2025年3月31日正午をもって提供を終了します。[関連ニュース]

メンバーメニュー

ようこそ、ゲストさん

トップ > カテゴリ一覧 > ウェブクロウ > ウェフ゛クロウ接続時ホ゜ートについて

質問

  • ウェフ゛クロウ接続時ホ゜ートについて
  • 本文:

    Arduinoという機器でイーサネットシールドから
    ウェブクロウに接続する際にIPアドレスとポートが
    必要なのですがポートが何番なのかわかりません。

    教えて頂きたいです。

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

回答 No.5942

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

  • 本文:

    HTTP でのパラメータの渡し方は、

    http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/php/http/2-arg.html

    に簡潔に書かれているから、参考にするといいですよ。

    上のページの GET のサンプルで使われているデータ

    >>
    GET /index.html?abc=1234&def=5678 HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
    Accept-Language: ja
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
    Host: www.test.org
    Connection: Keep-Alive

    <<
    のうち、必須なのは、GET で始まる行と、Host: で始まる行と、区切り部分の改行だけ。残りはすべて省略できます。

    最初のプログラムで言えば、
    >>
    GET /ディレクトリツリー/***.php?LED=ON HTTP/1.1
    Host: アカウント名.webcrow.jp
    (改行)
    <<
    だけ送れば、最低限の動作はする。

    POSTでデータを送りたい場合は、上のページのサンプルの
    >>
    POST /index.html HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
    Accept-Language: ja
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
    Host: www.test.org
    Connection: Keep-Alive

    abc=1234&def=5678
    <<
    から、必須部分を抜き出して、

    >>
    POST /ディレクトリツリー/***.php HTTP/1.1
    Host: アカウント名.webcrow.jp
    (改行)
    LED=ON
    <<

    だけ送ればいい。

    client.println("GET /ディレクトリツリー/***.php?LED");
    client.println(LED);
    client.println("HTTP/1.1");
    が駄目な理由もわかるでしょ?

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

ご回答有難うございます。
ウェブクロウにphpファイルを設置してphpファイルに接続したら
ファイルを作成するプログラムが書いてあるのですが
URLでhttp://アカウント名.webcrow.jp/ディレクトリツリー/test.php
で接続するとファイルが作成されますがArduinoで接続すると
ファイルが作成されません。
ご回答の内容を参考にプログラムを修正しました。
//---------- webcorw 接続 ----------
if (client.connect("http://アカウント名.webcrow.jp",80)) {
Serial.print("Connect");
client.println("POST /EP_iot/test.php HTTP/1.1");
client.println("Hos: orionseigi01.webcrow.jp");
client.println("");
client.print("LED=");
client.println(LED);
client.println("");
} else {
Serial.println("Connection failed to Server");
}

回答 No.5936

  • 本文:

    IPアドレスは、ウェブクロウのサーバー管理ツールのサーバー情報を見れば書いてあると思いますが、(ポートはサンプル通り 80)、それ以前に、arduino自体のネットワーク設定は、ちゃんとできていますか?

    要は、arduino自身の IPアドレス設定とか、デフォールトルートの設定とか。

    ○arduinoと同じネットワークの別のPCから、arduino向けの ping したときに、ちゃんと反応が返ってきますか?

    ○ arduinoに ping コマンドがあるとして、例えば、arduinoから、8.8.8.8辺りに ping をしたときに、ちゃんと反応が返ってきますか?
    (ping は、イーサネットシールドを買ったときにおまけでついてくるユーティリティの中に入っているんじゃないですかね???)

    ○サンプルプログラムでは、ネットワークの初期化コマンドなどは省略してありますが、ちゃんと初期化していますか?

    https://www.arduino.cc/en/Reference/ClientConnect をみると、
    Ethernet.begin(mac, ip);
    が必要みたいですが、その辺は大丈夫?
    (これに、多分デフォールトルートの設定の追加がさらに必要かと)

    ○ちなみに、arduino自身のデフォルトルートは、インターネット接続用のルータのLAN側のIPアドレス(192.168.0.1 とかが多い)。
    arduinoで DHCPclientが動いていれば、勝手に設定されるけれども、動いていない可能性もあるので、その場合は手動で設定する必要がある。

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

昨日から色々と有難うございます。
難しいですね… 知識薄で申し訳ありません。
現在のプログラムです。ArduinoのIPアドレス等は取得してあります。
何か気になる部分があれば宜しくお願いします。
//-----LED_webcrow-----
#include <SoftwareSerial.h>
#include <Ethernet2.h>
#include <SPI.h>
byte mac[] = { 0x**, 0x**, 0x**, 0x**, 0x**, 0x** };
byte gateway[] = { ***,**, *, ***}; // Default Gateway IP address
byte ip[] = { ***, **, *, ** }; // Arduino EtherShield IP address
byte subnet[] = { ***, ***, *, * }; // Subnet Mask
byte server[] = { ***,**,***,** }; // webcrow server address
char URL = "http://アカウント名.webcrow.jp/";
EthernetClient client;
int LED = 0; // LEDの状態と格納(0ならOFF、1ならON)

//---------- set up ----------
void setup() {
Ethernet.begin(mac, ip ,subnet,gateway ); //Arduino 1.0 http://arduino.cc/forum/index.php?topic=83800.0
Serial.begin(9600); // 通信速度
//---------- white ----------
LED = digitalRead(7); //LEDの状態を見ている
if(LED == LOW){ //if LED_LOWなら
LED=0; //LED = 0 (OFF)
}else{ //if LED_HIGHなら
LED=1; //LED = 1 (ON)
}
delay(100);
//---------- webcorw 接続 ----------
if (client.connect("server",80)) {
Serial.println("Connect");
client.println("GET /ディレクトリツリー/***.php?LED");
client.println(LED);
client.println("HTTP/1.1");
client.println("Host URL");
client.println("Connection: close");
client.println("");
} else {
// if you didn't get a connection to the server:
Serial.println("Connection failed to Server");
}
}
//---------- loop ----------
void loop() {
}

回答 No.5937

  • 本文:

    初めに、一言言っておくと、『隠さなくてもいい情報を隠すと嫌われます。』

    どれが隠していい情報で、どれが隠したほうがいいかの判断は、あなたにはまだ無理のように見えます。(情報を隠して質問するには、10年早い)

    > byte mac[] = { 0x**, 0x**, 0x**, 0x**, 0x**, 0x** };
    こんなもの伏せずに書いても、ICチップのメーカー名が判るくらいのものです。
    きちんと書いてあって、それが普通と違っていれば、「普通のハード以外の部品を使っているのかな?」という判断をすることができます。
    隠してもいいことはありません。

    > byte gateway[] = { ***,**, *, ***}; // Default Gateway IP address
    これは、よくある 192.168.xx.xx なんでしょうかね?
    これを隠してなにかいいことがありますか?

    一方で、
    > byte subnet[] = { ***, ***, *, * }; // Subnet Mask
    と上の、byte gateway[] の説明とは、矛盾しています。

    * の数から想像すると、
    byte subnet[] = { 255, 255, 0, 0 }
    でしょうが、gateway[] が、192.168.x.xxx なら、間違っています。

    > byte server[] = { ***,**,***,** }; // webcrow server address
    こういうのまで隠すと、『秘密主義者』の烙印を押されます。
    こういうのは、個人情報でもなんでもありません。
    同じIPアドレスを使っているユーザーはおそらく500人以上、(多分、1000人以上)いるんですよ。
    (そもそも、質問者が、匿名で質問している限り、こういう情報は個人情報の保護の対象にすらなりません。)

    > if (client.connect("server",80)) {

    server を "" で括ってはいけません。
    ( サンプルではそうなっていないでしょ? 言語の文法を勉強をやりなおした方がいい。)

    > client.println("GET /ディレクトリツリー/***.php?LED");

    ○ここは、 println でなく、print 。説明が理解できませんでしたか?
    ○LEDの後の '=' が抜けています。
    (これも、URLの書き方から勉強しなおした方がいい)

    > client.println(LED);
    ここも、println でなく、print 。
    サンプルには、そう書いてないでしょ?

    > client.println("HTTP/1.1");
    HTTP の前に空白が一つ入っていたのに気がつきませんでしたか?
    (注意力散漫です。)

    > client.println("Host URL");
    Hostの後には':' が、必要。
    URL と Host を同じ "" の中に入れてはいけない。
    ( 言語の文法を勉強を(以下同文))

    > client.println("Connection: close");
    これは、多分要らない。
    ( あっても、無視されるだけだと思うけれど、場合によってはエラーになるかも。)

    > void loop() {

    loopは、どうでもいいけれど、肝心の setup()がどこからも呼び出されていない。これでは、よくても『何もしないで、即終了する』だけにしかならない。

    一見、C のサブセットのように見えるけれど、C なら main() が必要。
    言語の文法書をもうちょっとちゃんと読んだ方がいい。







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

情報の隠す判断が出来ない為、全て隠しました。
色々と勉強になります。
gatewayとsudnetは下記の通りです。
byte gateway[] = { 172,16, 0, 252};
byte subnet[] = { 255, 255, 0, 0 };

言語はC/C++です。
指摘部部分を修正しました。
//---------- webcorw 接続 ----------
if (client.connect(server,587)) {
Serial.println("Connect");
client.print("GET /ディレクトリツリー/test.php?LED=");
client.print(LED);
client.println(" HTTP/1.1");
client.println("Host: ");
client.println(URL);

} else {
Serial.println("Connection failed to Server");
}

回答 No.5938

  • 本文:


    //---------- webcorw 接続 ----------
    if (client.connect(server,587)) {

    だからさ、ポートは、80 だってば。

    Serial.println("Connect");
    client.print("GET /ディレクトリツリー/test.php?LED=");
    client.print(LED);
    client.println(" HTTP/1.1");
    client.println("Host: ");

    ここは、println でなく、print

    client.println(URL);

    この後に、もう一つ余分な改行が必要。

    } else {
    Serial.println("Connection failed to Server");
    }


    昔、「だろうクッキング」というコメディアンの番組のコーナーがあったけれど、あまり「こんなもんだろ」的に書いても、まず動きませんよ。

  • 投稿者:ジョバンニさん 投稿時間:2017/04/14 16:12