Помогите разобраться с библиотекой I2S к ESP32

yron

Member
В пакет ESP32 для ArduinoIDE входит библиотека driver/i2s.h , однако в единственном примере с этой библиотекой она используется для считывания данных с внешнего АЦП, а мне нужно воспроизводить аудио на внешнем ЦАПе из массива.
Помогите разобраться что и как нужно настроить и как и куда записывать данные из массива.
i2s.png


Саму библиотеку я в файлах ардуино найти не смог , но нашел её на гитхабе , но её код сюда вставить не получается , форум выдает что слишком длинное сообщение.
Просто дам ссылку driver/i2s.h
 

yron

Member
Нашел инструкцию

i2s_write( i2s_port_ti2s_num, const void *src, size_t size, size_t *bytes_written, TickType_t ticks_to_wait)

и описание на сайте

Parameters

i2s_num: I2S_NUM_0, I2S_NUM_1
src: Source address to write from
size: Size of data in bytes
bytes_written: Number of bytes written, if timeout, the result will be less than the size passed in.
ticks_to_wait: TX buffer wait timeout in RTOS ticks. If this many ticks pass without space becoming available in the DMA transmit buffer, then the function will return (note that if the data is written to the DMA buffer in pieces, the overall operation may still take longer than this timeout.) Pass portMAX_DELAY for no timeout.

-Мне не понятно , какой порт я должен выбрать , I2S_NUM_0 или I2S_NUM_1 ? это каналы левый и правый ?
-src это адрес массива ?
-size это размер массива ?
-bytes_written что это и зачем ?
-ticks_to_wait: так же не могу понять зачем.


как я понимаю должно быть что-то такое ?
char sample[];
i2s_write( I2S_NUM_0 , *sample , sizeof(sample), bytes_written? , ticks_to_wait? );
 

yron

Member
Попробовал так
i2s_write(I2S_NUM_0, &sample, sizeof(sample) ,1000, 0);
но выдаёт ошибки
C:\Users\Ваня\Documents\Arduino\Новая папка\PlayAACFromPROGMEM\PlayAACFromPROGMEM.ino: In function 'void setup()':
C:\Users\Ваня\Documents\Arduino\Новая папка\PlayAACFromPROGMEM\PlayAACFromPROGMEM.ino:22:60: error: invalid conversion from 'int' to 'size_t* {aka unsigned int*}' [-fpermissive]
In file included from C:\Users\Ваня\Documents\Arduino\Новая папка\PlayAACFromPROGMEM\PlayAACFromPROGMEM.ino:1:0:
C:\Users\����\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/driver/driver/i2s.h:325:11: note: initializing argument 4 of 'esp_err_t i2s_write(i2s_port_t, const void*, size_t, size_t*, TickType_t)'
esp_err_t i2s_write(i2s_port_t i2s_num, const void *src, size_t size, size_t *bytes_written, TickType_t ticks_to_wait);
 

yron

Member
Вот еще что нашел
Код:
esp_err_t i2s_write(i2s_port_t i2s_num, const void *src, size_t size, size_t *bytes_written, TickType_t ticks_to_wait);

/**
 * @brief Write data to I2S DMA transmit buffer while expanding the number of bits per sample. For example, expanding 16-bit PCM to 32-bit PCM.
 *
 * @param i2s_num             I2S_NUM_0, I2S_NUM_1
 *
 * @param src                 Source address to write from
 *
 * @param size                Size of data in bytes
 *
 * @param src_bits            Source audio bit
 *
 * @param aim_bits            Bit wanted, no more than 32, and must be greater than src_bits
 *
 * @param[out] bytes_written  Number of bytes written, if timeout, the result will be less than the size passed in.
 *
 * @param ticks_to_wait       TX buffer wait timeout in RTOS ticks. If this
 * many ticks pass without space becoming available in the DMA
 * transmit buffer, then the function will return (note that if the
 * data is written to the DMA buffer in pieces, the overall operation
 * may still take longer than this timeout.) Pass portMAX_DELAY for no
 * timeout.
 *
 * Format of the data in source buffer is determined by the I2S
 * configuration (see i2s_config_t).
Помогите разобраться как этим пользоваться
 

CodeNameHawk

Moderator
Команда форума
Я с таким не работал.
Вбейте в поиск "протокол i2s в esp32" вроде описано как с ним работать.
Для начала запустите пример, если заработает...
Дальше методом проб и ошибок...
 
Сверху Снизу