Отваливается температурный датчик при включении Erthernet кабеля (Nano)

Всем привет!
Пытаюсь который день понять что с кодом в проекте: нужно удаленно по сети получить температуру через веб. в проекте так же имеется LED дисплей. Датчик в сериал передает температуру до момента подключения сетевого кабеля
‘’'#include <UIPEthernet.h>
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_OLED_txt.
#include <OneWire.h> //Подключаем библиотеку для Датчика температуры
#include <iarduino_OLED_txt.h> // Подключаем библиотеку iarduino_OLED_txt.

iarduino_OLED_txt myOLED(0x3C); // Создаём объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D. (порты A4 и A5)
EthernetClient client;
EthernetServer server = EthernetServer(80);
extern const uint8_t MediumFont; // Подключаем шрифт MediumFont.
OneWire ds(2); // вход датчика 18b20 (D10)
float temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20
long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок
byte data[2];

void setup() {
// pinMode(5, INPUT);
myOLED.begin(&Wire); // Инициируем работу с дисплеем, указав ссылку на объект для работы с шиной I2C на которой находится дисплей (по умолчанию &Wire).
myOLED.setFont(MediumFont); // Указываем шрифт который требуется использовать для вывода цифр и текста.

Serial.begin(9600);

// MAC адрес, должен быть уникальным в сети
byte mac = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC-адрес
byte ip = {192, 168, 7, 148}; // IP-адрес
byte myDNS = {8, 8, 8, 8}; // адрес DNS-сервера
byte gateway = {192, 168, 7, 1}; // адрес сетевого шлюза
byte subnet = {255, 255, 255, 0}; // маска подсети
Ethernet.begin(mac,ip, myDNS, gateway, subnet); // инициализация контроллера
server.begin(); // включаем ожидание входящих соединений
Serial.println("localIP: ");
Serial.println(Ethernet.localIP());
Serial.println("subnetMask: ");
Serial.println(Ethernet.subnetMask());
Serial.println("gatewayIP: ");
Serial.println(Ethernet.gatewayIP());
Serial.println("dnsServerIP: ");
Serial.println(Ethernet.dnsServerIP());
// Serial.println("digitalRead(5): ");
// Serial.println(digitalRead(5));
}

void loop() {
delay(500);
detectTemperature(); // Определяем температуру от датчика DS18b20
// Выводим полученное значение температуры в монитор порта
Serial.println(temperature);

myOLED.setCursor(1,1); // Устанавливаем курсор в 1 столбец 1 строки.
myOLED.print(“TEMP:”);
// myOLED.print(temperature);
// listen for incoming clients
//EthernetClient client = server.available();
if (client) {
Serial.println(“new client”);
// an http request ends with a blank line
boolean 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(“”);
client.println(“”);

client.println("Temperature-1: ");
client.println(temperature); 
client.println("");
client.println("Temperature-2: ");
client.println("?");
client.println("");

client.println("");

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”);
}
}

int detectTemperature(){

ds.reset();
ds.write(0xCC);
ds.write(0x44);

if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
{
lastUpdateTime = millis();
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();

// Формируем значение
  temperature =  ((data[1] << 8) | data[0]) * 0.0625;

}
} ‘’’

