Skip to content

Instantly share code, notes, and snippets.

@mongonta0716
Created June 9, 2020 02:05
Show Gist options
  • Save mongonta0716/372974aa3d86a1273558aad58a05bd24 to your computer and use it in GitHub Desktop.
Save mongonta0716/372974aa3d86a1273558aad58a05bd24 to your computer and use it in GitHub Desktop.
#include <M5Atom.h>
#include <driver/i2s.h>
#include "AquesTalkTTS.h"
#include "driver/dac.h"
#define CONFIG_I2S_BCK_PIN 19
#define CONFIG_I2S_LRCK_PIN 33
#define CONFIG_I2S_DATA_PIN 22
#define CONFIG_I2S_DATA_IN_PIN 23
#define SPEAKER_I2S_NUMBER I2S_NUM_0
#define MODE_MIC 0
#define MODE_SPK 1
#define DATA_SIZE 1024
void InitI2SSpeakerOrMic(int mode)
{
esp_err_t err = ESP_OK;
i2s_driver_uninstall(SPEAKER_I2S_NUMBER);
i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER),
.sample_rate = 16000,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, // is fixed at 12bit, stereo, MSB
.channel_format = I2S_CHANNEL_FMT_ALL_RIGHT,
.communication_format = I2S_COMM_FORMAT_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 6,
.dma_buf_len = 60,
};
if (mode == MODE_MIC)
{
i2s_config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM);
}
else
{
i2s_config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX);
i2s_config.use_apll = false;
i2s_config.tx_desc_auto_clear = true;
}
err += i2s_driver_install(SPEAKER_I2S_NUMBER, &i2s_config, 0, NULL);
i2s_pin_config_t tx_pin_config;
tx_pin_config.bck_io_num = CONFIG_I2S_BCK_PIN;
tx_pin_config.ws_io_num = CONFIG_I2S_LRCK_PIN;
tx_pin_config.data_out_num = CONFIG_I2S_DATA_PIN;
tx_pin_config.data_in_num = CONFIG_I2S_DATA_IN_PIN;
//Serial.println("Init i2s_set_pin");
err += i2s_set_pin(SPEAKER_I2S_NUMBER, &tx_pin_config);
//Serial.println("Init i2s_set_clk");
err += i2s_set_clk(SPEAKER_I2S_NUMBER, 16000, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_MONO);
}
void setup() {
M5.begin();
M5.dis.drawpix(0, CRGB(128, 0, 0));
InitI2SSpeakerOrMic(MODE_SPK);
int iret = TTS.create(NULL);
}
void loop() {
M5.update();
if(M5.Btn.wasPressed()) {
TTS.play("emufaibu,atomu,tanoshiiyo", 20);
Serial.printf("Free Heap Size = %d\n", esp_get_free_heap_size());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment