<div dir="ltr">Ok, dĂ­ky moc za tipy. UĹľ jsem to snad pochopil. JeštÄ› mÄ› zarazila jedna vÄ›c, pĹ™edpokládal bych, Ĺľe to uĹľ je na takovĂ©m modulu ošetĹ™enĂ© v základu nebo přímo ve wifi Ĺ™adiÄŤi nebo jak to napsat, ale evidentnÄ› ne. Pokud odpojĂ­m wifi, tĹ™eba tak, Ĺľe restartuji wifi router, tak se sama znovu nepĹ™ipojĂ­.<div><br></div><div>Dá se to nÄ›jak nastavit? Nebo musĂ­m jednou za ÄŤas volat nÄ›co jako tento kĂłd? Je nÄ›jakĂ© doporuÄŤenĂ­ jak to ÄŤasto testovat? Ale ÄŤekal bych, Ĺľe kdyĹľ se to jednou nastavĂ­, Ĺľe to bude vyĹ™ešeno na Ăşrovni toho wifi Ĺ™adiÄŤe. Nebo mám nÄ›co blbÄ›?</div><div><br></div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:Consolas,"Courier New",monospace;font-size:14px;line-height:19px;white-space:pre"><div>  <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">WiFi</span>.<span style="color:rgb(220,220,170)">waitForConnectResult</span>() != <span style="color:rgb(79,193,255)">WL_CONNECTED</span>) {   </div>
<div><span style="color:rgb(156,220,254)">WiFi</span>.<span style="color:rgb(220,220,170)">mode</span>(<span style="color:rgb(86,156,214)">WIFI_STA</span>);</div><div><span style="color:rgb(156,220,254)">WiFi</span>.<span style="color:rgb(220,220,170)">begin</span>(<span style="color:rgb(156,220,254)">ssid</span>, <span style="color:rgb(156,220,254)">password</span>);</div><div><br></div><div>  }</div></div></div><div><br></div><div>DĂ­ky,</div><div><br></div><div>HP</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">po 31. 5. 2021 v 12:06 odesĂ­latel Pavel Brychta <<a href="mailto:pavel.brychta@duhasys.eu">pavel.brychta@duhasys.eu</a>> napsal:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <p>DD,</p>
    <p>pĹ™esnÄ› tak. KdyĹľ se podĂ­váte do includnutĂ© Arduino.h, tak
      uvidĂ­te, Ĺľe freertos/FreeRTOS.h, freertos/task.h a
      freertos/semphr.h jsou součástĂ­, takĹľe mĹŻĹľete volat přímo RTOS
      funkce. Pro začátek doporuÄŤuju si naÄŤĂ­st tĹ™eba
      <a href="https://savjee.be/2020/01/multitasking-esp32-arduino-freertos/" target="_blank">https://savjee.be/2020/01/multitasking-esp32-arduino-freertos/</a> a
      pak si k tomu najdÄ›te nÄ›jakĂ˝ příklad na semafory a mutexy. PĹ™es
      millis() to bude fungovat takĂ©, ale kooperativnÄ›. Další moĹľnostĂ­
      pak je použít knihovnu Ticker, která umožňuje vyytvoĹ™it hybrid
      mezi kooperativnĂ­m pouĹľitĂ­m millis() a vláknovĂ˝m RTOS (ušetříte
      tĹ™eba RAM na stack oblasti). Trošku potĂ­Ĺľ mĹŻĹľe bĂ˝t pĹ™i přístupu do
      promÄ›nnĂ˝ch dash knihovny z jinĂ©ho vlákna (proto to doporuÄŤenĂ­
      studia semaforĹŻ), ale to dokážou ošetĹ™it semafory,  nebo fronty.
      Pokud ale program bude tĂ© sloĹľitosti, co jste poslal, tak nenĂ­
      dĹŻvod používat ani RTOS, ani Ticker, ale pouĹľijte tĹ™eba moji
      historickou <a href="https://github.com/Pablo2048/Interval" target="_blank">https://github.com/Pablo2048/Interval</a> (teÄŹ koukám, Ĺľe
      by zaslouĹľila aktualizovat - tak zkuste tĹ™eba aktuálnÄ›jší verzi z
      <a href="https://git.xpablo.cz/pablo2048/Interval" target="_blank">https://git.xpablo.cz/pablo2048/Interval</a> ). Ta parametrizace WiFi
      by si taky zaslouĹľila nÄ›co lepšího neĹľ hardcoded credentials -
      zkuste se podĂ­vat na knihovnu Wifimanager, nebo mĹŻj wificonfig
      (pokud jste dostateÄŤnÄ› odvážnĂ˝...)</p>
    <p>P.B.<br>
    </p>
    <div>Dne 31. 05. 21 v 11:17 Jan PĹŻhonĂ˝
      napsal(a):<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">DĂ­ky,
        <div><br>
        </div>
        <div>delay jsem dal pryÄŤ. UĹľ to funguje. "Multitasking" na
          arduinu jsem dÄ›lal pomocĂ­ millis, tady to funguje taky, viz
          kĂłd nĂ­Ĺľe, ale jak se to dÄ›lá elegantnÄ›ji na ESP32? Pochopil
          jsem, Ĺľe kdyĹľ pouĹľiji Arduino framework, tak by mÄ›lo jĂ­t psát
          přímo s vyuĹľitĂ­m freertos? Omlouvám se za lama dotazy, ale to
          tam nemusĂ­m uĹľ nic includovat a rovnou mĹŻĹľu používat nÄ›co
          jako? </div>
        <div><br>
        </div>
        <div>void vATaskFunction( void *pvParameters )</div>
        Â  Â  {<br>
        Â  Â  Â  Â  for( ;; )<br>
        Â  Â  Â  Â  {<br>
        Â  Â  Â  Â  Â  Â  -- Task application code here. --<br>
        Â  Â  Â  Â  }<br>
        <br>
        Â  Â  Â  Â  /* Tasks must not attempt to return from their
        implementing<br>
        Â  Â  Â  Â  function or otherwise exit.  In newer FreeRTOS port<br>
        Â  Â  Â  Â  attempting to do so will result in an configASSERT()
        being<br>
        Â  Â  Â  Â  called if it is defined.  If it is necessary for a task
        to<br>
        Â  Â  Â  Â  exit then have the task call vTaskDelete( NULL ) to
        ensure<br>
        Â  Â  Â  Â  its exit is clean. */<br>
        Â  Â  Â  Â  vTaskDelete( NULL );<br>
        Â  Â  }
        <div><br>
        </div>
        <div>PotĹ™ebuji nÄ›co kolem 10 ti tasku, nic nároÄŤnĂ©ho, kaĹľdĂ˝ se
          provede do max 1s. Nebo to mám udÄ›lat jen pomocĂ­ millis? Je
          potĹ™eba, aby tam na pozadĂ­ běžel dash a OTA, takto mi to
          funguje:
          <div><br>
          </div>
          <div>
            <div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:Consolas,"Courier New",monospace;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)"><Arduino.h></span></div>
