{"id":881,"date":"2016-01-31T16:57:37","date_gmt":"2016-01-31T15:57:37","guid":{"rendered":"http:\/\/www.xpablo.cz\/?p=881"},"modified":"2016-02-17T16:44:08","modified_gmt":"2016-02-17T15:44:08","slug":"projekt-kws-webova-vizualizace-a-ovladani-nejen-pro-arduino-pomoci-esp8266","status":"publish","type":"post","link":"http:\/\/www.xpablo.cz\/?p=881","title":{"rendered":"Projekt KWS &#8211; webov\u00e1 vizualizace a ovl\u00e1d\u00e1n\u00ed (nejen) pro Arduino pomoc\u00ed ESP8266"},"content":{"rendered":"<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/kwswitty.jpg\" rel=\"attachment wp-att-882\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-882 alignleft\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/kwswitty-300x264.jpg\" alt=\"kwswitty\" width=\"300\" height=\"264\" srcset=\"http:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/kwswitty-300x264.jpg 300w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/kwswitty.jpg 665w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Z diskuze pod \u010dl\u00e1nkem o webov\u00e9 kamerce vyplynul z\u00e1jem o firmware do ESP8266, kter\u00fd by plnil tyto funkce:<\/p>\n<p>Poskytnut\u00ed webov\u00e9ho serveru pro vizualizaci prom\u011bnn\u00fdch, mo\u017enost zp\u011btn\u00e9ho ovl\u00e1d\u00e1n\u00ed\/p\u0159enosu dat. V\u0161e m\u00e1 komunikovat p\u0159es jednoduch\u00fd s\u00e9riov\u00fd protokol nap\u0159\u00edklad s deskou Arduino UNO. Z nedostatku invence jsem projekt nazval KWS, neboli Karl\u016fv Webov\u00fd Syst\u00e9m. Sl\u00edbil jsem, \u017ee se pokus\u00edm do v\u00edkendu navrhnout n\u011bjak\u00e9 \u0159e\u0161en\u00ed a zde V\u00e1m tedy p\u0159edkl\u00e1d\u00e1m prvn\u00ed alfa verzi, co jsem vymyslel&#8230;<\/p>\n<p><!--more--><\/p>\n<p>M\u016fj n\u00e1vrh spo\u010d\u00edv\u00e1 ve vytvo\u0159en\u00ed a udr\u017eov\u00e1n\u00ed seznamu prom\u011bnn\u00fdch, jejich hodnot a informace o st\u00e1\u0159\u00ed posledn\u00ed hodnoty na stran\u011b jedn\u00e9 a odesl\u00e1n\u00ed nov\u00fdch povel\u016f na stran\u011b druh\u00e9. O spr\u00e1vu prom\u011bnn\u00fdch se star\u00e1 modul <strong>variables.cpp<\/strong>, kter\u00fd udr\u017euje seznam s hodnotami a aktualizuje st\u00e1\u0159\u00ed. Prom\u011bnn\u00e9 jsou jednak definov\u00e1ny u\u017eivatelem (seznam je v souboru <strong>variables.txt<\/strong>, ulo\u017een\u00e9m na SPIFFS a jednak jde o syst\u00e9mov\u00e9 prom\u011bnn\u00e9, kter\u00e9 vrac\u00ed informace o stavu syst\u00e9mu. Jedn\u00e1 se o:<\/p>\n<p><strong>version<\/strong> &#8211; vrac\u00ed jm\u00e9no b\u011b\u017e\u00edc\u00edho skriptu a informace o \u010dasu p\u0159ekladu<\/p>\n<p><strong>uptime<\/strong> &#8211; vrac\u00ed d\u00e9lku b\u011bhu od zapnut\u00ed nap\u00e1jen\u00ed, nebo restartu<\/p>\n<p><strong>heap<\/strong> &#8211; vrac\u00ed velikost voln\u00e9 pam\u011bti RAM v modulu ESP8266<\/p>\n<p>Zvl\u00e1\u0161tn\u00ed m\u00edsto pak zauj\u00edm\u00e1 prom\u011bnn\u00e1 <strong>send<\/strong>, kter\u00e1 sice nic nevrac\u00ed, ale za to zajist\u00ed odesl\u00e1n\u00ed povel\u016f sm\u011brem do pod\u0159\u00edzen\u00e9ho syst\u00e9mu.<\/p>\n<p>T\u00edmto se dost\u00e1v\u00e1me k protokolu s\u00e9riov\u00e9ho portu &#8211; tento je obsluhov\u00e1n a realizov\u00e1n v modulu <strong>comm.cpp<\/strong> . Proto\u017ee jsem si nebyl jist\u00fd, jak\u00fdm zp\u016fsobem bude komunikace prob\u00edhat (n\u011bkter\u00fdm aplikac\u00edm m\u016f\u017eou vadit po\u010d\u00e1te\u010dn\u00ed zpr\u00e1vy, kter\u00e9 prob\u011bhnou na standardn\u00edm s\u00e9riov\u00e9m portu ESP8266 p\u0159i\u00a0 n\u00e1b\u011bhu skriptu), vytvo\u0159il jsem komunika\u010dn\u00ed t\u0159\u00eddu tak, \u017ee jako komunika\u010dn\u00ed port lze pou\u017e\u00edt jak\u00e9hokoliv potomka t\u0159\u00eddy Stream. Znamen\u00e1 to tedy, \u017ee m\u016f\u017eeme pou\u017e\u00edt objekt Serial, SoftwareSerial, ale tak\u00e9 WiFiTCPSocket.<\/p>\n<p>O vizualizaci se pak star\u00e1 webov\u00fd server s mo\u017enost\u00ed generov\u00e1n\u00ed dynamick\u00e9ho obsahu, ulo\u017een\u00fd v souboru <strong>cgiws.cpp<\/strong> . Server dok\u00e1\u017ee serv\u00edrovat r\u016fzn\u00e9 datov\u00e9 typy p\u0159\u00edmo z SPIFFS a soubory s p\u0159\u00edponou .shtml interpretuje a vytv\u00e1\u0159\u00ed tak dynamick\u00fd obsah.<\/p>\n<p>Syntaxe shtml je n\u00e1sleduj\u00edc\u00ed:<\/p>\n<pre class=\"nums:false lang:default highlight:0 decode:true\">%!: nazev_souboru<\/pre>\n<p>Do odpov\u011bdi serveru vlo\u017e\u00ed obsah ur\u010den\u00e9ho souboru (vyu\u017eit\u00ed zejm\u00e9na pro hlavi\u010dky a pati\u010dky HTML str\u00e1nek), nezapome\u0148te pros\u00edm, \u017ee soubory na SPIFFS za\u010d\u00ednaj\u00ed ko\u0159enov\u00fdm adres\u00e1\u0159em.<\/p>\n<pre class=\"nums:false lang:default highlight:0 decode:true\">%! jmeno_promenne<\/pre>\n<p>Do odpov\u011bdi serveru je vlo\u017eena hodnota, kterou aktu\u00e1ln\u011b obsahuje zadan\u00e1 prom\u011bnn\u00e1.<\/p>\n<pre class=\"nums:false lang:default highlight:0 decode:true \">%!- novy_typ_dokumentu<\/pre>\n<p>Umo\u017e\u0148uje zm\u011bnit typ vracen\u00e9ho dokumentu &#8211; jde o to, \u017ee standardn\u011b se vrac\u00ed str\u00e1nka, generovan\u00e1 dynamicky jako text\/html. Pokud ov\u0161em budeme pot\u0159ebovat vr\u00e1tit XML, nebo JSON pro pou\u017eit\u00ed v AJAXu, je t\u0159eba typ dokumentu zm\u011bnit.<\/p>\n<pre class=\"nums:false lang:default highlight:0 decode:true \">%!@ jmeno_promenne<\/pre>\n<p>M\u00edsto hodnoty prom\u011bnn\u00e9 se do v\u00fdstupn\u00edho souboru ulo\u017e\u00ed st\u00e1\u0159\u00ed v milisekund\u00e1ch. St\u00e1\u0159\u00edm se rozum\u00ed \u010das od posledn\u00ed aktualizace a v na\u0161em p\u0159\u00edpad\u011b je tato hodnota ur\u010dena zejm\u00e9na pro p\u0159\u00edpadn\u00e9 zobrazen\u00ed varov\u00e1n\u00ed o st\u00e1\u0159\u00ed, nebo ze\u0161ednut\u00ed neplatn\u00e9\/star\u00e9 hodnoty.<\/p>\n<p>P\u0159\u00edklady pou\u017eit\u00ed jednotliv\u00fdch kl\u00ed\u010dov\u00fdch slov je mo\u017en\u00e9 naj\u00edt v souborech v adres\u00e1\u0159i data v projektu.<\/p>\n<p>Posledn\u00ed \u010d\u00e1st\u00ed je pak zp\u016fsob\/mo\u017enost, jak na webov\u00fd server nahr\u00e1t nov\u00fd obsah. Mo\u017enosti jsou celkem t\u0159i.<\/p>\n<p>Prvn\u00ed mo\u017enost\u00ed je vytvo\u0159en\u00ed a nahr\u00e1n\u00ed cel\u00e9ho souborov\u00e9ho syst\u00e9mu p\u0159\u00edmo z prost\u0159ed\u00ed Arduina pomoc\u00ed n\u00e1stroje Sketch Data Upload (instalujte z Githubu Arduino ESP8266 posledn\u00ed verzi n\u00e1stroje ESP8266FS &#8211; posledn\u00ed verze ji\u017e um\u00ed nahr\u00e1v\u00e1n\u00ed p\u0159es OTA), kter\u00e1 se nach\u00e1z\u00ed v menu N\u00e1stroje.<\/p>\n<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/sdu.jpg\" rel=\"attachment wp-att-890\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-890\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/sdu-300x175.jpg\" alt=\"sdu\" width=\"300\" height=\"175\" srcset=\"http:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/sdu-300x175.jpg 300w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/01\/sdu.jpg 518w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Dal\u0161\u00ed mo\u017enost\u00ed je p\u0159ipojen\u00ed p\u0159es FTP server, u\u017eivatelsk\u00e9 jm\u00e9no <em>esp8266<\/em> a heslo <em>esp8266<\/em> &#8211; rychlost nen\u00ed nejv\u011bt\u0161\u00ed, ale soubory kop\u00edrovat lze.<\/p>\n<p>Posledn\u00ed mo\u017enost\u00ed je pak webov\u00e9 rozhran\u00ed, kter\u00e9 jsem p\u0159evzal z p\u0159\u00edkladu FSBrowser, ale nijak p\u0159\u00edli\u0161 jsem ho netestoval.<\/p>\n<p>Na z\u00e1v\u011br &#8211; je\u0161t\u011b p\u0159edt\u00edm, ne\u017e v\u00e1s pust\u00edm ke stahov\u00e1n\u00ed jedno upozorn\u011bn\u00ed &#8211; v\u00fdvoj Arduina pro ESP8266 m\u00e1 st\u00e1le p\u0159ekotn\u00fd pr\u016fb\u011bh &#8211; co v jedn\u00e9 verzi j\u00e1dra p\u0159elo\u017eit \u0161lo, tak ve verzi dal\u0161\u00ed u\u017e j\u00edt nemus\u00ed. Proto uv\u00e1d\u00edm verze, pou\u017eit\u00e9 p\u0159i psan\u00ed a testov\u00e1n\u00ed:<\/p>\n<p>Arduino IDE: 1.6.7, instalace portable<\/p>\n<p>ESP8266 Core: 2.1.0-rc2 (Staging)<\/p>\n<p>P\u0159ikl\u00e1d\u00e1m kompletn\u00ed adres\u00e1\u0159 projektu a upravenou knihovnu FTP serveru (\u010d\u00edslo verze jsem posunul). N\u00e1m\u011bty na p\u0159\u00edpadn\u00e9 vylep\u0161en\u00ed jsou v\u00edt\u00e1ny v diskuzi&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Z diskuze pod \u010dl\u00e1nkem o webov\u00e9 kamerce vyplynul z\u00e1jem o firmware do ESP8266, kter\u00fd by plnil tyto funkce: Poskytnut\u00ed webov\u00e9ho serveru pro vizualizaci prom\u011bnn\u00fdch, mo\u017enost zp\u011btn\u00e9ho ovl\u00e1d\u00e1n\u00ed\/p\u0159enosu dat. V\u0161e m\u00e1 komunikovat p\u0159es jednoduch\u00fd s\u00e9riov\u00fd protokol nap\u0159\u00edklad s deskou Arduino UNO. Z nedostatku invence jsem projekt nazval KWS, neboli Karl\u016fv Webov\u00fd Syst\u00e9m. Sl\u00edbil jsem, \u017ee se &hellip; <a href=\"http:\/\/www.xpablo.cz\/?p=881\" class=\"more-link\">Pokra\u010dov\u00e1n\u00ed textu <span class=\"screen-reader-text\">Projekt KWS &#8211; webov\u00e1 vizualizace a ovl\u00e1d\u00e1n\u00ed (nejen) pro Arduino pomoc\u00ed ESP8266<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[3,25],"tags":[36,18,49],"class_list":["post-881","post","type-post","status-publish","format-standard","hentry","category-arduino","category-esp8266","tag-arduino","tag-esp8266","tag-witty"],"_links":{"self":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=881"}],"version-history":[{"count":11,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/881\/revisions"}],"predecessor-version":[{"id":896,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/881\/revisions\/896"}],"wp:attachment":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=881"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}