質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.51%

arduino イーサネット通信時のipアドレスが割りつかない事象について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,286

beansan

score 9

arduinoにてウェブサーバーをつくることを第一目標にしています。
そのためにarduinoのwebserverサンプルプログラムを起動しましたが、うまく動きません。
(プログラム起動後にarduinoにPCからpingを飛ばしてもタイムアウトになる。)
どうやらEthernet.localIP()の出力が0.0.0.0となるのが悪いようです。

そのため、わかりやすいように下記プログラムを外部サイトから拾い、原因追及を行っています。
(このプログラムでも出力IPアドレスは0.0.0.0となっています。)
ipアドレスをうまく設定する方法はありますでしょうか。
ご回答いただけると幸いです。

#include <SPI.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>
// MACアドレスの定義
byte mac_address[] = {
0x90, 0xA2, 0xDA, 0x10, 0xFA, 0x64
};
// IPアドレスの定義
byte IP_address[] = {
192, 168, 100, 100
};
// DNSサーバアドレスの定義
byte dns_address[] = {
192, 168, 100, 1
};
// ゲートウェイアドレスの定義
byte gateway_address[] = {
192, 168, 100, 1
};
// サブネットマスクの定義
byte subnet[] = {
255, 255, 255, 0
};

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);

// MACアドレス、IPアドレス、DNSサーバ、
// ゲートウェイサーバ、サブネットマスクを設定する。
Ethernet.begin(mac_address, IP_address, dns_address, gateway_address, subnet);
Serial.print("IP Address: ");
Serial.println(Ethernet.localIP());
Serial.print("Subnet Mask: ");
Serial.println(Ethernet.subnetMask());
Serial.print("Gateway IP Address: "); 
Serial.println(Ethernet.gatewayIP());
Serial.print("DNS Server Address: "); 
Serial.println(Ethernet.dnsServerIP());
}

