{"id":7159,"date":"2021-01-08T08:12:55","date_gmt":"2021-01-08T08:12:55","guid":{"rendered":"https:\/\/www.fambach.net\/?p=7159"},"modified":"2021-01-08T12:56:06","modified_gmt":"2021-01-08T12:56:06","slug":"espressif-idf-menuconfig","status":"publish","type":"post","link":"https:\/\/www.fambach.net\/en\/espressif-idf-menuconfig\/","title":{"rendered":"Espressif IDF \u2013 Menuconfig"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_73 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Grundsatzliches\" title=\"Grunds\u00e4tzliches\">Grunds\u00e4tzliches<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Ausgang\" title=\"Ausgang\">Ausgang<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Eingang\" title=\"Eingang\">Eingang<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Fazit\" title=\"Conclusion\">Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Verwandte_Beitrage\" title=\"Related Posts\">Related Posts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Quellen\" title=\"Sources\">Sources<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>Eine der sch\u00f6nen Erungenschaften der IDF ist die Men\u00fc gesteuerte Konfiguration. Noch sch\u00f6ner finde ich, dass eigenen Konfiguratiospunkte erstellt werden k\u00f6nnen. Diese werden dann automatisch in das Haupt Men\u00fc  eingeh\u00e4ngt. Vorab:<\/p>\n\n\n\n<ul id=\"block-3dde12cd-cce1-40f1-a48a-a1733b32ddea\"><li>Die Biliothek &#8222;esp_system.h&#8220; wird im Quellcode ben\u00f6tigt sonst klappts nicht<\/li><li>Nach \u00c4nderungen am Men\u00fc ein idf.py clean durchf\u00fchren<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"646\" height=\"337\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_29_05.jpg\" alt=\"\" class=\"wp-image-7077\"\/><\/figure>\n\n\n\n<p>Zur Erstellung solch eines Konfigurationspunktes nehme ich das Programm aus dem Beipiel <a href=\"#Konsolenausgabe\" data-type=\"internal\" data-id=\"#Konsolenausgabe\">Konsolenausgabe<\/a> und ersetze den Text durch einen Konfigruationspunkt. Benannt werden diese grunds\u00e4tzlich mit CONFIG_ , gefolgt von einen sprechenden Namen.<\/p>\n\n\n\n<script>\nvar project = \"sfambach\/espressif-idf\/tree\/master\/L5_Menuconfig\";\nvar file = \"\/main\/main.c\";\nvar test = project + file;\nvar startAt = 16;\nvar endAt = 0;\n\n\ndocument.write('<a href=\"https:\/\/github.com\/'+project+'\" target=\"_blank\">Link zu Git<\/a>');\ndocument.write('<div><a href=\"https:\/\/downgit.github.io\/#\/home?url=https:\/\/github.com\/'+project+'\" target=\"_blank\">Download des Projektes mit DownGit<\/a><\/div>');\n\ndocument.write('<div style=\"font-size:1vw\">');\ndocument.write('<script src=\"https:\\\/\\\/gist-it.appspot.com\\\/github.com\\\/'+test+'\\?slice='+startAt+':'+endAt+'\"><\\\/script>');\ndocument.write('<\/div>');\n<\/script>\n\n\n\n<p>Damit diese Konfiguration im Menuconfig angezeigt wird, muss noch eine Datei \"Kconfig.projbuild\" erstellt werden. Diese enth\u00e4lt zus\u00e4tzliche Informationen zum Konfigurationspunkt:<\/p>\n\n\n\n<script>\nvar project = \"sfambach\/espressif-idf\/tree\/master\/L5_Menuconfig\";\nvar file = \"\/main\/Kconfig.projbuild\";\nvar test = project + file;\nvar startAt = 16;\nvar endAt = 0;\n\n\n\/*document.write('<a href=\"https:\/\/github.com\/'+project+'\" target=\"_blank\">Link zu Git<\/a>');\ndocument.write('<div><a href=\"https:\/\/downgit.github.io\/#\/home?url=https:\/\/github.com\/'+project+'\" target=\"_blank\">Download des Projektes mit DownGit<\/a><\/div>');*\/\n\ndocument.write('<div style=\"font-size:1vw\">');\ndocument.write('<script src=\"https:\\\/\\\/gist-it.appspot.com\\\/github.com\\\/'+test+'\\?slice='+startAt+':'+endAt+'\"><\\\/script>');\ndocument.write('<\/div>');\n<\/script>\n\n\n\n<p>nun einmal Menuconfig Starten (&gt;idf.py menuconfig) :<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"352\" height=\"264\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_52_42.jpg\" alt=\"\" data-id=\"7084\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_52_42.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7084\" class=\"wp-image-7084\"\/><figcaption class=\"blocks-gallery-item__caption\">Eigenen Men\u00fcpunkt ausw\u00e4hlen<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"425\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_53_34.jpg\" alt=\"\" data-id=\"7079\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_53_34.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7079\" class=\"wp-image-7079\"\/><figcaption class=\"blocks-gallery-item__caption\">Konifguration ausw\u00e4hlen<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"292\" height=\"152\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_58_11.jpg\" alt=\"\" data-id=\"7078\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_58_11.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7078\" class=\"wp-image-7078\"\/><figcaption class=\"blocks-gallery-item__caption\">Konfigurations Text \u00e4ndern<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"528\" height=\"196\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-16_13_12.jpg\" alt=\"\" data-id=\"7085\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-16_13_12.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7085\" class=\"wp-image-7085\"\/><figcaption class=\"blocks-gallery-item__caption\">Ge\u00e4nderter Text<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Noch bauen und schauen wie es aussieht (idf.py build flash -p COM7 monitor )<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"479\" height=\"163\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-17_04_42.jpg\" alt=\"\" class=\"wp-image-7086\"\/><figcaption>Ausgabe mit konfiguriertem Text.<\/figcaption><\/figure>\n\n\n\n<p>Es gibt nicht nur die M\u00f6glichkeit Text zu formatieren, Zahlen und Auswahlisten sind ebenfalls m\u00f6glich. Hier ein paar Beipiele<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>menu \"Example Configuration\"\nconfig MOSI_GPIO\n\t\tint \"MOSI GPIO number\"\n\t\trange 0 46\n\t\tdefault 23 if IDF_TARGET_ESP32\n\t\tdefault 35 if IDF_TARGET_ESP32S2\n\t\thelp\n\t\t    GPIO number (IOxx) to SPI MOSI. ...\n\nconfig INVERSION\n\t\tbool \"Enable Display Inversion\"\n\t\tdefault false\n\t\thelp\n\t\t    Enable Display Inversion.\n\t\t\nchoice\n        bool \"Mesh AP Authentication Mode\"\n        default WIFI_AUTH_WPA2_PSK\n        help\n            Authentication mode.\n\n        config WIFI_AUTH_OPEN\n            bool \"WIFI_AUTH_OPEN\"\n        config WIFI_AUTH_WPA_PSK\n            bool \"WIFI_AUTH_WPA_PSK\"\n        config WIFI_AUTH_WPA2_PSK\n            bool \"WIFI_AUTH_WPA2_PSK\"\n        config WIFI_AUTH_WPA_WPA2_PSK\n            bool \"WIFI_AUTH_WPA_WPA2_PSK\"\nendchoice\n\nconfig MESH_GLOBAL_DNS_IP\n        hex \"Global DNS\"\n        depends on MESH_USE_GLOBAL_DNS_IP\n        default 0x08080808\n        help\n            The IP address of global DNS server that is used\n            for internal IP subnet formed by the mesh network\n            if MESH_USE_GLOBAL_DNS_IP is enabled.\n            Note: The IP address is in platform (not network)\n            format.\n...\n\nendmenu<\/code><\/pre>\n\n\n\n<p>Es sind auch Abh\u00e4ngigkeiten zwischen Kondifgurations Punkten m\u00f6glich. Diese werden mit dem Schl\u00fcsselw\u00f6rtern \"depends on\" gefolgt von einem oder mehreren Konfigurationsname mit logischen verkn\u00fcpfungen. Logische Verkn\u00fcpfungen sind || (oder) oder &amp;&amp; (und).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>... \nconfig SW1_PIN\n\t\tint \"SW1 pin\"\n\t\trange 0 39\n        default 36\n\t\tdepends on SW1_ENABLE\n\t\thelp \n\t\t\tSwitch 1 Gpio pin\nconfig SW2_ENABLE\n\t\tbool \"SW2 Enable\"\n        default false\n\t\thelp \n\t\t\tEnable Switch 2\nconfig SW2_PIN\n\t\tint \"SW2 pin\"\n\t\trange 0 39\n        default 35\n\t\tdepends on SW2_ENABLE\n\t\thelp \n\t\t\tSW2 Gpio pin\nconfig LONG_PRESS_ENABLED\n\t\tbool \"Long press enabled\"\n        default false\n\t\tdepends on (SW1_ENABLE || SW2_ENABLE)\n\t\thelp \n\t\t   If this is enabled the system \n\t\t   distinguishes between long pressed buttons\n                   and short pressed buttons\n\tconfig LONG_PRESS_TIME_MS\n\t\tint \"Long press time ms\"\n\t\trange 1000 8000\n        default 2000\n\t\tdepends on LONG_PRESS_ENABLED\n\t\thelp \n\t\t  How long should the a button be pressed to be\n                  marked as a long pess\tif it is not long pressed \n                  it is a short press\n...\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Die Idee Konfigurationen auszulagern ist nicht neu. Sie aber mit eine Men\u00fc zu versehen finde ich sehr charmant gel\u00f6st.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Verwandte_Beitrage\"><\/span>Related Posts<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/www.fambach.net\/en\/?p=6943\">Hauptbeitrag<\/a><\/p>\n\n\n<div class=\"display-posts-listing\">\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-projekt-erstellen\/\">Espressif IDF \u2013 Create Project<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-konsolenausgabe\/\">Espressif IDF \u2013 Console Output<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-fehlerbehandlung\/\">Espressif IDF \u2013 Error Handling<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-log-nachrichten\/\">Espressif IDF \u2013 Log Messages<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-timer\/\">Espressif IDF \u2013 Timer<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-menuconfig\/\">Espressif IDF \u2013 Menuconfig<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks\/\">Espressif IDF \u2013 Tasks<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\">Espressif IDF \u2013 GPIOs<\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Sources<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/system\/freertos.html#\" target=\"_blank\"><\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/kconfig.html?highlight=config\" target=\"_blank\">IDF - Konfiguration<\/a><\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/kbuild\/kconfig-language.txt\" target=\"_blank\">KConfig Anleitung<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/pypi.org\/project\/kconfiglib\/#kconfig-extensions\" target=\"_blank\" rel=\"noreferrer noopener\">KConfig Erweiterungen<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Eine der sch\u00f6nen Erungenschaften der IDF ist die Men\u00fc gesteuerte Konfiguration. Noch sch\u00f6ner finde ich, dass eigenen Konfiguratiospunkte erstellt werden k\u00f6nnen. Diese werden dann automatisch in das Haupt Men\u00fc eingeh\u00e4ngt. Vorab: Die Biliothek &#8222;esp_system.h&#8220; wird im Quellcode ben\u00f6tigt sonst klappts nicht Nach \u00c4nderungen am Men\u00fc ein idf.py clean durchf\u00fchren Zur Erstellung solch eines Konfigurationspunktes nehme &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\" class=\"read-more-link\">Continue reading <span class=\"screen-reader-text\">\"Espressif IDF &#8211; GPIOs\"<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a>","protected":false},"author":1,"featured_media":7084,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"no","footnotes":""},"categories":[184,188,472,473,496],"tags":[497,148,499,465,474,492,476,500,491],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7159"}],"collection":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/comments?post=7159"}],"version-history":[{"count":3,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7159\/revisions"}],"predecessor-version":[{"id":8172,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7159\/revisions\/8172"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media\/7084"}],"wp:attachment":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media?parent=7159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/categories?post=7159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/tags?post=7159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}