отваливается отправка данных

Митька
Offline
Зарегистрирован: 13.12.2015

Доброго времени суток есть код, который отправляет get запрос на web сервер и дергает файл php, файл php отправляет обратно клиенту т.е ардуино число 1 если все хорошо но проблема в том, что если смотреть монитор, то отправка происходит не всегда, на 5 или 10 раз т.е открыл монитор посмотрел, пришла единица или нет, если нет закрыл и т.д скажите пожалуйста в чем причина ? что так происходит ведь ответ должен приходить всегда или я ошибаюсь

сам код на ардуино

#include <UIPEthernet.h>
#include <SPI.h>
 
 
byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C};
byte ip[] = {192, 168, 1, 30};
byte server[] = {192, 168, 1, 6};
 
EthernetClient client;
 
void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
 
  delay(1000);
 
  Serial.println("connecting...");
 
  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /test.php");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}
 
void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }


  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

 

код php файла 

<?php

echo 1;

?>

 

заранее спасибо за ответ 

 

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

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

А так, конечно, и в UIPEthernet есть проблемы и ENC28J60 сама по себе капризная - ловить с ней баг можно долго. Плавали, знаем.

Скетч странный, но криминала в нём я не вижу.  Нужно моделировать ситуацию на железе...

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Митька пишет:
есть код, который отправляет get запрос на web сервер и дергает файл php, файл php отправляет обратно клиенту т.е ардуино число 1 если все хорошо но проблема в том, что если смотреть монитор, то отправка происходит не всегда, на 5 или 10 раз т.е открыл монитор посмотрел, пришла единица или нет, если нет закрыл и т.д скажите пожалуйста в чем причина ?

Значит в мониторе видите connecting... затем connected и совсем редко появляется единица, это так?
Судя по адресу сервера, пых-пых где-то рядом, там-то что происходит?
Есть ли соединения от клиента? Приходят ли запросы и в каком виде?

Митька
Offline
Зарегистрирован: 13.12.2015

Алексей. пишет:

Митька пишет:
есть код, который отправляет get запрос на web сервер и дергает файл php, файл php отправляет обратно клиенту т.е ардуино число 1 если все хорошо но проблема в том, что если смотреть монитор, то отправка происходит не всегда, на 5 или 10 раз т.е открыл монитор посмотрел, пришла единица или нет, если нет закрыл и т.д скажите пожалуйста в чем причина ?

Значит в мониторе видите connecting... затем connected и совсем редко появляется единица, это так?
Судя по адресу сервера, пых-пых где-то рядом, там-то что происходит?
Есть ли соединения от клиента? Приходят ли запросы и в каком виде?

Значит в мониторе видите connecting... затем connected и совсем редко появляется единица, это так?

да, это так, но методом научного тыка выяснил, что если смотреть монитор один раз в 2 минуты, то все нормально единица приходит, а вот если чаще смотреть монитор т.е один раз в минуту, то единица не приходит

Судя по адресу сервера, пых-пых где-то рядом, там-то что происходит?

сервер это просто нуот, на котором установлен денвер, веб сервер апач и БД sql, суть такова что с ардуино идет отправка данных и эти данные пишутся в БД, а единицу я хочу возвращать на ардуино для того, что бы быть уверенным, что запись прошла корректно  

Есть ли соединения от клиента? Приходят ли запросы и в каком виде?

вот это не знаю как посмотреть или сделать, подскажите пожалуйста 

заранее спасибо за ваш ответ 

Митька
Offline
Зарегистрирован: 13.12.2015

sadman41 пишет:

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

А так, конечно, и в UIPEthernet есть проблемы и ENC28J60 сама по себе капризная - ловить с ней баг можно долго. Плавали, знаем.

Скетч странный, но криминала в нём я не вижу.  Нужно моделировать ситуацию на железе...

А так, конечно, и в UIPEthernet есть проблемы и ENC28J60 сама по себе капризная - ловить с ней баг можно долго. Плавали, знаем.

подскажите пожалуйста на, что можно заменить ENC28J60, что бы не ловить баг 

заранее спасибо за ваш ответ 

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

Для простого ардуинщика выбор невелик - или ENC28J60 или что-то из Wiznet.

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Митька пишет:
Есть ли соединения от клиента? Приходят ли запросы и в каком виде?
вот это не знаю как посмотреть или сделать

Что происходит на сетевой карте можно смотреть брутальным tcpdump-ом или оконным wireshark-ом, по мне они оба хороши.
tcpdump не требует окон, удобен для захвата пакетов на устройствах с ограниченными ресурсами, например на wifi роутерах.
wireshark прост в управлении, есть примеры фильтров и возможность их сохранения.

