57041
Spresense-
ArduinoにおいてイーサネットモジュールWIZ812MJをSPI接続し、イーサネット接続をしようとしていますが、SpresenseにおいてはArduino用のEthernetスケッチサンプルでも動作ができません（イーサネットモジュールが見つからないとエラーになる）

SpresenseでイーサネットモジュールWIZ812MJもしくは他の方法でイーサネット接続する方法をご教授いただけないでしょうか

よろしくお願いいたします。

※参考URL:WIZ812MJ  
<https://strawberry-linux.com/catalog/items?code=36003>

※追記※  
Yoshino Taroさんご回答ありがとうございます。  
ご提案いただいた（1）〜（3）を試しましたがダメでした。  
以下に現在の配線とスケッチを示しますのでおかしいところがあればご指摘いただけませんでしょうか。

[![現在の配線](https://i.stack.imgur.com/4dagz.png)](https://i.stack.imgur.com/4dagz.png)

WebServer.ino

```

    /*
      Web Server
    
     A simple web server that shows the value of the analog input pins.
     using an Arduino Wiznet Ethernet shield.
    
     Circuit:
     * Ethernet shield attached to pins 10, 11, 12, 13
     * Analog inputs attached to pins A0 through A5 (optional)
    
     created 18 Dec 2009
     by David A. Mellis
     modified 9 Apr 2012
     by Tom Igoe
     modified 02 Sept 2015
     by Arturo Guadalupi
    
     */
    
    #include <SPI.h>
    #include <Ethernet.h>
    
    // Enter a MAC address and IP address for your controller below.
    // The IP address will be dependent on your local network:
    byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    };
    IPAddress ip(192, 168, 1, 177);
    
    // Initialize the Ethernet server library
    // with the IP address and port you want to use
    // (port 80 is default for HTTP):
    EthernetServer server(80);
    
    void setup() {
      // You can use Ethernet.init(pin) to configure the CS pin
      Ethernet.init(9);  // Most Arduino shields
      //Ethernet.init(5);   // MKR ETH shield
      //Ethernet.init(0);   // Teensy 2.0
      //Ethernet.init(20);  // Teensy++ 2.0
      //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
      //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet
    
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
      Serial.println("Ethernet WebServer Example");
    
      // start the Ethernet connection and the server:
      Ethernet.begin(mac, ip);
    
      // Check for Ethernet hardware present
      if (Ethernet.hardwareStatus() == EthernetNoHardware) {
        Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
        while (true) {
          delay(1); // do nothing, no point running without Ethernet hardware
        }
      }
      if (Ethernet.linkStatus() == LinkOFF) {
        Serial.println("Ethernet cable is not connected.");
      }
    
      // start the server
      server.begin();
      Serial.print("server is at ");
      Serial.println(Ethernet.localIP());
    }
    
    
    void loop() {
      // listen for incoming clients
      EthernetClient client = server.available();
      if (client) {
        Serial.println("new client");
        // an http request ends with a blank line
        bool currentLineIsBlank = true;
        while (client.connected()) {
          if (client.available()) {
            char c = client.read();
            Serial.write(c);
            // if you've gotten to the end of the line (received a newline
            // character) and the line is blank, the http request has ended,
            // so you can send a reply
            if (c == '\n' && currentLineIsBlank) {
              // send a standard http response header
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/html");
              client.println("Connection: close");  // the connection will be closed after completion of the response
              client.println("Refresh: 5");  // refresh the page automatically every 5 sec
              client.println();
              client.println("<!DOCTYPE HTML>");
              client.println("<html>");
              // output the value of each analog input pin
              for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
                int sensorReading = analogRead(analogChannel);
                client.print("analog input ");
                client.print(analogChannel);
                client.print(" is ");
                client.print(sensorReading);
                client.println("<br />");
              }
              client.println("</html>");
              break;
            }
            if (c == '\n') {
              // you're starting a new line
              currentLineIsBlank = true;
            } else if (c != '\r') {
              // you've gotten a character on the current line
              currentLineIsBlank = false;
            }
          }
        }
        // give the web browser time to receive the data
        delay(1);
        // close the connection:
        client.stop();
        Serial.println("client disconnected");
      }
    }
    
    
```

ご指摘いただいたEthnernet/src/utility/w5100.h で定義されているデフォルトの通信速度を以下のように変更済みです。

```

    #define SPI_ETHERNET_SETTINGS SPISettings(4000000, MSBFIRST, SPI_MODE0)
    
```

よろしくお願いいたします。
CC BY-SA 4.0
2019-07-30T10:29:59.177
57036
2019-08-06T08:26:44.963
2019-08-06T08:26:44.963
35300
35300
question
spresense arduino
Spresense-Arduinoにおけるイーサネットモジュールの使用について
あー、これハマりますよね。私もハマりました。私が試したのは W5500 を搭載した Ethernet Shield2
ですが以下の方法でつながりました。以下手順は、SPRESENSE拡張ボードを使っている前提です。

(1) 10pin のCSを外して9pinのGPIOをジャンパー  
(2) Arduinoの例えばEthernetWebServerサンプルの setup で、Ethernet.begin() の前に  
以下の記述を追加  

```

    Ethernet.init(9)
    
```

(3) 上記でもうまく行かない場合は、SPI通信の波形がEtherボードとの相性でヘタっている可能性  
があるので、通信速度を落とす必要があります。その場合は、ちょっと面倒ですが、  
Ethnernet/src/utility/w5100.h で定義されているデフォルトの通信速度を変更してください。

```

    // Safe for all chips
    #define SPI_ETHERNET_SETTINGS SPISettings(14000000, MSBFIRST, SPI_MODE0)
    
```

私は8M～4Mあたりでうまくいきました。

```

    #define SPI_ETHERNET_SETTINGS SPISettings(4000000, MSBFIRST, SPI_MODE0)
    
```

  
SPRESENSEのSPIのCSはハード制御なので、ソフトからコントロールできずにうまく行かないみたいです。GPIOでCSをコントロールしてあげたらうまくいきました。うまくいくかどうかわかりませんが、ご参考になれば！
CC BY-SA 4.0
2019-07-30T15:19:54.173
57041
2019-07-30T15:19:54.173
27334
57036
answer