Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Wemos D1 odesílání dat přes WiFi do Firefoxu.
Jdi na stránku 1, 2, 3  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další)
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Celeron



Založen: Apr 02, 2011
Příspěvky: 18547
Bydliště: Nový Bydžov

PříspěvekZaslal: ne prosinec 10 2023, 11:49    Předmět: Wemos D1 odesílání dat přes WiFi do Firefoxu. Citovat

Mám tady Wemos D1 na kterým je připojeno 6 sond DS18B20. Odladil jsem funkčnost přes Serial monitor. Na začátku se vytisknou adresy sond a pak se po 5 sekundách stále dokola vypisují aktualizované naměřené teploty. To všecko chodí dle mých představ.
No a nyní bych ten výpis teplot potřeboval poslat jako HTML do některýho prohlížeče přes WiFi. Podle příkladů, co je u knihoven ESP8266 jsem nastartoval ve Wemosu server. IP scanerem v PC Wemose vidím jako ESP-32C904. Když zadám v prohlížeči IP adresu, tak se mi zobrazí teploty ale jen jednou jedenkrát i když na serial monitoru se každých 5 sekund teploty aktualizují.
Něco dělám blbě, potřeboval bych, aby se v prohlížeči taky každých 5 sekund teploty aktualizovaly. Zatím jsem nikde nenašel něco podobnýho pro inspiraci.
Dokážete prosím někdo poradit, jak to principielně udělat? Nejlepší by byl příklad kterej řeší něco podobnýho.
Stejnou věc s Wemosem D1 a LAN W5500 mám funkční. Ale drát není vždy k dispozici.
Díky

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rnbw



Založen: Mar 21, 2006
Příspěvky: 34931
Bydliště: Bratislava

PříspěvekZaslal: ne prosinec 10 2023, 12:28    Předmět: Citovat

Daj do toho HTML meta refresh.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



Založen: Jan 01, 2023
Příspěvky: 2089
Bydliště: Česká Lípa

PříspěvekZaslal: ne prosinec 10 2023, 13:01    Předmět: Citovat

Před řádek kde v kódu web serveru zapisujete <html> vložte řádek s hlavičkou a meta refresh třeba pro 5s viz níže. Poté co se stránka v prohlížeči načte a uplyne 5s načte se znovu a tak pořád dokola každých 5s. Při novém načtení stránky prohlížeč kontaktuje znovu web server a ten zapíše do stránky aktuální hodnoty.

kód:
client.println("<head><meta http-equiv='refresh' content='5' /></head>");
client.println("<html>");
... atd.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2384
Bydliště: SR, Poprad

PříspěvekZaslal: ne prosinec 10 2023, 21:16    Předmět: Citovat

to je ale v poriadku. html funguje tak, ze sa posle dotaz na server, on vrati vyslednu stranku a ukonci spojenie.
takze mas niekolko moznosti, najjednoduchsia je dat meta tag refresh na 5 sekund.
dalsia z moznosti je na pozadi cez javascript sa dotazovat napr. aj kazdu sekundu na hodnoty a tie potom aktualizovat na stranke - tym odpadne to trocha rusive obnovenie celej stranky, ona bude nacitana a budu sa menit len hodnoty.
dalsie moznosti su uz skor len rozsirene verzie tej druhej.

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18547
Bydliště: Nový Bydžov

PříspěvekZaslal: ne prosinec 10 2023, 23:00    Předmět: Citovat

Tak jsem nakonec použil již dříve funkční měření teplot s přenosem přes W5500 a doplnil ho nastavením WiFi pro ESP8266. Dost dlouho jsem musel lámat příkazy client.print s definicema stylů ale nakonec se povedlo a chodí to podle mých představ. Co mě třeba dalo než jsem přišel na to proč prohlížeče ignorují mezery v textu a že pokud chci mezeru, musí se použít non-breaking space (&nbsp).
Prostě se tím musí člověk prokousat. Smile

Další projektík bude WiFi client, který bude na TFT nebo Nexion displeji někde na zdi zobrazovat naměřený hodnoty teplot ze serveru ESP8266 aniž by musel být zapnutý PC nebo mobil.



ESP8266.jpg
 Komentář:
 Velikost:  44.45 kB
 Zobrazeno:  135 krát

ESP8266.jpg



_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18547
Bydliště: Nový Bydžov

PříspěvekZaslal: po prosinec 11 2023, 11:14    Předmět: Citovat

Zkouším tady WiFi klienta na Wemos D1 (ESP8266) a zjišťuju, že jsem asi komunikaci a zobrazení na stránce Firefoxu dělal úplně zbytečně, protože udělat "HTML prohlížeč" na Wemosu je nejspíš absolutní pakárna.
Takže nejspíš zpět na stromy, vykašlat se na HTML a zkusit se prokousat "nižší vrstvou" tedy UDP protokolem. Tam se posílají jen surový data, který se dají bez problémů zase chytat. Blbý je, že příkladů na server a klient po UDP je velice málo. Vlastně ani nevím, čím se podívat na data na síti, co UPD odešle. To bude zase boj...

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2384
Bydliště: SR, Poprad

