{"id":7263,"date":"2021-01-18T14:16:46","date_gmt":"2021-01-18T14:16:46","guid":{"rendered":"https:\/\/www.fambach.net\/?p=7263"},"modified":"2026-10-15T23:09:26","modified_gmt":"2026-10-15T23:09:26","slug":"espressif-idf-tasks-2","status":"publish","type":"post","link":"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/","title":{"rendered":"Espressif IDF \u2013 GPIOs"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_89 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\" >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\" >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\" >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\" >Fazit<\/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\" >Verwandte Beitr\u00e4ge<\/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\" >Quellen<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">Die meisten GPIO Pins des ESP32 sind, bis auf ein paar Ausnahmen, sowohl Eing\u00e4nge als auch Ausg\u00e4nge (siehe hierzu auch das entsprechende Datenblatt). Wie diese digital angesteuert werden, zeigen die n\u00e4chsten Beispiele. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"grundsaetzliches\"><span class=\"ez-toc-section\" id=\"Grundsatzliches\"><\/span>Grunds\u00e4tzliches<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sind die Pins als digital konfiguriert, k\u00f6nnen sie jeweils den Wert 1= true oder 0= false annehmen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ausgang\"><span class=\"ez-toc-section\" id=\"Ausgang\"><\/span>Ausgang<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hier das Blinkbeispiel mit dem periodischen Timer aus der vorangegangenen \u00dcbung. Nur wird jetzt eine LED geschaltet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als bin\u00e4ren Ausgang konfigurieren<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpio_set_direction(&lt;LED_PIN&gt;, GPIO_MODE_OUTPUT);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wert setzen<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpio_set_level(&lt;LED_PIN&gt;, &lt;0|1&gt;);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quellcode <code>main.c<\/code> (<span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/github.com\/sfambach\/espressif-idf\/tree\/master\/L7_GPIO_OUTPUT\/main\" class=\"ub-content-link__anchor\">GitHub<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span>)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/** idf example\n *\n * Timed gpio example (Blink like application)\n *\n * Some parts are copied from the official idf examples found on \n * https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/\n * \n * Modified by SteFam @ http:\/\/www.fambach.net\n *\n * GPLv3 \n * Blah blah blah, free to use. \n * I invested some time and money in those examples if you want to delete this header \n * please do not forget to mention at least my website, thanks!\n*\/\n\n\n#include &lt;stdio.h&gt;\n#include \"freertos\/FreeRTOS.h\"\n#include \"freertos\/task.h\"\n#include \"driver\/gpio.h\"\n#include \"sdkconfig.h\"\n#include \"esp_log.h\"\n\nstatic const char* TAG =\"L6\";\nstatic const int LED_PIN = CONFIG_LED_PIN;\nstatic const int DELAY   = CONFIG_LED_BLINK_DELAY_MS;\n\n\n\/\/ method declaration for timer callbacks\nstatic void timer_callback(void* arg);\n\nvoid app_main(void)\n{\n\t\/\/* setup gpio pins\n\t gpio_reset_pin(LED_PIN);\n    \/* Set the GPIO as a push\/pull output *\/\n    gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);\n\t\n\t\n\t\/\/* setup timer\n\t\n\t\/\/** create arguments for timer task\n\tconst esp_timer_create_args_t periodic_timer_args = {\n\t\t\t\/* name of the callback function defined before *\/\n\t\t\t.callback = &amp;timer_callback,\n\t\t\t\/* name is optional, but may help identify the timer when debugging *\/\n\t\t\t.name = \"periodic\"\n    };\n\t\n\t\/\/** create time itself\n\tesp_timer_handle_t periodic_timer;\n\tESP_ERROR_CHECK(esp_timer_create(&amp;periodic_timer_args, &amp;periodic_timer));\t\n\t\n\t\/\/** start the timer periodic\n\tESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, DELAY*1000));\n\t\n\t\/\/** for a single shot do this\n\t\/\/ ESP_ERROR_CHECK(esp_timer_start_single(periodic_timer, DELAY*1000));\n\t\n}\n\nstatic bool curState = 0;\nstatic void timer_callback(void* arg)\n{\n\tcurState = !curState;\n\tESP_LOGV(TAG,\"Current LED State = %s\", (curState?\"TRUE\":\"FALSE\"));\n\tgpio_set_level(LED_PIN, !curState);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"eingang\"><span class=\"ez-toc-section\" id=\"Eingang\"><\/span>Eingang<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mein Code hierzu orientiert sich sehr stark am Beispiel Projekt \u201eexamples\/peripherals\/gpio\/generic_gpio\u201c der IDF. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Beispiel ist leider etwas umfangreicher geworden, da es mit zwei essenziellen Mechanismen arbeitet. Zum einen mit den Interrupts und zum anderen mit einem Task. Die Tasks habe ich kurz zuvor eingef\u00fchrt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als bin\u00e4ren Eingang  konfigurieren<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpio_set_direction(&lt;LED_PIN&gt;, GPIO_MODE_INPUT);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wert abfragen<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bool gpio_get_level(&lt;PIN&gt;);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Interrupt aktivieren<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/Interupt Typ setzten\ngpio_set_intr_type(\n     &lt;PIN&gt;, \n     &lt;\n      GPIO_INTR_DISABLE \/\/ deaktiviert\n      GPIO_INTR_POSEDGE\r \/\/ Steigende Flanke\n      GPIO_INTR_NEGEDGE\r \/\/ Fallender Flanke\n\r      GPIO_INTR_ANYEDGE\r \/\/ Beider Flanken\n      GPIO_INTR_LOW_LEVEL\r \/\/ Eingang Low\n      GPIO_INTR_HIGH_LEVEL \/\/ Eingang High\n     &gt;\n);\r\n\r\n\/\/ Interupt f\u00fcr Pin aktivieren\ngpio_intr_enable(&lt;PIN&gt;);\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Beispielprogramm<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vor der Verwendung des Beispielprogramms menuconfig nicht vergessen, die Schalter k\u00f6nnen einzeln aktiviert werden. Zus\u00e4tzlich kann die Kurz\/Lang Unterscheidung eingeschaltet werden. Diese pr\u00fcft, ob ein Knopf lange oder kurz gedr\u00fcckt wurde:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"363\" height=\"190\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-20-09_41_03.jpg\" alt=\"\" class=\"wp-image-7321\" srcset=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-20-09_41_03.jpg 363w, https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-20-09_41_03-300x157.jpg 300w, https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-20-09_41_03-18x9.jpg 18w\" sizes=\"auto, (max-width: 599px) calc(100vw - 50px), (max-width: 767px) calc(100vw - 70px), (max-width: 991px) 429px, (max-width: 1199px) 637px, 354px\"><figcaption>Aktivierung \/ Konfiguration der Schalter<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Quellcode <code>main.c<\/code> (<span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/github.com\/sfambach\/espressif-idf\/tree\/master\/L7_GPIO_INPUT\/main\" class=\"ub-content-link__anchor\">GitHub<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span>)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/** idf example\n *\n * Timed gpio input example with three switches\n *\n * Some parts are copied from the official idf examples found on \n * https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/\n * \n * Modified by SteFam @ http:\/\/www.fambach.net\n *\n * GPLv3 \n * Blah blah blah, free to use. \n * I invested some time and money in those examples if you want to delete this header \n * please do not forget to mention at least my website, thanks!\n*\/\n\n\n#include &lt;stdio.h&gt;\n#include \"freertos\/FreeRTOS.h\"\n#include \"freertos\/task.h\"\n#include \"freertos\/queue.h\"\n#include \"driver\/gpio.h\"\n#include \"sdkconfig.h\"\n#include \"esp_log.h\"\n\n#define ESP_INTR_FLAG_DEFAULT 0\nstatic const char* TAG = \"L6_INPUT\";\nstatic bool enabled[] = {CONFIG_SW0_ENABLE,CONFIG_SW1_ENABLE,CONFIG_SW2_ENABLE};\nstatic int pin[] = {CONFIG_SW0_PIN,CONFIG_SW1_PIN,CONFIG_SW2_PIN};\nstatic bool debounce[] = {true,true,true};\n#ifdef CONFIG_LONG_PRESS_ENABLED\nstatic uint64_t press_time[] = {0,0,0};\n#endif\nstatic xQueueHandle gpio_evt_queue = NULL;\n\n\nstatic void IRAM_ATTR gpio_isr_handler(void* arg)\n{\n\t\/\/ get argument(s)\n    uint32_t index = (uint32_t) arg;\n\t\n\t\/\/ create an event\n\txQueueSendFromISR(gpio_evt_queue, &amp;index, NULL);\n}\n\n\/** button tasks \n *  check for gpio events \n*\/\nstatic void button_task(void* arg)\n{\n    uint32_t index; \/\/ =(uint32_t) arg;\n\t    \n\twhile(true) {\n\n        if(xQueueReceive(gpio_evt_queue, &amp;index, portMAX_DELAY)) {\n\t\t\t\/\/printf(\"GPIO[%d] intr, val: %d\\n\", pin[index], gpio_get_level(pin[index]));\n\t\t\tbool level = gpio_get_level(pin[index]);\n\t\t\tif(debounce[index] != level){\n\t\t\t\n\t\t\t\tdebounce[index] = level;\n\t\t\t\tif(level){\n\t\t\t\t\t\n#ifdef CONFIG_LONG_PRESS_ENABLED\n\t\t\t\t\tint32_t elapsed_time= (int32_t)(esp_timer_get_time()-press_time[index]);\n\t\t\t\t\telapsed_time \/=1000;\n\t\t\t\t\t\/\/elapsed_time -= CONFIG_LONG_PRESS_TIME_MS; \/\/ if &gt; 0 a long press was done\n\t\t\t\t\tESP_LOGD(TAG,\"GPIO[%d] OFF ms[%i] %spress \\n\", pin[index], elapsed_time, (elapsed_time - CONFIG_LONG_PRESS_TIME_MS&gt; 0? \"long\" : \"short\"));\n\t\t\t\t\tpress_time[index]=0;\n#else \n\t\t\t\t\tESP_LOGD(TAG,\"GPIO[%d] OFF \\n\", pin[index]);\n#endif\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tESP_LOGD(TAG,\"GPIO[%d] ON\\n\", pin[index]);\n\t\t\t\t\t\n#ifdef CONFIG_LONG_PRESS_ENABLED\n\t\t\t\t\tpress_time[index]=esp_timer_get_time();\n#endif\n\t\t\t\t}\n\n\t\t\t}else {\n\t\t\t\t\/\/ESP_LOGD(TAG,\"Bounce %i\",pin[index]);\n\t\t\t}\n\t\t} else {\n\t\t\tESP_LOGD(TAG, \"Timeout waiting for Interrupt, go on next round\");\t\t\t\n\t\t}\n\t}\n}\n\n\nvoid app_main(void)\n{\n\t\/\/install gpio isr service\n\tESP_ERROR_CHECK(gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT));\n\t\n\t\t\n\t\/\/* init switches and set interupt routines\n\tfor(int i =0; i &lt;3;i++){\n\t\tif(enabled[i]){\n\t\t\t\/\/ set up pin \n\t\t\tESP_LOGI(TAG,\"SW%i Activated - Pin =%i \",i,pin[i]);\n\t\t\tESP_ERROR_CHECK(gpio_reset_pin(pin[i]));\n\t\t\t\n\t\t\tESP_ERROR_CHECK(gpio_set_direction(pin[i], GPIO_MODE_INPUT));\n\t\t\t\n\t\t\t\/\/change gpio intrrupt type for one pin\n\t\t\tESP_ERROR_CHECK(gpio_set_intr_type(pin[i], GPIO_INTR_ANYEDGE));\n\n\t\t\t\/\/ enable interupt\n\t\t\tESP_ERROR_CHECK(gpio_intr_enable(pin[i]));\n\t\t\t\n\t\t\t\/\/ set level\n\t\t\tESP_ERROR_CHECK(gpio_intr_enable(pin[i]));\n\t\t\t\n\t\t\t\/\/ pull mode \n\t\t\tESP_ERROR_CHECK(gpio_set_pull_mode(pin[i],GPIO_PULLDOWN_ONLY));\n\t\t\n\t\t\t\/\/ discrete functions for pull mode\n\t\t\t\/\/ enable pullup\n\t\t\t\/\/ESP_ERROR_CHECK(gpio_pullup_en(pin[i]));\n\t\t\t\n\t\t\t\/\/ disable pulldown\n\t\t\t\/\/ESP_ERROR_CHECK(gpio_pulldown_dis(pin[i]));\n\n\t\t\t\t   \n\t\t\t\/\/hook isr handler for specific gpio pin\n\t\t\tESP_ERROR_CHECK(gpio_isr_handler_add(pin[i], gpio_isr_handler, (void*)i));\n\t\n\t\t}\n\t\n\t}\n\t\n\t\/\/create a queue to handle gpio event from isr\n    gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));\n\t\n    \/\/start gpio task to handle the buttons\n    xTaskCreate(button_task, \"button_task\", 2048, NULL, 10, NULL);\n\t\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fazit\"><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Fazit<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GPIOs sind einfach zu bedienen. Die Handhabung \u00e4hnelt der Arduino GUI. Kommen Interrupts dazu, wird der Code schnell komplexer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"verwandte-beitraege\"><span class=\"ez-toc-section\" id=\"Verwandte_Beitrage\"><\/span>Verwandte Beitr\u00e4ge<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ub-content-link ub-content-link--broken ub-content-link--status-after is-broken\"><a href=\"https:\/\/www.fambach.net\/?p=6943\" class=\"ub-content-link__anchor\" title=\"This link appears to be broken.\">Hauptbeitrag<\/a><span class=\"ub-status ub-status--broken\" title=\"Link status: Broken\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Broken<\/span><\/span><\/span><\/p>\n\n\n<div class=\"display-posts-listing\"><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-projekt-erstellen\/\">Espressif IDF \u2013 Projekt erstellen<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-konsolenausgabe\/\">Espressif IDF \u2013 Konsolenausgabe<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-fehlerbehandlung\/\">Espressif IDF \u2013 Fehlerbehandlung<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-log-nachrichten\/\">Espressif IDF \u2013 Lognachrichten<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-timer\/\">Espressif IDF \u2013 Timer<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-menuconfig\/\">Espressif IDF \u2013 Menuconfig<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks\/\">Espressif IDF \u2013 Tasks<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\">Espressif IDF \u2013 GPIOs<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quellen\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Quellen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/index.html\" target=\"_blank\" class=\"ub-content-link__anchor\">IDF \u2013 Programming Guide<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/peripherals\/gpio.html\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ub-content-link__anchor\">IDF \u2013 GPIO &amp; RTC GPIO<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Die meisten GPIO Pins des ESP32 sind, bis auf ein paar Ausnahmen, sowohl Eing\u00e4nge als auch Ausg\u00e4nge (siehe hierzu auch das entsprechende Datenblatt). Wie diese digital angesteuert werden, zeigen die n\u00e4chsten Beispiele. Grunds\u00e4tzliches Sind die Pins als digital konfiguriert, k\u00f6nnen sie jeweils den Wert 1= true oder 0= false annehmen. Ausgang Hier das Blinkbeispiel mit &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\" class=\"read-more-link\">Carry on reading <span class=\"screen-reader-text\">\"Espressif IDF &#8211; GPIOs\"<\/span> <span class=\"meta-nav\">\u2192<\/span><\/a>","protected":false},"author":1,"featured_media":7328,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"no","footnotes":""},"categories":[188,472,473,496],"tags":[465,474,498,492,476,493,491],"class_list":["post-7263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp-32","category-esp32-s2","category-espressif-idf","category-how-to","tag-espressif","tag-espressif-idf","tag-framework","tag-howto","tag-idf","tag-lehrgang","tag-tutorial","penguin-post","penguin-post-not-sticky"],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7263","targetHints":{"allow":["GET"]}}],"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=7263"}],"version-history":[{"count":20,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7263\/revisions"}],"predecessor-version":[{"id":19666,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7263\/revisions\/19666"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media\/7328"}],"wp:attachment":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media?parent=7263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/categories?post=7263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/tags?post=7263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}