{"id":1084,"date":"2016-11-02T19:40:18","date_gmt":"2016-11-02T18:40:18","guid":{"rendered":"http:\/\/www.xpablo.cz\/?p=1084"},"modified":"2016-11-02T19:40:18","modified_gmt":"2016-11-02T18:40:18","slug":"virtualni-seriovy-port-pomoci-esp8266","status":"publish","type":"post","link":"https:\/\/www.xpablo.cz\/?p=1084","title":{"rendered":"Virtu\u00e1ln\u00ed s\u00e9riov\u00fd port pomoc\u00ed ESP8266"},"content":{"rendered":"<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/20161010_200000_web.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1085 alignleft\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/20161010_200000_web-300x225.jpg\" alt=\"20161010_200000_web\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/20161010_200000_web-300x225.jpg 300w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/20161010_200000_web-768x576.jpg 768w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/20161010_200000_web-1024x768.jpg 1024w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/20161010_200000_web.jpg 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Mo\u017en\u00e1 si n\u011bkter\u00fd z \u010dten\u00e1\u0159\u016f vzpomene na \u010dl\u00e1nek o p\u0159\u00eddavn\u00e9 <a href=\"https:\/\/www.xpablo.cz\/?p=957\">WiFi desti\u010dce k RAMPS1.4 a tisk\u00e1rn\u011b Rebel II<\/a>, kter\u00fd jsem zde p\u0159ed \u010dasem uve\u0159ejnil. Zmi\u0148oval jsem v n\u011bm program Stupido, kter\u00fd jsem napsal pro ov\u011b\u0159en\u00ed funk\u010dnosti &#8222;virtu\u00e1ln\u00edho WiFi dr\u00e1tu&#8220;. Program zat\u00edm nebylo mo\u017en\u00e9 uve\u0159ejnit, proto\u017ee z ESP Core pro Arduino byla ve stabiln\u00ed verzi vypu\u0161t\u011bna podpora v\u011bt\u0161\u00edho bufferu p\u0159ijat\u00fdch znak\u016f a p\u0159enos tud\u00ed\u017e ob\u010das znaky vynech\u00e1val. V nov\u00e9 verzi (kter\u00e1 je na githubu) u\u017e je podpora velk\u00e9ho p\u0159ij\u00edmac\u00edho bufferu sice op\u011bt zavedena, ale v\u00fdvoj\u00e1\u0159i jsou zcela saturov\u00e1ni prac\u00ed na Arduinu pro ESP32, tak\u017ee se nov\u00e9ho j\u00e1dra v brzk\u00e9 dob\u011b nejsp\u00ed\u0161e nedo\u010dk\u00e1me. Je tomu asi m\u011bs\u00edc, co jsem se po cca 20-ti letech op\u011bt potkal s \u010dlov\u011bkem, kter\u00e9ho si velmi v\u00e1\u017e\u00edm a kter\u00fd pot\u0159eboval shodou okolnost\u00ed &#8222;WiFi dr\u00e1t&#8220;, tak\u017ee jsem se pustil do exhumace a vylep\u0161ov\u00e1n\u00ed a v\u00fdsledek p\u0159edkl\u00e1d\u00e1m ve\u0159ejnosti&#8230;<\/p>\n<p><!--more--><\/p>\n<p>Firmware, kter\u00fd realizuje s\u00ed\u0165ov\u00e9 p\u0159ipojen\u00ed s p\u0159evodem na s\u00e9riov\u00fd port pro ESP8266 u\u017e existuje pom\u011brn\u011b dlouho (viz. t\u0159eba <a href=\"https:\/\/github.com\/jeelabs\/esp-link\">ESP-Link<\/a>, kter\u00fd pova\u017euji za nejzda\u0159ilej\u0161\u00ed), ale v\u0161echny varianty, kter\u00e9 jsem vid\u011bl trp\u00ed stejn\u00fdm neduhem &#8211; je t\u0159eba nastavit parametry s\u00e9riov\u00e9 linky ve webov\u00e9m rozhran\u00ed a pak je mo\u017en\u00e9 pos\u00edlat data ob\u011bma sm\u011bry. Dal\u0161\u00edm probl\u00e9mem pak je p\u0159enos stav\u016f \u0159\u00edd\u00edc\u00edch sign\u00e1l\u016f RTS, CTS, DSR, DTR, co\u017e, pokud v\u00edm, neum\u00ed zat\u00edm \u017e\u00e1dn\u00fd z dostupn\u00fdch firmware. Na\u0161t\u011bst\u00ed ale existuje mo\u017enost, jak probl\u00e9m \u0159e\u0161it. Od roku 1997 existuje roz\u0161\u00ed\u0159en\u00ed protokolu telnet o mo\u017enost s\u00ed\u0165ov\u00e9ho p\u0159enosu parametr\u016f rozhran\u00ed a stavov\u00fdch informac\u00ed pro emulaci s\u00e9riov\u00e9ho portu p\u0159es s\u00ed\u0165, nazvan\u00e9 Network Virtual Terminal (NVT). Toto roz\u0161\u00ed\u0159en\u00ed je definov\u00e1no v <a href=\"https:\/\/tools.ietf.org\/html\/rfc2217.html\">RFC2217<\/a> (zat\u00edm st\u00e1le ozna\u010den\u00e9 jako Experimental) a zdaleka nejsem prvn\u00ed, kdo si ho v\u0161iml. Co je pro n\u00e1s d\u016fle\u017eit\u00e9 je to, \u017ee p\u0159ede mnou si t\u00e9to mo\u017enosti v\u0161imli p\u00e1nov\u00e9 z <a href=\"http:\/\/www.HW-group.com\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.HW-group.com\/download\/hwg_ikona88x31.png\" width=\"88\" height=\"31\" border=\"0\" hspace=\"3\" vspace=\"0\" \/><\/a> a napsali <a href=\"http:\/\/www.hw-group.com\/products\/hw_vsp\/index_cz.html\">freewarov\u00fd ovlada\u010d virtu\u00e1ln\u00edho s\u00e9riov\u00e9ho portu<\/a> pro opera\u010dn\u00ed syst\u00e9m Windows. Pro zv\u00eddav\u00e9 rovn\u011b\u017e zpracovali hezk\u00fd <a href=\"http:\/\/www.hw-group.com\/support\/nvt\/index_cz.html\">\u00favod do NVT<\/a>. Naprogramoval jsem tedy implementaci RFC2217 pro Arduino a napojil komunikaci na vyrovn\u00e1vac\u00ed buffery, TCP soket a s\u00e9riov\u00fd port. P\u0159i testech se ale uk\u00e1zal probl\u00e9m &#8211; vyrovn\u00e1vac\u00ed buffer (FIFO) pro HW s\u00e9riov\u00fd port na ESP8266 m\u00e1 kapacitu pouze 128 byt\u016f, tak\u017ee p\u0159i vy\u0161\u0161\u00edch rychlostech ztr\u00e1cel port znaky. To jsem zpo\u010d\u00e1tku \u0159e\u0161il, jak u\u017e jsem napsal, pou\u017eit\u00edm dopl\u0148uj\u00edc\u00edho bufferu, ale tato mo\u017enost byla n\u00e1sledn\u011b z Core odstran\u011bna. P\u0159i exhumaci projektu jsem se tedy zam\u011b\u0159il na hled\u00e1n\u00ed &#8222;\u017erouta&#8220; \u010dasu &#8211; program jsem p\u0159evedl pod \u0161ablonu pro ESP a doplnil lad\u00edc\u00ed v\u00fdpisy (n\u011bkter\u00e9 jsem st\u00e1le v k\u00f3du nechal a jen je zapozn\u00e1mkoval, tak\u017ee je tam st\u00e1le m\u016f\u017eete naj\u00edt&#8230;) pro m\u011b\u0159en\u00ed \u010dasu, str\u00e1ven\u00e9ho v jednotliv\u00fdch funkc\u00edch. Uk\u00e1zalo se, \u017ee nejd\u00e9le trv\u00e1 odesl\u00e1n\u00ed dat do TCP spojen\u00ed.<\/p>\n<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.01.40.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1093\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.01.40-289x300.png\" alt=\"screenshot-2016-10-10-11-01-40\" width=\"289\" height=\"300\" srcset=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.01.40-289x300.png 289w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.01.40.png 381w\" sizes=\"auto, (max-width: 289px) 100vw, 289px\" \/><\/a><\/p>\n<p>Z obr\u00e1zku je vid\u011bt, \u017ee odesl\u00e1n\u00ed prakticky jak\u00fdchkoliv dat do spojen\u00ed trvalo zhruba 0.2 sekundy, co\u017e sta\u010dilo k tomu, aby na vy\u0161\u0161\u00edch rychlostech p\u0159etekl p\u0159ij\u00edmac\u00ed buffer s\u00e9riov\u00e9ho portu a do\u0161lo ke ztr\u00e1t\u011b dat. St\u00e1hl jsem tedy a nainstaloval ESP8266 Core p\u0159\u00edmo z githubu, povolil v configuration.h v\u011bt\u0161\u00ed buffer a cht\u011bl jsem vyzkou\u0161et, zda p\u0159estane doch\u00e1zet ke ztr\u00e1t\u00e1m. Jenom\u017ee jsem zapomn\u011bl zapozn\u00e1mkovat m\u011b\u0159en\u00ed, tak\u017ee po nahr\u00e1n\u00ed a spu\u0161t\u011bn\u00ed testu jsem dostal tento v\u00fdsledek<\/p>\n<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.06.48.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1095\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.06.48-298x300.png\" alt=\"screenshot-2016-10-10-11-06-48\" width=\"298\" height=\"300\" srcset=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.06.48-298x300.png 298w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.06.48-150x150.png 150w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.06.48-180x180.png 180w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-11.06.48.png 395w\" sizes=\"auto, (max-width: 298px) 100vw, 298px\" \/><\/a><\/p>\n<p>Doba p\u0159enosu se, pou\u017eit\u00edm nov\u00e9ho core, zkr\u00e1tila na cca 500us, co\u017e je zrychlen\u00ed o t\u0159i \u0159\u00e1dy! Klidn\u011b jsem tedy dopl\u0148kov\u00fd buffer mohl op\u011bt vypnout a ke ztr\u00e1t\u00e1ch dat u\u017e stejn\u011b nedoch\u00e1z\u00ed. Pokud tedy bude n\u011bkdo tento projekt pou\u017e\u00edvat, tak doporu\u010duji pou\u017e\u00edt Core &gt; 2.3.0, co\u017e je v sou\u010dasn\u00e9 dob\u011b bohu\u017eel <strong>pouze github verze<\/strong>.<\/p>\n<p>V programu jsou pou\u017eity op\u011bt prakticky v\u0161echny moduly, kter\u00e9 zde byly publikov\u00e1ny &#8211; d\u00edky NBNS nap\u0159\u00edklad je mo\u017en\u00e9 se na za\u0159\u00edzen\u00ed odkazovat p\u0159es jeho symbolick\u00e9 jm\u00e9no a nen\u00ed nutn\u00e9 hledat jeho DHCP adresu (vsp2 v n\u00e1sleduj\u00edc\u00edm obr\u00e1zku)<\/p>\n<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-10.40.40.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1097\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-10.40.40-300x243.png\" alt=\"screenshot-2016-10-10-10-40-40\" width=\"300\" height=\"243\" srcset=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-10.40.40-300x243.png 300w, https:\/\/www.xpablo.cz\/wp-content\/uploads\/2016\/11\/Screenshot-2016-10-10-10.40.40.png 593w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Pou\u017eit\u00e1 \u0161ablona, na kter\u00e9 jsem stav\u011bl je n\u00e1sledn\u00edk \u0161ablony, <a href=\"https:\/\/www.xpablo.cz\/?p=1048\">uve\u0159ejn\u011bn\u00e9 zde<\/a> (kter\u00fd bude tak\u00e9 po dolad\u011bn\u00ed uve\u0159ejn\u011bn\u00fd) s n\u011bkolika vylep\u0161en\u00edmi, o kter\u00fdch bych se r\u00e1d zm\u00ednil. V prvn\u00ed \u0159ad\u011b se mi poda\u0159ilo trochu sn\u00ed\u017eit pam\u011b\u0165ovou n\u00e1ro\u010dnost a sn\u00ed\u017eit n\u00e1roky na s\u00ed\u0165ov\u00fd p\u0159enos u stopa\u0159e. Byla p\u0159epracov\u00e1na konfigurace, proto\u017ee jsem si uv\u011bdomil, \u017ee pokud bude t\u0159eba vytvo\u0159it program pro n\u011bjak\u00fd produkt, je zbyte\u010dn\u00e9 v n\u011bm m\u00edt OTA, kter\u00e1 se d\u00e1 vyu\u017e\u00edt prakticky jen z IDE, nebo za pomoci Python skriptu. Pr\u00e1v\u011b pro pot\u0159eby &#8222;produk\u010dn\u00ed&#8220; aktualizace firmware jsem doplnil mo\u017enost aktualizace firmware p\u0159es webov\u00e9 rozhran\u00ed (na str\u00e1nce &lt;ip&gt;\/update je jednoduch\u00e9 webov\u00e9 rozhran\u00ed, umo\u017e\u0148uj\u00edc\u00ed aktualizaci firmware). Aby n\u00e1m firmware do za\u0159\u00edzen\u00ed nemohl nahr\u00e1vat kdejak\u00fd Jouda, je zde mo\u017enost chr\u00e1nit p\u0159\u00edstup na str\u00e1nku pomoc\u00ed jm\u00e9na a hesla. No a proto\u017ee se v sou\u010dasnosti dost om\u00edl\u00e1 bezpe\u010dnost v IoT a taky aby ten, kdo se bude sna\u017eit &#8222;louskat&#8220; v\u00e1\u0161 k\u00f3d m\u011bl tro\u0161ku zt\u00ed\u017eenou pr\u00e1ci je u\u017eivatelsk\u00e9 jm\u00e9no a heslo obfuskov\u00e1no (\u010dti &#8222;takn\u011bjakskorojako \u0161ifrov\u00e1no&#8220;). Pro zv\u00eddav\u00e9 je v\u0161e v souboru obfuscator.h a musel jsem se pono\u0159it do temn\u011bj\u0161\u00ed \u010d\u00e1sti webu, abych z\u00edskal jeho z\u00e1klad, proto\u017ee pou\u017eit\u00e1 technika je nej\u010dast\u011bji vyu\u017e\u00edv\u00e1na v oblasti vir\u016f.<\/p>\n<h6>V\u011bci, kter\u00e9 se p\u0159\u00edli\u0161 nepovedly<\/h6>\n<p>I p\u0159es to, \u017ee jsem se sna\u017eil, je zde p\u00e1r v\u011bc\u00ed, kter\u00e9 zat\u00edm nepracuj\u00ed. V projektu je sice naprogramovan\u00e1 podpora pro p\u0159enos a nastavov\u00e1n\u00ed DTR\/DSR\/RTS\/CTS (je t\u0159eba si dopsat ovl\u00e1d\u00e1n\u00ed I\/O pin\u016f, proto\u017ee je m\u00e1 ka\u017ed\u00fd projekt jinak), tato podpora funguje s Serial\/IP redirector od Tactical Software (testov\u00e1no na Trial verzi), ale bohu\u017eel se mi p\u0159enos nepoda\u0159ilo rozh\u00fdbat s VSP od hw-group a to i p\u0159esto, \u017ee podporu maj\u00ed napsanou v dokumentaci. Uv\u00edt\u00e1m tedy, kdy\u017e se na projekt koukne v\u00edc o\u010d\u00ed a t\u0159eba se uk\u00e1\u017ee, \u017ee jsem celou dobu pro stromy nevid\u011bl les \ud83d\ude42 .<\/p>\n<p>No a na \u00fapln\u00fd z\u00e1v\u011br u\u017e klasicky kompletn\u00ed projekt ke sta\u017een\u00ed a informace o pou\u017eit\u00e9m vybaven\u00ed:<\/p>\n<p><strong>OS:<\/strong> Windows 7 x64 Pro<br \/>\n<strong>IDE:<\/strong> 1.6.9<br \/>\n<strong>ESP8266Core: <span style=\"text-decoration: underline;\">Github<\/span><\/strong><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mo\u017en\u00e1 si n\u011bkter\u00fd z \u010dten\u00e1\u0159\u016f vzpomene na \u010dl\u00e1nek o p\u0159\u00eddavn\u00e9 WiFi desti\u010dce k RAMPS1.4 a tisk\u00e1rn\u011b Rebel II, kter\u00fd jsem zde p\u0159ed \u010dasem uve\u0159ejnil. Zmi\u0148oval jsem v n\u011bm program Stupido, kter\u00fd jsem napsal pro ov\u011b\u0159en\u00ed funk\u010dnosti &#8222;virtu\u00e1ln\u00edho WiFi dr\u00e1tu&#8220;. Program zat\u00edm nebylo mo\u017en\u00e9 uve\u0159ejnit, proto\u017ee z ESP Core pro Arduino byla ve stabiln\u00ed verzi vypu\u0161t\u011bna &hellip; <a href=\"https:\/\/www.xpablo.cz\/?p=1084\" class=\"more-link\">Pokra\u010dov\u00e1n\u00ed textu <span class=\"screen-reader-text\">Virtu\u00e1ln\u00ed s\u00e9riov\u00fd port 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,66],"class_list":["post-1084","post","type-post","status-publish","format-standard","hentry","category-arduino","category-esp8266","tag-arduino","tag-esp8266","tag-vsp"],"_links":{"self":[{"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/1084","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=1084"}],"version-history":[{"count":18,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/1084\/revisions"}],"predecessor-version":[{"id":1107,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/1084\/revisions\/1107"}],"wp:attachment":[{"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}