PříspěvekZaslal: po prosinec 11 2023, 12:08    Předmět: Citovat

preco udp? pozri si websocket, ja to pouzivam. vytvori sa spojenie a pekne medzi sebou si posielas data. ja tam pouzivam json. alebo si pozri mqtt, to je jeden z najpouzivanejsich protokolov pre tieto smart zariadenia.
Udp na esp som mal problem, ze ako keby skracoval pri odosielani na max. 16 bajtov. ked som z pocitaca poslal viac, tak to esp v pohode prijalo, ale ak som to iste poslal z esp (aj do pocitaca), tak mi prislo len prvych 16 bajtov.
Ak ti to ale staci, tak udp to mas tak na jedno popoludnie.

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



Založen: Jan 01, 2023
Příspěvky: 2089
Bydliště: Česká Lípa

PříspěvekZaslal: po prosinec 11 2023, 12:09    Předmět: Citovat

Mrkněte na jednoduchý příklad web klienta, který je na GitHubu. Je to založeno na knihovně WiFiClient použitelné pro Arduino i pro ESP.

Ten příklad načte web stránku ze serveru jen jednorázově, ale vy si to samozřejmě můžete upravit tak, že bude načítat stránku opakovaně s nějakým časovým odstupem. Takže poté co budete mít všechna data a server spojení ukončí a tak ukončíte klienta zavoláním client.stop() a zapíšete si třeba pomocí millis() časovou značku. Po uplynutí určité doby znovu zavoláte client.connect atd. a znovu načtete aktuální data z odpovědi serveru.

V rámci části kódu viz níže si postupně načtete odpověď webového serveru a vyseparujete z ní hodnoty a případně texty a pak si je zobrazíte na displeji. Na straně web serveru doporučuji texty a hodnoty zapisovat do HTML tagů DIV, pro které si nadefinujete unikátní název ID a podle toho se vám pak na straně klienta budou lépe identifikovat jednotlivé texty a hodnoty v odpovědi serveru.

kód:
while (client.available()) {
    char c = client.read();
    // postupné načtení odpovědi webového serveru
    // a následné vyhodnocení a vyseparování hodnot


}

Ano na straně klienta v ESP zařízení to nebude úplně univerzální jako webový prohlížeč tj. pokud stranu serveru změníte bude potřeba pravděpodobně změnit i stranu klienta, ale bude to z hlediska menší komplikovanosti přijatelné a díky tomu můžeme mít webový server s ESP, ze kterého bude možné číst a zobrazovat aktuální hodnoty webovým prohlížečem na počítači nebo tím wifi klientem z jiného zařízení s ESP.

Nezapomeňte odstranit z toho zdrojáku níže uvedené dva řádky tj. ty tam jsou jen jako upozornění na to nedělat žádné nekonečné cykly.

kód:
// do nothing forevermore:
while (true);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2384
Bydliště: SR, Poprad

PříspěvekZaslal: po prosinec 11 2023, 14:27    Předmět: Citovat

websocket a mqtt ma prave tu vyhodu, ze sa nemusi dotazovat, ale data mu pridu automaticky. Osobne mam rad websocket, lebo tam si mozem posielat aj vacsie data a pekne vo formate napr. json, alebo nejaky svoj vlastny. Stoji za to, sa tomu trocha povenovat.
_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



Založen: Jan 01, 2023
Příspěvky: 2089
Bydliště: Česká Lípa

PříspěvekZaslal: po prosinec 11 2023, 17:27    Předmět: Citovat

Řešení, které jsem popsal je relativně jednoduché a může při něm z větší části využít to co už vytvořil. Samozřejmě se může pustit i do bádání a řešit to jinou cestou.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18547
Bydliště: Nový Bydžov

PříspěvekZaslal: po prosinec 11 2023, 17:38    Předmět: Citovat

pocitujlasku napsal(a):
Osobne mam rad websocket, lebo tam si mozem posielat aj vacsie data

Na ten jsem se díval taky, tady ho používá na přenos analogový hodnoty z Wemose do prohlížeče v reálným čase. Zkusil jsem to zkompilovat a opravdu okamžitá reakce na změnu. Procházel jsem od toho zdroják, ale přišlo mě to na mě moc složitý a manuál od WebSocketu jsem při zběžným hledání na netu nenašel. Víš o nějakým?
Díky!

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18547
Bydliště: Nový Bydžov

PříspěvekZaslal: po prosinec 11 2023, 18:00    Předmět: Citovat

Valdano napsal(a):
Mrkněte na jednoduchý příklad web klienta, který je na GitHubu. Je to založeno na knihovně WiFiClient použitelné pro Arduino i pro ESP.

Jo to vypadá dost jednoduše. Na Serialmonitoru bude vše, co přijde ze serveru. A prohrabat se v přijatým. Jen je tam jedna chybka, knihovny WiFiClient a WifiServer na ESP8266 nechodí. Musí se použít knihovny ESP8266WiFi.h, ESP8266WebServer.h a podobný. Odzkoušeno osobně.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2384
Bydliště: SR, Poprad

