{"id":2665,"date":"2019-01-08T04:52:03","date_gmt":"2019-01-08T09:52:03","guid":{"rendered":"https:\/\/espacerm.com\/webgen\/?page_id=2665"},"modified":"2019-01-12T12:37:20","modified_gmt":"2019-01-12T17:37:20","slug":"esp32-augmentation-de-lespace-memoire-pour-le-code-programme","status":"publish","type":"page","link":"https:\/\/espacerm.com\/webgen\/esp32-augmentation-de-lespace-memoire-pour-le-code-programme\/","title":{"rendered":"ESP32 &#8211; Augmentation de l&rsquo;espace m\u00e9moire pour le code programme"},"content":{"rendered":"\n<p>Le moindrement que le programme comporte plusieurs lignes, la m\u00e9moire disponible r\u00e9serv\u00e9e pour le code est insuffisante. C&rsquo;est le cas quand nous voulons avoir des interfaces Web et Bluetooth fonctionnelles simultan\u00e9ment. BluetoothSerial.h prend beaucoup de m\u00e9moire.<\/p>\n\n\n\n<p>Par d\u00e9faut, 1310720 octets sont r\u00e9serv\u00e9s pour le code programme dans le \u00abDOIT ESP32 DEVKIT V1\u00bb. La m\u00e9moire flash 4MB est <a rel=\"noreferrer noopener\" aria-label=\"partitionn\u00e9e (ouverture dans un nouvel onglet)\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/api-guides\/partition-tables.html\" target=\"_blank\">partitionn\u00e9e<\/a> et une bonne proportion de l&rsquo;espace m\u00e9moire est r\u00e9serv\u00e9e pour l&rsquo;<a rel=\"noreferrer noopener\" aria-label=\"OTA (ouverture dans un nouvel onglet)\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/api-reference\/system\/ota.html\" target=\"_blank\">OTA<\/a> (<a rel=\"noreferrer noopener\" aria-label=\"update Over the Air (ouverture dans un nouvel onglet)\" href=\"https:\/\/randomnerdtutorials.com\/esp32-over-the-air-ota-programming\/\" target=\"_blank\">update Over the Air -&gt; d\u00e9mo<\/a>) et le <a rel=\"noreferrer noopener\" aria-label=\"SPIFFS (ouverture dans un nouvel onglet)\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/api-reference\/storage\/spiffs.html\" target=\"_blank\">SPIFFS<\/a> (<a rel=\"noreferrer noopener\" aria-label=\"Serial Peripheral Interface Flash File System (ouverture dans un nouvel onglet)\" href=\"https:\/\/randomnerdtutorials.com\/install-esp32-filesystem-uploader-arduino-ide\/\" target=\"_blank\">Serial Peripheral Interface Flash File System&nbsp;-&gt;&nbsp;d\u00e9mo<\/a>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Partitions par d\u00e9faut<\/h2>\n\n\n\n<p>Lors de la compilation du programme, l&rsquo;IDE ARDUINO lit le fichier  <br><strong>boards.txt<\/strong> du r\u00e9pertoire  &gt; C:\\Users\\NomDutilisateur\\<em>AppData<\/em>\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.1<\/p>\n\n\n\n<p><em>AppData&nbsp;<\/em>est un r\u00e9pertoire syst\u00e8me, par d\u00e9faut il est masqu\u00e9. Pour le voir, il faut cocher \u00ab\u00c9l\u00e9ments masqu\u00e9s\u00bb dans l&rsquo;explorateur Windows. Si ce n&rsquo;est d\u00e9j\u00e0 fait, cochez aussi \u00abExtensions de noms de fichiers\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/affiche-elements-masques_00-1-1024x176.jpg\" alt=\"\" class=\"wp-image-2790\" width=\"917\" height=\"157\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/affiche-elements-masques_00-1-1024x176.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/affiche-elements-masques_00-1-300x52.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/affiche-elements-masques_00-1-768x132.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/affiche-elements-masques_00-1.jpg 1115w\" sizes=\"(max-width: 917px) 100vw, 917px\" \/><\/figure>\n\n\n\n<p>Pour ex\u00e9cuter le partitionnement, le compilateur se r\u00e9f\u00e8re \u00e0 la section correspondante au type de carte s\u00e9lectionn\u00e9e par l&rsquo;utilisateur (dans le menu Outils de l&rsquo;interface IDE).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Extrait de boards.txt (IDE Arduino 1.8.8, ESP32 V 1.0.1)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>##############################################################\n\nesp32doit-devkit-v1.name=DOIT ESP32 DEVKIT V1\n\nesp32doit-devkit-v1.upload.tool=esptool_py\nesp32doit-devkit-v1.upload.maximum_size=1310720\nesp32doit-devkit-v1.upload.maximum_data_size=327680\nesp32doit-devkit-v1.upload.wait_for_upload_port=true\n\nesp32doit-devkit-v1.serial.disableDTR=true\nesp32doit-devkit-v1.serial.disableRTS=true\n\nesp32doit-devkit-v1.build.mcu=esp32\nesp32doit-devkit-v1.build.core=esp32\nesp32doit-devkit-v1.build.variant=doitESP32devkitV1\nesp32doit-devkit-v1.build.board=ESP32_DEV\n\nesp32doit-devkit-v1.build.f_cpu=240000000L\nesp32doit-devkit-v1.build.flash_mode=dio\nesp32doit-devkit-v1.build.flash_size=4MB\nesp32doit-devkit-v1.build.boot=dio\nesp32doit-devkit-v1.build.partitions=default\nesp32doit-devkit-v1.build.defines=\n\nesp32doit-devkit-v1.menu.FlashFreq.80=80MHz\nesp32doit-devkit-v1.menu.FlashFreq.80.build.flash_freq=80m\nesp32doit-devkit-v1.menu.FlashFreq.40=40MHz\nesp32doit-devkit-v1.menu.FlashFreq.40.build.flash_freq=40m\n\nesp32doit-devkit-v1.menu.UploadSpeed.921600=921600\nesp32doit-devkit-v1.menu.UploadSpeed.921600.upload.speed=921600\nesp32doit-devkit-v1.menu.UploadSpeed.115200=115200\nesp32doit-devkit-v1.menu.UploadSpeed.115200.upload.speed=115200\nesp32doit-devkit-v1.menu.UploadSpeed.256000.windows=256000\nesp32doit-devkit-v1.menu.UploadSpeed.256000.upload.speed=256000\nesp32doit-devkit-v1.menu.UploadSpeed.230400.windows.upload.speed=256000\nesp32doit-devkit-v1.menu.UploadSpeed.230400=230400\nesp32doit-devkit-v1.menu.UploadSpeed.230400.upload.speed=230400\nesp32doit-devkit-v1.menu.UploadSpeed.460800.linux=460800\nesp32doit-devkit-v1.menu.UploadSpeed.460800.macosx=460800\nesp32doit-devkit-v1.menu.UploadSpeed.460800.upload.speed=460800\nesp32doit-devkit-v1.menu.UploadSpeed.512000.windows=512000\nesp32doit-devkit-v1.menu.UploadSpeed.512000.upload.speed=512000\n\nesp32doit-devkit-v1.menu.DebugLevel.none=None\nesp32doit-devkit-v1.menu.DebugLevel.none.build.code_debug=0\nesp32doit-devkit-v1.menu.DebugLevel.error=Error\nesp32doit-devkit-v1.menu.DebugLevel.error.build.code_debug=1\nesp32doit-devkit-v1.menu.DebugLevel.warn=Warn\nesp32doit-devkit-v1.menu.DebugLevel.warn.build.code_debug=2\nesp32doit-devkit-v1.menu.DebugLevel.info=Info\nesp32doit-devkit-v1.menu.DebugLevel.info.build.code_debug=3\nesp32doit-devkit-v1.menu.DebugLevel.debug=Debug\nesp32doit-devkit-v1.menu.DebugLevel.debug.build.code_debug=4<\/code><\/pre>\n\n\n\n<p><strong>Deux lignes sont importantes pour l&rsquo;assignation de la m\u00e9moire:<\/strong><\/p>\n\n\n\n<ul><li>esp32doit-devkit-v1.upload.maximum_size=1310720<ul><li>Cette ligne d\u00e9finit le nombre d&rsquo;octets maximum pour le upload <\/li><\/ul><\/li><\/ul>\n\n\n\n<ul><li> esp32doit-devkit-v1.build.partitions=default<ul><li>Cette ligne d\u00e9signe le fichier qui contient la structure du partitionnement<\/li><li>Ce fichier est toujours du type csv <\/li><\/ul><\/li><\/ul>\n\n\n\n<p><strong>Fichier par d\u00e9faut pour le partitionnement<\/strong><br>C:\\Users\\NomDutilisateur\\<em>AppData<\/em>\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.1\\tools\\partitions\\default.csv<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">default.csv<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,  0x2000,\napp0,     app,  ota_0,   0x10000, 0x140000,\napp1,     app,  ota_1,   0x150000,0x140000,\neeprom,   data, 0x99,    0x290000,0x1000,\nspiffs,   data, spiffs,  0x291000,0x16F000,\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/esp32-partition-par-defaut_00.jpg\" alt=\"\" class=\"wp-image-2674\" width=\"787\" height=\"253\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/esp32-partition-par-defaut_00.jpg 788w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/esp32-partition-par-defaut_00-300x97.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/esp32-partition-par-defaut_00-768x248.jpg 768w\" sizes=\"(max-width: 787px) 100vw, 787px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Programme d&rsquo;affichage du partitionnement du ESP32<\/h2>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/Affiche_Partitions.txt\">Affiche_Partitions<\/a><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/Affiche_Partitions.txt\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger et remplacer .txt pour .ino<\/a><\/div>\n\n\n\n<p>Placer dans un r\u00e9pertoire nomm\u00e9 \u00abAffiche_Partitions\u00bb, transf\u00e9rer dans le ESP32 et ex\u00e9cuter. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;esp_partition.h>\n\nvoid setup() {\n  Serial.begin(115200);\n  const esp_partition_t *partition = NULL;\n  partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_0, \"app0\");\n  if (partition != NULL) {\n    Serial.printf(\"APP partition addr: 0x%08x; size: %d; label: %s\\n\", partition->address, partition->size, partition->label);\n  }\n  \n  partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1, \"app1\");\n  if (partition != NULL)\n  {\n    Serial.printf(\"OTA partition addr: 0x%08x; size: %d; label: %s\\n\", partition->address, partition->size, partition->label);\n  }\n  else\n  {\n    Serial.printf(\"No OTA partition found !\\n\");\n  }\n  \n  partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, (esp_partition_subtype_t)0x99, \"eeprom\");\n  if (partition != NULL) {\n    Serial.printf(\"EEprom partition addr: 0x%08x; size: %d; label: %s\\n\", partition->address, partition->size, partition->label);\n  }\n  \n  partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_SPIFFS, \"spiffs\");\n  if (partition != NULL) {\n    Serial.printf(\"SPIFFS partition addr: 0x%08x; size: %d; label: %s\\n\", partition->address, partition->size, partition->label);\n  }\n}\n\nvoid loop() {}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Solutions<\/h2>\n\n\n\n<p>Afin de r\u00e9cup\u00e9rer de l&rsquo;espace m\u00e9moire pour le code, il est possible de modifier simplement le partitionnement de la m\u00e9moire. <\/p>\n\n\n\n<p>Proposition de trois partitionnements. Il faut sacrifier la m\u00e9moire pour l&rsquo;OTA ou diminuer la m\u00e9moire pour le SPIFFS.<\/p>\n\n\n\n<ul><li><strong>no_ota<\/strong><ul><li>Dans le cas ou nous pr\u00e9voyons de ne pas utiliser la mise \u00e0 jour sans fil. Aucune m\u00e9moire r\u00e9serv\u00e9e pour l&rsquo;OTA<\/li><li>Environ 50% pour le programme et 50% pour le SPIFFS <\/li><\/ul><\/li><li><strong>huge_app<\/strong><ul><li> Dans le cas ou nous pr\u00e9voyons de ne pas utiliser la mise \u00e0 jour sans fil. Aucune m\u00e9moire r\u00e9serv\u00e9e pour l&rsquo;OTA<\/li><li> Environ 76% pour le programme et 24% pour le SPIFFS  <\/li><\/ul><\/li><li><strong>min_spiffs<\/strong><ul><li> Environ 47% pour le programme, 47% pour l&rsquo;OTA et 5% pour le SPIFFS   <\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/tableau_partitions_01.jpg\" alt=\"\" class=\"wp-image-2799\" width=\"919\" height=\"742\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/tableau_partitions_01.jpg 755w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/tableau_partitions_01-300x242.jpg 300w\" sizes=\"(max-width: 919px) 100vw, 919px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/tableau_partitions_02.jpg\" alt=\"\" class=\"wp-image-2801\" width=\"910\" height=\"745\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/tableau_partitions_02.jpg 739w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/tableau_partitions_02-300x246.jpg 300w\" sizes=\"(max-width: 910px) 100vw, 910px\" \/><\/figure>\n\n\n\n<p>Fichiers sources \u00e0 placer dans le r\u00e9pertoire (s&rsquo;ils sont absents) : <br>-&gt;  <br>C:\\Users\\NomDutilisateur\\<em>AppData<\/em>\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.1\\tools\\partitions  <\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/espressif\/arduino-esp32\/tree\/master\/tools\/partitions\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (ouverture dans un nouvel onglet)\">https:\/\/github.com\/espressif\/arduino-esp32\/tree\/master\/tools\/partitions<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><strong>PROC\u00c9DURE<\/strong><\/p>\n\n\n\n<p>Le choix du partitionnement se fera \u00e0 l&rsquo;aide du menu outil, mais avant il faut ajouter des lignes de code dans le fichier boards.txt. Pour certains types de cartes, ces lignes sont d\u00e9j\u00e0 pr\u00e9sentes, mais pour la carte \u00abDOIT ESP32 DEVKIT V1\u00bb elles sont manquantes.<\/p>\n\n\n\n<ul><li>Aller dans le r\u00e9pertoire -&gt; <br>C:\\Users\\NomDutilisateur\\<em>AppData<\/em>\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.1 <\/li><li>Copier le fichier <strong>boards.txt<\/strong> et renommer <strong>boards_default.txt<\/strong> pour en conserver une copie non modifi\u00e9e<\/li><li>Ouvrir le fichier  <strong>boards.txt<\/strong> <\/li><li>Trouver la partie  esp32doit-devkit-v1.name=DOIT ESP32 DEVKIT V1<\/li><li>Ajouter les lignes qui suivent juste apr\u00e8s la ligne <ul><li>\u00ab  <strong>esp32doit-devkit-v1.build.defines= <\/strong>\u00bb<\/li><\/ul><\/li><\/ul>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/ajout_a_boards-1.txt\">ajout_a_boards<\/a><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/ajout_a_boards-1.txt\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>esp32doit-devkit-v1.menu.PartitionScheme.default=Default (32-32-36)\nesp32doit-devkit-v1.menu.PartitionScheme.default.build.partitions=default\nesp32doit-devkit-v1.menu.PartitionScheme.no_ota=No OTA (Large APP) (50-00-50)\nesp32doit-devkit-v1.menu.PartitionScheme.no_ota.build.partitions=no_ota\nesp32doit-devkit-v1.menu.PartitionScheme.no_ota.upload.maximum_size=2097152\nesp32doit-devkit-v1.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA) (76-00-24)\nesp32doit-devkit-v1.menu.PartitionScheme.huge_app.build.partitions=huge_app\nesp32doit-devkit-v1.menu.PartitionScheme.huge_app.upload.maximum_size=3145728\nesp32doit-devkit-v1.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (Large APPS with OTA) (47-47-05)\nesp32doit-devkit-v1.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs\nesp32doit-devkit-v1.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080<\/code><\/pre>\n\n\n\n<ul><li>Sauvegarder le fichier  <strong>boards.txt<\/strong> <\/li><\/ul>\n\n\n\n<p>Les nouveaux choix sont accessibles dans le menu \u00abOutils\u00bb suite \u00e0 la s\u00e9lection de la carte  \u00abDOIT ESP32 DEVKIT V1\u00bb <\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/IMG_0157c-1024x616.jpg\" alt=\"\" class=\"wp-image-2857\" width=\"889\" height=\"534\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/IMG_0157c-1024x616.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/IMG_0157c-300x180.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/IMG_0157c-768x462.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/01\/IMG_0157c.jpg 1853w\" sizes=\"(max-width: 889px) 100vw, 889px\" \/><\/figure>\n\n\n\n<p>Vous pouvez valider les changements en ex\u00e9cutant le programme d\u2019affichage du partitionnement du ESP32 <\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Le moindrement que le programme comporte plusieurs lignes, la m\u00e9moire disponible r\u00e9serv\u00e9e pour le code est insuffisante. C&rsquo;est le cas quand nous voulons avoir des interfaces Web et Bluetooth fonctionnelles simultan\u00e9ment. BluetoothSerial.h prend beaucoup de m\u00e9moire. Par d\u00e9faut, 1310720 octets sont r\u00e9serv\u00e9s pour le code programme dans le \u00abDOIT ESP32 DEVKIT V1\u00bb. La m\u00e9moire flash [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages\/2665"}],"collection":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/comments?post=2665"}],"version-history":[{"count":123,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages\/2665\/revisions"}],"predecessor-version":[{"id":2867,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages\/2665\/revisions\/2867"}],"wp:attachment":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/media?parent=2665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}