{"id":941,"date":"2016-04-10T12:45:36","date_gmt":"2016-04-10T10:45:36","guid":{"rendered":"http:\/\/www.xpablo.cz\/?p=941"},"modified":"2016-04-10T12:45:36","modified_gmt":"2016-04-10T10:45:36","slug":"esp8266-wifi-konfigurace-do-tretice-vseho-dobreho","status":"publish","type":"post","link":"https:\/\/www.xpablo.cz\/?p=941","title":{"rendered":"ESP8266 WiFi konfigurace &#8211; do t\u0159etice v\u0161eho dobr\u00e9ho&#8230;"},"content":{"rendered":"<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/04\/IMG_9757_web.jpg\" rel=\"attachment wp-att-942\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-942 alignleft\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/04\/IMG_9757_web-300x225.jpg\" alt=\"IMG_9757_web\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/04\/IMG_9757_web-300x225.jpg 300w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/04\/IMG_9757_web-768x576.jpg 768w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/04\/IMG_9757_web-1024x768.jpg 1024w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/04\/IMG_9757_web.jpg 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Tak se mi to kone\u010dn\u011b poda\u0159ilo dokon\u010dit. Po del\u0161\u00ed dob\u011b p\u0159ich\u00e1z\u00edm s dal\u0161\u00ed verz\u00ed knihovny WiFiConfig pro moduly ESP8266. Sna\u017eil jsem se o dopln\u011bn\u00ed v\u0161ech funkc\u00ed, kter\u00e9 vyplynuly z p\u0159\u00edsp\u011bvk\u016f \u010dten\u00e1\u0159\u016f tohoto webu. Dopln\u011bn\u00e1 byla mo\u017enost statick\u00e9 konfigurace Wifi parametr\u016f (ov\u011b\u0159eno na dvou s\u00edt\u00edch &#8211; k v\u00edce nem\u00e1m p\u0159\u00edstup), d\u00e1le pak mo\u017enost nastaven\u00ed doby, kdy b\u011b\u017e\u00ed konfigura\u010dn\u00ed AP, mo\u017enost p\u0159idat u\u017eivatelsky definovan\u00e9 polo\u017eky do konfigura\u010dn\u00ed str\u00e1nky a spousty dal\u0161\u00edch \u00faprav, na kter\u00e9 si u\u017e ani nepamatuji&#8230;<\/p>\n<p><!--more--><\/p>\n<p>Nejd\u0159\u00edve k rozd\u00edl\u016fm oproti star\u0161\u00edm verz\u00edm &#8211; i kdy\u017e jsem se sna\u017eil, aby nebylo nutn\u00e9 modifikovat skripty, kter\u00e9 pou\u017e\u00edvaj\u00ed star\u0161\u00ed verze knihovny, p\u0159ece jsem se n\u011bkter\u00fdm drobnostem nevyhnul:<\/p>\n<ul>\n<li>Pokud jste pou\u017e\u00edvali WiFiConfig knihovnu tak, \u017ee v metod\u011b begin() nebyla zadan\u00e1 adresa callback metody, je t\u0159eba doplnit NULL do parametru vol\u00e1n\u00ed.<\/li>\n<li>Pokud jste pou\u017e\u00edvali metody pro ulo\u017een\u00ed \u0159et\u011bzce do simulovan\u00e9 EEPROM, je v nov\u00e9 verzi t\u0159eba volat EEPROM.commit() &#8211; tato \u00faprava se uk\u00e1zala jako nutn\u00e1, nebo\u0165 doch\u00e1zelo ke zbyte\u010dn\u00e9mu p\u0159episu Flash pam\u011bti a t\u00edm mo\u017en\u00e9mu zkr\u00e1cen\u00ed jej\u00ed \u017eivotnosti. WiFiConfig nyn\u00ed vol\u00e1 commit() automaticky pouze p\u0159ed restartem ESP modulu, tak\u017ee pokud budete pou\u017e\u00edvat u\u017eivatelsky definovan\u00e9 polo\u017eky, kter\u00e9 ukl\u00e1d\u00e1te do EEPROM, nen\u00ed nutn\u00e9 v callback metod\u00e1ch commit() volat.<\/li>\n<\/ul>\n<p>A nyn\u00ed u\u017e k novink\u00e1m:<br \/>\nVerze 4.0.0 knihovny zav\u00e1d\u00ed novou variantu metody begin()<\/p>\n<pre class=\"lang:cpp\" title=\"wificonfig.ino\">void begin(int configarea, uint8_t forceConfigure, uint32_t timeout, wificonfig_cb cb);\r\n<\/pre>\n<p>Nov\u00fdm parametrem je <strong>timeout<\/strong>, kter\u00fd ud\u00e1v\u00e1 v sekund\u00e1ch, jak dlouho m\u00e1 setrvat funk\u010dn\u00ed konfigura\u010dn\u00ed AP. Minim\u00e1ln\u00ed hodnota je 60 sekund, maximum omezeno nen\u00ed. Pokud je p\u0159echod do konfigurace vynucen\u00fd parametrem forceConfigure, timeout se ignoruje &#8211; je to z toho d\u016fvodu, abychom byli schopni nakonfigurovat i za\u0159\u00edzen\u00ed, kter\u00e9 m\u00e1 timeout nastaven na p\u0159\u00edli\u0161 kr\u00e1tkou dobu.<\/p>\n<p>Dal\u0161\u00ed podstatnou zm\u011bnou je \u00fapln\u00e1 absence n\u00e1vaznosti na extern\u00ed webov\u00fd server a jin\u00fd p\u0159\u00edstup k pou\u017eit\u00ed cel\u00e9ho konfigura\u010dn\u00edho objektu. Webov\u00fd server je vytvo\u0159en v pam\u011bti dynamicky pouze v p\u0159\u00edpad\u011b, \u017ee se spou\u0161t\u00ed konfigura\u010dn\u00ed AP. Rovn\u011b\u017e cel\u00fd objekt WiFiConfig se nyn\u00ed vytv\u00e1\u0159\u00ed dynamicky pouze v metod\u011b setup() ino skriptu. Dos\u00e1hl jsem t\u00edm zna\u010dn\u00e9 \u00faspory cenn\u00e9 pam\u011bti RAM. Cel\u00fd princip pou\u017eit\u00ed je vid\u011bt v demonstra\u010dn\u00edm p\u0159\u00edkladu, kter\u00fd jsem pou\u017e\u00edval pro testov\u00e1n\u00ed.<\/p>\n<p>\u017d\u00e1danou zm\u011bnou je d\u00e1le mo\u017enost statick\u00e9 konfigurace ip adres. Je mo\u017en\u00e9 nakonfigurovat b\u011b\u017enou sadu parametr\u016f &#8211; ip adresu, s\u00ed\u0165ovou masku, br\u00e1nu a adresu DNS serveru. V\u0161echny tyto parametry jsou ov\u011b\u0159ov\u00e1ny v prohl\u00ed\u017ee\u010di pomoc\u00ed HTML5 valid\u00e1tor\u016f na platnost zad\u00e1n\u00ed, tak\u017ee be nem\u011blo b\u00fdt mo\u017en\u00e9 zadat nesmysln\u00e9 hodnoty.<\/p>\n<p>Novinkou jsou u\u017eivatelsky definovan\u00e9 parametry s pomoc\u00ed pou\u017eit\u00ed nov\u00e9ho objektu <strong>WiFiConfigUsrParameter<\/strong>. U\u017eivatelsk\u00e9 parametry jsou do konfigura\u010dn\u00edho serveru p\u0159id\u00e1v\u00e1ny metodou <strong>addParameter()<\/strong>. Jejich po\u010det je omezen\u00fd pouze velikost\u00ed dostupn\u00e9 RAM a prostorem pro generov\u00e1n\u00ed dynamick\u00e9ho obsahu. Osobn\u011b bych jich ale v\u00edce jak 5-10 sou\u010dasn\u011b nepou\u017e\u00edval. P\u0159\u00edklad definice u\u017eivatelsk\u00e9ho parametru, jeho p\u0159id\u00e1n\u00ed do konfigura\u010dn\u00edho serveru a callback pro ulo\u017een\u00ed nov\u00e9 hodnoty je op\u011bt sou\u010d\u00e1st\u00ed demonstra\u010dn\u00edho p\u0159\u00edkladu. Jen jedno mal\u00e9 upozorn\u011bn\u00ed &#8211; callback metoda pro ulo\u017een\u00ed hodnoty je vol\u00e1na pouze v p\u0159\u00edpad\u011b, \u017ee do\u0161lo ke zm\u011bn\u011b hodnoty z jej\u00edho p\u016fvodn\u00edho stavu. Je to op\u011bt snaha o minimalizaci p\u0159epis\u016f pam\u011bti flash.<\/p>\n<p>Webov\u00e9 str\u00e1nky, pou\u017eit\u00e9 konfigura\u010dn\u00edm AP jsou nyn\u00ed ulo\u017eeny v souboru embHTML.h &#8211; str\u00e1nky byly p\u0159epracov\u00e1ny do \u010de\u0161tiny a soubor je ulo\u017een\u00fd v k\u00f3dov\u00e1n\u00ed UTF-8.<\/p>\n<p>P\u0159ibyly dv\u011b nov\u00e9 metody pro pr\u00e1ci s EEPROM &#8211; jde o <strong>getEEPROMuint32<\/strong> a <strong>setEEPROMuint32<\/strong>, kter\u00e9 umo\u017e\u0148uj\u00ed pr\u00e1ci s 32 bitov\u00fdmi \u010d\u00edsly, ulo\u017een\u00fdmi v EEPROM. Vnit\u0159n\u011b jsou pou\u017eity pro ukl\u00e1d\u00e1n\u00ed ip adres pro statickou konfiguraci.<\/p>\n<p>Captive port\u00e1l byl dopln\u011bn\u00fd o p\u0159esm\u011brov\u00e1vac\u00ed str\u00e1nku &#8211; toto se uk\u00e1zalo jako nutn\u00e1 v\u011bc, proto\u017ee po p\u0159ipojen\u00ed Android telefonu ke konfigura\u010dn\u00edmu AP byl tento bombardovan\u00fd \u017e\u00e1dostmi b\u011b\u017e\u00edc\u00edch s\u00ed\u0165ov\u00fdch aplikac\u00ed. Dokud jsem nem\u011bl pou\u017eitou p\u0159esm\u011brov\u00e1vac\u00ed str\u00e1nku a captive port\u00e1l sm\u011broval v\u0161echny dotazy p\u0159\u00edmo na konfigura\u010dn\u00ed str\u00e1nku doch\u00e1zelo k resetu ESP modulu d\u00edky timeout watchdogu. Zjistil jsem, \u017ee prakticky trval\u00e9 opakov\u00e1n\u00ed skenov\u00e1n\u00ed Wifi s\u00edt\u00ed v okol\u00ed vede pr\u00e1v\u011b k tomu, \u017ee se aktivuje watchdog.<\/p>\n<p>A nyn\u00ed u\u017e jen pou\u017eit\u00e1 konfigurace prost\u0159ed\u00ed:<\/p>\n<p>OS: Linux Ubuntu Gnome, Windows 7 x64<\/p>\n<p>Arduino IDE: 1.6.8 (Windows), 1.6.7 (Linux)<\/p>\n<p>ESP Core: 2.1.0 (Linux), Github (Windows)<\/p>\n<p>Ke sta\u017een\u00ed je, jako ji\u017e minule, arch\u00edv, vznikl\u00fd povelem Archivuj projekt z Arduino IDE.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tak se mi to kone\u010dn\u011b poda\u0159ilo dokon\u010dit. Po del\u0161\u00ed dob\u011b p\u0159ich\u00e1z\u00edm s dal\u0161\u00ed verz\u00ed knihovny WiFiConfig pro moduly ESP8266. Sna\u017eil jsem se o dopln\u011bn\u00ed v\u0161ech funkc\u00ed, kter\u00e9 vyplynuly z p\u0159\u00edsp\u011bvk\u016f \u010dten\u00e1\u0159\u016f tohoto webu. Dopln\u011bn\u00e1 byla mo\u017enost statick\u00e9 konfigurace Wifi parametr\u016f (ov\u011b\u0159eno na dvou s\u00edt\u00edch &#8211; k v\u00edce nem\u00e1m p\u0159\u00edstup), d\u00e1le pak mo\u017enost nastaven\u00ed doby, kdy &hellip; <a href=\"https:\/\/www.xpablo.cz\/?p=941\" class=\"more-link\">Pokra\u010dov\u00e1n\u00ed textu <span class=\"screen-reader-text\">ESP8266 WiFi konfigurace &#8211; do t\u0159etice v\u0161eho dobr\u00e9ho&#8230;<\/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,54],"class_list":["post-941","post","type-post","status-publish","format-standard","hentry","category-arduino","category-esp8266","tag-arduino","tag-esp8266","tag-wificonfig"],"_links":{"self":[{"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=941"}],"version-history":[{"count":7,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/941\/revisions"}],"predecessor-version":[{"id":949,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/941\/revisions\/949"}],"wp:attachment":[{"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}