├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── main ├── app_main.c └── component.mk └── sdkconfig.defaults /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | 34 | # build 35 | build/ 36 | .settings 37 | .config 38 | *.o 39 | *.pyc 40 | *.d 41 | *.old 42 | *.cproject 43 | *.old 44 | sdkconfig 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 InfiniteYuan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := lvgl_mp3_example 7 | #If LVGL_COMPONENT_PATH is not defined, use relative path as default value 8 | LVGL_COMPONENT_PATH ?= $(abspath $(shell pwd)/../) 9 | 10 | ADF_VER := $(shell cd ${ADF_PATH} && git describe --always --tags --dirty) 11 | EXTRA_COMPONENT_DIRS += $(ADF_PATH)/components/ 12 | CPPFLAGS := -D ADF_VER=\"$(ADF_VER)\" 13 | 14 | include $(LVGL_COMPONENT_PATH)/components/component_conf.mk 15 | include $(IDF_PATH)/make/project.mk -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esp32-MP3 2 | 3 | esp32 MP3 base on littlevgl 4 | 5 | ## Compile 6 | 7 | ADF commit id: e1aee3c2729775aca77cb35132bc44d64c7862ea 8 | 9 | esp32-lvgl-gui [MP3 example](https://github.com/InfiniteYuan1/esp32-lvgl-gui/tree/master/mp3_example) 10 | 11 | ## Video 12 | 13 | [Twitter Video](https://twitter.com/InfiniteYuan/status/1063739310275350528) 14 | -------------------------------------------------------------------------------- /main/app_main.c: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2018 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | /* component includes */ 16 | #include 17 | 18 | /* freertos includes */ 19 | #include "freertos/FreeRTOS.h" 20 | #include "freertos/task.h" 21 | #include "freertos/timers.h" 22 | #include "freertos/semphr.h" 23 | #include "freertos/queue.h" 24 | #include "freertos/event_groups.h" 25 | #include "esp_freertos_hooks.h" 26 | 27 | #include "sdkconfig.h" 28 | 29 | /* lvgl includes */ 30 | #include "iot_lvgl.h" 31 | 32 | /* lvgl calibration includes */ 33 | #include "lv_calibration.h" 34 | 35 | /* esp includes */ 36 | #include "esp_log.h" 37 | #include "esp_err.h" 38 | #include "ff.h" 39 | #include "esp_vfs.h" 40 | #include "esp_vfs_fat.h" 41 | #include "driver/sdmmc_host.h" 42 | #include "driver/sdspi_host.h" 43 | #include "sdmmc_cmd.h" 44 | 45 | /* Param Include */ 46 | #include "iot_param.h" 47 | #include "nvs_flash.h" 48 | 49 | #include "audio_element.h" 50 | #include "audio_pipeline.h" 51 | #include "audio_event_iface.h" 52 | #include "audio_mem.h" 53 | #include "audio_common.h" 54 | #include "i2s_stream.h" 55 | #include "mp3_decoder.h" 56 | #include "fatfs_stream.h" 57 | #include "esp_peripherals.h" 58 | #include "periph_sdcard.h" 59 | 60 | // #define LVGL_TEST_THEME 61 | #define LVGL_EXAMPLE 62 | 63 | #define CONTROL_CURRENT -1 64 | #define CONTROL_NEXT -2 65 | #define CONTROL_PREV -3 66 | 67 | static TimerHandle_t lvgl_timer; 68 | static TimerHandle_t lvgl_tick_timer; 69 | 70 | static char directory[20][100]; 71 | static uint8_t filecount = 0; 72 | 73 | #ifdef LVGL_EXAMPLE 74 | static const char *TAG = "example_lvgl"; 75 | #endif 76 | 77 | static audio_pipeline_handle_t pipeline; 78 | static audio_element_handle_t i2s_stream_writer, mp3_decoder, fatfs_stream_reader; 79 | static lv_obj_t *current_music; 80 | static lv_obj_t *button[3]; 81 | static lv_obj_t *img[3]; 82 | static lv_obj_t *list_music[20]; 83 | void *img_src[] = {SYMBOL_PREV, SYMBOL_PLAY, SYMBOL_NEXT, SYMBOL_PAUSE}; 84 | 85 | //lv_task_handler should be called periodically around 10ms 86 | static void IRAM_ATTR lvgl_task_time_callback(TimerHandle_t xTimer) 87 | { 88 | lv_task_handler(); 89 | } 90 | 91 | static void IRAM_ATTR lv_tick_task_callback(TimerHandle_t xTimer) 92 | { 93 | lv_tick_inc(1); 94 | } 95 | 96 | static FILE *get_file(int next_file) 97 | { 98 | static FILE *file; 99 | static int file_index = 1; 100 | 101 | if (next_file != CONTROL_CURRENT){ 102 | if (next_file == CONTROL_NEXT){ 103 | // advance to the next file 104 | if (++file_index > filecount - 1) { 105 | file_index = 0; 106 | } 107 | } else if (next_file == CONTROL_PREV){ 108 | // advance to the prev file 109 | if (--file_index < 0) { 110 | file_index = filecount - 1; 111 | } 112 | } else if (next_file >=0 && next_file < filecount){ 113 | file_index = next_file; 114 | } 115 | if (file != NULL) { 116 | fclose(file); 117 | file = NULL; 118 | } 119 | ESP_LOGI(TAG, "[ * ] File index %d", file_index); 120 | } 121 | // return a handle to the current file 122 | if (file == NULL) { 123 | lv_label_set_text(current_music, strstr(directory[file_index], "d/") + 2); 124 | file = fopen(directory[file_index], "r"); 125 | if (!file) { 126 | ESP_LOGE(TAG, "Error opening file"); 127 | return NULL; 128 | } 129 | } 130 | return file; 131 | } 132 | 133 | #ifdef LVGL_EXAMPLE 134 | static lv_res_t audio_next_prev(lv_obj_t *obj) 135 | { 136 | if (obj == button[0]) { // prev song 137 | ESP_LOGI(TAG, "[ * ] [Set] touch tap event"); 138 | // audio_pipeline_stop(pipeline); 139 | // audio_pipeline_wait_for_stop(pipeline); 140 | audio_pipeline_terminate(pipeline); 141 | ESP_LOGI(TAG, "[ * ] Stopped, advancing to the prev song"); 142 | get_file(CONTROL_PREV); 143 | // audio_element_set_uri(fatfs_stream_reader, directory[0]); 144 | audio_pipeline_run(pipeline); 145 | lv_img_set_src(img[1], img_src[3]); 146 | } else if (obj == button[1]) { 147 | 148 | } else if (obj == button[2]) { // next song 149 | ESP_LOGI(TAG, "[ * ] [Set] touch tap event"); 150 | // audio_pipeline_stop(pipeline); 151 | // audio_pipeline_wait_for_stop(pipeline); 152 | audio_pipeline_terminate(pipeline); 153 | ESP_LOGI(TAG, "[ * ] Stopped, advancing to the next song"); 154 | // audio_element_set_uri(fatfs_stream_reader, directory[1]); 155 | get_file(CONTROL_NEXT); 156 | audio_pipeline_run(pipeline); 157 | lv_img_set_src(img[1], img_src[3]); 158 | } 159 | ESP_LOGI(TAG, "Hello"); 160 | return LV_RES_OK; 161 | } 162 | 163 | static lv_res_t audio_control(lv_obj_t *obj) 164 | { 165 | audio_element_state_t el_state = audio_element_get_state(i2s_stream_writer); 166 | switch (el_state) { 167 | case AEL_STATE_INIT : 168 | lv_img_set_src(img[1], img_src[3]); 169 | audio_pipeline_run(pipeline); 170 | break; 171 | case AEL_STATE_RUNNING : 172 | lv_img_set_src(img[1], img_src[1]); 173 | audio_pipeline_pause(pipeline); 174 | break; 175 | case AEL_STATE_PAUSED : 176 | lv_img_set_src(img[1], img_src[3]); 177 | audio_pipeline_resume(pipeline); 178 | break; 179 | default : 180 | break; 181 | } 182 | return LV_RES_OK; 183 | } 184 | 185 | //"Night theme\nAlien theme\nMaterial theme\nZen theme\nMono theme\nNemo theme" 186 | static lv_res_t theme_change_action(lv_obj_t * roller) 187 | { 188 | lv_theme_t *th; 189 | switch (lv_ddlist_get_selected(roller)) 190 | { 191 | case 0: 192 | th = lv_theme_night_init(100, NULL); 193 | break; 194 | 195 | case 1: 196 | th = lv_theme_alien_init(100, NULL); 197 | break; 198 | 199 | case 2: 200 | th = lv_theme_material_init(100, NULL); 201 | break; 202 | 203 | case 3: 204 | th = lv_theme_zen_init(100, NULL); 205 | break; 206 | 207 | case 4: 208 | th = lv_theme_mono_init(100, NULL); 209 | break; 210 | 211 | case 5: 212 | th = lv_theme_nemo_init(100, NULL); 213 | break; 214 | 215 | default: 216 | th = lv_theme_default_init(100, NULL); 217 | break; 218 | } 219 | lv_theme_set_current(th); 220 | return LV_RES_OK; 221 | } 222 | 223 | static lv_res_t play_list(lv_obj_t *obj) 224 | { 225 | for (uint8_t i = 0; i < 20; i++){ 226 | if (obj == list_music[i]) { 227 | audio_pipeline_terminate(pipeline); 228 | get_file(i); 229 | audio_pipeline_run(pipeline); 230 | lv_img_set_src(img[1], img_src[3]); 231 | 232 | break; 233 | } 234 | } 235 | return LV_RES_OK; 236 | } 237 | 238 | static void littlevgl_demo(void) 239 | { 240 | lv_obj_t *scr = lv_obj_create(NULL, NULL); 241 | lv_scr_load(scr); 242 | 243 | lv_theme_t *th = lv_theme_zen_init(100, NULL); 244 | // lv_theme_t *th = lv_theme_mono_init(100, NULL); 245 | lv_theme_set_current(th); 246 | 247 | lv_obj_t *tabview = lv_tabview_create(lv_scr_act(), NULL); 248 | 249 | lv_obj_t *tab1 = lv_tabview_add_tab(tabview, SYMBOL_AUDIO); 250 | lv_obj_t *tab2 = lv_tabview_add_tab(tabview, SYMBOL_LIST); 251 | lv_obj_t *tab3 = lv_tabview_add_tab(tabview, SYMBOL_SETTINGS); 252 | lv_tabview_set_tab_act(tabview, 0, false); 253 | 254 | // lv_theme_t *th1 = lv_theme_get_current(); 255 | // lv_style_t *cont_style = th1->cont; 256 | // cont_style->body.border.width = 0; 257 | // lv_obj_set_style(cont, &cont_style); 258 | 259 | lv_obj_t *cont = lv_cont_create(tab1, NULL); 260 | current_music = lv_label_create(cont, NULL); 261 | lv_label_set_long_mode(current_music, LV_LABEL_LONG_ROLL); 262 | lv_obj_set_width(current_music, 200); 263 | lv_obj_align(current_music, cont, LV_ALIGN_IN_TOP_MID, 0, 20); /*Align to center*/ 264 | lv_label_set_text(current_music, strstr(directory[1], "d/") + 2); 265 | lv_obj_set_pos(current_music, 50, 20); 266 | 267 | lv_obj_set_size(cont, LV_HOR_RES - 20, LV_VER_RES - 85); 268 | lv_cont_set_fit(cont, false, false); 269 | for (uint8_t i = 0; i < 3; i++) { 270 | button[i] = lv_btn_create(cont, NULL); 271 | lv_obj_set_size(button[i], 50, 50); 272 | img[i] = lv_img_create(button[i], NULL); 273 | lv_img_set_src(img[i], img_src[i]); 274 | } 275 | lv_obj_align(button[0], cont, LV_ALIGN_IN_LEFT_MID, 35, 20); 276 | // lv_obj_set_pos(button[0], 35, 80); 277 | for (uint8_t i = 1; i < 3; i++) { 278 | lv_obj_align(button[i], button[i - 1], LV_ALIGN_OUT_RIGHT_MID, 40, 0); 279 | } 280 | lv_btn_set_action(button[0], LV_BTN_ACTION_CLICK, audio_next_prev); 281 | lv_btn_set_action(button[1], LV_BTN_ACTION_CLICK, audio_control); 282 | lv_btn_set_action(button[2], LV_BTN_ACTION_CLICK, audio_next_prev); 283 | 284 | lv_obj_t *list = lv_list_create(tab2, NULL); 285 | lv_obj_set_size(list, LV_HOR_RES - 20, LV_VER_RES - 85); 286 | for(uint8_t i = 0; i < filecount; i++) { 287 | list_music[i] = lv_list_add(list, SYMBOL_AUDIO, strstr(directory[i], "d/") + 2, play_list); 288 | } 289 | 290 | lv_obj_t *theme_label = lv_label_create(tab3, NULL); 291 | lv_label_set_text(theme_label, "Theme:"); 292 | 293 | lv_obj_t *theme_roller = lv_roller_create(tab3, NULL); 294 | lv_obj_align(theme_roller, theme_label, LV_ALIGN_OUT_RIGHT_MID, 20, 0); 295 | lv_roller_set_options(theme_roller, "Night theme\nAlien theme\nMaterial theme\nZen theme\nMono theme\nNemo theme"); 296 | lv_roller_set_selected(theme_roller, 1, false); 297 | lv_roller_set_visible_row_count(theme_roller, 3); 298 | lv_ddlist_set_action(theme_roller, theme_change_action); 299 | ESP_LOGI("LvGL", "app_main last: %d", esp_get_free_heap_size()); 300 | } 301 | 302 | static void user_task(void *pvParameter) 303 | { 304 | while (1) { 305 | vTaskDelay(500 / portTICK_PERIOD_MS); 306 | } 307 | } 308 | #endif 309 | 310 | // extern "C" { 311 | 312 | sdmmc_card_t* card; 313 | 314 | void sdmmc_init() 315 | { 316 | ESP_LOGI(TAG, "Initializing SD card"); 317 | ESP_LOGI(TAG, "Using SDMMC peripheral"); 318 | sdmmc_host_t host = SDMMC_HOST_DEFAULT(); 319 | 320 | // To use 1-line SD mode, uncomment the following line: 321 | // host.flags = SDMMC_HOST_FLAG_1BIT; 322 | 323 | // This initializes the slot without card detect (CD) and write protect (WP) signals. 324 | // Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals. 325 | sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); 326 | slot_config.gpio_cd = (gpio_num_t)34; 327 | 328 | // GPIOs 15, 2, 4, 12, 13 should have external 10k pull-ups. 329 | // Internal pull-ups are not sufficient. However, enabling internal pull-ups 330 | // does make a difference some boards, so we do that here. 331 | gpio_set_pull_mode((gpio_num_t)15, GPIO_PULLUP_ONLY); // CMD, needed in 4- and 1- line modes 332 | gpio_set_pull_mode((gpio_num_t)2, GPIO_PULLUP_ONLY); // D0, needed in 4- and 1-line modes 333 | gpio_set_pull_mode((gpio_num_t)4, GPIO_PULLUP_ONLY); // D1, needed in 4-line mode only 334 | gpio_set_pull_mode((gpio_num_t)12, GPIO_PULLUP_ONLY); // D2, needed in 4-line mode only 335 | gpio_set_pull_mode((gpio_num_t)13, GPIO_PULLUP_ONLY); // D3, needed in 4- and 1-line modes 336 | 337 | // Options for mounting the filesystem. 338 | // If format_if_mount_failed is set to true, SD card will be partitioned and 339 | // formatted in case when mounting fails. 340 | esp_vfs_fat_sdmmc_mount_config_t mount_config = { 341 | .format_if_mount_failed = false, 342 | .max_files = 5, 343 | .allocation_unit_size = 16 * 1024 344 | }; 345 | 346 | // Use settings defined above to initialize SD card and mount FAT filesystem. 347 | // Note: esp_vfs_fat_sdmmc_mount is an all-in-one convenience function. 348 | // Please check its source code and implement error recovery when developing 349 | // production applications. 350 | esp_err_t ret = esp_vfs_fat_sdmmc_mount("/sdcard", &host, &slot_config, &mount_config, &card); 351 | 352 | if (ret != ESP_OK) { 353 | if (ret == ESP_FAIL) { 354 | ESP_LOGE(TAG, "Failed to mount filesystem. " 355 | "If you want the card to be formatted, set format_if_mount_failed = true."); 356 | } else { 357 | ESP_LOGE(TAG, "Failed to initialize the card (%s). " 358 | "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret)); 359 | } 360 | return; 361 | } 362 | 363 | // Card has been initialized, print its properties 364 | sdmmc_card_print_info(stdout, card); 365 | } 366 | 367 | void read_content(const char* path, uint8_t *filecount) 368 | { 369 | char nextpath[100]; 370 | struct dirent* de; 371 | DIR* dir = opendir(path); 372 | while (1) { 373 | de = readdir(dir); 374 | if(!de) { 375 | // printf("error\n"); 376 | return; 377 | } else if (de->d_type == DT_REG) { 378 | // printf("f:%s\n",de->d_name); 379 | // if(strcasecmp(de->d_name, "hello.txt") == 0){ 380 | // printf("equal\n"); 381 | // } else { 382 | // printf("not equal\n"); 383 | // } 384 | if (strstr(de->d_name, ".mp3") || strstr(de->d_name, ".MP3") ) { 385 | sprintf(directory[*filecount], "%s/%s", path, de->d_name); 386 | printf("%s\n", directory[*filecount]); 387 | (*filecount)++; 388 | } 389 | } else if (de->d_type == DT_DIR) { 390 | // printf("%s\n",de->d_name); 391 | sprintf(nextpath, "%s/%s", path, de->d_name); 392 | // printf("d:%s\n",nextpath); 393 | // sprintf(directory[*filecount], "%s", de->d_name); 394 | // (*filecount)++; 395 | read_content(nextpath, filecount); 396 | } 397 | } 398 | closedir(dir); 399 | } 400 | 401 | /* 402 | To embed it in the app binary, the mp3 file is named 403 | in the component.mk COMPONENT_EMBED_TXTFILES variable. 404 | */ 405 | 406 | extern const uint8_t adf_music_mp3_start[] asm("_binary_adf_music_mp3_start"); 407 | extern const uint8_t adf_music_mp3_end[] asm("_binary_adf_music_mp3_end"); 408 | 409 | int mp3_music_read_cb(audio_element_handle_t el, char *buf, int len, TickType_t wait_time, void *ctx) 410 | { 411 | static int mp3_pos; 412 | int read_size = adf_music_mp3_end - adf_music_mp3_start - mp3_pos; 413 | if (read_size == 0) { 414 | return AEL_IO_DONE; 415 | } else if (len < read_size) { 416 | read_size = len; 417 | } 418 | memcpy(buf, adf_music_mp3_start + mp3_pos, read_size); 419 | mp3_pos += read_size; 420 | return read_size; 421 | } 422 | 423 | void audio_embeeded_task(void *para) 424 | { 425 | audio_pipeline_handle_t pipeline; 426 | audio_element_handle_t i2s_stream_writer, mp3_decoder; 427 | 428 | esp_log_level_set("*", ESP_LOG_WARN); 429 | esp_log_level_set(TAG, ESP_LOG_INFO); 430 | 431 | ESP_LOGI(TAG, "[ 1 ] Create audio pipeline, add all elements to pipeline, and subscribe pipeline event"); 432 | audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG(); 433 | pipeline = audio_pipeline_init(&pipeline_cfg); 434 | mem_assert(pipeline); 435 | 436 | ESP_LOGI(TAG, "[1.1] Create mp3 decoder to decode mp3 file and set custom read callback"); 437 | mp3_decoder_cfg_t mp3_cfg = DEFAULT_MP3_DECODER_CONFIG(); 438 | mp3_decoder = mp3_decoder_init(&mp3_cfg); 439 | audio_element_set_read_cb(mp3_decoder, mp3_music_read_cb, NULL); 440 | 441 | ESP_LOGI(TAG, "[1.2] Create i2s stream to write data to ESP32 internal DAC"); 442 | i2s_stream_cfg_t i2s_cfg = I2S_STREAM_INTERNAL_DAC_CFG_DEFAULT(); 443 | i2s_cfg.type = AUDIO_STREAM_WRITER; 444 | i2s_stream_writer = i2s_stream_init(&i2s_cfg); 445 | 446 | ESP_LOGI(TAG, "[1.3] Register all elements to audio pipeline"); 447 | audio_pipeline_register(pipeline, mp3_decoder, "mp3"); 448 | audio_pipeline_register(pipeline, i2s_stream_writer, "i2s"); 449 | 450 | ESP_LOGI(TAG, "[1.4] Link it together [mp3_music_read_cb]-->mp3_decoder-->i2s_stream-->[ESP32 DAC]"); 451 | audio_pipeline_link(pipeline, (const char *[]) {"mp3", "i2s"}, 2); 452 | 453 | ESP_LOGI(TAG, "[ 2 ] Setup event listener"); 454 | audio_event_iface_cfg_t evt_cfg = AUDIO_EVENT_IFACE_DEFAULT_CFG(); 455 | audio_event_iface_handle_t evt = audio_event_iface_init(&evt_cfg); 456 | 457 | ESP_LOGI(TAG, "[2.1] Listening event from all elements of pipeline"); 458 | audio_pipeline_set_listener(pipeline, evt); 459 | 460 | ESP_LOGI(TAG, "[ 3 ] Start audio_pipeline"); 461 | audio_pipeline_run(pipeline); 462 | 463 | while (1) { 464 | audio_event_iface_msg_t msg; 465 | esp_err_t ret = audio_event_iface_listen(evt, &msg, portMAX_DELAY); 466 | if (ret != ESP_OK) { 467 | ESP_LOGE(TAG, "[ * ] Event interface error : %d", ret); 468 | continue; 469 | } 470 | 471 | if (msg.source_type == AUDIO_ELEMENT_TYPE_ELEMENT && msg.source == (void *) mp3_decoder 472 | && msg.cmd == AEL_MSG_CMD_REPORT_MUSIC_INFO) { 473 | audio_element_info_t music_info = {0}; 474 | audio_element_getinfo(mp3_decoder, &music_info); 475 | 476 | ESP_LOGI(TAG, "[ * ] Receive music info from mp3 decoder, sample_rates=%d, bits=%d, ch=%d", 477 | music_info.sample_rates, music_info.bits, music_info.channels); 478 | 479 | audio_element_setinfo(i2s_stream_writer, &music_info); 480 | i2s_stream_set_clk(i2s_stream_writer, music_info.sample_rates, music_info.bits, music_info.channels); 481 | continue; 482 | } 483 | /* Stop when the last pipeline element (i2s_stream_writer in this case) receives stop event */ 484 | if (msg.source_type == AUDIO_ELEMENT_TYPE_ELEMENT && msg.source == (void *) i2s_stream_writer 485 | && msg.cmd == AEL_MSG_CMD_REPORT_STATUS && (int) msg.data == AEL_STATUS_STATE_STOPPED) { 486 | break; 487 | } 488 | } 489 | 490 | ESP_LOGI(TAG, "[ 4 ] Stop audio_pipeline"); 491 | audio_pipeline_terminate(pipeline); 492 | 493 | /* Terminate the pipeline before removing the listener */ 494 | audio_pipeline_remove_listener(pipeline); 495 | 496 | /* Make sure audio_pipeline_remove_listener is called before destroying event_iface */ 497 | audio_event_iface_destroy(evt); 498 | 499 | /* Release all resources */ 500 | audio_pipeline_deinit(pipeline); 501 | audio_element_deinit(i2s_stream_writer); 502 | audio_element_deinit(mp3_decoder); 503 | vTaskDelete(NULL); 504 | } 505 | 506 | /* 507 | * Callback function to feed audio data stream from sdcard to mp3 decoder element 508 | */ 509 | static int my_sdcard_read_cb(audio_element_handle_t el, char *buf, int len, TickType_t wait_time, void *ctx) 510 | { 511 | int read_len = fread(buf, 1, len, get_file(CONTROL_CURRENT)); 512 | if (read_len == 0) { 513 | read_len = AEL_IO_DONE; 514 | } 515 | return read_len; 516 | } 517 | 518 | void audio_sdcard_task(void *para) 519 | { 520 | // esp_log_level_set("*", ESP_LOG_WARN); 521 | // esp_log_level_set(TAG, ESP_LOG_INFO); 522 | 523 | ESP_LOGI(TAG, "[ 1 ] Mount sdcard"); 524 | // Initialize peripherals management 525 | esp_periph_config_t periph_cfg = { 0 }; 526 | esp_periph_init(&periph_cfg); 527 | 528 | // Initialize SD Card peripheral 529 | periph_sdcard_cfg_t sdcard_cfg = { 530 | .root = "/sdcard", 531 | .card_detect_pin = 34, //GPIO_NUM_34 532 | }; 533 | esp_periph_handle_t sdcard_handle = periph_sdcard_init(&sdcard_cfg); 534 | // Start sdcard & button peripheral 535 | esp_periph_start(sdcard_handle); 536 | 537 | // Wait until sdcard was mounted 538 | while (!periph_sdcard_is_mounted(sdcard_handle)) { 539 | vTaskDelay(100 / portTICK_PERIOD_MS); 540 | } 541 | 542 | // ESP_LOGI(TAG, "[ 2 ] Start codec chip not use"); 543 | // audio_hal_codec_config_t audio_hal_codec_cfg = AUDIO_HAL_ES8388_DEFAULT(); 544 | // audio_hal_codec_cfg.i2s_iface.samples = AUDIO_HAL_44K_SAMPLES; 545 | // audio_hal_handle_t hal = audio_hal_init(&audio_hal_codec_cfg, 0); 546 | // audio_hal_ctrl_codec(hal, AUDIO_HAL_CODEC_MODE_DECODE, AUDIO_HAL_CTRL_START); 547 | 548 | ESP_LOGI(TAG, "[3.0] Create audio pipeline for playback"); 549 | audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG(); 550 | pipeline = audio_pipeline_init(&pipeline_cfg); 551 | mem_assert(pipeline); 552 | 553 | // ESP_LOGI(TAG, "[3.1] Create fatfs stream to read data from sdcard not use"); 554 | // fatfs_stream_cfg_t fatfs_cfg = FATFS_STREAM_CFG_DEFAULT(); 555 | // fatfs_cfg.type = AUDIO_STREAM_READER; 556 | // fatfs_stream_reader = fatfs_stream_init(&fatfs_cfg); 557 | 558 | // ESP_LOGI(TAG, "[3.2] Create i2s stream to write data to codec chip"); 559 | ESP_LOGI(TAG, "[3.2] Create i2s stream to write data to ESP32 internal DAC"); 560 | i2s_stream_cfg_t i2s_cfg = I2S_STREAM_INTERNAL_DAC_CFG_DEFAULT(); 561 | i2s_cfg.type = AUDIO_STREAM_WRITER; 562 | i2s_stream_writer = i2s_stream_init(&i2s_cfg); 563 | 564 | ESP_LOGI(TAG, "[3.3] Create mp3 decoder to decode mp3 file"); 565 | mp3_decoder_cfg_t mp3_cfg = DEFAULT_MP3_DECODER_CONFIG(); 566 | mp3_decoder = mp3_decoder_init(&mp3_cfg); 567 | audio_element_set_read_cb(mp3_decoder, my_sdcard_read_cb, NULL); 568 | 569 | ESP_LOGI(TAG, "[3.4] Register all elements to audio pipeline"); 570 | // audio_pipeline_register(pipeline, fatfs_stream_reader, "file"); 571 | audio_pipeline_register(pipeline, mp3_decoder, "mp3"); 572 | audio_pipeline_register(pipeline, i2s_stream_writer, "i2s"); 573 | 574 | // ESP_LOGI(TAG, "[3.5] Link it together [sdcard]-->fatfs_stream-->mp3_decoder-->i2s_stream-->[ESP32 DAC]"); 575 | // audio_pipeline_link(pipeline, (const char *[]) {"file", "mp3", "i2s"}, 3); 576 | ESP_LOGI(TAG, "[3.4] Link it together [my_sdcard_read_cb]-->mp3_decoder-->i2s_stream-->[codec_chip]"); 577 | audio_pipeline_link(pipeline, (const char *[]) {"mp3", "i2s"}, 2); 578 | 579 | // ESP_LOGI(TAG, "[3.6] Setup uri (file as fatfs_stream, mp3 as mp3 decoder, and default output is i2s)"); 580 | // audio_element_set_uri(fatfs_stream_reader, "/sdcard/seeyou.mp3"); 581 | 582 | ESP_LOGI(TAG, "[ 4 ] Setup event listener"); 583 | audio_event_iface_cfg_t evt_cfg = AUDIO_EVENT_IFACE_DEFAULT_CFG(); 584 | audio_event_iface_handle_t evt = audio_event_iface_init(&evt_cfg); 585 | 586 | ESP_LOGI(TAG, "[4.1] Listening event from all elements of pipeline"); 587 | audio_pipeline_set_listener(pipeline, evt); 588 | 589 | ESP_LOGI(TAG, "[4.2] Listening event from peripherals"); 590 | audio_event_iface_set_listener(esp_periph_get_event_iface(), evt); 591 | 592 | 593 | // ESP_LOGI(TAG, "[ 5 ] Start audio_pipeline"); 594 | // audio_pipeline_run(pipeline); 595 | 596 | ESP_LOGI(TAG, "[ 6 ] Listen for all pipeline events"); 597 | while (1) { 598 | audio_event_iface_msg_t msg; 599 | esp_err_t ret = audio_event_iface_listen(evt, &msg, portMAX_DELAY); 600 | if (ret != ESP_OK) { 601 | ESP_LOGE(TAG, "[ * ] Event interface error : %d", ret); 602 | continue; 603 | } 604 | 605 | if (msg.source_type == AUDIO_ELEMENT_TYPE_ELEMENT && msg.source == (void *) mp3_decoder 606 | && msg.cmd == AEL_MSG_CMD_REPORT_MUSIC_INFO) { 607 | audio_element_info_t music_info = {0}; 608 | audio_element_getinfo(mp3_decoder, &music_info); 609 | 610 | ESP_LOGI(TAG, "[ * ] Receive music info from mp3 decoder, sample_rates=%d, bits=%d, ch=%d", 611 | music_info.sample_rates, music_info.bits, music_info.channels); 612 | 613 | audio_element_setinfo(i2s_stream_writer, &music_info); 614 | i2s_stream_set_clk(i2s_stream_writer, music_info.sample_rates, music_info.bits, music_info.channels); 615 | continue; 616 | } 617 | 618 | // Advance to the next song when previous finishes 619 | if (msg.source_type == AUDIO_ELEMENT_TYPE_ELEMENT && msg.source == (void *) i2s_stream_writer 620 | && msg.cmd == AEL_MSG_CMD_REPORT_STATUS) { 621 | audio_element_state_t el_state = audio_element_get_state(i2s_stream_writer); 622 | if (el_state == AEL_STATE_FINISHED) { 623 | ESP_LOGI(TAG, "[ * ] Finished, advancing to the next song"); 624 | audio_pipeline_stop(pipeline); 625 | audio_pipeline_wait_for_stop(pipeline); 626 | get_file(CONTROL_NEXT); 627 | audio_pipeline_run(pipeline); 628 | } 629 | continue; 630 | } 631 | 632 | /* Stop when the last pipeline element (i2s_stream_writer in this case) receives stop event */ 633 | if (msg.source_type == AUDIO_ELEMENT_TYPE_ELEMENT && msg.source == (void *) i2s_stream_writer 634 | && msg.cmd == AEL_MSG_CMD_REPORT_STATUS && (int) msg.data == AEL_STATUS_STATE_STOPPED) { 635 | ESP_LOGW(TAG, "[ * ] Stop event received"); 636 | break; 637 | } 638 | } 639 | 640 | ESP_LOGI(TAG, "[ 7 ] Stop audio_pipeline"); 641 | audio_pipeline_terminate(pipeline); 642 | 643 | /* Terminal the pipeline before removing the listener */ 644 | audio_pipeline_remove_listener(pipeline); 645 | 646 | /* Stop all periph before removing the listener */ 647 | esp_periph_stop_all(); 648 | audio_event_iface_remove_listener(esp_periph_get_event_iface(), evt); 649 | 650 | /* Make sure audio_pipeline_remove_listener & audio_event_iface_remove_listener are called before destroying event_iface */ 651 | audio_event_iface_destroy(evt); 652 | 653 | /* Release all resources */ 654 | audio_pipeline_deinit(pipeline); 655 | // audio_element_deinit(fatfs_stream_reader); 656 | audio_element_deinit(i2s_stream_writer); 657 | audio_element_deinit(mp3_decoder); 658 | esp_periph_destroy(); 659 | vTaskDelete(NULL); 660 | } 661 | 662 | // } 663 | /****************************************************************************** 664 | * FunctionName : app_main 665 | * Description : entry of user application, init user function here 666 | * Parameters : none 667 | * Returns : none 668 | *******************************************************************************/ 669 | // extern "C" 670 | void app_main() 671 | { 672 | ESP_LOGI("LvGL", "before init: %d", esp_get_free_heap_size()); 673 | sdmmc_init(); 674 | TaskHandle_t task; 675 | filecount = 0; 676 | read_content("/sdcard", &filecount); 677 | esp_vfs_fat_sdmmc_unmount(); 678 | printf("%d\n", filecount); 679 | 680 | gpio_set_pull_mode((gpio_num_t)15, GPIO_PULLUP_ONLY); // CMD, needed in 4- and 1- line modes 681 | gpio_set_pull_mode((gpio_num_t)2, GPIO_PULLUP_ONLY); // D0, needed in 4- and 1-line modes 682 | gpio_set_pull_mode((gpio_num_t)4, GPIO_PULLUP_ONLY); // D1, needed in 4-line mode only 683 | gpio_set_pull_mode((gpio_num_t)12, GPIO_PULLUP_ONLY); // D2, needed in 4-line mode only 684 | gpio_set_pull_mode((gpio_num_t)13, GPIO_PULLUP_ONLY); // D3, needed in 4- and 1-line modes 685 | xTaskCreate(audio_sdcard_task, "audio_sdcard_task", 1024*5, NULL, 4, NULL); 686 | 687 | /* Initialize LittlevGL */ 688 | lv_init(); 689 | 690 | /* Tick interface, Initialize a Timer for 1 ms period and in its interrupt call*/ 691 | // esp_register_freertos_tick_hook(lv_tick_task_callback); 692 | lvgl_tick_timer = xTimerCreate( 693 | "lv_tickinc_task", 694 | 1 / portTICK_PERIOD_MS, //period time 695 | pdTRUE, //auto load 696 | (void *)NULL, //timer parameter 697 | lv_tick_task_callback); //timer callback 698 | xTimerStart(lvgl_tick_timer, 0); 699 | 700 | /* Display interface */ 701 | lvgl_lcd_display_init(); /*Initialize your display*/ 702 | 703 | /* Input device interface */ 704 | lv_indev_drv_t indevdrv = lvgl_indev_init(); /*Initialize your indev*/ 705 | 706 | lvgl_timer = xTimerCreate( 707 | "lv_task", 708 | 10 / portTICK_PERIOD_MS, //period time 709 | pdTRUE, //auto load 710 | (void *)NULL, //timer parameter 711 | lvgl_task_time_callback); //timer callback 712 | xTimerStart(lvgl_timer, 0); 713 | 714 | vTaskDelay(20 / portTICK_PERIOD_MS); // wait for execute lv_task_handler, avoid 'error' 715 | 716 | lvgl_calibrate_mouse(indevdrv); 717 | 718 | #ifdef LVGL_TEST_THEME 719 | // lv_theme_t *th = lv_theme_alien_init(100, NULL); 720 | lv_theme_t *th = lv_theme_material_init(100, NULL); 721 | // lv_theme_t *th = lv_theme_mono_init(100, NULL); 722 | // lv_theme_t *th = lv_theme_nemo_init(100, NULL); 723 | // lv_theme_t *th = lv_theme_night_init(100, NULL); 724 | // lv_theme_t *th = lv_theme_zen_init(100, NULL); 725 | // lv_theme_t *th = lv_theme_night_init(100, NULL); 726 | lv_test_theme_1(th); 727 | // lv_tutorial_animations(); 728 | // lv_tutorial_styles(); 729 | // lv_tutorial_responsive(); 730 | // lv_tutorial_keyboard(NULL); 731 | // demo_create(); 732 | // benchmark_create(); 733 | // benchmark_start(); 734 | // sysmon_create(); 735 | // lv_obj_t * terminal = terminal_create(); 736 | // terminal_add("123\n123\n456\n7890\n"); 737 | #else 738 | littlevgl_demo(); 739 | ESP_LOGI("LvGL", "app_main last: %d", esp_get_free_heap_size()); 740 | 741 | // xTaskCreate( 742 | // user_task, //Task Function 743 | // "user_task", //Task Name 744 | // 1024, //Stack Depth 745 | // NULL, //Parameters 746 | // 1, //Priority 747 | // NULL); //Task Handler 748 | #endif 749 | 750 | // xTaskCreate(audio_embeeded_task, "audio_embeeded_task", 1024*5, NULL, 4, NULL); 751 | 752 | ESP_LOGI("LvGL", "app_main last: %d", esp_get_free_heap_size()); 753 | } 754 | -------------------------------------------------------------------------------- /main/component.mk: -------------------------------------------------------------------------------- 1 | # 2 | # "main" pseudo-component makefile. 3 | # 4 | # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) 5 | -------------------------------------------------------------------------------- /sdkconfig.defaults: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | 6 | # 7 | # SDK tool configuration 8 | # 9 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 10 | CONFIG_PYTHON="python" 11 | CONFIG_MAKE_WARN_UNDEFINED_VARIABLES=y 12 | 13 | # 14 | # Audio HAL 15 | # 16 | CONFIG_ESP_LYRAT_V4_3_BOARD=y 17 | CONFIG_ESP_LYRAT_V4_2_BOARD= 18 | CONFIG_ESP_LYRATD_MSC_V2_1_BOARD= 19 | CONFIG_ESP_LYRATD_MSC_V2_2_BOARD= 20 | 21 | # 22 | # Bootloader config 23 | # 24 | CONFIG_LOG_BOOTLOADER_LEVEL_NONE= 25 | CONFIG_LOG_BOOTLOADER_LEVEL_ERROR= 26 | CONFIG_LOG_BOOTLOADER_LEVEL_WARN= 27 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 28 | CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG= 29 | CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE= 30 | CONFIG_LOG_BOOTLOADER_LEVEL=3 31 | CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y 32 | CONFIG_BOOTLOADER_FACTORY_RESET= 33 | CONFIG_BOOTLOADER_APP_TEST= 34 | CONFIG_BOOTLOADER_WDT_ENABLE=y 35 | CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE= 36 | CONFIG_BOOTLOADER_WDT_TIME_MS=9000 37 | 38 | # 39 | # Security features 40 | # 41 | CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT= 42 | CONFIG_SECURE_BOOT_ENABLED= 43 | CONFIG_FLASH_ENCRYPTION_ENABLED= 44 | 45 | # 46 | # Speech Recognition Configuration 47 | # 48 | CONFIG_SR_MODEL_WN3_QUANT=y 49 | CONFIG_SR_MODEL_WN4_QUANT= 50 | CONFIG_WAKEUP_WORD_HI_LEXIN=y 51 | CONFIG_WAKEUP_WORD_ALEXA= 52 | 53 | # 54 | # Serial flasher config 55 | # 56 | CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" 57 | CONFIG_ESPTOOLPY_BAUD_115200B= 58 | CONFIG_ESPTOOLPY_BAUD_230400B= 59 | CONFIG_ESPTOOLPY_BAUD_921600B=y 60 | CONFIG_ESPTOOLPY_BAUD_2MB= 61 | CONFIG_ESPTOOLPY_BAUD_OTHER= 62 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 63 | CONFIG_ESPTOOLPY_BAUD=921600 64 | CONFIG_ESPTOOLPY_COMPRESSED=y 65 | CONFIG_FLASHMODE_QIO= 66 | CONFIG_FLASHMODE_QOUT= 67 | CONFIG_FLASHMODE_DIO=y 68 | CONFIG_FLASHMODE_DOUT= 69 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 70 | CONFIG_ESPTOOLPY_FLASHFREQ_80M=y 71 | CONFIG_ESPTOOLPY_FLASHFREQ_40M= 72 | CONFIG_ESPTOOLPY_FLASHFREQ_26M= 73 | CONFIG_ESPTOOLPY_FLASHFREQ_20M= 74 | CONFIG_ESPTOOLPY_FLASHFREQ="80m" 75 | CONFIG_ESPTOOLPY_FLASHSIZE_1MB= 76 | CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y 77 | CONFIG_ESPTOOLPY_FLASHSIZE_4MB= 78 | CONFIG_ESPTOOLPY_FLASHSIZE_8MB= 79 | CONFIG_ESPTOOLPY_FLASHSIZE_16MB= 80 | CONFIG_ESPTOOLPY_FLASHSIZE="2MB" 81 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 82 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 83 | CONFIG_ESPTOOLPY_BEFORE_NORESET= 84 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 85 | CONFIG_ESPTOOLPY_AFTER_RESET=y 86 | CONFIG_ESPTOOLPY_AFTER_NORESET= 87 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 88 | CONFIG_MONITOR_BAUD_9600B= 89 | CONFIG_MONITOR_BAUD_57600B= 90 | CONFIG_MONITOR_BAUD_115200B=y 91 | CONFIG_MONITOR_BAUD_230400B= 92 | CONFIG_MONITOR_BAUD_921600B= 93 | CONFIG_MONITOR_BAUD_2MB= 94 | CONFIG_MONITOR_BAUD_OTHER= 95 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 96 | CONFIG_MONITOR_BAUD=115200 97 | 98 | # 99 | # Partition Table 100 | # 101 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 102 | CONFIG_PARTITION_TABLE_TWO_OTA= 103 | CONFIG_PARTITION_TABLE_CUSTOM= 104 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 105 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 106 | CONFIG_PARTITION_TABLE_OFFSET=0x8000 107 | CONFIG_PARTITION_TABLE_MD5=y 108 | 109 | # 110 | # Compiler options 111 | # 112 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 113 | CONFIG_OPTIMIZATION_LEVEL_RELEASE= 114 | CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y 115 | CONFIG_OPTIMIZATION_ASSERTIONS_SILENT= 116 | CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED= 117 | CONFIG_CXX_EXCEPTIONS= 118 | CONFIG_STACK_CHECK_NONE=y 119 | CONFIG_STACK_CHECK_NORM= 120 | CONFIG_STACK_CHECK_STRONG= 121 | CONFIG_STACK_CHECK_ALL= 122 | CONFIG_STACK_CHECK= 123 | CONFIG_WARN_WRITE_STRINGS= 124 | CONFIG_DISABLE_GCC8_WARNINGS= 125 | 126 | # 127 | # Component config 128 | # 129 | 130 | # 131 | # Application Level Tracing 132 | # 133 | CONFIG_ESP32_APPTRACE_DEST_TRAX= 134 | CONFIG_ESP32_APPTRACE_DEST_NONE=y 135 | CONFIG_ESP32_APPTRACE_ENABLE= 136 | CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y 137 | CONFIG_AWS_IOT_SDK= 138 | 139 | # 140 | # Bluetooth 141 | # 142 | CONFIG_BT_ENABLED= 143 | CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 144 | CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 145 | CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 146 | CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 147 | CONFIG_BT_RESERVE_DRAM=0 148 | 149 | # 150 | # Driver configurations 151 | # 152 | 153 | # 154 | # ADC configuration 155 | # 156 | CONFIG_ADC_FORCE_XPD_FSM= 157 | CONFIG_ADC2_DISABLE_DAC=y 158 | 159 | # 160 | # SPI configuration 161 | # 162 | CONFIG_SPI_MASTER_IN_IRAM= 163 | CONFIG_SPI_MASTER_ISR_IN_IRAM=y 164 | CONFIG_SPI_SLAVE_IN_IRAM= 165 | CONFIG_SPI_SLAVE_ISR_IN_IRAM=y 166 | 167 | # 168 | # ESP32-specific 169 | # 170 | CONFIG_ESP32_DEFAULT_CPU_FREQ_80= 171 | CONFIG_ESP32_DEFAULT_CPU_FREQ_160= 172 | CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y 173 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 174 | CONFIG_SPIRAM_SUPPORT= 175 | CONFIG_MEMMAP_TRACEMEM= 176 | CONFIG_MEMMAP_TRACEMEM_TWOBANKS= 177 | CONFIG_ESP32_TRAX= 178 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 179 | CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH= 180 | CONFIG_ESP32_ENABLE_COREDUMP_TO_UART= 181 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 182 | CONFIG_ESP32_ENABLE_COREDUMP= 183 | CONFIG_TWO_UNIVERSAL_MAC_ADDRESS= 184 | CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y 185 | CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 186 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 187 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 188 | CONFIG_MAIN_TASK_STACK_SIZE=10240 189 | CONFIG_IPC_TASK_STACK_SIZE=1024 190 | CONFIG_TIMER_TASK_STACK_SIZE=3584 191 | CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y 192 | CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF= 193 | CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR= 194 | CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF= 195 | CONFIG_NEWLIB_STDIN_LINE_ENDING_LF= 196 | CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y 197 | CONFIG_NEWLIB_NANO_FORMAT= 198 | CONFIG_CONSOLE_UART_DEFAULT=y 199 | CONFIG_CONSOLE_UART_CUSTOM= 200 | CONFIG_CONSOLE_UART_NONE= 201 | CONFIG_CONSOLE_UART_NUM=0 202 | CONFIG_CONSOLE_UART_BAUDRATE=115200 203 | CONFIG_ULP_COPROC_ENABLED= 204 | CONFIG_ULP_COPROC_RESERVE_MEM=0 205 | CONFIG_ESP32_PANIC_PRINT_HALT= 206 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 207 | CONFIG_ESP32_PANIC_SILENT_REBOOT= 208 | CONFIG_ESP32_PANIC_GDBSTUB= 209 | CONFIG_ESP32_DEBUG_OCDAWARE=y 210 | CONFIG_ESP32_DEBUG_STUBS_ENABLE=y 211 | CONFIG_INT_WDT=y 212 | CONFIG_INT_WDT_TIMEOUT_MS=300 213 | CONFIG_INT_WDT_CHECK_CPU1=y 214 | CONFIG_TASK_WDT=y 215 | CONFIG_TASK_WDT_PANIC= 216 | CONFIG_TASK_WDT_TIMEOUT_S=5 217 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y 218 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 219 | CONFIG_BROWNOUT_DET=y 220 | CONFIG_BROWNOUT_DET_LVL_SEL_0=y 221 | CONFIG_BROWNOUT_DET_LVL_SEL_1= 222 | CONFIG_BROWNOUT_DET_LVL_SEL_2= 223 | CONFIG_BROWNOUT_DET_LVL_SEL_3= 224 | CONFIG_BROWNOUT_DET_LVL_SEL_4= 225 | CONFIG_BROWNOUT_DET_LVL_SEL_5= 226 | CONFIG_BROWNOUT_DET_LVL_SEL_6= 227 | CONFIG_BROWNOUT_DET_LVL_SEL_7= 228 | CONFIG_BROWNOUT_DET_LVL=0 229 | CONFIG_REDUCE_PHY_TX_POWER=y 230 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 231 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC= 232 | CONFIG_ESP32_TIME_SYSCALL_USE_FRC1= 233 | CONFIG_ESP32_TIME_SYSCALL_USE_NONE= 234 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 235 | CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL= 236 | CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC= 237 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256= 238 | CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 239 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 240 | CONFIG_ESP32_XTAL_FREQ_40=y 241 | CONFIG_ESP32_XTAL_FREQ_26= 242 | CONFIG_ESP32_XTAL_FREQ_AUTO= 243 | CONFIG_ESP32_XTAL_FREQ=40 244 | CONFIG_DISABLE_BASIC_ROM_CONSOLE= 245 | CONFIG_NO_BLOBS= 246 | CONFIG_ESP_TIMER_PROFILING= 247 | CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS= 248 | CONFIG_ESP_ERR_TO_NAME_LOOKUP=y 249 | 250 | # 251 | # Wi-Fi 252 | # 253 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 254 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 255 | CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y 256 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER= 257 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 258 | CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 259 | CONFIG_ESP32_WIFI_CSI_ENABLED= 260 | CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y 261 | CONFIG_ESP32_WIFI_TX_BA_WIN=6 262 | CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y 263 | CONFIG_ESP32_WIFI_RX_BA_WIN=6 264 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 265 | CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y 266 | CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1= 267 | CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 268 | 269 | # 270 | # PHY 271 | # 272 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 273 | CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION= 274 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 275 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 276 | 277 | # 278 | # Power Management 279 | # 280 | CONFIG_PM_ENABLE= 281 | 282 | # 283 | # ADC-Calibration 284 | # 285 | CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y 286 | CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y 287 | CONFIG_ADC_CAL_LUT_ENABLE=y 288 | 289 | # 290 | # Event Loop Library 291 | # 292 | CONFIG_EVENT_LOOP_PROFILING= 293 | 294 | # 295 | # ESP HTTP client 296 | # 297 | CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y 298 | 299 | # 300 | # HTTP Server 301 | # 302 | CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 303 | CONFIG_HTTPD_MAX_URI_LEN=512 304 | 305 | # 306 | # Ethernet 307 | # 308 | CONFIG_DMA_RX_BUF_NUM=10 309 | CONFIG_DMA_TX_BUF_NUM=10 310 | CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE= 311 | CONFIG_EMAC_CHECK_LINK_PERIOD_MS=2000 312 | CONFIG_EMAC_TASK_PRIORITY=20 313 | CONFIG_EMAC_TASK_STACK_SIZE=3072 314 | 315 | # 316 | # FAT Filesystem support 317 | # 318 | CONFIG_FATFS_CODEPAGE_DYNAMIC= 319 | CONFIG_FATFS_CODEPAGE_437=y 320 | CONFIG_FATFS_CODEPAGE_720= 321 | CONFIG_FATFS_CODEPAGE_737= 322 | CONFIG_FATFS_CODEPAGE_771= 323 | CONFIG_FATFS_CODEPAGE_775= 324 | CONFIG_FATFS_CODEPAGE_850= 325 | CONFIG_FATFS_CODEPAGE_852= 326 | CONFIG_FATFS_CODEPAGE_855= 327 | CONFIG_FATFS_CODEPAGE_857= 328 | CONFIG_FATFS_CODEPAGE_860= 329 | CONFIG_FATFS_CODEPAGE_861= 330 | CONFIG_FATFS_CODEPAGE_862= 331 | CONFIG_FATFS_CODEPAGE_863= 332 | CONFIG_FATFS_CODEPAGE_864= 333 | CONFIG_FATFS_CODEPAGE_865= 334 | CONFIG_FATFS_CODEPAGE_866= 335 | CONFIG_FATFS_CODEPAGE_869= 336 | CONFIG_FATFS_CODEPAGE_932= 337 | CONFIG_FATFS_CODEPAGE_936= 338 | CONFIG_FATFS_CODEPAGE_949= 339 | CONFIG_FATFS_CODEPAGE_950= 340 | CONFIG_FATFS_CODEPAGE=437 341 | CONFIG_FATFS_LFN_NONE=y 342 | CONFIG_FATFS_LFN_HEAP= 343 | CONFIG_FATFS_LFN_STACK= 344 | CONFIG_FATFS_FS_LOCK=0 345 | CONFIG_FATFS_TIMEOUT_MS=10000 346 | CONFIG_FATFS_PER_FILE_CACHE=y 347 | 348 | # 349 | # Modbus configuration 350 | # 351 | CONFIG_MB_UART_RXD=22 352 | CONFIG_MB_UART_TXD=23 353 | CONFIG_MB_UART_RTS=18 354 | CONFIG_MB_QUEUE_LENGTH=20 355 | CONFIG_MB_SERIAL_TASK_STACK_SIZE=2048 356 | CONFIG_MB_SERIAL_BUF_SIZE=256 357 | CONFIG_MB_SERIAL_TASK_PRIO=10 358 | CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT= 359 | CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 360 | CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 361 | CONFIG_MB_CONTROLLER_STACK_SIZE=4096 362 | CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 363 | CONFIG_MB_TIMER_PORT_ENABLED=y 364 | CONFIG_MB_TIMER_GROUP=0 365 | CONFIG_MB_TIMER_INDEX=0 366 | 367 | # 368 | # FreeRTOS 369 | # 370 | CONFIG_FREERTOS_UNICORE= 371 | CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF 372 | CONFIG_FREERTOS_CORETIMER_0=y 373 | CONFIG_FREERTOS_CORETIMER_1= 374 | CONFIG_FREERTOS_HZ=1000 375 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 376 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE= 377 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL= 378 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 379 | CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK= 380 | CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y 381 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 382 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 383 | CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE= 384 | CONFIG_FREERTOS_ASSERT_DISABLE= 385 | CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 386 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 387 | CONFIG_FREERTOS_LEGACY_HOOKS= 388 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 389 | CONFIG_SUPPORT_STATIC_ALLOCATION=y 390 | CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK= 391 | CONFIG_TIMER_TASK_PRIORITY=1 392 | CONFIG_TIMER_TASK_STACK_DEPTH=20480 393 | CONFIG_TIMER_QUEUE_LENGTH=10 394 | CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 395 | CONFIG_FREERTOS_USE_TRACE_FACILITY= 396 | CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS= 397 | CONFIG_FREERTOS_DEBUG_INTERNALS= 398 | CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y 399 | 400 | # 401 | # Heap memory debugging 402 | # 403 | CONFIG_HEAP_POISONING_DISABLED=y 404 | CONFIG_HEAP_POISONING_LIGHT= 405 | CONFIG_HEAP_POISONING_COMPREHENSIVE= 406 | CONFIG_HEAP_TRACING= 407 | 408 | # 409 | # I2S devices 410 | # 411 | CONFIG_IOT_LCD_NT35510_ENABLE=y 412 | CONFIG_IOT_LCD_ILI9806_ENABLE=y 413 | CONFIG_BIT_MODE_16BIT=y 414 | CONFIG_BIT_MODE_8BIT= 415 | 416 | # 417 | # libsodium 418 | # 419 | CONFIG_LIBSODIUM_USE_MBEDTLS_SHA=y 420 | 421 | # 422 | # Log output 423 | # 424 | CONFIG_LOG_DEFAULT_LEVEL_NONE= 425 | CONFIG_LOG_DEFAULT_LEVEL_ERROR= 426 | CONFIG_LOG_DEFAULT_LEVEL_WARN= 427 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 428 | CONFIG_LOG_DEFAULT_LEVEL_DEBUG= 429 | CONFIG_LOG_DEFAULT_LEVEL_VERBOSE= 430 | CONFIG_LOG_DEFAULT_LEVEL=3 431 | CONFIG_LOG_COLORS=y 432 | 433 | # 434 | # HMI Components 435 | # 436 | CONFIG_LVGL_GUI_ENABLE=y 437 | CONFIG_UGFX_GUI_ENABLE= 438 | CONFIG_SELECT_NONE= 439 | 440 | # 441 | # LVGL settings 442 | # 443 | CONFIG_LVGL_USE_CUSTOM_DRIVER= 444 | CONFIG_LVGL_USE_CONFIGURED_OPTIONS=y 445 | CONFIG_LVGL_DRIVER_TOUCH_SCREEN_ENABLE=y 446 | CONFIG_LVGL_LCD_DRIVER_FRAMEBUFFER_MODE=y 447 | CONFIG_LVGL_LCD_DRIVER_API_MODE= 448 | CONFIG_LVGL_DRIVER_AUTO_FLUSH_INTERVAL=50 449 | CONFIG_LVGL_DRIVER_DOUBLE_BUFFER_ENABLE= 450 | CONFIG_LVGL_DISP_ROTATE_0= 451 | CONFIG_LVGL_DISP_ROTATE_90=y 452 | CONFIG_LVGL_DISP_ROTATE_180= 453 | CONFIG_LVGL_DISP_ROTATE_270= 454 | 455 | # 456 | # Config Driver 457 | # 458 | CONFIG_LVGL_DRIVER_TOUCH_XPT2046=y 459 | CONFIG_LVGL_DRIVER_TOUCH_FT5X06= 460 | 461 | # 462 | # XPT2046 Touch Screen Pin Configuration 463 | # 464 | CONFIG_LVGL_TOUCH_CS_GPIO=32 465 | CONFIG_LVGL_TOUCH_IRQ_GPIO=33 466 | CONFIG_LVGL_DRIVER_ILI9341= 467 | CONFIG_LVGL_DRIVER_SSD1306= 468 | CONFIG_LVGL_DRIVER_ST7789=y 469 | CONFIG_LVGL_DRIVER_NT35510= 470 | 471 | # 472 | # ST7789 Screen Pin Configuration 473 | # 474 | CONFIG_LVGL_LCD_HSPI=y 475 | CONFIG_LVGL_LCD_VSPI= 476 | CONFIG_LVGL_LCD_SPI_NUM=1 477 | CONFIG_LVGL_LCD_SPI_CLOCK=26000000 478 | CONFIG_LVGL_LCD_MISO_GPIO=27 479 | CONFIG_LVGL_LCD_MOSI_GPIO=21 480 | CONFIG_LVGL_LCD_CLK_GPIO=22 481 | CONFIG_LVGL_LCD_CS_GPIO=5 482 | CONFIG_LVGL_LCD_DC_GPIO=19 483 | CONFIG_LVGL_LCD_RESET_GPIO=18 484 | CONFIG_LVGL_LCD_BL_GPIO=23 485 | CONFIG_ST7789_LVGL_DRIVER_SCREEN_WIDTH=240 486 | CONFIG_ST7789_LVGL_DRIVER_SCREEN_HEIGHT=320 487 | CONFIG_LVGL_DRIVER_SCREEN_WIDTH=240 488 | CONFIG_LVGL_DRIVER_SCREEN_HEIGHT=320 489 | 490 | # 491 | # LWIP 492 | # 493 | CONFIG_L2_TO_L3_COPY= 494 | CONFIG_LWIP_IRAM_OPTIMIZATION= 495 | CONFIG_LWIP_MAX_SOCKETS=10 496 | CONFIG_USE_ONLY_LWIP_SELECT= 497 | CONFIG_LWIP_SO_REUSE=y 498 | CONFIG_LWIP_SO_REUSE_RXTOALL=y 499 | CONFIG_LWIP_SO_RCVBUF= 500 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 501 | CONFIG_LWIP_IP_FRAG= 502 | CONFIG_LWIP_IP_REASSEMBLY= 503 | CONFIG_LWIP_STATS= 504 | CONFIG_LWIP_ETHARP_TRUST_IP_MAC=y 505 | CONFIG_ESP_GRATUITOUS_ARP=y 506 | CONFIG_GARP_TMR_INTERVAL=60 507 | CONFIG_TCPIP_RECVMBOX_SIZE=32 508 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 509 | CONFIG_LWIP_DHCP_RESTORE_LAST_IP= 510 | 511 | # 512 | # DHCP server 513 | # 514 | CONFIG_LWIP_DHCPS_LEASE_UNIT=60 515 | CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 516 | CONFIG_LWIP_AUTOIP= 517 | CONFIG_LWIP_NETIF_LOOPBACK=y 518 | CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 519 | 520 | # 521 | # TCP 522 | # 523 | CONFIG_LWIP_MAX_ACTIVE_TCP=16 524 | CONFIG_LWIP_MAX_LISTENING_TCP=16 525 | CONFIG_TCP_MAXRTX=12 526 | CONFIG_TCP_SYNMAXRTX=6 527 | CONFIG_TCP_MSS=1436 528 | CONFIG_TCP_MSL=60000 529 | CONFIG_TCP_SND_BUF_DEFAULT=5744 530 | CONFIG_TCP_WND_DEFAULT=5744 531 | CONFIG_TCP_RECVMBOX_SIZE=6 532 | CONFIG_TCP_QUEUE_OOSEQ=y 533 | CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES= 534 | CONFIG_TCP_OVERSIZE_MSS=y 535 | CONFIG_TCP_OVERSIZE_QUARTER_MSS= 536 | CONFIG_TCP_OVERSIZE_DISABLE= 537 | 538 | # 539 | # UDP 540 | # 541 | CONFIG_LWIP_MAX_UDP_PCBS=16 542 | CONFIG_UDP_RECVMBOX_SIZE=6 543 | CONFIG_TCPIP_TASK_STACK_SIZE=2048 544 | CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y 545 | CONFIG_TCPIP_TASK_AFFINITY_CPU0= 546 | CONFIG_TCPIP_TASK_AFFINITY_CPU1= 547 | CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF 548 | CONFIG_PPP_SUPPORT= 549 | 550 | # 551 | # ICMP 552 | # 553 | CONFIG_LWIP_MULTICAST_PING= 554 | CONFIG_LWIP_BROADCAST_PING= 555 | 556 | # 557 | # LWIP RAW API 558 | # 559 | CONFIG_LWIP_MAX_RAW_PCBS=16 560 | 561 | # 562 | # mbedTLS 563 | # 564 | CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y 565 | CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC= 566 | CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC= 567 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 568 | CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN= 569 | CONFIG_MBEDTLS_DEBUG= 570 | CONFIG_MBEDTLS_HARDWARE_AES=y 571 | CONFIG_MBEDTLS_HARDWARE_MPI= 572 | CONFIG_MBEDTLS_HARDWARE_SHA= 573 | CONFIG_MBEDTLS_HAVE_TIME=y 574 | CONFIG_MBEDTLS_HAVE_TIME_DATE= 575 | CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y 576 | CONFIG_MBEDTLS_TLS_SERVER_ONLY= 577 | CONFIG_MBEDTLS_TLS_CLIENT_ONLY= 578 | CONFIG_MBEDTLS_TLS_DISABLED= 579 | CONFIG_MBEDTLS_TLS_SERVER=y 580 | CONFIG_MBEDTLS_TLS_CLIENT=y 581 | CONFIG_MBEDTLS_TLS_ENABLED=y 582 | 583 | # 584 | # TLS Key Exchange Methods 585 | # 586 | CONFIG_MBEDTLS_PSK_MODES= 587 | CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y 588 | CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y 589 | CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y 590 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y 591 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y 592 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y 593 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y 594 | CONFIG_MBEDTLS_SSL_RENEGOTIATION=y 595 | CONFIG_MBEDTLS_SSL_PROTO_SSL3= 596 | CONFIG_MBEDTLS_SSL_PROTO_TLS1=y 597 | CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y 598 | CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y 599 | CONFIG_MBEDTLS_SSL_PROTO_DTLS= 600 | CONFIG_MBEDTLS_SSL_ALPN=y 601 | CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y 602 | 603 | # 604 | # Symmetric Ciphers 605 | # 606 | CONFIG_MBEDTLS_AES_C=y 607 | CONFIG_MBEDTLS_CAMELLIA_C= 608 | CONFIG_MBEDTLS_DES_C= 609 | CONFIG_MBEDTLS_RC4_DISABLED=y 610 | CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT= 611 | CONFIG_MBEDTLS_RC4_ENABLED= 612 | CONFIG_MBEDTLS_BLOWFISH_C= 613 | CONFIG_MBEDTLS_XTEA_C= 614 | CONFIG_MBEDTLS_CCM_C=y 615 | CONFIG_MBEDTLS_GCM_C=y 616 | CONFIG_MBEDTLS_RIPEMD160_C= 617 | 618 | # 619 | # Certificates 620 | # 621 | CONFIG_MBEDTLS_PEM_PARSE_C=y 622 | CONFIG_MBEDTLS_PEM_WRITE_C=y 623 | CONFIG_MBEDTLS_X509_CRL_PARSE_C=y 624 | CONFIG_MBEDTLS_X509_CSR_PARSE_C=y 625 | CONFIG_MBEDTLS_ECP_C=y 626 | CONFIG_MBEDTLS_ECDH_C=y 627 | CONFIG_MBEDTLS_ECDSA_C=y 628 | CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y 629 | CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y 630 | CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y 631 | CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y 632 | CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y 633 | CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y 634 | CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y 635 | CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y 636 | CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y 637 | CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y 638 | CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y 639 | CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y 640 | CONFIG_MBEDTLS_ECP_NIST_OPTIM=y 641 | 642 | # 643 | # mDNS 644 | # 645 | CONFIG_MDNS_MAX_SERVICES=10 646 | 647 | # 648 | # ESP-MQTT Configurations 649 | # 650 | CONFIG_MQTT_PROTOCOL_311=y 651 | CONFIG_MQTT_TRANSPORT_SSL=y 652 | CONFIG_MQTT_TRANSPORT_WEBSOCKET=y 653 | CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y 654 | CONFIG_MQTT_USE_CUSTOM_CONFIG= 655 | CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED= 656 | CONFIG_MQTT_CUSTOM_OUTBOX= 657 | 658 | # 659 | # NVS 660 | # 661 | 662 | # 663 | # OpenSSL 664 | # 665 | CONFIG_OPENSSL_DEBUG= 666 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 667 | CONFIG_OPENSSL_ASSERT_EXIT= 668 | 669 | # 670 | # PThreads 671 | # 672 | CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 673 | CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 674 | CONFIG_PTHREAD_STACK_MIN=768 675 | 676 | # 677 | # SPI Flash driver 678 | # 679 | CONFIG_SPI_FLASH_VERIFY_WRITE= 680 | CONFIG_SPI_FLASH_ENABLE_COUNTERS= 681 | CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y 682 | CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y 683 | CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS= 684 | CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED= 685 | 686 | # 687 | # SPIFFS Configuration 688 | # 689 | CONFIG_SPIFFS_MAX_PARTITIONS=3 690 | 691 | # 692 | # SPIFFS Cache Configuration 693 | # 694 | CONFIG_SPIFFS_CACHE=y 695 | CONFIG_SPIFFS_CACHE_WR=y 696 | CONFIG_SPIFFS_CACHE_STATS= 697 | CONFIG_SPIFFS_PAGE_CHECK=y 698 | CONFIG_SPIFFS_GC_MAX_RUNS=10 699 | CONFIG_SPIFFS_GC_STATS= 700 | CONFIG_SPIFFS_PAGE_SIZE=256 701 | CONFIG_SPIFFS_OBJ_NAME_LEN=32 702 | CONFIG_SPIFFS_USE_MAGIC=y 703 | CONFIG_SPIFFS_USE_MAGIC_LENGTH=y 704 | CONFIG_SPIFFS_META_LENGTH=4 705 | CONFIG_SPIFFS_USE_MTIME=y 706 | 707 | # 708 | # Debug Configuration 709 | # 710 | CONFIG_SPIFFS_DBG= 711 | CONFIG_SPIFFS_API_DBG= 712 | CONFIG_SPIFFS_GC_DBG= 713 | CONFIG_SPIFFS_CACHE_DBG= 714 | CONFIG_SPIFFS_CHECK_DBG= 715 | CONFIG_SPIFFS_TEST_VISUALISATION= 716 | 717 | # 718 | # TCP/IP Adapter 719 | # 720 | CONFIG_IP_LOST_TIMER_INTERVAL=120 721 | CONFIG_TCPIP_LWIP=y 722 | 723 | # 724 | # Virtual file system 725 | # 726 | CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y 727 | CONFIG_SUPPORT_TERMIOS=y 728 | 729 | # 730 | # Wear Levelling 731 | # 732 | CONFIG_WL_SECTOR_SIZE_512= 733 | CONFIG_WL_SECTOR_SIZE_4096=y 734 | CONFIG_WL_SECTOR_SIZE=4096 735 | --------------------------------------------------------------------------------