В предыдущем сообщении криво код вставил

  #include <Wire.h>                                          // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_OLED_txt.
  #include <OneWire.h>                                       //Подключаем библиотеку для Датчика температуры
  #include <iarduino_OLED_txt.h>                             // Подключаем библиотеку iarduino_OLED_txt.

  iarduino_OLED_txt myOLED(0x3C);                            // Создаём объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D. (порты A4 и A5)
  EthernetClient client;
  EthernetServer server = EthernetServer(80);
  extern const uint8_t MediumFont[];                         // Подключаем шрифт MediumFont.
  OneWire ds(2); //   вход датчика 18b20 (D10)
  float temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20
  long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
  const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок
  byte data[2];




  void setup() {
  // pinMode(5, INPUT);
      myOLED.begin(&Wire);                                   // Инициируем работу с дисплеем, указав ссылку на объект для работы с шиной I2C на которой находится дисплей (по умолчанию &Wire).
      myOLED.setFont(MediumFont);                            // Указываем шрифт который требуется использовать для вывода цифр и текста.

    Serial.begin(9600);

    // MAC адрес, должен быть уникальным в сети
  byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C};  // MAC-адрес
  byte ip[] = {192, 168, 7, 148};  // IP-адрес
  byte myDNS[] = {8, 8, 8, 8};  // адрес DNS-сервера
  byte gateway[] = {192, 168, 7, 1};  // адрес сетевого шлюза
  byte subnet[] = {255, 255, 255, 0};  // маска подсети
    Ethernet.begin(mac,ip, myDNS, gateway, subnet); // инициализация контроллера
    server.begin(); // включаем ожидание входящих соединений
    Serial.println("localIP: ");
    Serial.println(Ethernet.localIP());
    Serial.println("subnetMask: ");
    Serial.println(Ethernet.subnetMask());
    Serial.println("gatewayIP: ");
    Serial.println(Ethernet.gatewayIP());
    Serial.println("dnsServerIP: ");
    Serial.println(Ethernet.dnsServerIP());
  // Serial.println("digitalRead(5): ");
  // Serial.println(digitalRead(5));
    }


  void loop() {
    delay(500);
    detectTemperature(); // Определяем температуру от датчика DS18b20
    // Выводим полученное значение температуры в монитор порта
    Serial.println(temperature);

    myOLED.setCursor(1,1); // Устанавливаем курсор в 1 столбец 1 строки.
    myOLED.print("TEMP:");
  //  myOLED.print(temperature);
  // listen for incoming clients
  //EthernetClient client = server.available();
  if (client) {
      Serial.println("new client");
      // an http request ends with a blank line
      boolean 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("");
      client.println("");

      client.println("Temperature-1: ");
      client.println(temperature); 
      client.println("");
      client.println("Temperature-2: ");
      client.println("?");
      client.println("");

      client.println("");
  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");
  }
  }

  int detectTemperature(){

  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);

    if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
    {
      lastUpdateTime = millis();
      ds.reset();
      ds.write(0xCC);
      ds.write(0xBE);
      data[0] = ds.read();
      data[1] = ds.read();

      // Формируем значение
        temperature =  ((data[1] << 8) | data[0]) * 0.0625;
    }
  } ```

ENC28J60 в каком исполнении - Nano shield?

Да, вот такой

Перекиньте на 3, 4, 5…

я пробовал 5,6,7,9,10
стоит пробовать все цифровые пины?

Свободные цифровые.
Шилдом заняты 2, 10,11, 12, 13.

о! спасибо! давно искал эту информацию!

Перепробовал 3,4,5,6,7,8,9 - не показывает температуру (кроме 2 пина, но выдает с него с перебоями - видимо делится пин с передачей данных по сети)
Снял шилд, выкинул все, что касается сети и перепробовал несколько пинов - температуру выдает только с 2 пина, с остальных - нули
Может у меня бракованый нано?
вот с этим скетчем на 5 пине не выдает температуру, если переставляю на 2, то выдает стабильно


OneWire ds(5); // Объект OneWire

float temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20

long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок

void setup(){
  Serial.begin(9600);
}

void loop(){
  detectTemperature(); // Определяем температуру от датчика DS18b20
  Serial.println(temperature); // Выводим полученное значение температуры
  
 }

int detectTemperature(){

  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);

  if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
  {
    lastUpdateTime = millis();
    ds.reset();
    ds.write(0xCC);
    ds.write(0xBE);
    data[0] = ds.read();
    data[1] = ds.read();

    // Формируем значение
      temperature =  ((data[1] << 8) | data[0]) * 0.0625;
  }
}```

Берете пример из библиотеки DallasTemperature, нану, ds18b20, резистор, проводки и крафтите из этого макет. Проверяете пины нано.

В итоге купил новую нано - все пины работают) видимо аппаратная проблема была