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

Тема в разделе "Закажу проект", создана пользователем Митька, 30 май 2019.

  1. Митька

    Митька Нерд

    Доброго времени суток, есть код который отправляет показания температуры GET запросом, но проходит какое то время и отправка отваливается, т.е данные не пишутся в БД, думал может мк подвисает прикрутил Watchdog, но нет проработало сутки и опять отвалилось, код прилагаю, прошу помощи за определенную плату, заранее спасибо

    Код (C++):
    #include <UIPEthernet.h>
    #include <SPI.h>
    #include <math.h>
    #include <avr/wdt.h>

    #define TERMIST_B 4300
    #define VIN 5.0

    unsigned long int timeConn = millis();  

    float voltage0;
    float voltage1;
    float r0;
    float r1;
    float t1;
    float t2;

    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);
      Serial.println("Watchdog enabled.");
      wdt_enable (WDTO_4S);
    }

    int timer = 0;

    void loop(){
     
       voltage0 = analogRead(A0) * VIN / 1023.0;
       voltage1 = analogRead(A1) * VIN / 1023.0;
       r0 = voltage0 / (VIN - voltage0);
       r1 = voltage1 / (VIN - voltage1);
       t1 = 1./( 1./(TERMIST_B)*log(r0)+1./(25. + 273.) ) - 273;
       t2 = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;
     
       if (millis() - timeConn > 60000) {
        sendData(t1,t2);
        timeConn = millis();
       }        
     
       if(!(millis()%1000)){
         timer++;
         Serial.println(timer);
       }
     
       wdt_reset();

    }

    void sendData(float t1,float t2) {
       client.connect(server, 80);
       String msg = "GET /test.php?t1="+ String(t1) + "&t2="+String(t2);
       client.println(msg);
       client.stop();
       client.flush();
       Serial.print("send HTTP - ");
       Serial.print(t1);
       Serial.print(" - ");
       Serial.println(t2);
    }
     
  2. SergeiL

    SergeiL Оракул Модератор

    А железо то какое используется?
     
  3. Митька

    Митька Нерд

    ардуино уно, HanRun HR 911105A 15/26, температурный датчик 2 шт
     
  4. SergeiL

    SergeiL Оракул Модератор

    HanRun HR 911105A
    На каком он чипе?
     
  5. Чун

    Чун Нерд

    Судя по UIPEthernet.h на enc28j60
     
  6. b707

    b707 Гуру

    поработал день и отвалился - для enc28j60 это норма.
     
  7. Митька

    Митька Нерд

  8. SergeiL

    SergeiL Оракул Модератор

    Ну я с enc28j60 практического опыта не имел, поэтому не подскажу про надежность.
    W5500 с Ethernet2.h очень надежно работают годами.
     
  9. Митька

    Митька Нерд

    тогда получается, попробовать заменить, то что у меня на это W5500 с Ethernet2 ?
     
  10. SergeiL

    SergeiL Оракул Модератор

    Может у кого то есть положительный опыт работы с enc28j60, и он поделится им.
    У меня валяется плата с enc28j60, но руки до нее не дошли, поэтому я помочь советами по ней не смогу.:(
     
  11. Митька

    Митька Нерд

    я могу заменить железо мне нужно, что бы работало
     
  12. parovoZZ

    parovoZZ Гуру

  13. Митька

    Митька Нерд

  14. Developer-RU

    Developer-RU Гик

    получай ответ от сервера, сделай счетчик ошибок отправки и к примеру если три раза подряд не пришло 200 ок , то рестартуй ардуино
     
  15. Митька

    Митька Нерд

    к примеру если три раза подряд не пришло 200 ок - я извиняюсь, но не совсем понял, что вы имели ввиду ?
     
  16. Developer-RU

    Developer-RU Гик

    На это "String msg ="GET /test.php?t1="+ String(t1)+"&t2="+String(t2); " с вебсервера приходит ответ, получи его.
    Если нет, то нет связи, рестартуй ардуино вместе с ethrnet...

    Код (C++):
     
            client.print(String("GET ") + url + " HTTP/1.1\r\n" +
            "Host: " + host + "\r\n" +
            "Connection: close\r\n\r\n");
            unsigned long timeout = millis();
            while (client.available() == 0) {
                if (millis() - timeout > 500) {
                    Serial.println(">>> Client Timeout !");
                    client.stop();
                    break;
                }
            }

            String line = "";
            while(client.available()) Serial.print(line);
           
    Как то так. для примера
     
  17. Митька

    Митька Нерд

    понятно спасибо

    если я правильно понимаю, то при ресете ардуино ethrnet тоже перегрузиться т.е отдельно не нужно писать код для рестарта ethrnet ?
     
  18. Developer-RU

    Developer-RU Гик

    [​IMG]
     
  19. Митька

    Митька Нерд

    не понятно
     
  20. Митька

    Митька Нерд


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

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

    с чем может быть связано, кто знает ответьте, заранее спасибо

    сам код

    Код (C++):
    #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;

    float t1 = 10;
    float t2 = 20;

    void setup() {
      Serial.begin(9600);
      Ethernet.begin(mac, ip);
      Serial.println("connecting...");
      if (client.connect(server, 80)) {
        Serial.println("---------------");
        String msg = "GET /test.php?t1="+ String(t1) + "&t2="+String(t2);
        client.println(msg);
        client.println();
      }
      else {
        // if you didn't get a connection to the server:
        Serial.println("connection failed");
      }
    }
    void loop() {
      // Если есть доступные биты, читаем их и выводим на экран
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
      // Если соединение прервано, отключаем клиент
      if (!client.connected()) {
        Serial.println();
        Serial.println("---------------");
        Serial.println("disconnecting");
        client.stop();
     
        while (true);
      }
    }
    содержимое файла php

    PHP:
    <?php echo 1; ?>