<div><span style="color:rgb(106,153,85)">  /* ESP32 Dependencies */</span></div><div><span style="color:rgb(86,156,214)">  </span><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)"><WiFi.h></span></div><div><span style="color:rgb(86,156,214)">  </span><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)"><AsyncTCP.h></span></div><div><span style="color:rgb(86,156,214)">  </span><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)"><ESPAsyncWebServer.h></span></div>
<div><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)"><ESPDash.h></span></div>

<div><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)"><WiFiUdp.h></span></div><div><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)"><ArduinoOTA.h></span></div>
<div><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)">"uptime.h"</span></div><div><span style="color:rgb(197,134,192)">#include</span><span style="color:rgb(86,156,214)"> </span><span style="color:rgb(206,145,120)">"uptime_formatter.h"</span></div>

<div><span style="color:rgb(106,153,85)">/* Your WiFi Credentials */</span></div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">char</span>* <span style="color:rgb(156,220,254)">ssid</span> = <span style="color:rgb(206,145,120)">"puhy_iot"</span>;<span style="color:rgb(106,153,85)"> // SSID</span></div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">char</span>* <span style="color:rgb(156,220,254)">password</span> = <span style="color:rgb(206,145,120)">"iot44puhy"</span>;<span style="color:rgb(106,153,85)"> // Password</span></div>

<div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">char</span>* <span style="color:rgb(156,220,254)">OTAhostname</span> = <span style="color:rgb(206,145,120)">"ESP-puhy"</span>;</div>
<div><span style="color:rgb(106,153,85)">/* Start Webserver */</span></div><div><span style="color:rgb(78,201,176)">AsyncWebServer</span> <span style="color:rgb(156,220,254)">server</span>(<span style="color:rgb(181,206,168)">80</span>);</div>
<div><span style="color:rgb(106,153,85)">/* Attach ESP-DASH to AsyncWebServer */</span></div><div><span style="color:rgb(78,201,176)">ESPDash</span> <span style="color:rgb(156,220,254)">dashboard</span>(&<span style="color:rgb(156,220,254)">server</span>); </div>

<div><span style="color:rgb(106,153,85)">/* </span></div><div><span style="color:rgb(106,153,85)">  Button Card</span></div><div><span style="color:rgb(106,153,85)">  Format - (Dashboard Instance, Card Type, Card Name)</span></div><div><span style="color:rgb(106,153,85)">*/</span></div><div><span style="color:rgb(78,201,176)">Card</span> <span style="color:rgb(156,220,254)">button</span>(&<span style="color:rgb(156,220,254)">dashboard</span>, <span style="color:rgb(78,201,176)">BUTTON_CARD</span>, <span style="color:rgb(206,145,120)">"ZalĂ©vej"</span>);</div><div><span style="color:rgb(78,201,176)">Card</span> <span style="color:rgb(156,220,254)">button1</span>(&<span style="color:rgb(156,220,254)">dashboard</span>, <span style="color:rgb(78,201,176)">BUTTON_CARD</span>, <span style="color:rgb(206,145,120)">"ÄŚisti"</span>);</div><div><span style="color:rgb(78,201,176)">Card</span> <span style="color:rgb(156,220,254)">button2</span>(&<span style="color:rgb(156,220,254)">dashboard</span>, <span style="color:rgb(78,201,176)">BUTTON_CARD</span>, <span style="color:rgb(206,145,120)">"Zatop"</span>);</div>

<div><span style="color:rgb(78,201,176)">Card</span> <span style="color:rgb(156,220,254)">uptimeCard</span>(&<span style="color:rgb(156,220,254)">dashboard</span>, <span style="color:rgb(78,201,176)">STATUS_CARD</span>, <span style="color:rgb(206,145,120)">"Uptime"</span>, <span style="color:rgb(206,145,120)">"success"</span>);</div>



<div><span style="color:rgb(106,153,85)">/* </span></div><div><span style="color:rgb(106,153,85)">  Slider Card</span></div><div><span style="color:rgb(106,153,85)">  Format - (Dashboard Instance, Card Type, Card Name, Card Symbol(optional), int min, int max)</span></div><div><span style="color:rgb(106,153,85)">*/</span></div><div><span style="color:rgb(78,201,176)">Card</span> <span style="color:rgb(156,220,254)">slider</span>(&<span style="color:rgb(156,220,254)">dashboard</span>, <span style="color:rgb(78,201,176)">SLIDER_CARD</span>, <span style="color:rgb(206,145,120)">"Test Slider"</span>, <span style="color:rgb(206,145,120)">""</span>, <span style="color:rgb(181,206,168)">0</span>, <span style="color:rgb(181,206,168)">255</span>);</div>
<div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">ledHeartBeatPin</span> = <span style="color:rgb(181,206,168)">2</span>;</div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">ledPin</span> = <span style="color:rgb(181,206,168)">5</span>;</div>
<div><span style="color:rgb(106,153,85)">// setting PWM properties</span></div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">ledPinPWM</span> = <span style="color:rgb(181,206,168)">13</span>;<span style="color:rgb(106,153,85)">  /* GPIO13 */</span></div><div><span style="color:rgb(106,153,85)">//int dutyCycle;</span></div><div><span style="color:rgb(106,153,85)">/* Setting PWM Properties */</span></div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">PWMFreq</span> = <span style="color:rgb(181,206,168)">5000</span>;<span style="color:rgb(106,153,85)"> /* 5 KHz */</span></div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">PWMChannel</span> = <span style="color:rgb(181,206,168)">0</span>;</div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">PWMResolution</span> = <span style="color:rgb(181,206,168)">8</span>;</div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">MAX_DUTY_CYCLE</span> = (<span style="color:rgb(86,156,214)">int</span>)(<span style="color:rgb(220,220,170)">pow</span>(<span style="color:rgb(181,206,168)">2</span>, <span style="color:rgb(156,220,254)">PWMResolution</span>) - <span style="color:rgb(181,206,168)">1</span>);</div>

<div><span style="color:rgb(106,153,85)">// Variables will change:</span></div><div><span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">ledState</span> = <span style="color:rgb(86,156,214)">LOW</span>;<span style="color:rgb(106,153,85)">             // ledState used to set the LED</span></div>
<div><span style="color:rgb(106,153,85)">// Generally, you should use "unsigned long" for variables that hold time</span></div><div><span style="color:rgb(106,153,85)">// The value will quickly become too large for an int to store</span></div><div><span style="color:rgb(86,156,214)">unsigned</span> <span style="color:rgb(86,156,214)">long</span> <span style="color:rgb(156,220,254)">previousMillis</span> = <span style="color:rgb(181,206,168)">0</span>;<span style="color:rgb(106,153,85)">        // will store last time LED was updated</span></div>
<div><span style="color:rgb(106,153,85)">// constants won't change:</span></div><div><span style="color:rgb(86,156,214)">long</span> <span style="color:rgb(156,220,254)">heartBeatInterval</span> = <span style="color:rgb(181,206,168)">1000</span>;<span style="color:rgb(106,153,85)">           // interval at which to blink (milliseconds)</span></div>

<div><span style="color:rgb(86,156,214)">void</span> <span style="color:rgb(220,220,170)">setup</span>() {</div>
<div><span style="color:rgb(220,220,170)">pinMode</span> (<span style="color:rgb(156,220,254)">ledPin</span>, <span style="color:rgb(86,156,214)">OUTPUT</span>);</div><div><span style="color:rgb(220,220,170)">pinMode</span> (<span style="color:rgb(156,220,254)">ledHeartBeatPin</span>, <span style="color:rgb(86,156,214)">OUTPUT</span>);</div><div><span style="color:rgb(220,220,170)">pinMode</span> (<span style="color:rgb(156,220,254)">ledPinPWM</span>, <span style="color:rgb(86,156,214)">OUTPUT</span>);</div>
<div>  <span style="color:rgb(220,220,170)">ledcSetup</span>(<span style="color:rgb(156,220,254)">PWMChannel</span>, <span style="color:rgb(156,220,254)">PWMFreq</span>, <span style="color:rgb(156,220,254)">PWMResolution</span>);</div><div><span style="color:rgb(106,153,85)">  /* Attach the LED PWM Channel to the GPIO Pin */</span></div><div>  <span style="color:rgb(220,220,170)">ledcAttachPin</span>(<span style="color:rgb(156,220,254)">ledPinPWM</span>, <span style="color:rgb(156,220,254)">PWMChannel</span>);</div>

<div>  <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">begin</span>(<span style="color:rgb(181,206,168)">115200</span>);</div>
<div><span style="color:rgb(106,153,85)">  /* Connect WiFi */</span></div><div>  <span style="color:rgb(156,220,254)">WiFi</span>.<span style="color:rgb(220,220,170)">mode</span>(<span style="color:rgb(86,156,214)">WIFI_STA</span>);</div><div>  <span style="color:rgb(156,220,254)">WiFi</span>.<span style="color:rgb(220,220,170)">begin</span>(<span style="color:rgb(156,220,254)">ssid</span>, <span style="color:rgb(156,220,254)">password</span>);</div><div>  <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">WiFi</span>.<span style="color:rgb(220,220,170)">waitForConnectResult</span>() != <span style="color:rgb(79,193,255)">WL_CONNECTED</span>) {</div><div>      <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">printf</span>(<span style="color:rgb(206,145,120)">"WiFi Failed!</span><span style="color:rgb(215,186,125)">\n</span><span style="color:rgb(206,145,120)">"</span>);</div><div>      <span style="color:rgb(197,134,192)">return</span>;</div><div>  }</div><div>  <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">print</span>(<span style="color:rgb(206,145,120)">"IP Address: "</span>);</div><div>  <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(156,220,254)">WiFi</span>.<span style="color:rgb(220,220,170)">localIP</span>());</div>
<div><span style="color:rgb(106,153,85)">  /* Attach Button Callback */</span></div><div>  <span style="color:rgb(156,220,254)">button</span>.<span style="color:rgb(220,220,170)">attachCallback</span>([&](<span style="color:rgb(86,156,214)">bool</span> <span style="color:rgb(156,220,254)">value</span>){</div><div><span style="color:rgb(106,153,85)">    /* Print our new button value received from dashboard */</span></div><div>    <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"Button Triggered: "</span><span style="color:rgb(220,220,170)">+</span><span style="color:rgb(78,201,176)">String</span>((<span style="color:rgb(156,220,254)">value</span>)?<span style="color:rgb(206,145,120)">"true"</span>:<span style="color:rgb(206,145,120)">"false"</span>));</div><div><span style="color:rgb(106,153,85)">    /* Make sure we update our button's value and send update to dashboard */</span></div><div>    <span style="color:rgb(156,220,254)">button</span>.<span style="color:rgb(220,220,170)">update</span>(<span style="color:rgb(156,220,254)">value</span>);</div><div>    <span style="color:rgb(220,220,170)">digitalWrite</span> (<span style="color:rgb(156,220,254)">ledPin</span>, <span style="color:rgb(156,220,254)">value</span>);</div><div>    <span style="color:rgb(156,220,254)">dashboard</span>.<span style="color:rgb(220,220,170)">sendUpdates</span>();</div><div>  });</div>
<div><span style="color:rgb(106,153,85)">  /* Attach Slider Callback */</span></div><div>  <span style="color:rgb(156,220,254)">slider</span>.<span style="color:rgb(220,220,170)">attachCallback</span>([&](<span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">value</span>){</div><div><span style="color:rgb(106,153,85)">    /* Print our new slider value received from dashboard */</span></div><div>    <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"Slider Triggered: "</span><span style="color:rgb(220,220,170)">+</span><span style="color:rgb(78,201,176)">String</span>(<span style="color:rgb(156,220,254)">value</span>));</div><div><span style="color:rgb(106,153,85)">    /* Make sure we update our slider's value and send update to dashboard */</span></div><div>    <span style="color:rgb(156,220,254)">slider</span>.<span style="color:rgb(220,220,170)">update</span>(<span style="color:rgb(156,220,254)">value</span>);</div><div>    <span style="color:rgb(220,220,170)">ledcWrite</span>(<span style="color:rgb(156,220,254)">PWMChannel</span>, <span style="color:rgb(156,220,254)">value</span>);</div><div>    <span style="color:rgb(156,220,254)">dashboard</span>.<span style="color:rgb(220,220,170)">sendUpdates</span>();</div><div>  });</div>
<div><span style="color:rgb(106,153,85)">  /* Start AsyncWebServer */</span></div><div>  <span style="color:rgb(156,220,254)">server</span>.<span style="color:rgb(220,220,170)">begin</span>();</div>

<div><span style="color:rgb(156,220,254)">ArduinoOTA</span>.<span style="color:rgb(220,220,170)">setHostname</span>(<span style="color:rgb(156,220,254)">OTAhostname</span>);</div><div>  <span style="color:rgb(156,220,254)">ArduinoOTA</span>.<span style="color:rgb(220,220,170)">onStart</span>([]()</div><div>  {</div><div>    <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"Start"</span>);</div><div>  });</div><div>  <span style="color:rgb(156,220,254)">ArduinoOTA</span>.<span style="color:rgb(220,220,170)">onEnd</span>([]()</div><div>  {</div><div>    <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"</span><span style="color:rgb(215,186,125)">\n</span><span style="color:rgb(206,145,120)">End"</span>);</div><div>  });</div><div>  <span style="color:rgb(156,220,254)">ArduinoOTA</span>.<span style="color:rgb(220,220,170)">onProgress</span>([](<span style="color:rgb(86,156,214)">unsigned</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">progress</span>, <span style="color:rgb(86,156,214)">unsigned</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">total</span>)</div><div>  {</div><div>    <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">printf</span>(<span style="color:rgb(206,145,120)">"Progress: %u%%</span><span style="color:rgb(215,186,125)">\r</span><span style="color:rgb(206,145,120)">"</span>, (<span style="color:rgb(156,220,254)">progress</span> / (<span style="color:rgb(156,220,254)">total</span> / <span style="color:rgb(181,206,168)">100</span>)));</div><div>  });</div><div>  <span style="color:rgb(156,220,254)">ArduinoOTA</span>.<span style="color:rgb(220,220,170)">onError</span>([](<span style="color:rgb(78,201,176)">ota_error_t</span> <span style="color:rgb(156,220,254)">error</span>)</div><div>  {</div><div>    <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">printf</span>(<span style="color:rgb(206,145,120)">"Error[%u]: "</span>, <span style="color:rgb(156,220,254)">error</span>);</div><div>    <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">error</span> == <span style="color:rgb(79,193,255)">OTA_AUTH_ERROR</span>) <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"Auth Failed"</span>);</div><div>    <span style="color:rgb(197,134,192)">else</span> <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">error</span> == <span style="color:rgb(79,193,255)">OTA_BEGIN_ERROR</span>) <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"Begin Failed"</span>);</div><div>    <span style="color:rgb(197,134,192)">else</span> <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">error</span> == <span style="color:rgb(79,193,255)">OTA_CONNECT_ERROR</span>) <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"Connect Failed"</span>);</div><div>    <span style="color:rgb(197,134,192)">else</span> <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">error</span> == <span style="color:rgb(79,193,255)">OTA_RECEIVE_ERROR</span>) <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"Receive Failed"</span>);</div><div>    <span style="color:rgb(197,134,192)">else</span> <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">error</span> == <span style="color:rgb(79,193,255)">OTA_END_ERROR</span>) <span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(206,145,120)">"End Failed"</span>);</div><div>  });</div><div>  <span style="color:rgb(156,220,254)">ArduinoOTA</span>.<span style="color:rgb(220,220,170)">begin</span>();</div>

