Просмотр исходного кода

Merge branch 'example/i2s_sound_record' into 'master'

Added I2S example for microphone recording to WAV file and I2S examples folder moved

See merge request espressif/esp-idf!12835
Michael (XIAO Xufeng) 4 лет назад
Родитель
Сommit
0adc6fa17d
26 измененных файлов с 413 добавлено и 6 удалено
  1. 0 0
      examples/peripherals/i2s/i2s_adc_dac/CMakeLists.txt
  2. 0 0
      examples/peripherals/i2s/i2s_adc_dac/Makefile
  3. 0 0
      examples/peripherals/i2s/i2s_adc_dac/README.md
  4. 0 0
      examples/peripherals/i2s/i2s_adc_dac/main/CMakeLists.txt
  5. 0 0
      examples/peripherals/i2s/i2s_adc_dac/main/app_main.c
  6. 0 0
      examples/peripherals/i2s/i2s_adc_dac/main/audio_example_file.h
  7. 0 0
      examples/peripherals/i2s/i2s_adc_dac/main/component.mk
  8. 0 0
      examples/peripherals/i2s/i2s_adc_dac/partitions_adc_dac_example.csv
  9. 10 5
      examples/peripherals/i2s/i2s_adc_dac/tools/generate_audio_file.py
  10. 0 0
      examples/peripherals/i2s/i2s_adc_dac/tools/sample_00.wav
  11. 0 0
      examples/peripherals/i2s/i2s_adc_dac/tools/sample_01.wav
  12. 0 0
      examples/peripherals/i2s/i2s_adc_dac/tools/sample_02.wav
  13. 0 0
      examples/peripherals/i2s/i2s_audio_recorder_sdcard/CMakeLists.txt
  14. 7 0
      examples/peripherals/i2s/i2s_audio_recorder_sdcard/Makefile
  15. 102 0
      examples/peripherals/i2s/i2s_audio_recorder_sdcard/README.md
  16. 2 0
      examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/CMakeLists.txt
  17. 71 0
      examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/Kconfig.projbuild
  18. 0 0
      examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/component.mk
  19. 209 0
      examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/i2s_recorder_main.c
  20. 6 0
      examples/peripherals/i2s/i2s_basic/CMakeLists.txt
  21. 0 0
      examples/peripherals/i2s/i2s_basic/Makefile
  22. 0 0
      examples/peripherals/i2s/i2s_basic/README.md
  23. 0 0
      examples/peripherals/i2s/i2s_basic/main/CMakeLists.txt
  24. 6 0
      examples/peripherals/i2s/i2s_basic/main/component.mk
  25. 0 0
      examples/peripherals/i2s/i2s_basic/main/i2s_example_main.c
  26. 0 1
      tools/ci/mypy_ignore_list.txt

+ 0 - 0
examples/peripherals/i2s_adc_dac/CMakeLists.txt → examples/peripherals/i2s/i2s_adc_dac/CMakeLists.txt


+ 0 - 0
examples/peripherals/i2s_adc_dac/Makefile → examples/peripherals/i2s/i2s_adc_dac/Makefile


+ 0 - 0
examples/peripherals/i2s_adc_dac/README.md → examples/peripherals/i2s/i2s_adc_dac/README.md


+ 0 - 0
examples/peripherals/i2s_adc_dac/main/CMakeLists.txt → examples/peripherals/i2s/i2s_adc_dac/main/CMakeLists.txt


+ 0 - 0
examples/peripherals/i2s_adc_dac/main/app_main.c → examples/peripherals/i2s/i2s_adc_dac/main/app_main.c


+ 0 - 0
examples/peripherals/i2s_adc_dac/main/audio_example_file.h → examples/peripherals/i2s/i2s_adc_dac/main/audio_example_file.h


+ 0 - 0
examples/peripherals/i2s_adc_dac/main/component.mk → examples/peripherals/i2s/i2s_adc_dac/main/component.mk


+ 0 - 0
examples/peripherals/i2s_adc_dac/partitions_adc_dac_example.csv → examples/peripherals/i2s/i2s_adc_dac/partitions_adc_dac_example.csv


