Viktor_EX píše: ↑27 zář 2022, 16:04
aha, diky, tak ja to vyzkousim.
ted jsem daval tuto cast programu na ukoncovani client.session:
Kód: Vybrat vše
connectLoop++;
if(connectLoop > 2000)
{
// then close the connection from this end.
//Serial.println();
//Serial.println(F("Timeout"));
client.stop();
}
// this is a delay for the connectLoop timing
delay(1);
Čo je to za fragment kódu a kde patrí v tom pôvodnom programe? Máš to použité v cykle while(client.connected() ) ?
To je počítadlo pripojených klientov, alebo sa to inkrementuje po každom ďalšom výpise pre klienta? To máš to socket spojenie otvorené až sa vykoná 2000 pripojení? Ten Ethernet Wiznet dokáže mať otvorené 4 socket spojenia.
Robil som napr. projekt termostat na WIznet W5100 v režime servera. Ak sa mi splnila podmienka if client(), tak som mu proste vypísal výstup a ihneď som ukončil spojenie cez client.stop(). Klient dostal HTML stránku, kde mal meta hlavičku Refresh s časovým parametrom (napr. 10 alebo až 30 sekúnd), tým si klient o 10, resp. 30 sekúnd sám znova vyžiadal totožnú HTML stránku, ktorú mu mikrokontróler znova odoslal.
Tak stránka pôsobila "dynamicky", že sa na nej menily hodnoty, stavy... Frčí mi to na Arduine Uno s 2 kB RAM non-stop. Po komplikácii mi môj projekt hlási využitie RAM 44%, využitie flash 70%. Sú tam celkom 3 HTML stránky. Okrem dashboardu je tam spracovanie HTML formu pre zápis dát do EEPROM a podstránka s JSON výstupom pre ďalšieho klienta, ktorý môže tieto dáta Publishovať na MQTT Broker. Nezávisle na webserveri sa mi tam ešte vykonáva logika termostatu (millis rutina) pre nastavenie stavu výstupu z cieľovej teploty, hysterézy a aktuálne nameranej teploty cez DS18B20 + výpis aktuálnej IP konfigurácie a stavov na UART.
Preto ako píšeš, že ping ti prešiel, teda ti seklo Arduino, ak ti webserver nefunguje. Ten ping obslúžil Wiznet W5100, ktorý má stále platnú IP konfiguráciu. Videl by som to tak, že ti niekde došla RAM po XY spojeniach od klienta. Chyba môže byť aj inde v kóde okolo, ktorý si vôbec neukázal.