esp-idf/examples/peripherals/i2s_adc_dac
Angus Gratton 04ae56806c Merge branch 'master' into feature/esp32s2beta_update 2019-08-08 15:26:58 +10:00
..
main tools: Mass fixing of empty prototypes (for -Wstrict-prototypes) 2019-08-01 16:28:56 +07:00
tools examples: Fix Python coding style 2018-12-06 09:34:33 +01:00
CMakeLists.txt ci: support to build esp32s2beta simple examples 2019-07-08 09:16:06 +08:00
Makefile remove executable permission from source files 2018-05-29 20:07:45 +08:00
README.md examples: change default build instructions in docs to CMake 2019-08-02 16:32:46 +05:30
partitions_adc_dac_example.csv global: update note in the partition tables 2019-07-27 10:28:16 +02:00

README.md

I2S Built-in ADC/DAC Example

(See the README.md file in the upper level 'examples' directory for more information about examples.)

In this example, we configure I2S to work in I2S_ADC and I2S_DAC modes and then:

  • recording sound from ADC,
  • playing the recorded sound,
  • playing an audio file in flash via DAC.

Note:

The tools directory contains generate_audio_file.py script for generating audio files:

* The script provides an example of generating audio tables from `.wav` files.
* In this example, the `wav` file must be in 16k/16bit mono format.
* The script will bundle the `wav` files into a single table named `audio_example_file.h`.
* Since the ADC can only play 8-bit data, the script will scale each 16-bit value to a 8-bit value.
* The script will covert all signed values into unsigned values because only positive values will be output by the ADC.

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 microphone (with amplifier) and one or two speaker(s) for testing.

The following is the hardware connection:

hardware module GPIO
Microphone ADC1_CH0 GPIO36
speaker(R) DAC1 GPIO25
speaker(L) DAC2 GPIO26

Configure the Project

idf.py menuconfig
  • Set serial port under Serial Flasher Options, the flash size should be set to 4 MB.
  • Select "Custom partition table CSV" and rename "Custom partition CSV file" to "partitions_adc_dac_example.csv".

(Note that you can use sdkconfig.defaults)

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.

Example Output

Reset your development board. The application it will first record the sound through the microphone. Then it will play the recorded sound, and finally a piece of audio stored in the flash. The following is the output log:

partiton addr: 0x00110000; size: 2097152; label: storage
Erasing flash
partiton addr: 0x00110000; size: 2097152; label: storage
Erase size: 323584 Bytes
I2S: PLL_D2: Req RATE: 16000, real rate: 1004.000, BITS: 16, CLKM: 83, BCK: 60, MCLK: 83.333, SCLK: 32128.000000, diva: 64, divb: 21
Sound recording 5%
Sound recording 10%
...
Sound recording 97%
Sound recording 102% 
playing: 0 %
playing: 1 %
playing: 2 %
...
playing: 96 %
playing: 97 %
playing: 98 %
Playing file example:
I2S: PLL_D2: Req RATE: 16000, real rate: 1004.000, BITS: 16, CLKM: 83, BCK: 60, MCLK: 83.333, SCLK: 32128.000000, diva: 64, divb: 21

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 on GitHub. We will get back to you soon.