void loop() {
// put your main code here, to run repeatedly: 

シリアルモニタの出力↓

IP Address: 0.0.0.0
Subnet Mask: 0.0.0.0
Gateway IP Address: 0.0.0.0
DNS Server Address: 192.168.100.1

なお、開発環境等は下記となります。
・マックアドレスはイーサネットシールドに記載されているものと同等のものを記載。
・PC、イーサネットシールド2、ルータ(WIMAXグレードル)をSWHAB(100Mbps)を介してT型に接続。
・IPアドレスは各種下記となる。
PC(192.168.100.102)
ethernetシールド(192.168.100.100)
ルータ(WIMAX)(192.168.100.1)
・arduino-SWHAB、swHAB-ルータ間はストレートケーブル、SWHAB-PC間はクロスケーブルを使用
・SWHABは極性判別機能有
・arduinoIDEは1.8.3を使用
・Ethernet2をライブラリに追加し、ドキュメントフォルダ内に格納されていることを確認(下記URLと同等の処置)
http://uecs.org/blog.html
・イーサネットシールドはMegaと同じ名称のピンにつないている。
・ソースコード内のサブネットマスク・DNSサーバーはコマンドプロンプトでipconfig/allを打ち、PC側のipアドレスと同じ欄に出力されたものと同一のものを使用
・PC側のOSはwindows10
・arduinoは共に純正(互換品ではない。)
arduino Mega2560(2014.7.20購入)
ethernetシールド2(2017.7.9購入)

〇こちらでも原因追及を行っていますが、現状を追記します。
・arduinoIDEをダウングレードして動作するかどうかを試しています。
IDE 1.7.0 1.7.7 1.7.11 では動作しない旨確認済み。

DHCPで動作するか確認
ソース↓

#include <SPI.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xFA, 0x64 };
EthernetServer server = EthernetServer(23);

void setup() {
Serial.begin(9600);
Serial.print("1");
if (Ethernet.begin(mac) == 1) {
Serial.print("IP Address: ");
Serial.println(Ethernet.localIP());
Serial.print("Subnet Mask: ");
Serial.println(Ethernet.subnetMask());
Serial.print("Gateway IP Address: ");
Serial.println(Ethernet.gatewayIP());
Serial.print("DNS Server Address: ");
Serial.println(Ethernet.dnsServerIP());
} else Serial.println("Error");
}

void loop() {
}


シリアルモニタ↓

1

どうやらEthernet.begin(mac)でフリーズしているようです。

9日22時半追記
SDカードを用いてSPI通信がうまくできているか確認しました。結果SDカードは通信できませんでした。
このサイトを確認する限り、SPI通信がうまくいっていないようです。
https://forum.arduino.cc/index.php?topic=347658.0
arduino mega2560 R3と、イーサネットシールド2を用いてSPI通信がうまくいった方はいらっしゃいますか?
いらっしゃれば成功例をぜひとも伺いたい・・・。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2017/07/20 13:24

    「arduino-SWHAB、arduino-ルータ間はストレートケーブル、SWHAB-PC間はクロスケーブルを使用」だと、[ルータ = arduino = SWHAB = PC] という直列接続になって、質問に書かれているようなT型の接続になりません。 接続は正しいですか??

    キャンセル

  • beansan

    2017/07/20 21:10

    ご指摘ありがとうございます。記載が間違っていましたので修正いたします。現物はswHABを介したT型の接続となっています。

    キャンセル

回答 1

checkベストアンサー

0

関係があるかどうかわかりませんが
SPI通信をするときArduinoの初期設定が必要ではありませんでしたっけ

Ethernet.begin()の中身を見たわけではないので,もしこれの中でSPIの設定がなされていれば
この回答は読み飛ばしてしまってかまいません.

SPI.begin() ;                       
SPI.setBitOrder(MSBFIRST) ;         
SPI.setClockDivider(SPI_CLOCK_DIV4) ;
SPI.setDataMode(SPI_MODE0) ; 
あたりが必要だったような気がします

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/18 00:15

    イーサネットシールド2の買い付け元から代替品が届いたので、動作検証しました。
    結果状況は改善しませんでした。
    arduino mega2560R3の不具合か、特殊な設定が必要なのですかね・・・?
    イーサネットシールド2の買い付け元にイーサネットシールド2とarduino mega2560R3の組み合わせで動くのかどうか検証してもらおうと思います。

    キャンセル

  • 2017/07/18 23:28

    そうでしたか,残念でしたね

    ArduinoMegaとUNOの回路図,イーサネットシールドの回路図もにらめっこしてみましたが,特にジャンパが必要とかそういうハードの類の箇所は見つけられませんでした

    あとは仰るとおり,特殊な設定かなぁというきもしますが,SPI.hライブラリを使えば大丈夫だとは思うんですよね.

    あ,念のため確認ですが,Arduinoのコンパイルは「Mega 2560」に設定されていますよね?
    (設定されていなければそもそも書き込みできないとは思いますが(笑)

    あとは,原因の切り分けとして「SPI通信自体はできているのか」を試すほうが早いかもしれないですね.イーサネットシールドにはSDカードもさせるので,SDカード(SSピンは4番?)や,別のSPI通信を使う適当なセンサを使ってみるとか,ですね

    買い付け元が検証をしてくれるということでしたら,ソレの結果を待ちたいところですね

    結果が出ましたらまたご報告いただけるとこのページを参照される方にとって益になると思いますのでよろしくお願いいたします

    キャンセル

  • 2017/07/22 18:56

    イーサネットシールド買い付け元での検証結果が届きました。
    結果、正常に動いたとのことでした。

    そのため、新しいarduino mega2560を購入し、交換してみましたところ、サンプルプログラムは正常に動作しました。
    原因はarduino mega2560の故障だったようです。

    原因追及にご協力いただきましたElecDove様、イーサネット2買い付け元の業者様、ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる