Stránka 5 z 6

Re: Pomoc se výkladem kodu

Napsal: 29 lis 2018, 17:48
od DavidO
Ale tu knihovnu stejně potřebuješ - odkud by se vzal ten ntpClient?

Re: Pomoc se výkladem kodu

Napsal: 30 dub 2019, 14:09
od daton
Ahoj
zase bych potřeboval trochu poradit s kodem tentokrát je to z této stránky
https://lastminuteengineers.com/esp32-n ... -tutorial/
kdy kod co tam má autor funguje ale když si ho chci přenést do svého projektu a smostatně dosadit hodiny minuty a vteřiny tak mi to vypíše chybu.

Nelíbí se mu toto jako hodiny
%H
zkoušl jsem ho přiřadit ke stringu floatu a dalším typům ale nic asi tako

hodiny = %H,

přitom celkový výraz funguje
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");

Prosím mohl by mi někdo nějak polopatě vysvětlit proč se to zdráhá fungovat? Díky

Re: Pomoc se výkladem kodu

Napsal: 30 dub 2019, 14:56
od fulda
a jak by poznal, že to jsou hodiny z timeinfo?
Hledáš něco jako: hodiny = sprintf(&timeinfo,"%H")

Re: Pomoc se výkladem kodu

Napsal: 30 dub 2019, 15:00
od DavidO
Hádat, jakou chybu máš v kódu když nevidím ten kód je těžký. Sice jsme to s Jendou úspěšně ve Waldkirchu dělali, on programoval, na pozadí spouštěl kompilaci a já z výstupu kompilátoru do vedlejšího okna radil, co má opravit, aniž bych ten kód viděl, ale to bylo v situaci, kdy jsme měli asi dvě minuty na přeprogramování a je to jen omezeně použitelná metoda.

Po rychlopřečtení toho článku se mi to jeví takhle: V tom ukázkovém kódu se čas schovává ve struktuře pojmenované tm, resp. v její instanci v proměnné timeinfo. Funkce println pak vezme tu proměnnou a podle formátu v druhém parametr (ten řetězec s procentama) vypíše čas. Jestli chceš získat nějaký časový údaj pro jiné účely, tak si sáhni rovnou do té proměnné, například hodiny = timeinfo.tm_hour;

Re: Pomoc se výkladem kodu

Napsal: 30 dub 2019, 21:31
od daton
Ahoj pánové
moc děkuji za rychlou reakci. Jo tak to jsem potřeboval.
Bohužel tohle

Kód: Vybrat vše

hodiny = sprintf(&timeinfo,"%H")
mi nefungovalo
ale od Davida to funguje skvěle. Ještě jednou dik

Re: Pomoc se výkladem kodu

Napsal: 03 kvě 2019, 13:33
od daton
Opět bych potřeboval trochu pomoci (no trochu spíš dost :-) ).
Jde o tento kod co je i v odkazu co jsem uvedl výše jen tady je trochu pravený

Kód: Vybrat vše

#include <WiFi.h>
#include "time.h"

const char* ssid       = "YOUR_SSID";
const char* password   = "YOUR_PASS";

const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

void setup()
{
  Serial.begin(115200);
  
  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  
  //init and get the time
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  printLocalTime();

  //disconnect WiFi as it's no longer needed
 // WiFi.disconnect(true); - toto tam nemohu mít protože server bude ovládán dálkově
 // WiFi.mode(WIFI_OFF);
}

void loop()
{
  delay(1000);
  printLocalTime();
}
Jde o to že zhruba tento kod jsem implementoval do svého domácího ovládání a doladuje mi to hodiny, které ale stejně běží odvozené od millis jen se to doladuje každou minutu. A v tom je ten problém, když odpojím internet tak server hodně dlouho čeká na hodnoty a tím se zasekne ovládání.
Jde mi o to jestli by nešlo napsat nějaký příkaz timeout kdy prostě, když třeba do 500ms nezískám data o čase ,tak se jede dál a zkusím to zase příště. Ted to umí čekat i 20s a v tom čase nejde ovládání. Prosím nenapadá někoho jak to udělat?

Re: Pomoc se výkladem kodu

Napsal: 07 kvě 2019, 21:15
od DavidO
Přesně tenhle program se ti zasekává, anebo jiný? (jestli chceš, abychom ti radili s tvým programem, tak nám neukazuj tenhle ale ten, který má problém).

Re: Pomoc se výkladem kodu

Napsal: 18 čer 2019, 13:15
od daton
Tak jsem ten problém ještě nevyřešil.
A chci se zeptat zda by bylo možné ukončit hledání času na internetu pokud tento není připojen?

Měl jsem na mysli něco jako

Kód: Vybrat vše

struct tm timeinfo  abort;
což je jen jako příklad a nefunguje to, ale existuje něco takového? POtřeboval bych totiž aby hlavní funkce domácího ovládání nebyla narušena latencemi vzniklými hledáním na odpojeném internetu.
Díky

Re: Pomoc se výkladem kodu

Napsal: 19 čer 2019, 00:44
od DavidO
existuje něco takového?
Ne sice přesně takhle, ale "ano, existuje něco takového".

Ale dokud sem nenahraješ sem celý kód a nenapíšeš, kterou konkrétní verzi knihoven, kterou verzi podpory pro ESP32 a kterou verzi Arduino IDE používáš, bude to zase věštění naslepo a ztráta času všech diskutujících.

Re: Pomoc se výkladem kodu

Napsal: 24 čer 2019, 11:19
od daton
Dobře Davide
dám sem svoji verzi mnou nově vyvíjeného ovládání, ale nemohu se zbavit dojmu, že to nechceš ani tak pro to aby jsi mi pomohl odhalit ten problém jako spíš pro ukázku kodu studentům "jak se to nemá dělat" :-)
Ano nejsem žádný vystudovaný programátor a tedy kod asi obsahuje mnoho chyb případně nedostatků :( , jsem si toho vědom ale je to vývoj.
NO knihovy co používám jsou
wifi 1.2.7
wificlient 1.0.0
webserver 1.0.0
DHT 1.3.4
DO32serv_Icasinfo.zip
(6.26 KiB) Staženo 315 x