Доброго времени суток, есть код который отправляет показания температуры 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); }
Ну я с enc28j60 практического опыта не имел, поэтому не подскажу про надежность. W5500 с Ethernet2.h очень надежно работают годами.
Может у кого то есть положительный опыт работы с enc28j60, и он поделится им. У меня валяется плата с enc28j60, но руки до нее не дошли, поэтому я помочь советами по ней не смогу.
Вот здесь с ней работают http://narodstream.ru/avr_urok_40_lan_enc28j60-chast-1/ И, судя по всему, очень даже успешно.
получай ответ от сервера, сделай счетчик ошибок отправки и к примеру если три раза подряд не пришло 200 ок , то рестартуй ардуино
к примеру если три раза подряд не пришло 200 ок - я извиняюсь, но не совсем понял, что вы имели ввиду ?
На это "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); Как то так. для примера
понятно спасибо если я правильно понимаю, то при ресете ардуино ethrnet тоже перегрузиться т.е отдельно не нужно писать код для рестарта ethrnet ?
немного разобрался, но все равно тормозит, может кто подскажет куда дальше копать этот код отправляет на сервер апач запрос, на сервере лежит файл 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; ?>