PříspěvekZaslal: po prosinec 11 2023, 18:35    Předmět: Citovat

v principe websocket je len rozsirenie http protokolu. je to klasicky web server s tym, ze po pripojeni mu posles, aby sa prepol na websocket protokol a odosles nejake autorizacne srandy (su na to hotove kniznice v arduine). klasicke http posle data a ukonci spojenie, websocket to spojenie drzi a vies si tak posielat data oboma smermi.
Ja som tiez zo zaciatku isiel podobnou cestou ako ty, ale ked som sa trocha pohral s websocketmi, tak pouzivam len to. mam tak prepojene aj wemos a program, ktory mam v C# a bezi na linuxe.
Dal by som nejaky zakladny kod, ale ja to mam vsetko uz zabudovane v mojom smart home projekte, a vyzobat z toho by zabralo nejaky cas. ale pouzivam tuto kniznicu pre wemos, v prikladoch je aj klient, aj server.

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18547
Bydliště: Nový Bydžov

PříspěvekZaslal: po prosinec 11 2023, 22:06    Předmět: Citovat

Valdano napsal(a):
Mrkněte na jednoduchý příklad web klienta, který je na GitHubu.

Tak jsem s tím klientem narazil na první problém. Přijme se jen jeden paket a je konec, protože tenhle jednoduchej klient neumí refresh, kterej dělá u toho mýho funkčního včerejšího řešení webovej prohlížeč.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



Založen: Jan 01, 2023
Příspěvky: 2089
Bydliště: Česká Lípa

PříspěvekZaslal: po prosinec 11 2023, 23:13    Předmět: Citovat

Ten jednoduchý klient žádný refresh sám nedělá tj. opakované načítání je tam potřeba doprogramovat, ale vždyť jsem to už psal viz citace.

Valdano napsal(a):
Ten příklad načte web stránku ze serveru jen jednorázově, ale vy si to samozřejmě můžete upravit tak, že bude načítat stránku opakovaně s nějakým časovým odstupem. Takže poté co budete mít všechna data a server spojení ukončí a tak ukončíte klienta zavoláním client.stop() a zapíšete si třeba pomocí millis() časovou značku. Po uplynutí určité doby znovu zavoláte client.connect atd. a znovu načtete aktuální data z odpovědi serveru...

Příklad úpravy viz níže. Píšu to v rychlosti jen na slepo bez zkoušení a je to jen náznak možné varianty řešení. Tak si případně opravte chyby, které jsem přehlédl.

kód:

#define ZADOST 1
#define CTENI  2
#define CEKANI 3

#define TIMEOUT 5000

char server[] = "192.168.1.10";
unsigned long tck;
int stav;
char c;

void setup()
{
  Serial.begin(115200);
  while (!Serial) {}

  Serial.print("Connecting to: ");
  Serial.println(ssid);

  while (status != WL_CONNECTED) {
    status = WiFi.begin(ssid, pass);
    delay(1000);
  }
 
  Serial.println("Connected to wifi");
  printWifiStatus();

  tck = millis();
  stav = ZADOST;
}

void loop()
{
  switch (stav)
   
    case ZADOST:
      // spojeni a zadost o web stranku web serveru
      Serial.println("\nZacatek spojeni na web server...");
      if (client.connect(server, 80)) {
        Serial.println("spojeni na web server OK");
        client.println("GET /index.html HTTP/1.1");
        client.println("Host: 192.168.1.10");
        client.println("Connection: close");
        client.println();
        stav = CTENI;
      } else {
        client.stop();
        Serial.println("nepodarilo se spojeni na web server");
        stav = CEKANI;
      }
      tck = millis();
      break;

    case CTENI:
      // cteni dat prichazejicich z web serveru
      if ((millis() - tck) >= TIMEOUT) {
        Serial.println("Timeout dat z web serveru");
        Serial.println();
        Serial.println("odpojeni od web serveru");
        client.stop();
        stav = CEKANI;
        tck = millis();
      } else {
        if (!client.connected()) {
          Serial.println();
          Serial.println("odpojeni od web serveru");
          client.stop();
          stav = CEKANI;
          tck = millis();
        } else {
          while (client.available()) {
            c = client.read();
            Serial.write(c);
            // doplnit vlastni vyber hodnot z dat
            // a pripadne zobrazeni na displeji
            // pokud je vse nacteno tak
            //
            // Serial.println("odpojeni od web serveru");
            // client.stop();
            // stav = CEKANI;
            // tck = millis();
            // break;
          }
        }
      }
      break;

    case CEKANI:
      // jen cekame po dobu TIMEOUT v milisekundach
      if ((millis() - tck) >= TIMEOUT) {
        stav = ZADOST;
      }
      break;

  }
}


Naposledy upravil Valdano dne út prosinec 12 2023, 1:46, celkově upraveno 2 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další) Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.17 sekund