+ 10 - 5
examples/peripherals/i2s_adc_dac/tools/generate_audio_file.py → examples/peripherals/i2s/i2s_adc_dac/tools/generate_audio_file.py

@@ -5,8 +5,13 @@ import struct
 import wave
 from builtins import range
 
+try:
+    from typing import List
+except ImportError:
+    pass
 
-def get_wave_array_str(filename, target_bits):
+
+def get_wave_array_str(filename, target_bits):  # type: (str, int) -> str
     wave_read = wave.open(filename, 'r')
     array_str = ''
     nchannels, sampwidth, framerate, nframes, comptype, compname = wave_read.getparams()
@@ -24,7 +29,7 @@ def get_wave_array_str(filename, target_bits):
     return array_str
 
 
-def gen_wave_table(wav_file_list, target_file_name, scale_bits=8):
+def gen_wave_table(wav_file_list, target_file_name, scale_bits=8):  # type: (List[str], str, int) -> None
     with open(target_file_name, 'w') as audio_table:
         print('#include <stdio.h>', file=audio_table)
         print('const unsigned char audio_table[] = {', file=audio_table)
@@ -38,7 +43,7 @@ def gen_wave_table(wav_file_list, target_file_name, scale_bits=8):
 if __name__ == '__main__':
     print('Generating audio array...')
     wav_list = []
-    for filename in os.listdir('./'):
-        if filename.endswith('.wav'):
-            wav_list.append(filename)
+    for wavefile in os.listdir('./'):
+        if wavefile.endswith('.wav'):
+            wav_list.append(wavefile)
     gen_wave_table(wav_file_list=wav_list, target_file_name='audio_example_file.h')

+ 0 - 0
examples/peripherals/i2s_adc_dac/tools/sample_00.wav → examples/peripherals/i2s/i2s_adc_dac/tools/sample_00.wav


+ 0 - 0
examples/peripherals/i2s_adc_dac/tools/sample_01.wav → examples/peripherals/i2s/i2s_adc_dac/tools/sample_01.wav


+ 0 - 0
examples/peripherals/i2s_adc_dac/tools/sample_02.wav → examples/peripherals/i2s/i2s_adc_dac/tools/sample_02.wav


+ 0 - 0
examples/peripherals/i2s/CMakeLists.txt → examples/peripherals/i2s/i2s_audio_recorder_sdcard/CMakeLists.txt


+ 7 - 0
examples/peripherals/i2s/i2s_audio_recorder_sdcard/Makefile

@@ -0,0 +1,7 @@
+#
+# This is a project Makefile. It is assumed the directory this Makefile resides in is a
+# project subdirectory.
+#
+VERBOSE = 1
+PROJECT_NAME := esp32-i2s-recorder-example
+include $(IDF_PATH)/make/project.mk

+ 102 - 0
examples/peripherals/i2s/i2s_audio_recorder_sdcard/README.md

@@ -0,0 +1,102 @@
+| Supported Targets | ESP32 |
+| ----------------- | ----- |
+
+# I2S Digital Microphone Recording Example
+
+(See the README.md file in the upper level 'examples' directory for more information about examples.)
+
+In this example, we record a sample audio file captured from the digital MEMS microphone on the I2S peripheral using PDM data format.
+
+The audio is recorded into the SDCard using WAVE file format.
+
+| Audio Setting | Value |
+|:---:|:---:|
+| Sample Rate |44100 Hz|
+| Bits per Sample |16 bits|
+
+## How to Use Example
+
+### Hardware Required
+
+* A development board with ESP32 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.)
+* A USB cable for power supply and programming
+* A digital microphone (SPK0838HT4H PDM output was used in this example)
+
+The digital PDM microphone is connected on the I2S interface `I2S_NUM_0`.
+
+The default GPIO configuration is the following:
+
+|Mic        | GPIO   |
+|:---------:|:------:|
+| PDM Clock | GPIO22 |
+| PDM Data  | GPIO23 |
+
+The SDCard is connected using SPI peripheral.
+
+| SPI  | SDCard |  GPIO  |
+|:----:|:------:|:------:|
+| MISO | DAT0   | GPIO2  |
+| MOSI | CMD    | GPIO15 |
+| SCLK | CLK    | GPIO14 |
+| CS   | CD     | GPIO13 |
+
+To change the GPIO configuration, see the `Example Configuration` from the menuconfig.
+
+### Configure the Project
+
+```
+idf.py menuconfig
+```
+
+In the `Example Configuration` menu:
+
+* Use `SDCard Configuration` to assign the SPI peripheral GPIOs.
+* Use `I2S MEMS MIC Configuration` to assign the I2S peripheral GPIOs and audio settings.
+
+Optional: If you need, change the other options according to your requirements.
+
+### Build and Flash
+
+Build the project and flash it to the board, then run monitor tool to view serial output:
+
+```
+idf.py -p PORT flash monitor
+```
+
+(To exit the serial monitor, type ``Ctrl-]``.)
+
+See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
+
+* [ESP-IDF Getting Started Guide on ESP32](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html)
+
+## Example Output
+
+Running this example, you will see the Bits per Sample changes every 5 seconds after you have run this example. You can use `i2s_set_clk` to change the Bits per Sample and the Sample Rate. The output log can be seen below:
+
+```
+I (361) pdm_rec_example: PDM microphone recording Example start
+I (371) I2S: DMA Malloc info, datalen=blocksize=2048, dma_buf_count=64
+I (401) I2S: APLL: Req RATE: 44100, real rate: 88199.977, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 22579194.000, SCLK: 2822399.250000, diva: 1, divb: 0
+I (431) I2S: APLL: Req RATE: 44100, real rate: 88199.977, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 22579194.000, SCLK: 2822399.250000, diva: 1, divb: 0
+I (431) pdm_rec_example: Initializing SD card
+I (431) pdm_rec_example: Using SDMMC peripheral
+I (441) gpio: GPIO[13]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
+Name: USD  
+Type: SDHC/SDXC
+Speed: 20 MHz
+Size: 3813MB
+I (481) pdm_rec_example: Starting recording for 60 seconds!
+I (481) pdm_rec_example: Opening file
+I (60451) pdm_rec_example: Recording done!
+I (60471) pdm_rec_example: File written on SDCard
+I (60471) pdm_rec_example: Card unmounted
+```
+
+## Troubleshooting
+
+* Program upload failure
+
+    * Hardware connection is not correct: run `idf.py -p PORT monitor`, and reboot your board to see if there are any output logs.
+    * The baud rate for downloading is too high: lower your baud rate in the `menuconfig` menu, and try again.
+
+For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you soon.

+ 2 - 0
examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/CMakeLists.txt

@@ -0,0 +1,2 @@
+idf_component_register(SRCS "i2s_recorder_main.c"
+                    INCLUDE_DIRS ".")

+ 71 - 0
examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/Kconfig.projbuild

@@ -0,0 +1,71 @@
+menu "Example Configuration"
+
+    menu "SDCard Configuration"
+
+        config EXAMPLE_SPI_MISO_GPIO
+            int "SPI MISO GPIO"
+            default 2
+            help
+                Set the GPIO number used for MISO from SPI.
+
+        config EXAMPLE_SPI_MOSI_GPIO
+            int "SPI MOSI GPIO"
+            default 15
+            help
+                Set the GPIO number used for MOSI from SPI.
+
+        config EXAMPLE_SPI_SCLK_GPIO
+            int "SPI SCLK GPIO"
+            default 14
+            help
+                Set the GPIO number used for SCLK from SPI.
+
+        config EXAMPLE_SPI_CS_GPIO
+            int "SPI CS GPIO"
+            default 13
+            help
+                Set the GPIO number used for CS from SPI.
+
+    endmenu
+
+    menu "I2S MEMS MIC Configuration"
+
+        config EXAMPLE_I2S_CH
+            int "I2S Channel Number"
+            default 0
+            help
+                Set the I2S channel number.
+
+        config EXAMPLE_AUDIO_SAMPLE_RATE
+            int "Audio Sample Rate"
+            default 44100
+            help
+                Set the audio sample rate frequency. Usually 16000 or 44100 Hz.
+
+        config EXAMPLE_AUDIO_BIT_SAMPLE
+            int "Audio Bit Sample"
+            default 16
+            help
+                Define the number of bits for each sample. Default 16 bits per sample.
+
+        config EXAMPLE_I2S_DATA_GPIO
+            int "I2S Data GPIO"
+            default 23
+            help
+                Set the GPIO number used for transmitting/receiving data from I2S.
+
+        config EXAMPLE_I2S_CLK_GPIO
+            int "I2S Clock GPIO"
+            default 22
+            help
+                Set the GPIO number used for the clock line from I2S.
+
+    endmenu
+
+    config EXAMPLE_REC_TIME
+        int "Example Recording Time in Seconds"
+        default 15
+        help
+            Set the time for recording audio in seconds.
+
+endmenu

