W5100 webserver po 6-24hod nedostupný
W5100 webserver po 6-24hod nedostupný
ahojte pánové, už ze mě dlouho nikdo neudělal kreténa, tak mám absťák
po delší době mám trochu volného času a vracím se ke svému projektu monitoringu FVE (protoze me trapi jedna drobnost)
mam arduino mega + W5100 ethernetshield + INA219 + INA3221 + barevny display.
pres I2C ctu napeti, ctu proudy, dokonce ovladam expander na ovladani rele, krmím barevny display pres tx/rx ... všechno funguje
prakticky jsem to všechno rozpohyboval na základě příkladů v základním znění.
data ale chci vidět na jednoduche html strance na mobilu na konkretni IP adrese.
pouzivam standardni webserver z arduino id, v soucasne dobe jsem se vratil k uplnemu zakladu tohoto webserveru (mel jsem tam hodne tabulkových tagů jako TR TD apod) + jsem doplnil zobrazovani asi 5 numerickych hodnot. vše funguje, ale ...
... ke koukání použivame asi 3 mobily a 2 pc ... když v prechodnem obdobi, kdy je malo slunce, koukam casteji, webserver se stane nedostupným asi po 6ti hodinách, když koukám méně, tak po 1-3 dnech. jednoduchý reset tlačítkem to napraví a vše jede supr dál, ihned se objeví stránka na všech zařízeních. uz jsem zmenil i IP, kdyby se to náhodou tlouklo s necim jinym. mam na routeru nastaven rozsah omezený DHCP, moji IP adresu pouzivam v rozsahu, kde mam jen pevne adresy v domě.
webserver mám v programu jako "podprogram", tedy samostatný void() a volám ho z hlavniho void() každé 2sec, a refresh html stránky je 4 sec.
samozřejmě než jsem vlezl do jámy lvové (sem) jsem vyčerpal všechny dostupné prostředky. našel jsem tema jako softreset pouze ethernetové karty, anebo tip, že se neuzavírají client.session, naplni se buffer a karta přestane komunikovat, anebo jsem pouzil funkci freeRam() nekde z internetu, ale to nepomohlo. jelikož nemám ambice stát se průmyslovým programátorem, spousta informací a znalostí mi chybí. softreset a to s temi session se mi nepodarilo realizovat.
jestli má někdo zapotřebí ze mě udělat debila, do toho (zkušenost z minule, cca 5 řádků programu se diskutovalo na 5-6 stranach fora dost nepříjemným způsobem). přesto by mi zároveň s tím pomohlo nějaké řešení. celá věc očividně funguje. takže hardwarově je to asi schopné existence. po vytuhnutí ethernetkarty ale arduino jede dál normálně, display bliká, dává čísla, všechno jede normálně.
možná než nejaké vytejrávání tady, a zkoušení mě z rozsáhlých neznalostí a dokazování mi, že strkám nos do věcí, kterým vůbec nerozumím, bych přivítal konstruktivní jednání s někým znalým, klidně za odměnu. přes PN si sjednáme telefony, emaily, opravdu bych to rád vyřešil.
diky předem, Viktor
po delší době mám trochu volného času a vracím se ke svému projektu monitoringu FVE (protoze me trapi jedna drobnost)
mam arduino mega + W5100 ethernetshield + INA219 + INA3221 + barevny display.
pres I2C ctu napeti, ctu proudy, dokonce ovladam expander na ovladani rele, krmím barevny display pres tx/rx ... všechno funguje
prakticky jsem to všechno rozpohyboval na základě příkladů v základním znění.
data ale chci vidět na jednoduche html strance na mobilu na konkretni IP adrese.
pouzivam standardni webserver z arduino id, v soucasne dobe jsem se vratil k uplnemu zakladu tohoto webserveru (mel jsem tam hodne tabulkových tagů jako TR TD apod) + jsem doplnil zobrazovani asi 5 numerickych hodnot. vše funguje, ale ...
... ke koukání použivame asi 3 mobily a 2 pc ... když v prechodnem obdobi, kdy je malo slunce, koukam casteji, webserver se stane nedostupným asi po 6ti hodinách, když koukám méně, tak po 1-3 dnech. jednoduchý reset tlačítkem to napraví a vše jede supr dál, ihned se objeví stránka na všech zařízeních. uz jsem zmenil i IP, kdyby se to náhodou tlouklo s necim jinym. mam na routeru nastaven rozsah omezený DHCP, moji IP adresu pouzivam v rozsahu, kde mam jen pevne adresy v domě.
webserver mám v programu jako "podprogram", tedy samostatný void() a volám ho z hlavniho void() každé 2sec, a refresh html stránky je 4 sec.
samozřejmě než jsem vlezl do jámy lvové (sem) jsem vyčerpal všechny dostupné prostředky. našel jsem tema jako softreset pouze ethernetové karty, anebo tip, že se neuzavírají client.session, naplni se buffer a karta přestane komunikovat, anebo jsem pouzil funkci freeRam() nekde z internetu, ale to nepomohlo. jelikož nemám ambice stát se průmyslovým programátorem, spousta informací a znalostí mi chybí. softreset a to s temi session se mi nepodarilo realizovat.
jestli má někdo zapotřebí ze mě udělat debila, do toho (zkušenost z minule, cca 5 řádků programu se diskutovalo na 5-6 stranach fora dost nepříjemným způsobem). přesto by mi zároveň s tím pomohlo nějaké řešení. celá věc očividně funguje. takže hardwarově je to asi schopné existence. po vytuhnutí ethernetkarty ale arduino jede dál normálně, display bliká, dává čísla, všechno jede normálně.
možná než nejaké vytejrávání tady, a zkoušení mě z rozsáhlých neznalostí a dokazování mi, že strkám nos do věcí, kterým vůbec nerozumím, bych přivítal konstruktivní jednání s někým znalým, klidně za odměnu. přes PN si sjednáme telefony, emaily, opravdu bych to rád vyřešil.
diky předem, Viktor
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: W5100 webserver po 6-24hod nedostupný
Ahoj, pomohol by zdrojový kód tvojej aplikácie, alebo aspoň MRE.
Používaš pre HTML kód F() makro, aby si mal statickú webstránku vo flash pamäti a nie v RAM?
Dokáže to veľmi odlahčiť aplikáciu.
Aká je pamäťová náročnosť programu po kompilácii, koľko % zabranej RAM a flash programom?
Po nedostupnosti webservera vidíš UART výstup, alebo nemáš ani ten, že to Arduino úplne nereaguje?
Skús si nastaviť cyklický výpis napr. každých 30 sekúnd s MAC adresou Arduina a jeho IP.
Používaš pre HTML kód F() makro, aby si mal statickú webstránku vo flash pamäti a nie v RAM?
Dokáže to veľmi odlahčiť aplikáciu.
Aká je pamäťová náročnosť programu po kompilácii, koľko % zabranej RAM a flash programom?
Po nedostupnosti webservera vidíš UART výstup, alebo nemáš ani ten, že to Arduino úplne nereaguje?
Skús si nastaviť cyklický výpis napr. každých 30 sekúnd s MAC adresou Arduina a jeho IP.
Re: W5100 webserver po 6-24hod nedostupný
ahoj, uff, tak to je dost věcí, něco přes můj limit
takže, tohle program co mi dela webserver (ted v okudlany verzi, aby tam nebyl zbytečný balast)
co to znamená HTML kod F() makro ... nevim, nepouzivam
tady je co píše arduino id
Projekt zabírá 33268 bytů (13%) úložného místa pro program. Maximum je 253952 bytů.
Globální proměnné zabírají 2623 bytů (32%) dynamické paměti, 5569 bytů zůstává pro lokální proměnné. Maximum je 8192 bytů.
UART ... nevím, musím vyzkoušet
teď mi jeden kamarad z rakouska poslal odkaz na toto:
https://forum.arduino.cc/t/reseting-eth ... o/281860/6
takže, tohle program co mi dela webserver (ted v okudlany verzi, aby tam nebyl zbytečný balast)
Kód: Vybrat vše
void wwwserver(){
Serial.println(freeRam());
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
// if (client.connect(server, 80)) {
//
// }
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 4"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.print("<HTML lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>");
client.print(" <HEAD >");
client.print(" <META content='text/html; charset=utf-8' http-equiv='Content-Type'>");
client.print(" <link rel='shortcut icon' href='https://cdn.arduino.cc/header-footer/prod/assets/favicon-arduino/favicon.ico'>");
client.print(" <link rel='icon' type='image/png' sizes='16x16' href='https://cdn.arduino.cc/header-footer/prod/assets/favicon-arduino/favicon-16x16.png'>");
client.print(" <TITLE>OSTROVNÍ ELEKTRÁRNA</TITLE>");
client.print("</HEAD>");
// output the value of each analog input pin
client.print("<font size='18'>");
client.print("Batt Napětí: ");
client.print(battVoltage);
client.println("<br />");
client.print("Min/Max: ");
client.print(minVoltage);
client.print(" - ");
client.print(maxVoltage);
client.println("<br />");
client.print("SOC: ");
client.print((SOC / (BattCap / 100)));
client.print(" %");
client.println("<br />");
client.print("CHRG: ");
client.print(chrgPower);
client.print(" W (");
client.print(String(int(reglPower[1] * battVoltage)));
client.print(" + ");
client.print(String(int(reglPower[2] * battVoltage)));
client.print(")");
client.println("<br />");
client.print("LOAD: ");
client.print(loadPower);
client.print(" W");
client.println("<br />");
client.println("</font><br />");
client.println("</html>");
//while(client.connected()) {
// while(client.available()) Serial.write(client.read());
//}
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
tady je co píše arduino id
Projekt zabírá 33268 bytů (13%) úložného místa pro program. Maximum je 253952 bytů.
Globální proměnné zabírají 2623 bytů (32%) dynamické paměti, 5569 bytů zůstává pro lokální proměnné. Maximum je 8192 bytů.
UART ... nevím, musím vyzkoušet
teď mi jeden kamarad z rakouska poslal odkaz na toto:
https://forum.arduino.cc/t/reseting-eth ... o/281860/6
Re: W5100 webserver po 6-24hod nedostupný
Ta tvoje okudlaná verze je prostě na nic. To by člověk musel být jasnovidec! Myslíš, že bychom balast, který může být příčinou tvých problémů nezkousli?
Dělal jsem monitor FVE pro kamaráda, ale veškeré údaje jsem bral s nabíječe/měniče přes jeho sériový výstup.
Dělal jsem monitor FVE pro kamaráda, ale veškeré údaje jsem bral s nabíječe/měniče přes jeho sériový výstup.
Re: W5100 webserver po 6-24hod nedostupný
balast (tvoreni tabulky tagy) je pryc, abych eliminoval mozny problem.
okudlana verze je na nic.... existuje jiná?, protože jinak mě tento výrok dál neposunul.
jak souvisí tahaní dat z regulatoru s vytvarenim html na webserveru?
zkusili jsme nahrát ted tohle: https://forum.arduino.cc/t/ethernet-shi ... e/276975/6
uvidim, jestli to bude tuhnout dál.
hezký večer
okudlana verze je na nic.... existuje jiná?, protože jinak mě tento výrok dál neposunul.
jak souvisí tahaní dat z regulatoru s vytvarenim html na webserveru?
zkusili jsme nahrát ted tohle: https://forum.arduino.cc/t/ethernet-shi ... e/276975/6
uvidim, jestli to bude tuhnout dál.
hezký večer
Re: W5100 webserver po 6-24hod nedostupný
Ten můj výrok tě nikam posunout nemůže. To co prezentuješ, není program, pouze nepoužitelné torzo. Nevíš, kde ti to tuhne, ale ten tvůj "program" nemá ani základní nezbytnou strukturu. Setup(), loop(), definice proměnných, použité knihovny. Děláš si z nás legraci?
Re: W5100 webserver po 6-24hod nedostupný
Kód: Vybrat vše
// give the web browser time to receive the data
delay(1);
Co napájení toho Ardu? Nezakolísá, když je na něj víc konexí? Je napájeno z dostatečně dimenzovaného adaptéru?
Re: W5100 webserver po 6-24hod nedostupný
https://www.arduino.cc/reference/en/lan ... s/progmem/ poslední bod (The F() macro) ti ušetří spoustu RAM a nechá tě vypisovat řetězce přímo z flash paměti programu (kde stejně musí být uložené)
prostě místo (řetězec je uložený ve Flash, při startu se překopíruje do RAM a zabírá místo i tam a pak se vypíše z RAM)
budeš psát (řetězec je uložený ve Flash a pak se vypíše přímo z Flash a nežere žádné místo v RAM)
prostě místo (řetězec je uložený ve Flash, při startu se překopíruje do RAM a zabírá místo i tam a pak se vypíše z RAM)
Kód: Vybrat vše
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
Kód: Vybrat vše
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connection: close"));
Re: W5100 webserver po 6-24hod nedostupný
aha, diky, tak ja to vyzkousim.
ted jsem daval tuto cast programu na ukoncovani client.session:
nahore v programu je samozrejme definovana promenna a v na zacatku podprogramu vynulovana. to znatelně prodloužilo cyklus do nutneho resetu z 6 na asi 40 hodin, tedy vice nez 24 hodin, nicmene nutnemu resetu nezabranilo.
jeste dodatecna informace ... z pc mi jel ping 192.168.100.175 -t a kdyz webserver nereagoval, ping jel docela v pohode dal 2-4ms.
jeste jsem dal pryc vsechny serial.print/serial.write (nebo lepe zaremoval) a connectLoop snizil z 10000 na 2000 a jedem druhe kolo zkouseni.
s tim F to zni rozumne, uz to ted bezi pul dne, tak to necham bezet. v dalsim kole bych pouzil toto.
zkouseli jsme i funkci na zobrazovani aktivni session, ale tam se nam nepodarila rozebehnout knihovna #include <utility/socket.h> ... nahral jsem tam kde co, a stale to zde hazelo chybu.
asi takovy aktualni stav. asi by bylo reseni delat softreset jen te ethernetkarty kazdou hodinu,... ale zatim nevim jak, a asi to neni elegantni reseni. zrejme bude lepsi se prokousat a doplnit zakladni kod webserveru jeste o nutnou cast, aby se nezaplnovala pamet ram, nebo neobsazovaly session.
jinak jeste pro upresneni ... napajim to tim modrym usb kabelem, co se k arduinu kupuje (0,5m) ze step down zdroje 5A nastaveneho presne na 5V. kdyz by to bylo nutne, muzu to vysroubovat treba na 6V
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);
jeste dodatecna informace ... z pc mi jel ping 192.168.100.175 -t a kdyz webserver nereagoval, ping jel docela v pohode dal 2-4ms.
jeste jsem dal pryc vsechny serial.print/serial.write (nebo lepe zaremoval) a connectLoop snizil z 10000 na 2000 a jedem druhe kolo zkouseni.
s tim F to zni rozumne, uz to ted bezi pul dne, tak to necham bezet. v dalsim kole bych pouzil toto.
zkouseli jsme i funkci na zobrazovani aktivni session, ale tam se nam nepodarila rozebehnout knihovna #include <utility/socket.h> ... nahral jsem tam kde co, a stale to zde hazelo chybu.
asi takovy aktualni stav. asi by bylo reseni delat softreset jen te ethernetkarty kazdou hodinu,... ale zatim nevim jak, a asi to neni elegantni reseni. zrejme bude lepsi se prokousat a doplnit zakladni kod webserveru jeste o nutnou cast, aby se nezaplnovala pamet ram, nebo neobsazovaly session.
jinak jeste pro upresneni ... napajim to tim modrym usb kabelem, co se k arduinu kupuje (0,5m) ze step down zdroje 5A nastaveneho presne na 5V. kdyz by to bylo nutne, muzu to vysroubovat treba na 6V
Re: W5100 webserver po 6-24hod nedostupný
přidal jsem to F a nastavil delay z 1 na 5.
nepomohlo. za asi 1,5 dne zase to klopýtalo, sice to nevytuhlo uplne, ale není to řešení.na pc byla html vice nedostupná než dostupná
našel jsem toto:
https://www.youtube.com/watch?v=PeK2gAdqjas
a toto
https://startingelectronics.org/tutoria ... -tutorial/
nejlepe kapitola 8 (ale vsechny jsou zajimave)
takže se prokousávám tímto tématem, doufejme, že ten ajax pomůže. zatím mám běžet v hrubém testu 24 hodin, zatím běží prima.
PS: jankop: ne nedelam si z vas legraci, řeším reálný problém. proč bych si proboha dělal legraci? a očividně s mým problémem nejsem sám.
v každém případě ostatním díky za rady, ale nebylo to tím.
nepomohlo. za asi 1,5 dne zase to klopýtalo, sice to nevytuhlo uplne, ale není to řešení.na pc byla html vice nedostupná než dostupná
našel jsem toto:
https://www.youtube.com/watch?v=PeK2gAdqjas
a toto
https://startingelectronics.org/tutoria ... -tutorial/
nejlepe kapitola 8 (ale vsechny jsou zajimave)
takže se prokousávám tímto tématem, doufejme, že ten ajax pomůže. zatím mám běžet v hrubém testu 24 hodin, zatím běží prima.
PS: jankop: ne nedelam si z vas legraci, řeším reálný problém. proč bych si proboha dělal legraci? a očividně s mým problémem nejsem sám.
v každém případě ostatním díky za rady, ale nebylo to tím.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů