13140


Arduinoのイーサネットシールドを購入したので早速ArduinoIDEに付いているWebClientというサンプルをMacアドレスの箇所を自分のものに変えて実行してみたのですが、  
最初に`Ethernet.begin(mac);`でDHCPによりIPを解決するところでもし返り値がfalseなら`Ethernet.begin(mac,
ip);`で再度接続を試みるようになっていますが、最初の命令が帰ってこないためそこで固まってしまいます。  
同じ症状の方はいませんか、解決方法を教えて下さい。

そのサンプルをいかに添付します。

[code]

    /*
      Web client
    
     This sketch connects to a website (http://www.google.com)
     using an Arduino Wiznet Ethernet shield.
    
     Circuit:
     * Ethernet shield attached to pins 10, 11, 12, 13
    
     created 18 Dec 2009
     by David A. Mellis
     modified 9 Apr 2012
     by Tom Igoe, based on work by Adrian McEwen
    
     */
    
    #include <SPI.h>
    #include <Ethernet.h>
    
    // Enter a MAC address for your controller below.
    // Newer Ethernet shields have a MAC address printed on a sticker on the shield
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    // if you don't want to use DNS (and reduce your sketch size)
    // use the numeric IP instead of the name for the server:
    //IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
    char server[] = "www.google.com";    // name address for Google (using DNS)
    
    // Set the static IP address to use if the DHCP fails to assign
    IPAddress ip(192, 168, 0, 177);
    
    // Initialize the Ethernet client library
    // with the IP address and port of the server
    // that you want to connect to (port 80 is default for HTTP):
    EthernetClient client;
    
    void setup() {
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
    
      // start the Ethernet connection:
      if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
        // no point in carrying on, so do nothing forevermore:
        // try to congifure using IP address instead of DHCP:
        Ethernet.begin(mac, ip);
      }
      // give the Ethernet shield a second to initialize:
      delay(1000);
      Serial.println("connecting...");
    
      // if you get a connection, report back via serial:
      if (client.connect(server, 80)) {
        Serial.println("connected");
        // Make a HTTP request:
        client.println("GET /search?q=arduino HTTP/1.1");
        client.println("Host: www.google.com");
        client.println("Connection: close");
        client.println();
      }
      else {
        // kf you didn't get a connection to the server:
        Serial.println("connection failed");
      }
    }
    
    void loop()
    {
      // if there are incoming bytes available
      // from the server, read them and print them:
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
    
      // if the server's disconnected, stop the client:
      if (!client.connected()) {
        Serial.println();
        Serial.println("disconnecting.");
        client.stop();
    
        // do nothing forevermore:
        while (true);
      }
    }
    
[/code]


CC BY-SA 3.0
2015-08-06T13:24:24.937
13114
2015-08-07T10:26:21.583
2015-08-07T01:38:45.347
7232
7232
question
arduino
ArduinoのWebClientの例でEthernet.begin(mac)で固まる。


[http://www.google.com/search?q=arduinoへアクセスするとhttps://www.google.com/search?q=arduinoへリダイレクトされるようです](http://www.google.com/search?q=arduino%E3%81%B8%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B%E3%81%A8https://www.google.com/search?q=arduino%E3%81%B8%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%A7%E3%81%99)。  
このコードがこのリダイレクト動作に対応していないから動かないのではないでしょうか。


CC BY-SA 3.0
2015-08-06T20:52:00.747
13121
2015-08-06T20:52:00.747
8136
13114
answer


自己解決しました。

私が使っていたEthernet Shield 2は新しいもので、IDEが古かったため動かなかったようです。


CC BY-SA 3.0
2015-08-07T10:26:21.583
13140
2015-08-07T10:26:21.583
7232
13114
answer