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で動作するか確認
ソース↓
arduino(C++)
1#include <SPI.h> 2#include <Ethernet2.h> 3#include <EthernetUdp2.h> 4 5byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xFA, 0x64 }; 6EthernetServer server = EthernetServer(23); 7 8void setup() { 9Serial.begin(9600); 10Serial.print("1"); 11if (Ethernet.begin(mac) == 1) { 12Serial.print("IP Address: "); 13Serial.println(Ethernet.localIP()); 14Serial.print("Subnet Mask: "); 15Serial.println(Ethernet.subnetMask()); 16Serial.print("Gateway IP Address: "); 17Serial.println(Ethernet.gatewayIP()); 18Serial.print("DNS Server Address: "); 19Serial.println(Ethernet.dnsServerIP()); 20} else Serial.println("Error"); 21} 22 23void loop() { 24}
シリアルモニタ↓
1
どうやらEthernet.begin(mac)でフリーズしているようです。
9日22時半追記
SDカードを用いてSPI通信がうまくできているか確認しました。結果SDカードは通信できませんでした。
このサイトを確認する限り、SPI通信がうまくいっていないようです。
https://forum.arduino.cc/index.php?topic=347658.0
arduino mega2560 R3と、イーサネットシールド2を用いてSPI通信がうまくいった方はいらっしゃいますか?
いらっしゃれば成功例をぜひとも伺いたい・・・。
回答1件
あなたの回答
tips
プレビュー