+ 0 - 0
examples/peripherals/i2s/main/component.mk → examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/component.mk


+ 209 - 0
examples/peripherals/i2s/i2s_audio_recorder_sdcard/main/i2s_recorder_main.c

@@ -0,0 +1,209 @@
+/* I2S Digital Microphone Recording Example
+
+   This example code is in the Public Domain (or CC0 licensed, at your option.)
+
+   Unless required by applicable law or agreed to in writing, this
+   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+   CONDITIONS OF ANY KIND, either express or implied.
+*/
+#include <stdio.h>
+#include <string.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/i2s.h"
+#include "driver/gpio.h"
+#include "esp_system.h"
+#include <math.h>
+#include "esp_log.h"
+#include <sys/unistd.h>
+#include <sys/stat.h>
+#include "esp_err.h"
+#include "esp_vfs_fat.h"
+#include "driver/sdspi_host.h"
+#include "driver/spi_common.h"
+#include "sdmmc_cmd.h"
+#include "sdkconfig.h"
+
+static const char* TAG = "pdm_rec_example";
+
+#define AUDIO_SAMPLE_SIZE       (CONFIG_EXAMPLE_AUDIO_BIT_SAMPLE * 1024)
+#define SAMPLES_NUM             ((CONFIG_EXAMPLE_AUDIO_SAMPLE_RATE/100) * 2)
+#define BYTE_RATE               (1 * CONFIG_EXAMPLE_AUDIO_SAMPLE_RATE * ((CONFIG_EXAMPLE_AUDIO_BIT_SAMPLE / 8))
+#define FLASH_RECORD_SIZE       (BYTE_RATE * CONFIG_EXAMPLE_REC_TIME))
+#define SD_MOUNT_POINT          "/sdcard"
+#define SPI_DMA_CHAN            (1)
+
+// When testing SD and SPI modes, keep in mind that once the card has been
+// initialized in SPI mode, it can not be reinitialized in SD mode without
+// toggling power to the card.
+sdmmc_host_t host = SDSPI_HOST_DEFAULT();
+sdmmc_card_t* card;
+
+static int16_t i2s_readraw_buff[AUDIO_SAMPLE_SIZE];
+size_t bytes_read;
+const int WAVE_HEADER_SIZE = 44;
+
+void mount_sdcard(void)
+{
+    esp_err_t ret;
+    // Options for mounting the filesystem.
+    // If format_if_mount_failed is set to true, SD card will be partitioned and
+    // formatted in case when mounting fails.
+    esp_vfs_fat_sdmmc_mount_config_t mount_config = {
+        .format_if_mount_failed = true,
+        .max_files = 5,
+        .allocation_unit_size = 16 * 1024
+    };
+    ESP_LOGI(TAG, "Initializing SD card");
+
+    // Use settings defined above to initialize SD card and mount FAT filesystem.
+    // Note: esp_vfs_fat_sdmmc/sdspi_mount is all-in-one convenience functions.
+    // Please check its source code and implement error recovery when developing
+    // production applications.
+
+    ESP_LOGI(TAG, "Using SPI peripheral");
+
+    spi_bus_config_t bus_cfg = {
+        .mosi_io_num = CONFIG_EXAMPLE_SPI_MOSI_GPIO,
+        .miso_io_num = CONFIG_EXAMPLE_SPI_MISO_GPIO,
+        .sclk_io_num = CONFIG_EXAMPLE_SPI_SCLK_GPIO,
+        .quadwp_io_num = -1,
+        .quadhd_io_num = -1,
+        .max_transfer_sz = 4000,
+    };
+    ret = spi_bus_initialize(host.slot, &bus_cfg, SPI_DMA_CHAN);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to initialize bus.");
+        return;
+    }
+
+    // This initializes the slot without card detect (CD) and write protect (WP) signals.
+    // Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals.
+    sdspi_device_config_t slot_config = SDSPI_DEVICE_CONFIG_DEFAULT();
+    slot_config.gpio_cs = CONFIG_EXAMPLE_SPI_CS_GPIO;
+    slot_config.host_id = host.slot;
+
+    ret = esp_vfs_fat_sdspi_mount(SD_MOUNT_POINT, &host, &slot_config, &mount_config, &card);
+
+    if (ret != ESP_OK) {
+        if (ret == ESP_FAIL) {
+            ESP_LOGE(TAG, "Failed to mount filesystem. "
+                "If you want the card to be formatted, set the EXAMPLE_FORMAT_IF_MOUNT_FAILED menuconfig option.");
+        } else {
+            ESP_LOGE(TAG, "Failed to initialize the card (%s). "
+                "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret));
+        }
+        return;
+    }
+
+    // Card has been initialized, print its properties
+    sdmmc_card_print_info(stdout, card);
+}
+
+void wavHeader(char* wav_header, uint32_t wav_size, uint32_t sample_rate){
+
+    // See this for reference: http://soundfile.sapp.org/doc/WaveFormat/
+    uint32_t file_size = wav_size + WAVE_HEADER_SIZE - 8;
+    uint32_t byte_rate = 1 * CONFIG_EXAMPLE_AUDIO_SAMPLE_RATE * (CONFIG_EXAMPLE_AUDIO_BIT_SAMPLE / 8);
+
+const char set_wav_header[] = {
+    'R','I','F','F', // ChunkID
+    file_size, file_size >> 8, file_size >> 16, file_size >> 24, // ChunkSize
+    'W','A','V','E', // Format
+    'f','m','t',' ', // Subchunk1ID
+    0x10, 0x00, 0x00, 0x00, // Subchunk1Size (16 for PCM)
+    0x01, 0x00, // AudioFormat (1 for PCM)
+    0x01, 0x00, // NumChannels (1 channel)
+    sample_rate, sample_rate >> 8, sample_rate >> 16, sample_rate >> 24, // SampleRate
+    byte_rate, byte_rate >> 8, byte_rate >> 16, byte_rate >> 24, // ByteRate
+    0x02, 0x00, // BlockAlign
+    0x10, 0x00, // BitsPerSample (16 bits)
+    'd','a','t','a', // Subchunk2ID
+    wav_size, wav_size >> 8, wav_size >> 16, wav_size >> 24, // Subchunk2Size
+};
+
+    memcpy(wav_header, set_wav_header, sizeof(set_wav_header));
+}
+
+void record_wav(void)
+{
+    // Use POSIX and C standard library functions to work with files.
+    int flash_wr_size = 0;
+    ESP_LOGI(TAG, "Opening file");
+
+    char wav_header_fmt[WAVE_HEADER_SIZE];
+    wavHeader(wav_header_fmt, FLASH_RECORD_SIZE, CONFIG_EXAMPLE_AUDIO_SAMPLE_RATE);
+
+    // First check if file exists before creating a new file.
+    struct stat st;
+    if (stat(SD_MOUNT_POINT"/record.wav", &st) == 0) {
+        // Delete it if it exists
+        unlink(SD_MOUNT_POINT"/record.wav");
+    }
+
+    // Create new WAV file
+    FILE* f = fopen(SD_MOUNT_POINT"/record.wav", "a");
+    if (f == NULL) {
+        ESP_LOGE(TAG, "Failed to open file for writing");
+        return;
+    }
+
+    // Write the header to the WAV file
+    fwrite(wav_header_fmt, 1, WAVE_HEADER_SIZE, f);
+
+    // Start recording
+    while (flash_wr_size < FLASH_RECORD_SIZE) {
+        // Read the RAW samples from the microphone
+        i2s_read(CONFIG_EXAMPLE_I2S_CH, (char *)i2s_readraw_buff, AUDIO_SAMPLE_SIZE, &bytes_read, portMAX_DELAY);
+        // Write the samples to the WAV file
+        fwrite(i2s_readraw_buff, 1, bytes_read, f);
+        flash_wr_size += bytes_read;
+    }
+
+    ESP_LOGI(TAG, "Recording done!");
+    fclose(f);
+    ESP_LOGI(TAG, "File written on SDCard");
+
+    // All done, unmount partition and disable SPI peripheral
+    esp_vfs_fat_sdcard_unmount(SD_MOUNT_POINT, card);
+    ESP_LOGI(TAG, "Card unmounted");
+    // Deinitialize the bus after all devices are removed
+    spi_bus_free(host.slot);
+}
+
+void init_microphone(void)
+{
+    i2s_config_t i2s_config = {
+        .mode = I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM,
+        .sample_rate = CONFIG_EXAMPLE_AUDIO_SAMPLE_RATE,
+        .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
+        .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
+        .communication_format = I2S_COMM_FORMAT_STAND_I2S,
+        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
+        .dma_buf_count = 64,
+        .dma_buf_len = 1024,
+        .use_apll = 1
+    };
+
+    i2s_pin_config_t pin_config;
+    pin_config.bck_io_num = I2S_PIN_NO_CHANGE;
+    pin_config.ws_io_num = CONFIG_EXAMPLE_I2S_CLK_GPIO;
+    pin_config.data_out_num = I2S_PIN_NO_CHANGE;
+    pin_config.data_in_num = CONFIG_EXAMPLE_I2S_DATA_GPIO;
+
+    i2s_driver_install(CONFIG_EXAMPLE_I2S_CH, &i2s_config, 0, NULL);
+    i2s_set_pin(CONFIG_EXAMPLE_I2S_CH, &pin_config);
+    i2s_set_clk(CONFIG_EXAMPLE_I2S_CH, CONFIG_EXAMPLE_AUDIO_SAMPLE_RATE, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_MONO);
+}
+
+void app_main(void)
+{
+    ESP_LOGI(TAG, "PDM microphone recording Example start");
+    // Mount the SDCard for recording the audio file
+    mount_sdcard();
+    // Init the PDM digital microphone
+    init_microphone();
+    ESP_LOGI(TAG, "Starting recording for %d seconds!", CONFIG_EXAMPLE_REC_TIME);
+    // Start Recording
+    record_wav();
+}