<div>}</div></div>
          </div>
          <div>
            <div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:Consolas,"Courier New",monospace;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:rgb(86,156,214)">void</span> <span style="color:rgb(220,220,170)">loop</span>() {</div><div><span style="color:rgb(106,153,85)">  /* Nothing so far */</span></div><div> <span style="color:rgb(156,220,254)">ArduinoOTA</span>.<span style="color:rgb(220,220,170)">handle</span>();</div>
<div><span style="color:rgb(106,153,85)">  // here is where you'd put code that needs to be running all the time.</span></div>
<div><span style="color:rgb(106,153,85)">  // check to see if it's time to blink the LED; that is, if the difference</span></div><div><span style="color:rgb(106,153,85)">  // between the current time and last time you blinked the LED is bigger than</span></div><div><span style="color:rgb(106,153,85)">  // the interval at which you want to blink the LED.</span></div><div>  <span style="color:rgb(86,156,214)">unsigned</span> <span style="color:rgb(86,156,214)">long</span> <span style="color:rgb(156,220,254)">currentMillis</span> = <span style="color:rgb(220,220,170)">millis</span>();</div>
<div>  <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">currentMillis</span> - <span style="color:rgb(156,220,254)">previousMillis</span> >= <span style="color:rgb(156,220,254)">heartBeatInterval</span>) {</div><div><span style="color:rgb(106,153,85)">    // save the last time you blinked the LED</span></div><div>    <span style="color:rgb(156,220,254)">previousMillis</span> = <span style="color:rgb(156,220,254)">currentMillis</span>;</div>
<div><span style="color:rgb(106,153,85)">    // if the LED is off turn it on and vice-versa:</span></div><div>    <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">ledState</span> == <span style="color:rgb(86,156,214)">LOW</span>) {</div><div>      <span style="color:rgb(156,220,254)">ledState</span> = <span style="color:rgb(86,156,214)">HIGH</span>;</div><div>      <span style="color:rgb(156,220,254)">heartBeatInterval</span> = <span style="color:rgb(181,206,168)">2500</span>;</div><div>    } <span style="color:rgb(197,134,192)">else</span> {</div><div>      <span style="color:rgb(156,220,254)">heartBeatInterval</span> = <span style="color:rgb(181,206,168)">20</span>;</div><div>      <span style="color:rgb(156,220,254)">ledState</span> = <span style="color:rgb(86,156,214)">LOW</span>;</div><div>    }</div>
<div><span style="color:rgb(106,153,85)">    // set the LED with the ledState of the variable:</span></div><div>    <span style="color:rgb(220,220,170)">digitalWrite</span>(<span style="color:rgb(156,220,254)">ledHeartBeatPin</span>, <span style="color:rgb(156,220,254)">ledState</span>);</div>
<div><span style="color:rgb(156,220,254)">Serial</span>.<span style="color:rgb(220,220,170)">println</span>(<span style="color:rgb(78,201,176)">uptime_formatter</span>::<span style="color:rgb(220,220,170)">getUptime</span>());</div>
<div><span style="color:rgb(156,220,254)">uptimeCard</span>.<span style="color:rgb(220,220,170)">update</span>(<span style="color:rgb(78,201,176)">uptime_formatter</span>::<span style="color:rgb(220,220,170)">getUptime</span>());</div>

