{"id":3643,"date":"2020-05-23T19:12:13","date_gmt":"2020-05-23T17:12:13","guid":{"rendered":"https:\/\/arduino.net.pl\/?p=3643"},"modified":"2020-05-24T22:30:05","modified_gmt":"2020-05-24T20:30:05","slug":"esp32-ota","status":"publish","type":"post","link":"https:\/\/arduino.net.pl\/index.php\/esp32-ota\/","title":{"rendered":"ESP32 &#038; OTA"},"content":{"rendered":"\n<p>Programowanie<strong> Over-The-Air<\/strong> w skr\u00f3cie <strong>OTA<\/strong> umo\u017cliwia przesy\u0142anie plik\u00f3w do urz\u0105dze\u0144 przez sie\u0107 WiFi, dzi\u0119ki czemu nie potrzeba fizycznego kontaktu z p\u0142ytk\u0105 by na przyk\u0142ad uaktualni\u0107 jej oprogramowanie. \u015awietnie si\u0119 do tego nadaj\u0105 te oparte o uk\u0142ad ESP8266 lub ESP32. W tym artykule zajmiemy si\u0119 esp32.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"341\" src=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Modul-MH-ET-LIVE-D1-mini-ESP32-ESP-32.jpeg\" alt=\"\" class=\"wp-image-3664\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Modul-MH-ET-LIVE-D1-mini-ESP32-ESP-32.jpeg 512w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Modul-MH-ET-LIVE-D1-mini-ESP32-ESP-32-300x200.jpeg 300w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Modul-MH-ET-LIVE-D1-mini-ESP32-ESP-32-440x293.jpeg 440w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p><strong>\u0179r\u00f3d\u0142o:<\/strong><a href=\"https:\/\/www.youtube.com\/channel\/UCu7_D0o48KbfhpEohoP7YSQ\"> Andreas Spiess<\/a> &#8211; <a href=\"https:\/\/youtu.be\/1pwqS_NUG7Q\">ESP32 OTA tutorial with tricks (incl. OTA debugging)<\/a><\/p>\n\n\n\n<p>1. Instalujemy ESP32 board w Arduino IDE<\/p>\n\n\n\n<p>W tym celu w zak\u0142adce <strong>Preferences<\/strong> wpisujemy adres <strong>https:\/\/dl.espressif.com\/dl\/package_esp32_index.json<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"944\" height=\"558\" src=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.37.53.png\" alt=\"\" class=\"wp-image-3646\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.37.53.png 944w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.37.53-300x177.png 300w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.37.53-768x454.png 768w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.37.53-440x260.png 440w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><\/figure>\n\n\n\n<p>2. Otwieramy <strong>Board Manager<\/strong>, wyszukujemy i instalujemy p\u0142ytk\u0119 <strong>esp32<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"473\" src=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.44.21.png\" alt=\"\" class=\"wp-image-3647\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.44.21.png 820w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.44.21-300x173.png 300w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.44.21-768x443.png 768w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-16.44.21-440x254.png 440w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\" \/><\/figure>\n\n\n\n<p>Wchodzimy na github Andreasa : <a rel=\"noreferrer noopener\" href=\"https:\/\/www.youtube.com\/redirect?event=video_description&amp;v=1pwqS_NUG7Q&amp;redir_token=iDsRJsAR-GgU8e59Ns-8afjHqeN8MTU5MDMzMTk4NkAxNTkwMjQ1NTg2&amp;q=https%3A%2F%2Fgithub.com%2FSensorsIot%2FESP32-OTA\" target=\"_blank\">https:\/\/github.com\/SensorsIot\/ESP32-OTA<\/a> i \u015bci\u0105gamy folder <strong>0TA_Template_Sketch<\/strong><\/p>\n\n\n\n<p>Andreas sugeruje \u017ceby zapisa\u0107 nazw\u0119 i has\u0142o do naszej sieci do osobnego pliku, kt\u00f3ry przywo\u0142ujemy komend\u0105 <code>#include &lt;credentials.h&gt;<\/code>. W tym celu w folderze <strong>Arduino\/libraries<\/strong>  nale\u017cy utworzy\u0107 nowy folder o nazwie <strong>credentials<\/strong> a w nim plik <strong>credentials.h<\/strong> z tak\u0105 zawarto\u015bci\u0105:<\/p>\n\n\n\n<p><code>const char* ssid = \"nazwa sieci\";<br>const char* password = \"has\u0142o\";<\/code><\/p>\n\n\n\n<p>Teraz w ka\u017cdym skeczu w kt\u00f3rym potrzebne jest <strong>ssid<\/strong> i <strong>pass<\/strong> mo\u017cemy wpisa\u0107 komend\u0119 <code>#include &lt;credentials.h&gt;<\/code> udost\u0119pniaj\u0105c\u0105 dane naszej sieci. B\u0119d\u0105 one ukryte je\u015bli opublikujemy skecz na przyk\u0142ad w GitHub. <\/p>\n\n\n\n<p>Pierwsze wgranie <strong>0TA_Template_Sketch<\/strong> musi odby\u0107 si\u0119 przez USB. Nieco zmodyfikowa\u0142em plik <strong>0TA_Template_Sketch<\/strong> dodaj\u0105c nie\u015bmiertelny, migaj\u0105cy led.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\n#include &quot;OTA.h&quot;\n#define LED 2\n\nunsigned long entry;\nvoid setup() {\n  Serial.begin(115200);\n  Serial.println(&quot;Booting&quot;);\n\n  ArduinoOTA.setHostname(&quot;TemplateSketchYar2&quot;);\n  setupOTA();\n\n  \/\/ your code\n  \/\/ initialize digital pin LED_BUILTIN as an output.\n  pinMode(LED, OUTPUT);\n}\n\nvoid loop() {\n  ArduinoOTA.handle();\n  \n  \/\/ your code here\n    digitalWrite(LED, HIGH);   \/\/ turn the LED on (HIGH is the voltage level)\n  delay(500);                       \/\/ wait\n\n  ArduinoOTA.handle();\n\n  digitalWrite(LED, LOW);    \/\/ turn the LED off by making the voltage LOW\n  delay(500);                       \/\/ wait\n\n}\n<\/pre><\/div>\n\n\n<p>Pami\u0119ta\u0107 nale\u017cy, \u017ceby nazwa\u0107 host, kt\u00f3ry pojawi si\u0119 p\u00f3\u017aniej jako port do wysy\u0142ki skeczu. Przy kilku urz\u0105dzeniach obs\u0142ugiwanych przez OTA mo\u017ce nas uchroni\u0107 od wys\u0142ania plik\u00f3w nie tam gdzie nale\u017ca\u0142o.<\/p>\n\n\n\n<p><strong>UWAGA!<\/strong><br>Je\u015bli w cz\u0119\u015bci<code> loop()<\/code> u\u017cywamy funkcji, kt\u00f3re zatrzymuj\u0105 program na d\u0142u\u017cej ni\u017c 500 milisekund, na przyk\u0142ad <code>delay()<\/code>, warto wstawi\u0107 kolejn\u0105 komend\u0119 <code>ArduinoOTA.handle();<\/code> Jak wy\u017cej. Inaczej mo\u017cemy mie\u0107 problem z przes\u0142aniem skeczu. <\/p>\n\n\n\n<p>Przyst\u0119pujemy do za\u0142adowania skecz\u00f3w do esp32 poprzez port USB. U mnie na Mac-u: <strong>\/dev\/cu.SLAB_USBtoUART<\/strong><br>Pe\u0142na konfiguracja p\u0142ytki poni\u017cej:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"269\" src=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-21.40.30.png\" alt=\"\" class=\"wp-image-3656\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-21.40.30.png 552w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-21.40.30-300x146.png 300w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-21.40.30-440x214.png 440w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n\n\n\n<p>Wysy\u0142amy skecz na p\u0142ytk\u0119.<br>Komputer \u0142\u0105czymy z t\u0105 sam\u0105 sieci\u0105 z kt\u00f3r\u0105 po\u0142\u0105czyli\u015bmy nasze ESP32. Jej dane zapisane mamy w pliku <strong>credentials.h<\/strong>. Nast\u0119pnie otwieramy Serial Monitor i restartujemy p\u0142ytk\u0119 (przycisk restartu znajduje si\u0119 na p\u0142ytce przy gnie\u017adzie USB). <\/p>\n\n\n\n<p>U mnie na monitorze taki efekt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"864\" height=\"527\" src=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.20.17.png\" alt=\"\" class=\"wp-image-3658\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.20.17.png 864w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.20.17-300x183.png 300w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.20.17-768x468.png 768w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.20.17-440x268.png 440w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><\/figure>\n\n\n\n<p>Ostatnia linijka to adres przez kt\u00f3ry b\u0119dziemy \u0142\u0105czy\u0107 si\u0119 z p\u0142ytk\u0105 przez sie\u0107 WIFI. Je\u015bli zamkniemy okno monitora i otworzymy zak\u0142adk\u0119 <strong>Tools<\/strong> w zak\u0142adce <strong>Port<\/strong> zauwa\u017cymy nowy port sieciowy o nazwie, kt\u00f3r\u0105 nadali\u015bmy hostowi i widocznym wy\u017cej adresie. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"421\" height=\"136\" src=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.27.31.png\" alt=\"\" class=\"wp-image-3659\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.27.31.png 421w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.27.31-300x97.png 300w\" sizes=\"auto, (max-width: 421px) 100vw, 421px\" \/><\/figure>\n\n\n\n<p>Wybieramy go, zmieniamy warto\u015b\u0107 <strong>delay()<\/strong> w skeczu <strong>0TA_Template_Sketch<\/strong> i ponownie wysy\u0142amy ca\u0142o\u015b\u0107 na p\u0142ytk\u0119. Tym razem <strong>Over-The-Air<\/strong> czyli korzystaj\u0105c z WiFi.<br>Je\u015bli bogowie OTA nam sprzyjaj\u0105, dioda powinna mruga\u0107 tak jak zapisali\u015bmy w skeczu. Je\u015bli nie, trzeba cierpliwie kombinowa\u0107. Spr\u00f3bowa\u0107 z inn\u0105 sieci\u0105, zmieni\u0107 parametry rutera, jeszcze raz zrestartowa\u0107 p\u0142ytk\u0119, Arduino IDE, itp. itd.<br>Dodam jeszcze, \u017ce robi\u0105c ten wpis korzysta\u0142em z <strong>Arduino 1.8.12<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"756\" src=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.38.09-1024x756.png\" alt=\"\" class=\"wp-image-3660\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.38.09-1024x756.png 1024w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.38.09-300x222.png 300w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.38.09-768x567.png 768w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.38.09-406x300.png 406w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2020\/05\/Zrzut-ekranu-2020-05-23-o-22.38.09.png 1296w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A tu orygina\u0142 dzi\u0119ki kt\u00f3remu powsta\u0142 wpis, a moje OTA dzia\u0142a bez zarzutu.<\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ESP32  OTA tutorial with tricks (incl. OTA debugging)\" width=\"774\" height=\"435\" src=\"https:\/\/www.youtube.com\/embed\/1pwqS_NUG7Q?start=339&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:89px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">LINKI<\/h4>\n\n\n\n<figure class=\"wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-random-nerd-tutorials\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"oZf86uVUnV\"><a href=\"https:\/\/randomnerdtutorials.com\/esp32-over-the-air-ota-programming\/\">ESP32 Over-the-air (OTA) Programming &#8211; Web Updater Arduino IDE<\/a><\/blockquote><iframe loading=\"lazy\" title=\"&#8220;ESP32 Over-the-air (OTA) Programming &#8211; Web Updater Arduino IDE&#8221; &#8212; Random Nerd Tutorials\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" src=\"https:\/\/randomnerdtutorials.com\/esp32-over-the-air-ota-programming\/embed\/#?secret=oZf86uVUnV\" data-secret=\"oZf86uVUnV\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Programowanie Over-The-Air w skr\u00f3cie OTA umo\u017cliwia przesy\u0142anie plik\u00f3w do urz\u0105dze\u0144 przez sie\u0107 WiFi, dzi\u0119ki czemu nie potrzeba fizycznego kontaktu z p\u0142ytk\u0105 by na przyk\u0142ad uaktualni\u0107 jej oprogramowanie. \u015awietnie si\u0119 do&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2,80],"tags":[81,102],"class_list":["post-3643","post","type-post","status-publish","format-standard","hentry","category-arduino","category-esp32","tag-esp32","tag-ota"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/comments?post=3643"}],"version-history":[{"count":19,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3643\/revisions"}],"predecessor-version":[{"id":3682,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3643\/revisions\/3682"}],"wp:attachment":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/media?parent=3643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/categories?post=3643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/tags?post=3643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}