{"id":1935,"date":"2020-09-28T20:09:55","date_gmt":"2020-09-28T20:09:55","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=1935"},"modified":"2020-09-28T20:09:55","modified_gmt":"2020-09-28T20:09:55","slug":"esp32-cipleri-icin-ota-guncellemesi","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/","title":{"rendered":"ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi"},"content":{"rendered":"<p>Merhaba arkada\u015flar, <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/24\/yeniden-bulusma\/\">bir \u00f6nceki yaz\u0131mda<\/a><\/strong><\/span>, \u00e7ok farkl\u0131 bir konuya de\u011finece\u011fimden bahsetmi\u015ftim. \u00c7ok da aray\u0131 a\u00e7mad\u0131m ne dersiniz \ud83d\ude00<\/p>\n<p>Bu yaz\u0131m, \u00f6zellikle benim gibi ESP32 cihaz\u0131n\u0131 kullan\u0131p bir \u015fekilde otomatik g\u00fcncelleme yapmak isteyenlere yard\u0131mc\u0131 olacakt\u0131r. Asl\u0131nda yaz\u0131 i\u00e7erisinde yabanc\u0131s\u0131 oldu\u011funuz bir \u00e7ok kavram olabilir, bunlar\u0131n muhtemelen bir \u00e7o\u011funa ili\u015fkin bilgiyi bu yaz\u0131da bulamayabilirsiniz. Bu sebeple e\u011fer daha \u00f6nce ESP32&#8217;ye ili\u015fkin yaz\u0131l\u0131m geli\u015ftirmediyseniz ya da bu kavram\u0131 hi\u00e7 duymad\u0131ysan\u0131z. Hemen korkmay\u0131n, \u00fcrkmeyin, burada size biraz giri\u015f niteli\u011finde bilgi verece\u011fim ama ba\u015fka kaynaklardan da, ESP32 ye ili\u015fkin bilgilerinizi desteklemek isteyebilirsiniz. Yine de, merak edenler i\u00e7in \u00f6n bilgi olmas\u0131 a\u00e7\u0131s\u0131ndan ya da nereden ba\u015flayacaklar\u0131n\u0131 d\u00fc\u015f\u00fcnenler i\u00e7in \u00e7ok k\u0131sa bilgi aktaray\u0131m (bu arada kaynaklar k\u0131sm\u0131na bir ka\u00e7 kaynak ekliyorum, g\u00f6z atabilirsiniz).<\/p>\n<p>Amac\u0131m a\u00e7\u0131k\u00e7as\u0131 \u00e7ok detayl\u0131 bir OTA nedir ve nas\u0131l yap\u0131l\u0131rdan ziyade, \u00f6nemli kavramlardan bahsederek, bu konu i\u00e7in referans al\u0131n\u0131p kullanabilece\u011finiz \u00f6rnek bir kod payla\u015fmak ve temel kavramlardan s\u00f6z etmek olacak. \u0130nternette bu konu ile ilgili \u00f6rnek yok mu diye sorabilirsiniz. Hakl\u0131s\u0131n\u0131z, a\u00e7\u0131k\u00e7as\u0131 tonla \u00f6rnek var. Ama arkada\u015f \u015f\u00f6yle basit, anla\u015f\u0131l\u0131r, Platform.IO kullanan bir \u00f6rnek bulmakta zorluk \u00e7ekebilirsiniz, ha biraz konuya vak\u0131f olunca, resmi sitedeki \u00f6rnekler de olduk\u00e7a yol g\u00f6sterici oluyor ama benimle ayn\u0131 durumda olanlar i\u00e7in faydal\u0131 olmas\u0131 a\u00e7\u0131s\u0131ndan bu yaz\u0131y\u0131 haz\u0131rlad\u0131m. Hadi daha fazla beklemeden konuya atlayal\u0131m.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">ESP32 Nedir?<\/span><\/strong><\/h2>\n<p>ESP32 k\u0131saca, ucuz, az g\u00fc\u00e7 t\u00fcketen, fakat ayn\u0131 zaman i\u00e7erisinde WiFi ve bluetooth bar\u0131nd\u0131ran, y\u00fcksek performansl\u0131 \u00e7ift \u00e7ekirdek (Tensilica Xtensa LX6) ile \u00e7ok az t\u00fcketen yard\u0131mc\u0131 bir i\u015flemciden olu\u015fan bir mikrokontrolc\u00fc cihaz. <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.espressif.com\/\">Espressif Systems<\/a><\/strong> <\/span>isimli \u00c7in men\u015feli bir firma taraf\u0131ndan geli\u015ftirilmi\u015f. Bu \u00f6zelliklerin yan\u0131nda bir \u00e7ok \u00e7evresel birimi\/aray\u00fcz desteklemekte.<\/p>\n<p>\u00d6zellikle, IoT, giyilebilir elektronikler ve benzeri kullan\u0131mlar i\u00e7in uygun olan bu cihaz sundu\u011fu ba\u011flant\u0131 kabiliyetleri ile bir \u00e7ok geli\u015ftiriciyi cezbetmekte. Cihaza ili\u015fkin kabiliyetler i\u00e7in <span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/esp32.net\/\"><strong>http:\/\/esp32.net\/<\/strong><\/a><\/span> adresine ba\u015fvurabilirsiniz. E\u011fer, ESP32&#8217;yi duymad\u0131ysan\u0131z, fakat merak ediyorsan\u0131z, bu aktard\u0131\u011f\u0131m site olduk\u00e7a yard\u0131mc\u0131 olacakt\u0131r, \u00f6zellikle &#8220;Readings&amp;Videos&#8221; ba\u015fl\u0131\u011f\u0131 alt\u0131ndaki kaynaklara g\u00f6z atabilirsiniz.<\/p>\n<p>Kitap olarak da, yine ayn\u0131 site i\u00e7erisinde bulunan <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/leanpub.com\/kolban-ESP32\">https:\/\/leanpub.com\/kolban-ESP32<\/a><\/strong> <\/span>ve <strong><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/\"><span style=\"color: #008000;\">https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32<\/span>\/<\/a><\/strong> iyi bir kaynak olacakt\u0131r.<\/p>\n<p>A\u015fa\u011f\u0131da, bu cihaza ili\u015fkin bir geli\u015ftirme kart\u0131n\u0131 [<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.google.com\/url?sa=i&amp;url=https%3A%2F%2Fkomhedos.com%2Fesp32-nedir-programlamaya-giris%2F&amp;psig=AOvVaw08NPrwh-CjKNvXlM6sWzp0&amp;ust=1601409578611000&amp;source=images&amp;cd=vfe&amp;ved=0CA0QjhxqFwoTCMCQ-tvRjOwCFQAAAAAdAAAAABAJ\">kaynak<\/a><\/strong><\/span>] ve ilgili fonksiyonel blok diyagram\u0131n\u0131 g\u00f6rebilirsiniz.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/i0.wp.com\/komhedos.com\/wp-content\/uploads\/2020\/03\/ESP32-DEVKITC.jpg\" width=\"805\" height=\"624\" \/><\/p>\n<p id=\"qbtFUBT\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"546\" class=\"alignnone size-full wp-image-1959 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f72328840cd1.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f72328840cd1.png 650w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f72328840cd1-300x252.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f72328840cd1-500x420.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f72328840cd1-150x126.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f72328840cd1-400x336.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f72328840cd1-200x168.png 200w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/p>\n<p>\u00c7ok k\u0131sa bir giri\u015ften sonra biraz daha teknik konulara girelim. ESP32 i\u00e7in bir \u00e7ok geli\u015ftirme opsiyonu mevcut:<\/p>\n<ul>\n<li>\u00d6ncelikle komut sat\u0131r\u0131ndan kabiliyetlerin tamam\u0131 ger\u00e7ekle\u015ftirilebilir,<\/li>\n<li>Eclipse kullanabilirsiniz (<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/espressif\/idf-eclipse-plugin\">K\u0131lavuz<\/a><\/strong><\/span>),<\/li>\n<li>Arduino IDE&#8217;si kullanabilirsiniz (<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.programmersought.com\/article\/31354513553\/\">\u00d6rnek<\/a><\/strong><\/span>),<\/li>\n<li>VS Code ve Platform.IO kullanabilirsiniz ki, ben bunu kullan\u0131yorum (<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/diyprojects.io\/install-ide-platformio-extension-visual-studio-code-vscode-windows-32-bit-linux\/#.X3Cj42gzZjU\">\u00d6rnek<\/a><\/strong><\/span>). <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/11\/15\/visual-studio-code\/\">VS Code<\/a><\/strong><\/span>&#8216;a ili\u015fkin daha \u00f6nce bir yaz\u0131m vard\u0131 ona da g\u00f6z atabilirsiniz.<\/li>\n<li>Hatta Visual Studio kullanarak bile geli\u015ftirebilirsiniz <span style=\"color: #008000;\"><strong>(<a style=\"color: #008000;\" href=\"https:\/\/esp32.com\/viewtopic.php?t=329\">bu biraz daha dolamba\u00e7l\u0131<\/a>)<\/strong><\/span>.<\/li>\n<\/ul>\n<p>Hangi y\u00f6ntemi se\u00e7erseniz se\u00e7in, genelde olu\u015fturman\u0131z gereken ortam ve izlemeniz gereken ad\u0131mlar a\u015fa\u011f\u0131dakine benzer olacakt\u0131r:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/_images\/what-you-need1.png\" alt=\"Development of applications for ESP32\" \/><\/p>\n<p>Herneyse yeterince giri\u015f yapt\u0131k san\u0131r\u0131m. Bu arada, ileride, bu konulara ili\u015fkin daha detayl\u0131 yaz\u0131lar\u0131m olabilir. \u00d6zellikle ESP32 \u00fczerinde FreeRTOS kullan\u0131m\u0131 \u00e7ok ilgimi \u00e7ekmekte \ud83d\ude00<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>ESP32 i\u00e7in OTA<\/strong><\/span><\/h2>\n<p>Gelelim as\u0131l konuya, neden b\u00f6yle bir ihtiya\u00e7 has\u0131l oldu. \u015eimdi yukar\u0131da da g\u00f6sterdi\u011fim gibi normal \u015fartlarda bu cihazlara uygulama y\u00fcklemek i\u00e7in USB ile bilgisayar ba\u011flay\u0131p <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/get-started\/index.html#get-started-flash\">\u015fu adreste<\/a><\/strong><\/span> verilen ad\u0131mlar\u0131n\u0131 izlemeniz yeterli.<\/p>\n<p>Fakat, ger\u00e7ek kullan\u0131m\u0131 g\u00f6z \u00f6n\u00fcne alacak olursan\u0131z, kuvvetle muhtemel bu cihazlara yeni yaz\u0131l\u0131mlar atmak istedi\u011finizde bir tak\u0131m s\u0131k\u0131nt\u0131lar ile kar\u015f\u0131la\u015fabilirsiniz. \u015e\u00f6yle ki:<\/p>\n<ul>\n<li>Cihazlar \u00e7ok uzakta olabilir,<\/li>\n<li>Kablolu ba\u011flant\u0131 eri\u015fiminiz olamayabilir,<\/li>\n<li>\u00c7ok fazla cihaz olabilir,<\/li>\n<li>Yaz\u0131l\u0131mlar\u0131 g\u00fcncellemek \u00e7ok fazla zaman\u0131n\u0131z olmayabilir.<\/li>\n<\/ul>\n<p>\u0130ste tam da bu sebeplerden \u00f6t\u00fcr\u00fc, ESP32 ve benzeri cihazlar &#8220;Over-The-Air (OTA)&#8221;\u00a0 denilen ve WiFi \u00fczerinden yaz\u0131l\u0131mlar\u0131 g\u00fcncellemenizi olanak sa\u011flayan bir \u00f6zellik sunmaktad\u0131rlar. Bu \u00f6zellik sayesinde, bu cihazlardaki yaz\u0131l\u0131mlar\u0131 g\u00fcncellemeyi, herhangi bir kablo kullanmadan, cihaz\u0131n \u00fczerindeki WiFi mod\u00fcl\u00fcn\u00fc kullanarak yapabilirsiniz. Ayn\u0131 zamanda, tek kaynaktan bir \u00e7ok cihaza da, g\u00fcncelleme yapt\u0131rabilirsiniz. Tabi bunun da bir bedeli var ki, o da asl\u0131nda \u00e7ok b\u00fcy\u00fck de\u011fil. Kodunuz i\u00e7erisine ekstra bir ka\u00e7 sat\u0131r eklemeniz ve OTA deste\u011fi sunaca\u011f\u0131n\u0131z b\u00fct\u00fcn yaz\u0131l\u0131mlarda bunu koruman\u0131z olacakt\u0131r. Tahmin edebilece\u011finiz \u00fczere bu \u00e7ok da b\u00fcy\u00fck bir bedel de\u011fil \ud83d\ude42<\/p>\n<p>Peki bu i\u015flevi nas\u0131l kazand\u0131rabiliriz? Resmi kaynaklar i\u00e7in:<\/p>\n<ul>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/system\/ota.html\">https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/system\/ota.html<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-jumpstart\/en\/latest\/firmwareupgrade.html\">https:\/\/docs.espressif.com\/projects\/esp-jumpstart\/en\/latest\/firmwareupgrade.html<\/a> <\/strong><\/span><\/li>\n<\/ul>\n<p>sayfalar\u0131 olduk\u00e7a faydal\u0131 olacakt\u0131r ama i\u00e7erisinde kaybolman\u0131z olduk\u00e7a muhtemel, ama konuyu anlaman\u0131z i\u00e7in de muhakkak buralar\u0131 okuman\u0131z gerekiyor o sebeple l\u00fctfen bu i\u015f ile u\u011fra\u015facaksan\u0131z , buralara g\u00f6z at\u0131n. Ayr\u0131ca, resmi <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/espressif\/esp-idf\/tree\/8bc19ba\/examples\/system\/ota\">OTA \u00f6rnekleri<\/a> <\/strong><\/span>de sizlere olduk\u00e7a yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<p>\u015eimdi, ESP32 de OTA i\u00e7in neler yapmam\u0131z gerekiyor ve bunu nas\u0131l yapar\u0131z konular\u0131na biraz da e\u011filelim. \u00d6nce OTA&#8217;y\u0131 nas\u0131l kullanabiliriz ona bir g\u00f6z atal\u0131m.<\/p>\n<p>OTA i\u00e7in temel olarak iki y\u00f6ntem mevcut (elbette farkl\u0131 y\u00f6ntemler mevcut ama temel olanlar):<\/p>\n<p>1. Bir <strong>Web Sunucusu<\/strong> \u00fczerinden,<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>Bir Web Sunucusu \u00fczerinde, yeni yaz\u0131l\u0131mlar\u0131 sa\u011flamak i\u00e7in uygulama geli\u015ftiyoruz,<\/li>\n<li>Hem Web Server hem de ESP32 bu WiFi eri\u015fim noktas\u0131na ba\u011flan\u0131yor,<\/li>\n<li>Daha sonra, ister her a\u00e7\u0131l\u0131\u015fta, isterseniz \u00f6zel bir komut ile ESP32, bu sunucu \u00fczerinden yeni bir yaz\u0131l\u0131m kontrol\u00fc yap\u0131p, bu sunucuya ba\u011flanarak, ilgili yaz\u0131l\u0131m\u0131 y\u00fckl\u00fcyoruz,<\/li>\n<li>Buradaki ad\u0131mlar, a\u015fa\u011f\u0131da verilen fig\u00fcrde \u00f6zetlenmi\u015f durumda.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/github.com\/espressif\/esp-idf\/raw\/8bc19ba893e5544d571a753d82b44a84799b94b1\/examples\/system\/ota\/ota_workflow.png\" alt=\"OTA Workflow\" \/><\/p>\n<p><strong>2. ESP32 \u00fczerinde<\/strong> bir WiFi hotspot olu\u015fturarak.<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>Esp32, \u00e7al\u0131\u015f\u0131r \u00e7al\u0131\u015fmaz bir WiFi Hotspot olu\u015fturuyoruz,<\/li>\n<li>Daha sonra herhangi bir uygulama ile bu hot spot&#8217;a ba\u011flan\u0131yoruz. E\u011fer, REST API&#8217;sini kullanacaksan\u0131z bir browser \u00fczerinden bile ba\u011flanabilirsiniz,<\/li>\n<li>Esp32, size bir HTML sayfas\u0131 sunar ve bu sayfa arac\u0131l\u0131\u011f\u0131 ile ilgili yaz\u0131l\u0131m\u0131 se\u00e7ip, y\u00fckleyebilirsiniz.<\/li>\n<li>Temelde bizim izleyece\u011fimiz y\u00f6ntem bu olacak. Bu sayede herhangi bir cihaz ile bu a\u011fa ba\u011flanabilirsiniz. A\u015fa\u011f\u0131da \u00e7ok basit bir \u015fekilde bu kullan\u0131m\u0131 g\u00f6rebilirsiniz.<img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2018\/07\/access-point.png?resize=800%2C470&amp;ssl=1\" width=\"483\" height=\"284\" \/><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\u015eimdi de, OTA ile yaz\u0131l\u0131m y\u00fckleme ile normal yaz\u0131l\u0131m y\u00fckleme aras\u0131ndaki fark ve yap\u0131lmas\u0131 gerekenlerden bahsedece\u011fim. Burada de\u011finmemiz gereken bir iki kavram daha var, birincisi <strong>Flash<\/strong> ikincisi ise cihaz \u00fczerinde b\u00f6l\u00fcmlemeye yard\u0131mc\u0131 olan <strong>B\u00f6l\u00fcmleme Tablosu (&#8220;<span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-guides\/partition-tables.html\">Partion Table<\/a><\/span>&#8220;)<\/strong>.<\/p>\n<p>\u00d6ncelikli olarak Flash belle\u011fe bakal\u0131m. ESP32, 4MB bir flash belle\u011fe sahip. Bu belleklerin en \u00f6nemli \u00f6zelli\u011fi, g\u00fc\u00e7 kesilse bile, i\u00e7erisinde bar\u0131nd\u0131rd\u0131\u011f\u0131 verileri saklayabilmesidir. Bu da \u00f6zellikle, farkl\u0131 ko\u015fumlar aras\u0131 verileri saklamak i\u00e7in onu iyi bir aday yap\u0131yor. Tabi bu belleklerin olumsuz yanlar\u0131 ise, yazma operasyonlar\u0131n\u0131n say\u0131s\u0131 (100K-1000K). Bu sebeple, buraya veri yazarken ger\u00e7ekten ihtiya\u00e7 olup\/olmad\u0131\u011f\u0131n\u0131 de\u011ferlendirmenizde fayda var.<\/p>\n<p>\u015eimdi gelelim b\u00f6l\u00fcmleme tablosuna. \u0130sminde de anla\u015f\u0131laca\u011f\u0131 \u00fczere, bu tablo ESP32&#8217;nin kulland\u0131\u011f\u0131 yaz\u0131l\u0131m ve \u00e7e\u015fitli verilerin sakland\u0131\u011f\u0131 tabloyu ifade ediyor. 0x8000 adresinden ba\u015fl\u0131yor.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn%3AANd9GcQ66orSHroIQEohwI6_d9-p9a3mjU0xBGwkuQ&amp;usqp=CAU\" alt=\"Firmware Upgrades \u2014 ESP-Jumpstart documentation\" width=\"348\" height=\"246\" \/><\/p>\n<p>Bu tablo, flash bellek \u00fczerinde bulunmakta ve i\u00e7erece\u011fi kalem say\u0131s\u0131 da boyutu da s\u0131n\u0131rl\u0131. Halihaz\u0131rda sunulan tablolar\u0131 kullanabilece\u011finiz gibi, kendiniz de bu tabloyu g\u00fcncelleyebilirsiniz. \u0130lk etapta haz\u0131r olanlar\u0131 kullanman\u0131z\u0131 tavsiye ediyorum. Haz\u0131r tablolar \u015fu \u015fekilde:<\/p>\n<ul class=\"simple\">\n<li>\u201cSingle factory app, no OTA\u201d, yani OTA deste\u011fi olmayan ve tek uygulama y\u00fcklemek i\u00e7in kullan\u0131labilecek tablo,<\/li>\n<li>\u201cFactory app, two OTA definitions\u201d, iki farkl\u0131 OTA y\u00fcklenmesine olanak sa\u011flayan tablo<\/li>\n<\/ul>\n<p>Bu tablolar\u0131 projenize .csv uzant\u0131l\u0131 dosyalar ile ekleyebiliyorsunuz.<\/p>\n<p>\u201cSingle factory app, no OTA\u201d, i\u00e7in sunulan .csv dosyas\u0131 \u015fu \u015fekilde:<\/p>\n<pre class=\"lang:c++ decode:true\"># ESP-IDF Partition Table\r\n# Name,   Type, SubType, Offset,  Size, Flags\r\nnvs,      data, nvs,     0x9000,  0x6000,\r\nphy_init, data, phy,     0xf000,  0x1000,\r\nfactory,  app,  factory, 0x10000, 1M,<\/pre>\n<p>\u201cFactory app, two OTA definitions\u201d, i\u00e7in sunulan .csv dosyas\u0131 \u015fu \u015fekilde:<\/p>\n<pre class=\"lang:c++ decode:true \"># ESP-IDF Partition Table\r\n# Name,   Type, SubType, Offset,  Size, Flags\r\nnvs,      data, nvs,     0x9000,  0x4000,\r\notadata,  data, ota,     0xd000,  0x2000,\r\nphy_init, data, phy,     0xf000,  0x1000,\r\nfactory,  0,    0,       0x10000, 1M,\r\nota_0,    0,    ota_0,  0x110000, 1M,\r\nota_1,    0,    ota_1,  0x210000, 1M,<\/pre>\n<p>Yukar\u0131da tan\u0131mlanan kalemlere bakacak olursak:<\/p>\n<ul class=\"simple\">\n<li>0x10000 (64KB) offset ve &#8220;<strong>factory<\/strong>&#8221; ile isimlendirilmi\u015f alan, bootloader&#8217;\u0131n varsay\u0131lan olarak y\u00fckleyece\u011fi yaz\u0131l\u0131m\u0131n durdu\u011fu alan,<\/li>\n<li>Ayr\u0131ca NVS k\u00fct\u00fcphanesi (Non-volatile storage, detaylar i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/storage\/nvs_flash.html\">buraya<\/a><\/strong><\/span> bakabilirsiniz) &#8220;nvs&#8221; ve PHY Init Data (fiziksel donan\u0131m katman\u0131na ili\u015fkin parametrelerin tutuldu\u011fu alan, detaylar i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/espressif\/esp-idf\/blob\/8e4a8e17037c51ce2452e55b5b75bbfaecb25838\/components\/esp32\/include\/esp_phy_init.h\">buraya<\/a> <\/strong><\/span>bakabilirsiniz) i\u00e7in ise &#8220;<strong>phy_init<\/strong>&#8220;,<\/li>\n<li>&#8220;<strong>ota_0<\/strong>&#8221; ve &#8220;<strong>ota_1<\/strong>&#8221; ise, OTA marifetiyle y\u00fcklenen yaz\u0131l\u0131mlar\u0131n tutuldu\u011fu alanlar\u0131 ifade etmekte.<\/li>\n<\/ul>\n<p>Tahmin edebilece\u011finiz gibi bu tablodaki her bir sat\u0131r i\u00e7in bir format var, ve o da<span style=\"color: #008000;\"> <strong><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-guides\/partition-tables.html\">\u015fu sayfada<\/a><\/strong><\/span> a\u00e7\u0131klanmakta. Bunlar\u0131n yan\u0131nda, formata sad\u0131k kalarak kendi b\u00f6l\u00fcmleme tablolar\u0131n\u0131z\u0131 da olu\u015fturabilirsiniz.<\/p>\n<p>\u015eimdi gelelim OTA y\u00fcklemelerinde izlenen ad\u0131mlara ve arka planda olanlara.\u00a0Her bir OTA y\u00fcklemesi ile, a\u015fa\u011f\u0131daki fig\u00fcrde de g\u00f6sterilen, ilgili alanlar doldurulmakta ve &#8220;OTA data&#8221; alan\u0131nda yazan veri \u0131\u015f\u0131\u011f\u0131nda (\u00e7ok basit\u00e7e asl\u0131nda indeks olarak d\u00fc\u015f\u00fcnebilirsiniz), ilgili yaz\u0131l\u0131m a\u00e7\u0131l\u0131\u015fta y\u00fcklenmektedir. Yani;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"871\" height=\"473\" class=\"alignnone size-full wp-image-1955 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05.png 871w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05-300x163.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05-768x417.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05-500x272.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05-150x81.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05-400x217.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05-800x434.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2020\/09\/img_5f722ec13ac05-200x109.png 200w\" sizes=\"auto, (max-width: 871px) 100vw, 871px\" \/><\/p>\n<ol>\n<li>Yaz\u0131l\u0131m ilk defa ESP32 ye y\u00fcklendi\u011finde, Bootloader, &#8220;factory&#8221; alan\u0131ndaki yaz\u0131l\u0131m\u0131 \u00e7al\u0131\u015ft\u0131racakt\u0131r.<\/li>\n<li>Bir kere OTA y\u00fcklemesi yap\u0131nca, OTA_0 alan\u0131 doldurulacak ve yaz\u0131l\u0131m do\u011frulan\u0131rsa, bir sonraki a\u00e7\u0131l\u0131\u015fta bu alandaki yaz\u0131l\u0131m \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r (k\u0131rm\u0131z\u0131 alanlar)<\/li>\n<li>\u0130kinci OTA y\u00fcklemesi yap\u0131nca, OTA_1 alan\u0131 doldurulacak ve yaz\u0131l\u0131m do\u011frulan\u0131rsa, bir sonraki a\u00e7\u0131l\u0131\u015fta bu alandaki yaz\u0131l\u0131m \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r (mavi alanlar)<\/li>\n<li>\u00dc\u00e7\u00fcnc\u00fc kez y\u00fcklendi\u011finde ise OTA_0 \u00fczerine yaz\u0131lacak ve yaz\u0131l\u0131m do\u011frulan\u0131rsa, bir sonraki a\u00e7\u0131l\u0131\u015fta bu alandaki yaz\u0131l\u0131m \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r (turuncu alanlar)<\/li>\n<\/ol>\n<p id=\"RRpwlsa\">Bu ad\u0131mlar s\u0131ras\u0131nda elbette sunulan OTA API&#8217;lerini kullanarak \u00f6zelle\u015ftirmelere gidebilirsiniz ama sizlere aktaraca\u011f\u0131m \u00f6rnek ve genel yakla\u015f\u0131m bu \u015fekilde.<\/p>\n<p>OTA y\u00fcklemelerinde herhangi bir hata olmad\u0131\u011f\u0131 m\u00fcddet\u00e7e, &#8220;factory&#8221; alan\u0131 g\u00fcncellenmez. Yeni y\u00fckledi\u011finiz her bir yaz\u0131l\u0131m\u0131n, ayn\u0131 b\u00f6l\u00fcmleme tablosu ve OTA deste\u011fi ile olu\u015fturulmas\u0131 kritik arkada\u015flar. Bu ad\u0131mlara ili\u015fkin, resmi ad\u0131mlara da <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-jumpstart\/en\/latest\/firmwareupgrade.html?highlight=partition%20table#flash-partitions\">buradan<\/a> <\/strong><\/span>ula\u015fabilirsiniz.<\/p>\n<p>Evet, i\u015fin arka plan\u0131 burada son buluyor.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Web OTA Updater<\/span><\/strong><\/h2>\n<p>Evet, sevgili yaz\u0131l\u0131mperver dostlar\u0131m, art\u0131k bize kod ver dedi\u011finizi duyar gibi oluyorum. Merak etmeyin o vakit geldi \ud83d\ude42<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media3.giphy.com\/media\/PiQejEf31116URju4V\/giphy.gif\" alt=\"Use Code GIFs - Get the best GIF on GIPHY\" \/><\/p>\n<p>Her zamanki gibi koda ula\u015fmak i\u00e7in a\u015fa\u011f\u0131daki adrese bir u\u011frayabilirsiniz:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\/WebOTAUpdater\">https:\/\/github.com\/yazilimperver\/WebOTAUpdater<\/a><\/strong><\/span><\/p>\n<p>\u00d6ncelikle kulland\u0131\u011f\u0131m ara\u00e7lardan k\u0131saca bahsedeyim. Yaz\u0131l\u0131m\u0131 VSCode ve Platform.IO eklentisini kullanarak geli\u015ftirdim. Burada detayl\u0131 ad\u0131mlara girmeyece\u011fim ama a\u015fa\u011f\u0131daki adreste olduk\u00e7a detayl\u0131 bir anlat\u0131m var, o ad\u0131mlar\u0131 izleyerek gerekli ortam\u0131 olu\u015fturabilirsiniz.<\/p>\n<p><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/docs.platformio.org\/en\/latest\/tutorials\/espressif32\/arduino_debugging_unit_testing.html\"><strong>https:\/\/docs.platformio.org\/en\/latest\/tutorials\/espressif32\/arduino_debugging_unit_testing.html\u00a0<\/strong><\/a><\/span><\/p>\n<p>Bu arada Platform.IO i\u00e7in git&#8217;i aya\u011fa kald\u0131rmak i\u00e7in de<span style=\"color: #008000;\"> <a style=\"color: #008000;\" href=\"https:\/\/www.youtube.com\/watch?v=Fk12ELJ9Bww\"><strong>https:\/\/www.youtube.com\/watch?v=Fk12ELJ9Bww<\/strong><\/a> <\/span>videosu olduk\u00e7a faydal\u0131 olacakt\u0131r.<\/p>\n<p>Son bir ka\u00e7 not:<\/p>\n<ul>\n<li>Web sunucusu \u00fczerinden sunulan sayfa \/src\/main\/web\/index.html olarak tutulmakta,<\/li>\n<li>Bu html dosyas\u0131, g\u00f6m\u00fcl\u00fc kaynak olarak kullan\u0131lmakta. Bu \u015fekilde ekledi\u011finiz dosyalara, &#8220;_binary_index_html_start&#8221; ve &#8220;_binary_index_html_end&#8221; ile eri\u015febiliyoruz,<\/li>\n<li>Platform.io \u00fczerinde, bu b\u00f6l\u00fcmleme tablosunu kullanabilmek i\u00e7in platformio.ini i\u00e7erisindeki ayar\u0131 kullanman\u0131z gerekiyor. CMake \u00fczerinden dosyalar\u0131 g\u00f6mme olay\u0131nda ba\u015far\u0131l\u0131 olamad\u0131m,\n<ul>\n<li>Farkl\u0131 platformlar i\u00e7in ilgili platformdaki ayarlara g\u00f6z atman\u0131zda fayda var.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Evet, arkada\u015flar bu yaz\u0131m\u0131n da sonuna geldik. Bundan sonra ara ara ESP32 cihaz\u0131 ile \u00f6rnek uygulamalar geli\u015ftirece\u011fiz, \u00f6zellikle FreeRTOS&#8217;u ke\u015ffetmek i\u00e7in. O zaman kadar almak isteyen a\u015fa\u011f\u0131daki ba\u011flant\u0131dan cihaz\u0131 temin edebilirler:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/urun.n11.com\/arduino-urunleri-ve-setleri\/arduino-esp-32s-wifi-ve-bluetooth-modul-nodemcu-P375032643\">https:\/\/urun.n11.com\/arduino-urunleri-ve-setleri\/arduino-esp-32s-wifi-ve-bluetooth-modul-nodemcu-P375032643<\/a><\/strong><\/span><\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.programmersought.com\/article\/31354513553\/\">https:\/\/www.programmersought.com\/article\/31354513553\/<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/espressif\/idf-eclipse-plugin\">https:\/\/github.com\/espressif\/idf-eclipse-plugin<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/leanpub.com\/kolban-ESP32\">https:\/\/leanpub.com\/kolban-ESP32<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/diyprojects.io\/install-ide-platformio-extension-visual-studio-code-vscode-windows-32-bit-linux\/#.X3Cj42gzZjU\">https:\/\/diyprojects.io\/install-ide-platformio-extension-visual-studio-code-vscode-windows-32-bit-linux\/#.X3Cj42gzZjU<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.wikiwand.com\/en\/ESP32\">https:\/\/www.wikiwand.com\/en\/ESP32<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/komhedos.com\/esp32-nedir-programlamaya-giris\/\">https:\/\/komhedos.com\/esp32-nedir-programlamaya-giris\/<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/esp32.net\/\"><strong>http:\/\/esp32.net\/<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/docs.platformio.org\/en\/latest\/tutorials\/espressif32\/espidf_debugging_unit_testing_analysis.html\"><strong>https:\/\/docs.platformio.org\/en\/latest\/tutorials\/espressif32\/espidf_debugging_unit_testing_analysis.html<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/esp32.com\/viewtopic.php?t=329\"><strong>https:\/\/esp32.com\/viewtopic.php?t=329<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-guides\/partition-tables.html\"><strong>https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-guides\/partition-tables.html<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-jumpstart\/en\/latest\/firmwareupgrade.html\"><strong>https:\/\/docs.espressif.com\/projects\/esp-jumpstart\/en\/latest\/firmwareupgrade.html<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/storage\/nvs_flash.html\"><strong>https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/storage\/nvs_flash.html<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/espressif\/esp-idf\/blob\/8e4a8e17037c51ce2452e55b5b75bbfaecb25838\/components\/esp32\/include\/esp_phy_init.h\"><strong>https:\/\/github.com\/espressif\/esp-idf\/blob\/8e4a8e17037c51ce2452e55b5b75bbfaecb25838\/components\/esp32\/include\/esp_phy_init.h<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/espressif\/esp-idf\/tree\/8bc19ba\/examples\/system\/ota\"><strong>https:\/\/github.com\/espressif\/esp-idf\/tree\/8bc19ba\/examples\/system\/ota<\/strong><\/a><\/span><\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar, bir \u00f6nceki yaz\u0131mda, \u00e7ok farkl\u0131 bir konuya de\u011finece\u011fimden bahsetmi\u015ftim. \u00c7ok da aray\u0131 a\u00e7mad\u0131m ne dersiniz \ud83d\ude00 Bu yaz\u0131m, \u00f6zellikle benim gibi ESP32 cihaz\u0131n\u0131 kullan\u0131p bir \u015fekilde otomatik g\u00fcncelleme yapmak isteyenlere yard\u0131mc\u0131 olacakt\u0131r. Asl\u0131nda yaz\u0131 i\u00e7erisinde yabanc\u0131s\u0131 oldu\u011funuz bir \u00e7ok kavram olabilir, bunlar\u0131n muhtemelen bir \u00e7o\u011funa ili\u015fkin bilgiyi bu yaz\u0131da bulamayabilirsiniz. Bu sebeple e\u011fer&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"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":[10,188],"tags":[772,13,766,773,770,774,767,775,769,776,771,768],"class_list":["post-1935","post","type-post","status-publish","format-standard","hentry","category-c","category-yazilim-muhendisligi","tag-arduino","tag-c","tag-esp32","tag-espressif","tag-firmware","tag-flash","tag-iot","tag-nvs","tag-ota","tag-partition-table","tag-platform-io","tag-web-based-ota"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Merhaba arkada\u015flar, bir \u00f6nceki yaz\u0131mda, \u00e7ok farkl\u0131 bir konuya de\u011finece\u011fimden bahsetmi\u015ftim. \u00c7ok da aray\u0131 a\u00e7mad\u0131m ne dersiniz \ud83d\ude00 Bu yaz\u0131m, \u00f6zellikle benim gibi ESP32 cihaz\u0131n\u0131 kullan\u0131p bir \u015fekilde otomatik g\u00fcncelleme yapmak isteyenlere yard\u0131mc\u0131 olacakt\u0131r. Asl\u0131nda yaz\u0131 i\u00e7erisinde yabanc\u0131s\u0131 oldu\u011funuz bir \u00e7ok kavram olabilir, bunlar\u0131n muhtemelen bir \u00e7o\u011funa ili\u015fkin bilgiyi bu yaz\u0131da bulamayabilirsiniz. Bu sebeple e\u011fer... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-28T20:09:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/komhedos.com\/wp-content\/uploads\/2020\/03\/ESP32-DEVKITC.jpg\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi\",\"datePublished\":\"2020-09-28T20:09:55+00:00\",\"dateModified\":\"2020-09-28T20:09:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\"},\"wordCount\":2209,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"arduino\",\"c++\",\"esp32\",\"espressif\",\"firmware\",\"flash\",\"IoT\",\"NVS\",\"OTA\",\"partition table\",\"platform.IO\",\"WEB based OTA\"],\"articleSection\":[\"C++\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\",\"name\":\"[:tr]ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2020-09-28T20:09:55+00:00\",\"dateModified\":\"2020-09-28T20:09:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:tr]ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Merhaba arkada\u015flar, bir \u00f6nceki yaz\u0131mda, \u00e7ok farkl\u0131 bir konuya de\u011finece\u011fimden bahsetmi\u015ftim. \u00c7ok da aray\u0131 a\u00e7mad\u0131m ne dersiniz \ud83d\ude00 Bu yaz\u0131m, \u00f6zellikle benim gibi ESP32 cihaz\u0131n\u0131 kullan\u0131p bir \u015fekilde otomatik g\u00fcncelleme yapmak isteyenlere yard\u0131mc\u0131 olacakt\u0131r. Asl\u0131nda yaz\u0131 i\u00e7erisinde yabanc\u0131s\u0131 oldu\u011funuz bir \u00e7ok kavram olabilir, bunlar\u0131n muhtemelen bir \u00e7o\u011funa ili\u015fkin bilgiyi bu yaz\u0131da bulamayabilirsiniz. Bu sebeple e\u011fer... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2020-09-28T20:09:55+00:00","og_image":[{"url":"https:\/\/i0.wp.com\/komhedos.com\/wp-content\/uploads\/2020\/03\/ESP32-DEVKITC.jpg"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi","datePublished":"2020-09-28T20:09:55+00:00","dateModified":"2020-09-28T20:09:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/"},"wordCount":2209,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["arduino","c++","esp32","espressif","firmware","flash","IoT","NVS","OTA","partition table","platform.IO","WEB based OTA"],"articleSection":["C++","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/","name":"[:tr]ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2020-09-28T20:09:55+00:00","dateModified":"2020-09-28T20:09:55+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2020\/09\/28\/esp32-cipleri-icin-ota-guncellemesi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"ESP32 \u00e7ipleri i\u00e7in OTA g\u00fcncellemesi"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=1935"}],"version-history":[{"count":18,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1935\/revisions"}],"predecessor-version":[{"id":1965,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1935\/revisions\/1965"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=1935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}