#1 2017-11-10 12:01:26

VaDoSiQ
Учасник
З Ukraine
Зареєстрований: 2017-02-06
Повідомлень: 6

Проблемы с W5100

Здравствуйте, уважаемые форумчане!
Столкнулся с такой проблемой:
Имеется Arduino Uno, Ethernet Shield W5100 и датчик освещенности(измерения люксов), и 8 релейный модуль.
В общем задача такова: Arduino шлёт  моему серверу сигнал на получение ответа, включать ли ей то или иное реле. Далее ардуина принимает ответ, если 1, зажигает реле, если 0 ничего не делает, параллельно она отправляет на мой сайт значения с датчика освещенности. Всё вроде бы работает, НО. Шилд со временем подвисает и не пингуется. Помогает ему лишь перезагрузка всей системы. В общем мне нужно узнать, в чем может быть проблема, в самом шилде или же в программе, сразу скажу ардуина и шилд не оригинальные, код программы ниже. Буду благодарен за ответы по делу. Спасибо.

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <BH1750.h>
#define PIN5 5
BH1750 lightMeter;
byte MAC[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress IP(10, 10, 1, 55);
EthernetServer arduino(81);
EthernetClient client;
boolean InboundRequest = 0;
char resource[] = "example.com";

void setup() {
  pinMode(PIN5, OUTPUT);
  Serial.begin(9600);
  lightMeter.begin();
  Ethernet.begin(MAC, IP);
  arduino.begin();
}

void loop() {
  EthernetClient client = arduino.available();
  if(client) {
    boolean EmptyLine = true;
    while(client.connected()) {
      if(client.available()) {
        char data = client.read();
        if(data == '\n' && EmptyLine) {
          client.println("HTTP/1.1 200 OK");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head>");
          client.println("<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"http://arduino.cc/en/favicon.png</a>\">");
          client.println("</head>");
          client.println("<body>");
          client.println("</body>");
          client.println("</html>");
          break;
        }
        if(InboundRequest && data == ' ') {
          InboundRequest = 0;
        }
        if(data == '?') {
          InboundRequest = 1;
        }
        if(InboundRequest == 1) {
          int value = data - '0';
          digitalWrite(PIN5, value);
          Response();
        }
        if(data == '\n') {
          EmptyLine = true;
        } else if(data != '\r') {
          EmptyLine = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}



void Response() { 
  if(client.connect(resource, 80)) {
    String answer = "GET /update.php?status=";
    answer+=digitalRead(PIN5);
    answer+="&lux=";
    answer+=lightMeter.readLightLevel();
    client.println(answer);
    client.println("Host: example.com");
    client.println("Connection: close");
    Serial.println(answer);
  } else {
    Serial.println("Connection failed.");
  }
  client.stop();
}

Остання редакція VaDoSiQ (2017-11-10 12:04:07)

Неактивний

#2 2017-11-12 23:53:13

Lic Control
Учасник
Зареєстрований: 2016-01-23
Повідомлень: 124

Re: Проблемы с W5100

Мой опыт работы с W5100 говорит о том, что зависания для нее обычное дело. Используйте Watchdog и сбрасывайте его если есть  соединение.

Неактивний

#3 2017-11-13 02:02:56

VaDoSiQ
Учасник
З Ukraine
Зареєстрований: 2017-02-06
Повідомлень: 6

Re: Проблемы с W5100

Lic Control пише:

Мой опыт работы с W5100 говорит о том, что зависания для нее обычное дело. Используйте Watchdog и сбрасывайте его если есть  соединение.

Я извиняюсь, можно подробнее? Про Watchdog я читал. Как аппаратно перезагрузить шилд? Я так понимаю ножку ресет на шилде, нужно выбрасывать?

Неактивний

#4 2017-12-19 22:26:11

merser
Гість

Re: Проблемы с W5100

Была такая же беда, - часто подвисал сервер на W5100. Сервер имел выход в inet. Заметил, что с inet'а шло много левых запросов на 80 порт. Поменял порт на сервере, на отличный от 80, и все наладилось.
W5100 зависает, если на нее идет много запросов

#5 2018-03-17 13:05:04

кудрявый
Учасник
Зареєстрований: 2017-12-14
Повідомлень: 16

Re: Проблемы с W5100

В своей конструкции с Arduino Uno, Ethernet Shield W5100 проблему зависаний решил так:
резет шилда - отрезал ногу разьема на шилде (нужно в двух местах собственно резет и его дубль на ISP колодке).
Резет завел от одного из выходов УНО и делаю его программно, в секции сетап скетча.
Если случается зависание - резет этого бутерброда через Watchdog.
Можно принудительно резетить это все через определенное время, я сделал это раз в сутки, просто без причин. Можно через 2 мин (видел описание подобной конструкции)

Неактивний

#6 2018-04-02 21:13:58

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: Проблемы с W5100

Lic Control пише:

Мой опыт работы с W5100 говорит о том, что зависания для нее обычное дело.

Проблемы с W5100 и как с ними борются описаны здесь: Ethernet Shield на W5100.
Может поможет? ... если не боитесь паяльника  lol

P.S. А ресетить часто сетевую плату - дело дурное.

Неактивний

#7 2018-04-02 21:34:46

кудрявый
Учасник
Зареєстрований: 2017-12-14
Повідомлень: 16

Re: Проблемы с W5100

Olej пише:
Lic Control пише:

Мой опыт работы с W5100 говорит о том, что зависания для нее обычное дело.

Проблемы с W5100 и как с ними борются описаны здесь: Ethernet Shield на W5100.
Может поможет? ... если не боитесь паяльника  lol

P.S. А ресетить часто сетевую плату - дело дурное.

Дурное дело - давать советы, когда ты не в теме ))
В приведенной статье - исправление ошибки монтажа (если она есть - 510 ом вместо 49,9 по даташиту).
Из-за этого плата не работает с длинными (5м уже длинный) кабелями и капризна с разными роутерами/комутаторами.
Но если уж заработала, то работает...
А зависает она по причине перегрузки микроконтроллера W5100 и тут паяльник можно... (гусары молчать!)
Увы, перезапуск зависшей платы (шилда) - только через ресет.
Куча проектов, где авторы жалуются на такую "особенность" W5100. Погуглите.
Вот один из них.
цитата:
"Необходимо учитывать следующее. Веб - сервер на Arduino не использует многопользовательскую мультипрограммную операционную систему. Поэтому при обращении одного клиента передача данных будет идти только к нему. Второй клиент начнет получать данные только после закрытия соединения с первым клиентом. Поэтому большая HTML страница должна быть разбита на маленькие, которые быстро загружаются и сервер закрывает соединение. Благодаря этому может появиться возможность обращению к серверу 2-3 клиентов почти одновременно. Примерно через 10-15 минут интенсивного обращения к серверу он зависает (по опыту виснет Ethernet Shield W5100)."

Неактивний

#8 2018-04-03 18:39:31

admin
Administrator
З Киев
Зареєстрований: 2014-06-09
Повідомлень: 67

Re: Проблемы с W5100

Лишние сообщения потер. Толерантность и эмпатия наше всё.

Неактивний

#9 2018-04-04 09:50:13

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Проблемы с W5100

admin пише:

Лишние сообщения потер. Толерантность и эмпатия наше всё.

Эх, теперь Олег просто хамовитый умник для  истории (

осталось стереть все его темы )

Неактивний

#10 2019-10-25 19:55:06

Роман325
Гість

Re: Проблемы с W5100

Привет, друзья! Вкратце опишу проблему (она явно в W5100). Есть Uno на которую я ставлю Ethernet shield, модуль для RS485 и LCD1610. На 485 приходят данные, обрабатываются и посылаются через Ethernet дальше. Это в идеале. Два дня назад все именно так и работало. Потом добавил LCD. Перестало работать. Откинул и экран и Ethetrnet. Помониторил - работает. Добавил экран - работает. Инициализирую Ethernet - не работает. Откидываю экран, но оставляю Ethernet - не работает. Что это может быть? конфликт двух плат? Кто может подсказать?

#11 2019-10-25 19:58:29

Роман325
Гість

Re: Проблемы с W5100

Причем, когда запускаешь всю эту махину - первый пакет данных по 485 приходит корректно - дальше показывает, что плата принимает нули

#12 2019-10-25 20:20:15

Avazart
Учасник
Зареєстрований: 2019-05-05
Повідомлень: 181

Re: Проблемы с W5100

Да дело в том что код по  примерам - не лучший. Так непонятная фигня с чтением по одному байту и отловом конца строки.

Кроме того UNO для таких вещей маловато, лучше брать MEGA + модуль SD картридер.
С UNO будут проблемы как со свободными пинтами так и с объемом памяти. А при превышении памяти могут быть разные глюки в том числе подвисания.


В обще не практичная связка, как правило практичнее сразу брать ESP12E (NodeMcu, Wemos) и конектица в WiFi роутеру.
Кроме того есть новая плата ESP32.

Остання редакція Avazart (2019-10-25 20:28:44)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму