Připojený prohlížečem?
Připojený prohlížečem?
Zdravím všechny a prosím o radu,
Jak se dá v arduinu WiFi detekovat, že zrovna na prohlížeči prohlížím stránku, (arduino jako server).
Chtěl bych svoji meteostanici s logováním na SD kartu obohatit o bezdrát přístup.
A chtěl bych :
- Na kartu zapisuji po 5ti minutách
- Do prohlížeče posílat data častěji
Proto bych potřeboval rozlišit jestli se prohlížečem dívám na arduino nebo jsem už stránku zavřel. Příkazy jako Sever.available() nebo client.connected() zůstanou na jedničce i po odpojení. Když použiju client.stop() nemůžu zas připisovat data na konec tabulky v prohlížeči atp.
Dále bych se chtěl zeptat jak aktualizovat (synchronizovat) hodiny. K ukládání používám RTC modul a abych za měsíc neměl rozhozené hodiny, můžu získat aktuální čas voláním getTime() v Javascriptu ve stránce napsané v arduino serveru?
Je to můj první větší soukromý projekt a nemám představu pořádně jak tohle všechno elegantně vyřešit abych nepřetěžoval chudáka arduino.
Díky moc za pomoc.
Jak se dá v arduinu WiFi detekovat, že zrovna na prohlížeči prohlížím stránku, (arduino jako server).
Chtěl bych svoji meteostanici s logováním na SD kartu obohatit o bezdrát přístup.
A chtěl bych :
- Na kartu zapisuji po 5ti minutách
- Do prohlížeče posílat data častěji
Proto bych potřeboval rozlišit jestli se prohlížečem dívám na arduino nebo jsem už stránku zavřel. Příkazy jako Sever.available() nebo client.connected() zůstanou na jedničce i po odpojení. Když použiju client.stop() nemůžu zas připisovat data na konec tabulky v prohlížeči atp.
Dále bych se chtěl zeptat jak aktualizovat (synchronizovat) hodiny. K ukládání používám RTC modul a abych za měsíc neměl rozhozené hodiny, můžu získat aktuální čas voláním getTime() v Javascriptu ve stránce napsané v arduino serveru?
Je to můj první větší soukromý projekt a nemám představu pořádně jak tohle všechno elegantně vyřešit abych nepřetěžoval chudáka arduino.
Díky moc za pomoc.
Re: Připojený prohlížečem?
Nevím jak často vyčítáš data z čidel,
já toto řešil (s někým) ne na arduinu, ale třeba ti to pomůže.
- data se vyčítají co 30s ze všech čidel, ne ani kvůli meteostanici, ale vnitřním hodnotám
- do SQL na externí server (jako ty na SD) ukládám po 5 minutách - data co se naposledy vyčetly
- WWW stránku automaticky občerstvuji po 30s, nepřidávám tedy žádné řádky do tabulky, mám v "poli" uloženo posledních 30 měření, vypisuji různé průměry za den, hodinu, graf z posledních 30 měření atd.
čerpal jsem odsud
http://www.martyncurrey.com/esp8266-and ... e-webpage/
Kod nedávám, do Arduina se nevejde, je to upraveno na STM32 (a nedělal jsem to sám - jednalo se právě o přechod z MEGA na STM32, z mnoha různých důvodů)
já toto řešil (s někým) ne na arduinu, ale třeba ti to pomůže.
- data se vyčítají co 30s ze všech čidel, ne ani kvůli meteostanici, ale vnitřním hodnotám
- do SQL na externí server (jako ty na SD) ukládám po 5 minutách - data co se naposledy vyčetly
- WWW stránku automaticky občerstvuji po 30s, nepřidávám tedy žádné řádky do tabulky, mám v "poli" uloženo posledních 30 měření, vypisuji různé průměry za den, hodinu, graf z posledních 30 měření atd.
čerpal jsem odsud
http://www.martyncurrey.com/esp8266-and ... e-webpage/
Kod nedávám, do Arduina se nevejde, je to upraveno na STM32 (a nedělal jsem to sám - jednalo se právě o přechod z MEGA na STM32, z mnoha různých důvodů)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Připojený prohlížečem?
Pomohlo. Vůbec mě nenapadla možnost Scriptem znova dotazovat arduino a jak píšeš, číst hodnoty častěji jen si uklátat na SD ty pětiminutovky a zbytek mít připraven pro script. Jdu zkoušet. Jen to bude chtít víc paměti až budu přidávat rychlost větru a srážky
Jen to elegantně všechno vypsat pomocí cyklů v JS ať není mnoho textů v proměnných.
Ještě ta synchronizace hodin.
Díky díky moc.
Jen to elegantně všechno vypsat pomocí cyklů v JS ať není mnoho textů v proměnných.
Ještě ta synchronizace hodin.
Díky díky moc.
Re: Připojený prohlížečem?
Tak jo, už to zkouším tři dny ale ten AJAX mi furt nejde. Rozchodil jsem bez problémů tlačítka (zkusil jsem i odkazy ale tlačítka jsou hezčí) ale podle Serial monitoru data odesílám, ale podle mých pomocných Scriptů a rozných čítačů na stránce ta ajaxová funkce nic nedelá...
Jako neřekl bych že mám s JavaScriptem problém. Když tento script zkopíruju na extra stránku tak reaguje. Podle zakomentovanejch alert hlášek ty funkce normálně probíhají, alerty vyskakují, ale nepřepisuje to ani jeden čítač, natož aby mi to napsalo hodnotu z potenciometru... A to tam chci teplotu, vlhkost, tlak, slunko (intenzita a poloha) a časem ještě vítr a srážky
Pomoc prosím.
Kód: Vybrat vše
#include <SPI.h>
#include <WiFiNINA.h>
const int LedPin = 13;
const int ZelPin = 12;
String HTML = R"=====(
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN\'>
<html>
<head>
<title>Arduino říká..</title>
<meta charset='UTF-8'>
</head>
<body>
<!-- Stránka s pár pokusnými a pomocnými odstavci a odkazy -->
<H1> Stránka Vole </H1>
<p id = 'odstavec'>0</p>
<p id = 'kontrola'>00</p>
<p id = 'kontrola2'>000</p>
<p id = 'pocitadlo'>0</p>
</br>
<!a href='?nic'>Odkaz na nic</a></br>
<!a href='?neco'>Odkaz na něco</a>
<form name='jeden' method='GET' action='http://192.168.88.239/'>
<input type='hidden' name='1' value='nic'><input type='submit' value='nic'></form>
<form name='druhy' method='GET' action='http://192.168.88.239/'>
<input type='hidden' name='2' value='neco'><input type='submit' value='neco'></form>
<script language='JavaScript'>
var citac = 0;
var citat2 = 0;
var pocitadlo = 0;
var ajax = null;
ajax = new XMLHttpRequest();
function ajaxLoad(slovo)
{
//alert("ajaxLoad()");
if(!ajax)
{
document.getElementById('kontrola2').innerHTML = 'Je to v prdeli';
return;
}
ajax.open('GET',slovo,true);
ajax.send();
ajax.onreadystatechange = function()
{
document.getElementById('kontrola2').innerHTML = citac2 ++;
if(ajax.readyState == 4 && ajax.status == 200)
{
var odpoved = ajax.responseText;
document.getElementById('odstavec').innerHTML = odpoved;
document.getElementById('kontrola').innerHTML = citac ++;
}
}
}
function pricti()
{
//alert("Pricti()");
ajaxLoad('chci');
document.getElementByOd('pocitadlo').innerHTML = pocitadlo++;
//setTimeout(pricti,1000);
}
var casovac = setInterval(pricti,1000);
//pricti();
</script>
</body>
</html>
)=====";
WiFiServer server(80);
WiFiClient client;
void setup() {
pinMode(LedPin, OUTPUT);
digitalWrite(LedPin, LOW);
pinMode(ZelPin, OUTPUT);
digitalWrite(ZelPin, LOW);
Serial.begin(9600);
Serial.println("Můj server");
// Přiojování k WiFi
WiFi.begin("***","***");
// Dokud není připojen
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print("-");
}
// Pohli jsme se dál! (připojili k WiFi)
Serial.println("");
Serial.println("Připojeno.");
Serial.print("Adresa:");
Serial.println(WiFi.localIP());
// Aby se šlo vůbec připojit, musíme začít serverovat
server.begin();
}
int sviti = 1;
int pripojeni = 0;
String neco;
int hodnota = 0;
void loop() {
client = server.available(); // Pokud není pripojen žádný klient
if (!client)
{
Serial.println("---- Nikde nikdo ----");// Zatim nikdo nepřipojen
digitalWrite(LedPin,sviti);
sviti = !sviti; // Přeblikáváme ledku každej projetí LOOPu
client.stop(); // Nevim jestli musí být ?
}
else
{
Serial.println("--------------Někdo se připojil---------------");
Serial.print("Client: ");
Serial.println(client.connected());
Serial.print("Server: ");
Serial.println(server.available()); // Info pro zajímavost, sleduju změny
neco = client.readStringUntil('\r'); // Čtení řádku
Serial.println(neco); // vypsání na serial monitor
hodnota = analogRead(0); // Přečtení poťáku
if (neco.indexOf("chci") > 0) // Obsahuje řádek slovo z AJAX scriptu
{
Serial.print("Splněno: "); // Ano obsahuje
Serial.println(hodnota);
client.println(hodnota); // Pošlem data
}
else if(neco.indexOf("nic") > 0)
{
digitalWrite(ZelPin,HIGH); // Zaktivujem odkazy ledkou
client.println(HTML); // Musim přeposlat stránku :/
}
else if(neco.indexOf("neco")> 0)
{
digitalWrite(ZelPin,LOW);
client.println(HTML);
}
else // Nepřišlo z prohlížeče nic -> První připojení
{
client.println(HTML); // Pošleme celou stránku
}
delay(250); // počkáme
Serial.print("Simon říká: ");
Serial.println(neco);
client.flush(); // Děj se co děj, vyprázdníme a ukončíme
client.stop();
neco = ""; // Pro jistotu vyprázdníme
}
delay(250);
}
Pomoc prosím.
Re: Připojený prohlížečem?
Ještě jsem jen vyzkoušel, když se připojím telefonem, už se nepřipojím z počítače, je možné zpřístupnit stránku více než jednomu zařízení? Nečekal jsem že to bude takový problém.
Re: Připojený prohlížečem?
myslím že id toho html prvku by mělo být v "" ... zkus ...
Re: Připojený prohlížečem?
a jen abych tě naštval ... ulož si to jako html a poklikej si to
nebo si to testni online https://www.w3schools.com/code/tryit.as ... RHN0OBC1BM
ps:ty formuláře taky nejsou dobře napsané ... ale to až příště
Kód: Vybrat vše
<html>
<head>
<title>Arduino říká..</title>
<meta charset='UTF-8'>
</head>
<body>
<!-- Stránka s pár pokusnými a pomocnými odstavci a odkazy -->
<H1> Stránka Vole </H1>
<p id = "odstavec">0</p>
<p id = "kontrola">00</p>
<p id = "kontrola2">000</p>
<p id = "pocitadlo">a</p>
</br>
<a href='#' onClick="document.getElementById('odstavec').innerHTML = 'Je to v prdeli';">Odkaz na nic</a></br>
<a href='#' onClick="document.getElementById('pocitadlo').innerHTML = document.getElementById('pocitadlo').innerHTML + 'a';">Odkaz na něco</a>
<form name='jeden' method='GET' action='http://192.168.88.239/'>
<input type='hidden' name='1' value='nic'><input type='submit' value='nic' onClick="document.getElementById('kontrola').innerHTML = 'SHIT';""></form>
<form name='druhy' method='GET' action='http://192.168.88.239/'>
<input type='hidden' name='2' value='neco'><input type='submit' value='neco' onClick="document.getElementById('kontrola2').innerHTML = 'IS HAPPEN';"></form>
</body>
</html>
ps:ty formuláře taky nejsou dobře napsané ... ale to až příště
Re: Připojený prohlížečem?
kiRRow
Tak to mi spadla brada, HTML nedělám, ale tohle mne nadchlo.
Tak to mi spadla brada, HTML nedělám, ale tohle mne nadchlo.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Připojený prohlížečem?
kiRRow -> Dobrý, volat události přímo na stránce není žádnej problém. Zamachruj a ty texty mi tam pošli z arduina.. Dík
Re: Připojený prohlížečem?
Ty texty tam máš natvrdo uloženy v flash paměti. Pokud chceš na stránku vypsat nějaký data přímo z arduina, tak části té stránky musíš generovat za běhu.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti