Ethernet connected

khalex
Offline
Зарегистрирован: 12.03.2016

Доброго

Уважаемые гуру, подскажите что делаю не так? Соединение поднимается и как я понимаю если я выну Ethernet кабель из шилда должно вывести сообщение "disconennecting" но этого не происходит... :(((

void loop() {

  if (client.connected())
  {
    Serial.println("connected RUN");
    
  }
   if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
 
}
}
 
 
sadman41
Offline
Зарегистрирован: 19.10.2016

Вы рвете физический канал. А драйвер работает на более высшем уровне - TCP сессии. Она же должна отлететь через некоторое время, которое задано производителем чипа, если мы говорим о Wiznet.

khalex
Offline
Зарегистрирован: 12.03.2016

Что то уж очень длительное время :( Как узнать о разрыве быстрее? Соединяю ардуино с крестроном. Борюсь с тем что ардуино через время теряет соединение с крестроном и если крестрон говорит что связь потеряна то ардуино счастливо прибывает в состоянии что все хорошо :(. Пробовал с китайской W5100 и ENC28J60 Ethernet щит ( библиотеки Ethernet и UIPEthernet )

sadman41
Offline
Зарегистрирован: 19.10.2016

Длительное - это сколько?

Не знаю, что это за крестон, поэтому ничего вам посоветовать не могу. Он дисконнектит через отключение физ.канала что ли? Крайне атипично поведение на мой взгляд. Собака, наверное, зарыта где-то в другом месте.

Тем не менее: на W5100 я не нашел возможности получить программно состояние физлинка - таковых регистров просто нет. W5500, вроде, имеет что-то подобное, но лучше в даташите уточнить. ENC - не помню, вроде тоже через регистры можно было достать. Но в этом случае придется писать свои функции, которые ходят к чипу напрямую и добывают оттуда нужные данные.

Что-то я припоминаю, насчет w5100... Экстремалы,вроде, вешались оптопарой на светодиод Link для отслеживания состояния физканала.

 

khalex
Offline
Зарегистрирован: 12.03.2016

Крестрон - состема умного дома. Длительно - более 10 минут. Такое чуство что функция connected декоративная и никак не работает.. :(((

sadman41
Offline
Зарегистрирован: 19.10.2016

Функция не декоративная (в отличии от flush()), она проверяет состояние сокетов в чипе - в Wiznet весь стек протокола реализован внутри чипа. Время, действительно, большое - таймаут TCP-сессии, по-моему, секунды три должен быть. До дома доберусь - проверю, конечно, но это будет через неделю. Можете просто с PC телнетом подергать ChatServer из примеров, чтобы исключить возможные прибабахи вашего крестона. Просто сессию пооткрывайте - позакрывайте. Может дебага немного добавить стоит в стоковый скетч. В моих прожектах я таких долгих ожиданий не припомню.

Но таймауты вы чипу не подкрутите, как мне кажется. Не помню в нем таких настроек.

khalex
Offline
Зарегистрирован: 12.03.2016

Попробую переписать с принудительным закрытием  и открытием соединение. Логика просто сама напрашивалась: отвалилось - переподключись .. а не вышло, думал "в лыжи обутый..." но похоже не я в лыжах...

sadman41
Offline
Зарегистрирован: 19.10.2016

Кстати, обратите внимание на Note:

Whether or not the client is connected. Note that a client is considered connected if the connection has been closed but there is still unread data.

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

Помогите пожалуйста!
В интернете нашел проект с кодом .
Хочу сделать вочдог на arduino mini pro.
#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.h
#include <MsTimer2.h>

#define RSTpin 9
#define POWERpin 8

int InactivityPeriod = 10 * 60; // Время между опросами ресурсов, 10 минут.

byte mac[] = {0xC0, 0xFF, 0xEC, 0xAC, 0xA0, 0x01}; // mac-адрес. Должен не свопадать ни с одним из существующих в данной сети
byte ip[] = {192, 168, 1, 112}; // ip-адрес устройста.

SOCKET pingSocket = 0;

char buffer [256];
ICMPPing ping(pingSocket, (uint16_t)random(0, 255));

byte ErrorCont;
int Inactivity;

void TickEvery1s() // Эта процедура вызывается каждые полсекунды
{
  if (Inactivity > 0) Inactivity--;
}

void setup()
{
  Inactivity = InactivityPeriod;
  pinMode(RSTpin, OUTPUT);
  digitalWrite(RSTpin, LOW); delay(20); digitalWrite(RSTpin, HIGH); delay(200);  // Перезагружаем плату
  pinMode(POWERpin, OUTPUT);
  digitalWrite(POWERpin, HIGH);  //Включаем нагрузку
  Ethernet.begin(mac, ip);
  MsTimer2::set(1000, TickEvery1s); // период вызова каждые 1000ms
  MsTimer2::start();

}

void loop()
{
  //while (Inactivity>0) {delay(1);}
  if (Inactivity > 0) {
    return;
    delay(1);
  }
  ErrorCont = 0;
  for (byte i = 0; i <= 3; i++) {
    ICMPEchoReply GoogleechoReply = ping(IPAddress (8, 8, 8, 8), 2);
    if (GoogleechoReply.status != SUCCESS) {
      ErrorCont++;
    }
    delay(500);
  }
  for (byte i = 0; i <= 3; i++) {
    ICMPEchoReply YandexechoReply = ping(IPAddress (77, 88, 8, _, 2);
    if (YandexechoReply.status != SUCCESS) {
      ErrorCont++;
    }
    delay(500);
  }

  if (ErrorCont >= _ {
    digitalWrite(POWERpin, LOW); delay(10000); digitalWrite(POWERpin, HIGH);
  }  // Перезагружаем нагрузку

  Inactivity = InactivityPeriod;  // Заводим таймер до следующей проверки
}

Начинаю его проверять выходит множество ошибок. Может проблема в библиотеке Ethernet.h. Менял ее
на Ethernet2.h. Тоже не помогает.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

а автор чо говорит?

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

До автора не достучатся. Так можно с этим кодом что то сделать?

sadman41
Offline
Зарегистрирован: 19.10.2016

Что-то - несомненно можно 

b707
Онлайн
Зарегистрирован: 26.05.2017

ChemicalBrathers пишет:

Так можно с этим кодом что то сделать?

можно. Выкинуть.

Лучше обьясните своими словами, что вы пытаетесь сделать. Причем тут ватчдог (в коде я его не увидел) и зачем для этого интернет

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

Провел в деревне интернет. Использовал 4g модем включенный в роутер. Модем временами виснет. Помогает выключение из розетки роутера. Хотел собрать на амперке мини про (Atmega328) и ethernet модуле (w5500) схему для проверки соединения с интернетом и в случае зависания перезагрузки роутера через реле.

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

Что?

b707
Онлайн
Зарегистрирован: 26.05.2017
ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

Просмотрел, Там коды для wifi модуля, которого просто нет.  А для w5500?

b707
Онлайн
Зарегистрирован: 26.05.2017

ChemicalBrathers пишет:

А для w5500?

пишите для W5500. но если вы новичок - проще и быстрее будет купить WiFi модуль и повторить чужой код.

Код. что вы привели выше -не имеет никакой ценности. В нем столько совершенно бредовых ошибок, что похоже вы его просто неверно скопировали откуда-то

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

b707 пишет:

ChemicalBrathers пишет:

А для w5500?

пишите для W5500. но если вы новичок - проще и быстрее будет купить WiFi модуль и повторить чужой код.

Код. что вы привели выше -не имеет никакой ценности. В нем столько совершенно бредовых ошибок, что похоже вы его просто неверно скопировали откуда-то

https://mysku.ru/blog/aliexpress/53349.html

Ссылка оттуда. То есть там полнейший бред?

b707
Онлайн
Зарегистрирован: 26.05.2017

ChemicalBrathers пишет:

https://mysku.ru/blog/aliexpress/53349.html

Ссылка оттуда. То есть там полнейший бред?

там нет листинга кода, а качать архив я не стану. Посмотрите сами на код. что вы вставили в сообщение выше - там какие-то псевдосимволы и даже смайлики вместо цифр. Неужели и в исходнике так же? или вы в коде настолько ничего не понимаете, что даже не заметили этих косяков?

Кроме того, в коде есть совершенно явные логические ошибки.

Но даже если вы все скачали правильно - по ссылке написано, что используется модифицированная библиотека. Вы эту библиотеку установили? Без нее ничего работать и не должно

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

b707 пишет:

ChemicalBrathers пишет:

https://mysku.ru/blog/aliexpress/53349.html

Ссылка оттуда. То есть там полнейший бред?

там нет листинга кода, а качать архив я не стану. Посмотрите сами на код. что вы вставили в сообщение выше - там какие-то псевдосимволы и даже смайлики вместо цифр. Неужели и в исходнике так же? или вы в коде настолько ничего не понимаете, что даже не заметили этих косяков?

Кроме того, в коде есть совершенно явные логические ошибки.

Но даже если вы все скачали правильно - по ссылке написано, что используется модифицированная библиотека. Вы эту библиотеку установили? Без нее ничего работать и не должно

М.. да. Модифицированную библиотеку поставил. Ну так что с ней так и без нее ошибки в компиляции

b707
Онлайн
Зарегистрирован: 26.05.2017

ChemicalBrathers пишет:

Ну так что с ней так и без нее ошибки в компиляции

ну ошибки и ошибки... это не страшно. По каждой ошибке система вам пишет что за ошибка и в какой строке. Ищите, разбирайтесь в чем причина - и исправляйте

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

А что, можно взять за исходник.

MaksVV
Offline
Зарегистрирован: 06.08.2015
void setup () {}
void loop(){}

 

ChemicalBrathers
Offline
Зарегистрирован: 28.10.2019

:)