+ 6 - 0
examples/peripherals/i2s/i2s_basic/CMakeLists.txt

@@ -0,0 +1,6 @@
+# The following lines of boilerplate have to be in your project's CMakeLists
+# in this exact order for cmake to work correctly
+cmake_minimum_required(VERSION 3.5)
+
+include($ENV{IDF_PATH}/tools/cmake/project.cmake)
+project(esp32-i2s-driver-example)

+ 0 - 0
examples/peripherals/i2s/Makefile → examples/peripherals/i2s/i2s_basic/Makefile


+ 0 - 0
examples/peripherals/i2s/README.md → examples/peripherals/i2s/i2s_basic/README.md


+ 0 - 0
examples/peripherals/i2s/main/CMakeLists.txt → examples/peripherals/i2s/i2s_basic/main/CMakeLists.txt


+ 6 - 0
examples/peripherals/i2s/i2s_basic/main/component.mk

@@ -0,0 +1,6 @@
+#
+# "main" pseudo-component makefile.
+#
+# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
+
+COMPONENT_ADD_INCLUDEDIRS := .

+ 0 - 0
examples/peripherals/i2s/main/i2s_example_main.c → examples/peripherals/i2s/i2s_basic/main/i2s_example_main.c


+ 0 - 1
tools/ci/mypy_ignore_list.txt

@@ -65,7 +65,6 @@ examples/get-started/blink/example_test.py
 examples/get-started/hello_world/example_test.py
 examples/peripherals/gpio/generic_gpio/example_test.py
 examples/peripherals/i2c/i2c_tools/example_test.py
-examples/peripherals/i2s_adc_dac/tools/generate_audio_file.py
 examples/peripherals/rmt/ir_protocols/example_test.py
 examples/peripherals/sdio/sdio_test.py
 examples/peripherals/twai/twai_alert_and_recovery/example_test.py