<div>  }</div></div>
          </div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>
            <div>
              <div dir="ltr">
                <div dir="ltr">
                  <div dir="ltr">
                    <div>DĂ­ky za podporu.</div>
                    <div><br>
                    </div>
                    <div>HP</div>
                    <div><br>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <br>
          </div>
          <br>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">pá 28. 5. 2021 v 6:10
              odesĂ­latel Pavel Brychta <<a href="mailto:pavel.brychta@duhasys.eu" target="_blank">pavel.brychta@duhasys.eu</a>>
              napsal:<br>
            </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              <div>
                <p>DD,</p>
                <p>ano, handler se dává do loop(), ale doporuÄŤuju
                  odstranit ten nešťastnĂ˝ delay() i kdyĹľ to zrovna
                  nemusĂ­ bĂ˝t zdroj problĂ©mu. PotĂ­Ĺľ je v tom, Ĺľe nepíšete
                  jak se projevuje to, Ĺľe to nefunguje - pokud upoad
                  probÄ›hne, ale podezĹ™ele rychle a firmware se ve
                  skuteÄŤnosti nenahraje, tak je to tĂ­m, Ĺľe jste
                  nevymazal paměť flash (pio run -t erase) a to ESP má
                  uloĹľenou jinou partition tabulku. VĹľdycky, kdyĹľ
                  nahrávám do novĂ©ho modulu, tak udÄ›lám vĂ˝maz flash a
                  teprve pak nahraju prvnĂ­ firmware. Já prakticky
                  vĂ˝hradnÄ› používám Wrover 16MB moduly s trošku
                  upravenou vnitĹ™nĂ­ konfiguracĂ­ a všechny tyto Ăşpravy
                  dÄ›lám v přípravku mimo zařízenĂ­ pĹ™ed osazenĂ­m
                  (reklamnĂ­ linka <a href="https://s.click.aliexpress.com/e/_9j8PIP" target="_blank">https://s.click.aliexpress.com/e/_9j8PIP</a>
                  ).</p>
                <p>P.B.<br>
                </p>
                <div>Dne 27. 05. 21 v 23:22 Jan PĹŻhonĂ˝ napsal(a):<br>
                </div>
                <blockquote type="cite">
                  <div dir="ltr">
                    <div>
                      <div dir="ltr">
                        <div dir="ltr">
                          <div>DobrĂ˝ veÄŤer,</div>
                          <div><br>
                          </div>
                          <div>ten ESPDash je super. JeštÄ› jednou dĂ­ky
                            za tip. OhlednÄ› tÄ›ch WDT asi tam dám i ten
                            externĂ­, bude potĹ™eba ale ÄŤasovat nÄ›kde
                            kolem 1minuty, aby to nezabĂ­ralo v případÄ›
                            update firmware.</div>
                          <div><br>
                          </div>
                          <div>Trochu se s trápĂ­m s tĂ­m, jak
                            zkombinovat svĹŻj kĂłd s OTA update. Funguje
                            mi jen jedno nebo druhĂ©, ale dohromady ne.</div>
                          <div><br>
                          </div>
                          <div>KdyĹľ to napíšu takto z(viz nĂ­Ĺľe), tak OTA
                            je vidÄ›t (napĹ™. v Arduino IDE) ale nejde nic
                            nahrát. Testoval jsem jak Arduino IDE, tak
                            platformio.</div>
                          <div><br>
                          </div>
                          <div><img src="cid:179cbe7ba44cb971f161" alt="image.png" width="277" height="43"><br>
                          </div>
                          <div><br>
                          </div>
                          <div>KdyĹľ tam dám jen příklad OTA tak upload
                            normálnÄ› funguje, kdyĹľ tam dám jen ESPDash,
                            normálnÄ› to funguje. Ale dohromady ne. </div>
                          <div><br>
                          </div>
                          <div>Píše se ten OTA handler opravdu do loop?</div>
                          <div><br>
                            #include <Arduino.h><br>
                            #if defined(ESP8266)<br>
                            Â  /* ESP8266 Dependencies */<br>
                            Â  #include <ESP8266WiFi.h><br>
                            Â  #include <ESPAsyncTCP.h><br>
                            Â  #include <ESPAsyncWebServer.h><br>
                            #elif defined(ESP32)<br>
                            Â  /* ESP32 Dependencies */<br>
                            Â  #include <WiFi.h><br>
                            Â  #include <AsyncTCP.h><br>
                            Â  #include <ESPAsyncWebServer.h><br>
                            #endif<br>
                            #include <ESPDash.h><br>
                            <br>
                            <br>
                            #include <WiFiUdp.h><br>
                            <b>#include <ArduinoOTA.h></b><br>
                            <br>
                            /* Your WiFi Credentials */<br>
                            const char* ssid = "******"; // SSID<br>
                            const char* password = "******"; // Password<br>
                            <br>
                            const char* OTAhostname = "ESP-puhy";<br>
                            <br>
                            /* Start Webserver */<br>
                            AsyncWebServer server(80);<br>
                            <br>
                            /* Attach ESP-DASH to AsyncWebServer */<br>
                            ESPDash dashboard(&server); <br>
                            <br>
                            /* <br>
                            Â  Button Card<br>
                            Â  Format - (Dashboard Instance, Card Type,
                            Card Name)<br>
                            */<br>
                            Card button(&dashboard, BUTTON_CARD,
                            "Test Button");<br>
                            <br>
                            /* <br>
                            Â  Slider Card<br>
                            Â  Format - (Dashboard Instance, Card Type,
                            Card Name, Card Symbol(optional), int min,
                            int max)<br>
                            */<br>
                            Card slider(&dashboard, SLIDER_CARD,
                            "Test Slider", "", 0, 255);<br>
                            <br>
                            <br>
                            void setup() {<br>
                            Â  Serial.begin(115200);<br>
                            <br>
                            Â  /* Connect WiFi */<br>
                            Â  WiFi.mode(WIFI_STA);<br>
                            Â  WiFi.begin(ssid, password);<br>
                            Â  if (WiFi.waitForConnectResult() !=
                            WL_CONNECTED) {<br>
                            Â  Â  Â  Serial.printf("WiFi Failed!\n");<br>
                            Â  Â  Â  return;<br>
                            Â  }<br>
                            Â  Serial.print("IP Address: ");<br>
                            Â  Serial.println(WiFi.localIP());<br>
                            <br>
                            Â  /* Attach Button Callback */<br>
                            Â  button.attachCallback([&](bool value){<br>
                            Â  Â  /* Print our new button value received
                            from dashboard */<br>
                            Â  Â  Serial.println("Button Triggered:
                            "+String((value)?"true":"false"));<br>
                            Â  Â  /* Make sure we update our button's
                            value and send update to dashboard */<br>
                            Â  Â  button.update(value);<br>
                            Â  Â  dashboard.sendUpdates();<br>
                            Â  });<br>
                            <br>
                            Â  /* Attach Slider Callback */<br>
                            Â  slider.attachCallback([&](int value){<br>
                            Â  Â  /* Print our new slider value received
                            from dashboard */<br>
                            Â  Â  Serial.println("Slider Triggered:
                            "+String(value));<br>
                            Â  Â  /* Make sure we update our slider's
                            value and send update to dashboard */<br>
                            Â  Â  slider.update(value);<br>
                            Â  Â  dashboard.sendUpdates();<br>
                            Â  });<br>
                            <br>
                            Â  /* Start AsyncWebServer */<br>
                            Â  server.begin();<br>
                            <br>
                            ArduinoOTA.setHostname(OTAhostname);<br>
                            Â  ArduinoOTA.onStart([]()<br>
                            Â  {<br>
                            Â  Â  Serial.println("Start");<br>
                            Â  });<br>
                            Â  ArduinoOTA.onEnd([]()<br>
                            Â  {<br>
                            Â  Â  Serial.println("\nEnd");<br>
                            Â  });<br>
                            Â  ArduinoOTA.onProgress([](unsigned int
                            progress, unsigned int total)<br>
                            Â  {<br>
                            Â  Â  Serial.printf("Progress: %u%%\r",
                            (progress / (total / 100)));<br>
                            Â  });<br>
                            Â  ArduinoOTA.onError([](ota_error_t error)<br>
                            Â  {<br>
                            Â  Â  Serial.printf("Error[%u]: ", error);<br>
                            Â  Â  if (error == OTA_AUTH_ERROR)
                            Serial.println("Auth Failed");<br>
                            Â  Â  else if (error == OTA_BEGIN_ERROR)
                            Serial.println("Begin Failed");<br>
                            Â  Â  else if (error == OTA_CONNECT_ERROR)
                            Serial.println("Connect Failed");<br>
                            Â  Â  else if (error == OTA_RECEIVE_ERROR)
                            Serial.println("Receive Failed");<br>
                            Â  Â  else if (error == OTA_END_ERROR)
                            Serial.println("End Failed");<br>
                            Â  });<br>
                            Â  ArduinoOTA.begin();<br>
                            }<br>
                            <br>
                            void loop() {<br>
                            Â  /* Nothing so far */<br>
                            <b> ArduinoOTA.handle();</b><br>
                            <br>
                            Â delay(5000);<br>
                            <br>
                            }<br>
                          </div>
                          <div><br>
                          </div>
                          <div>DĂ­ky,</div>
                          <div><br>
                          </div>
                          <div>HP</div>
                          <div><br>
                          </div>
                        </div>
                      </div>
                    </div>
                    <br>
                  </div>
                  <br>
                  <div class="gmail_quote">
                    <div dir="ltr" class="gmail_attr">st 26. 5. 2021
                      v 13:45 odesĂ­latel Pavel Brychta <<a href="mailto:pavel.brychta@duhasys.eu" target="_blank">pavel.brychta@duhasys.eu</a>>
                      napsal:<br>
                    </div>
                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <div>
                        <p>Co se týče WDT, tak fakt nevĂ­m - mÄ› zatĂ­m
                          vĹľdycky staÄŤil vnitĹ™nĂ­ v ESP32 (má i brownout
                          detector, kterĂ˝ uĹľ jsem takĂ© vidÄ›l zabrat).
                          ZařízenĂ­ mi běží 24/7. ExpandĂ©r mĹŻĹľu doporuÄŤit
                          mĂ­sto toho PCF radÄ›ji MCP23008 (nebo 16, pokud
                          je 8 GPIO málo) - minimálnÄ› z toho dĹŻvodu, Ĺľe
                          má asynchronnĂ­ reset, takĹľe po resetu jsou
                          GPIO v definovanĂ˝ch stavech.</p>
                        <p>P.B.<br>
                        </p>
                        <div>Dne 26. 05. 21 v 13:30 Jan PĹŻhonĂ˝
                          napsal(a):<br>
                        </div>
                        <blockquote type="cite">
                          <div dir="ltr">DĂ­ky za reakce. Jde mi o to mĂ­t
                            to co nejvĂ­ce low level. Opravdu do toho
                            nechci tahat RasPi. MusĂ­ to jet i kdyĹľ
                            nepĹŻjde wifi a s tou Atmegou to drží roky aĹľ
                            se divĂ­m. 
                            <div><br>
                            </div>
                            <div>MaximálnÄ› do budoucna mĹŻĹľu pĹ™idat
                              nÄ›jakou vizualizaci na něčem jako RasPi,
                              ale to spíš uĹľ přímo posĂ­lat requesty na
                              www a ukládat do MySQL. PotĹ™ebuji aby ta
                              logika byla spolehlivá. Ano, mám na tom
                              rybiÄŤky a ÄŤerpadlo topenĂ­ ( a taky
                              zalĂ©vánĂ­ na zahradÄ› a vodomÄ›r a zvonky a
                              fakt hodnÄ› blbostĂ­ :-)
                              <div><br>
                              </div>
                              <div>Atmega s watchdogem to zatĂ­m pár let
                                dala bez ztráty kytiÄŤky, uptime tam
                                pĹ™etĂ©kal bez toho aby se to nÄ›jak
                                resetovalo nebo tak nÄ›co.</div>
                              <div><br>
                              </div>
                              <div>Mám to vše jakoby centralizovanĂ© u
                                hlavnĂ­ho rozvaděče, takĹľe nepotĹ™ebuji
                                bezdrátovĂ© nody po domÄ›, jde mi o to
                                nahradit tu AtMegu něčím vĂ˝konnÄ›jším.</div>
                              <div><br>
                              </div>
                              <div>Budu tam potĹ™ebovat hodnÄ› I/O, je
                                dobrĂ˝ nápad k tomu ESP32 dávat pár
                                PCF8574 jako I/O expander nebo je nÄ›co
                                robusnÄ›jšího?</div>
                              <div><br>
                              </div>
                              <div>A další vÄ›c, je potĹ™eba k ESP32 dávat
                                externĂ­ WDT?</div>
                              <div><br>
                              </div>
                              <div>
                                <div>
                                  <div>
                                    <div dir="ltr">
                                      <div dir="ltr">
                                        <div>
                                          <div dir="ltr">
                                            <div>HP</div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                  </div>
                                  <br>
                                </div>
                              </div>
                            </div>
                          </div>
                          <br>
                          <div class="gmail_quote">
                            <div dir="ltr" class="gmail_attr">st 26. 5.
                              2021 v 11:47 odesĂ­latel Pavel Brychta <<a href="mailto:pavel.brychta@duhasys.eu" target="_blank">pavel.brychta@duhasys.eu</a>>
                              napsal:<br>
                            </div>
                            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Tak
                              zrovna to je exemplárnĂ­ případ, jak to
                              urÄŤitÄ› nedÄ›lat. Zde <br>
                              <a href="https://github.com/Alextros00/ESP32-MQTT-Relay-Control/blob/main/main/app_main.c" rel="noreferrer" target="_blank">https://github.com/Alextros00/ESP32-MQTT-Relay-Control/blob/main/main/app_main.c</a>
                              <br>
                              nenĂ­ jediná zmĂ­nka, nebo náznak Ĺ™ešenĂ­
                              nÄ›jakĂ©ho failsafe mechanizmu. <br>
                              CelĂ© to je na Ăşrovni primitivnĂ­ho Arduino
                              example, kterĂ˝ se s detaily <br>
                              jako je tĹ™eba jmĂ©no topcu vĹŻbec
                              nezalamuje. MQTT failsafe samo o sobÄ› <br>
                              nevyĹ™eší ani omylem.<br>
                              <br>
                              P.B.<br>
                              <br>
                              Dne 26. 05. 21 v 11:28 T. Meinlschmidt
                              napsal(a):<br>
                              > proto pisu mqtt. esp32 tu podporu
                              mqtt ma pomerne slusnou. viz treba <br>
                              > takovy easy priklad<br>
                              ><br>
                              > <a href="https://github.com/Alextros00/Home-Automation-NodeRED-ESP-Telegram" rel="noreferrer" target="_blank">https://github.com/Alextros00/Home-Automation-NodeRED-ESP-Telegram</a><br>
                              ><br>
                              > tm<br>
                              ><br>
                              > Dne 2021-05-26 10:54, Pavel Brychta
                              napsal:<br>
                              >> ... aĹľ na to, Ĺľe kdyĹľ pak lehne
                              to Pi, nebo WiFi, tak zĹŻstane tĹ™eba<br>
                              >> ÄŤerpadlo běžet stále, nebo
                              uvaříte rybiÄŤky. PĹ™iznám se, Ĺľe takovouto<br>
                              >> cestou bych nikdy nešel, protoĹľe
                              to znamená mĂ­t failsafe procesy v ESP<br>
                              >> a Ĺ™Ă­dĂ­cĂ­ logiku jinde, coĹľ pro
                              ĂşÄŤely automatizace povaĹľuji za hodnÄ›<br>
                              >> nešťastnĂ© Ĺ™ešenĂ­. KdyĹľ uĹľ, tak
                              autonomnĂ­ pocesy na zařízenĂ­ a API pro<br>
                              >> parametrizaci do toho rPi...<br>
                              >><br>
                              >> P.B.<br>
                              >><br>
                              >> Dne 26. 05. 21 v 10:49 T.
                              Meinlschmidt napsal(a):<br>
                              >>> dobre dopoledne.<br>
                              >>><br>
                              >>> ja se priznam, ze bych vubec
                              nesel touhle cestou, ale mel ESP ciste <br>
                              >>> na hw veci a sber nejakych
                              dat,<br>
                              >>> a celou tu logiku nechal v
                              node-red + mqtt (treba na rpi). Casem na <br>
                              >>> to muzete navazat mobil, UI
                              si udelate podle sebe pomerne jednoduse, <br>
                              >>> navic to umi spoustu veci z
                              jinych zdroju.<br>
                              >>><br>
                              >>> tm<br>
                              >>><br>
                              >>> Dne 2021-05-26 10:32, Jan
                              PĹŻhonĂ˝ napsal:<br>
                              >>>> DobrĂ© dopoledne,<br>
                              >>>><br>
                              >>>> JeštÄ› bych potĹ™eboval
                              poradit co použít za systĂ©m na ESP32.<br>
                              >>>> Jedná se mi o to, Ĺľe do
                              ESP32 pĹ™episuji z Atmegy 2560 nÄ›co jako<br>
                              >>>> Ĺ™Ă­zenĂ­ topenĂ­ a rĹŻznĂ˝ch
                              zdrojĹŻ tepla a rĹŻznĂ˝ch hejblátek<br>
                              >>>> doma. Do teÄŹ to běží na
                              ATMEGA 2560 a mám tam jednoduchĂ˝<br>
                              >>>> "multitasking" pomocĂ­
                              millis. Jedná se v podstatÄ› jen o ÄŤtenĂ­<br>
                              >>>> teplotnĂ­ch ÄŤidel,
                              webserver a pak rĹŻznĂ© vĂ˝stupy v podobÄ› SSR<br>
                              >>>> relĂ© + vstupy a logika
                              mezi tĂ­m. Nic sloĹľitĂ©ho. Na druhou stranu<br>
                              >>>> za ty roky to celkem
                              naboptnalo co se kĂłdu týče a ten webserver
                              na<br>
                              >>>> tĂ© AT2560 je takovĂ˝ dost
                              lĂ­nĂ˝. NavĂ­c tam potĹ™ebuji ÄŤĂ­st http<br>
                              >>>> requesty data z komerÄŤnĂ­
                              meteostanice a na to uĹľ to moc nenĂ­.<br>
                              >>>><br>
                              >>>> Neexistuje nÄ›jakĂ˝
                              opensource projekt na ESP32, kde by byly<br>
                              >>>> vyĹ™ešeny základnĂ­ vÄ›ci
                              jako webserver + nÄ›jaká grafika a<br>
                              >>>> hejblátka abych to
                              nemusel psát ĂşplnÄ› od začátku. LĂ­bilo by
                              se<br>
                              >>>> mi uĹľ https a základnĂ­
                              struktura a dopsal bych si do toho jen tu<br>
                              >>>> vlastnĂ­ logiku a ovládánĂ­
                              vstupĹŻ a vĂ˝stupĹŻ.<br>
                              >>>><br>
                              >>>> Je dobrĂ˝ nápad na to ESP
                              dávat FreeRTOS, nebo to uĹľ je pĹ™ekonanĂ©<br>
                              >>>> a používáte nÄ›co lepšího?
                              PřípadnÄ› vĂ­te o nÄ›jakĂ©m open<br>
                              >>>> source projektu pro
                              domácĂ­ automatizaci pro ESP32?<br>
                              >>>><br>
                              >>>> Ano, googlil jsem, ale
                              serp je zaplaven videi geekĹŻ kteří pĹ™ipojĂ­<br>
                              >>>> k pár relátkĹŻm esp a
                              myslĂ­ si co nevymysleli a trochu se v tom<br>
                              >>>> ztrácĂ­m. Já bych
                              potĹ™eboval nÄ›co trochu robusnÄ›jšího.<br>
                              >>>><br>
                              >>>> DĂ­ky za nápady.<br>
                              >>>><br>
                              >>>> HP<br>
                              >>>>
                              _______________________________________________<br>
                              >>>> HW-list mailing list  - 
                              sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
                              >>>> <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
                              >>>> <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
                              >>>
                              _______________________________________________<br>
                              >>> HW-list mailing list  - 
                              sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
                              >>> <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
                              >>> <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
                              >>
                              _______________________________________________<br>
                              >> HW-list mailing list  - 
                              sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
                              >> <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
                              >> <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
                              >
                              _______________________________________________<br>
                              > HW-list mailing list  -  sponsored by
                              <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
                              > <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
                              > <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
_______________________________________________<br>
                              HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
                              <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
                              <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
                            </blockquote>
                          </div>
                          <br>
                          <fieldset></fieldset>
                          <pre>_______________________________________________
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
                        </blockquote>
                      </div>
                      _______________________________________________<br>
                      HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
                      <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
                      <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
                    </blockquote>
                  </div>
                  <br>
                  <fieldset></fieldset>
                  <pre>_______________________________________________
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
                </blockquote>
              </div>
              _______________________________________________<br>
              HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
              <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
              <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
            </blockquote>
          </div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <pre>_______________________________________________
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
  </div>

_______________________________________________<br>
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</blockquote></div>