Если соединения всё-же устанавливаются, то запросы должны (могут) как-то логироваться вашим сервером, вам виднее.

Митька пишет:
сервер это просто нуот, на котором установлен денвер, веб сервер апач и БД sql, суть такова что с ардуино идет отправка данных и эти данные пишутся в БД

Если сервер "БД sql" это MySQL, для ардуины есть клиент MySQL_Connector_Arduino.
Для сохранения данных в БД заход через web не самый близкий однако.

Митька пишет:
методом научного тыка выяснил, что если смотреть монитор один раз в 2 минуты, то все нормально единица приходит, а вот если чаще смотреть монитор т.е один раз в минуту, то единица не приходит

Просто предположение.
Езернет шилд подключен к ардуине через spi(четыре линии) и питание(две линии), ресет на шилде видимо не задействован.
Каждый раз запуская монитор, этот монитор ресетит ардуину, а шилд не ресетится, возможно из за этого поведение его не предсказуемо.
Практическое применение перезагрузки ардуины каждую минуту(и чаще) мне не понятно.

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

Алексей. пишет:

Езернет шилд подключен к ардуине через spi(четыре линии) и питание(две линии), ресет на шилде видимо не задействован.
Каждый раз запуская монитор, этот монитор ресетит ардуину, а шилд не ресетится, возможно из за этого поведение его не предсказуемо.

Ethernet.begin() всё делает, что нужно:  init(mac); configure(ip,dns,gateway,subnet);, а в ините делается softreset. Так что тут проблем не должно быть.

 
Митька
Offline
Зарегистрирован: 13.12.2015

Алексей. пишет:

Езернет шилд подключен к ардуине через spi(четыре линии) и питание(две линии), ресет на шилде видимо не задействован.
Каждый раз запуская монитор, этот монитор ресетит ардуину, а шилд не ресетится, возможно из за этого поведение его не предсказуемо.
Практическое применение перезагрузки ардуины каждую минуту(и чаще) мне не понятно.

у меня подключение организовано так 


подскажите пожалуйста, что нужно сделать что бы это заработало нормально, если поменять железо, то могу поменять, если услуга, то готов обсудить цену 

мне нужно сделать что бы работало 

заранее спасибо за ваш ответ 

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

RES не надо подключать. А вот то, что питаете с 3.3V ардуины - это может оказаться проблемой. Я у себя драйвер ENC28J60 рихтовал, чтобы отслеживать ошибки. А иначе да - может брякнуться в самый неожиданный и непонятный пользователю момент.

Митька
Offline
Зарегистрирован: 13.12.2015

sadman41 пишет:

RES не надо подключать. А вот то, что питаете с 3.3V ардуины - это может оказаться проблемой. Я у себя драйвер ENC28J60 рихтовал, чтобы отслеживать ошибки. А иначе да - может брякнуться в самый неожиданный и непонятный пользователю момент.

 

А вот то, что питаете с 3.3V ардуины - это может оказаться проблемой.

получается нужно запитать отдельно от ардуины ?

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

На ардуине может стоять слабый стабилизатор. А на ENC может свой ещё стоять. Вобщем, надо посмотреть на оба девайса.

nik182
Offline
Зарегистрирован: 04.05.2015

На официальной уне 3.3В мах ток 150 мА. ENC28 по мануалу 250мА. Народ расказывает что в пике может и за 300мА  забрать. Однако питать ENC надо от отдельного источника на 3.3В. Если конечно стабилизатора на плате ENCа нет. 

Митька
Offline
Зарегистрирован: 13.12.2015

получается, проблема только в том, что нужно запитать отдельно ENC28J60 , получается так ? 

заранее спасибо за ответ 

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

Неверный вывод. Это одна из вероятных проблем. 

Чтобы найти действительную - нужно посидеть, башку почесать. Могу предоставить свой наработанный опыт на взаимовыгодной основе.

Митька
Offline
Зарегистрирован: 13.12.2015

sadman41 пишет:

Неверный вывод. Это одна из вероятных проблем. 

Чтобы найти действительную - нужно посидеть, башку почесать. Могу предоставить свой наработанный опыт на взаимовыгодной основе.

 

готов обсудить 

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

Ну, давайте обсудим. Напишите на wrk.sadman@gmail.com

qbit
Offline
Зарегистрирован: 18.03.2019

Митька пишет:

получается нужно запитать отдельно от ардуины ?

Померь тестером, если есть просадка на 3.3V, то однозначно требуется внешнее питание.