the ESP32 example got compiling error for ESP32S3, passed compiling for ESP32 , why?
CODE:
Code: Select all
#include <driver/i2s.h>
// I2S
#define I2S_SAMPLE_RATE (277777) // Max sampling frequency = 277.777 kHz
#define ADC_INPUT (ADC1_CHANNEL_4) //pin 32
#define I2S_DMA_BUF_LEN (1024)
// PWM
#define GENERATE_PWM
#define OUTPUT_PIN (27)
#define PWM_FREQUENCY ((I2S_SAMPLE_RATE)/4)
#define PWM_DUTY_PERCENT (50)
#define PWM_RESOLUTION_BITS (2) // Lower bit resolution enables higher frequency
#define PWM_DUTY_VALUE ((((1<<(PWM_RESOLUTION_BITS)))*(PWM_DUTY_PERCENT))/100) // Duty value used for setup function based on resolution
// Sample post processing
#define PRINT_ALL_VALUES
#define AVERAGE_EVERY_N_SAMPLES (100)
void i2sInit(){
i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_ADC_BUILT_IN),
.sample_rate = I2S_SAMPLE_RATE, // The format of the signal using ADC_BUILT_IN
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, // is fixed at 12bit, stereo, MSB
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_STAND_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 8,
.dma_buf_len = I2S_DMA_BUF_LEN,
.use_apll = false,
.tx_desc_auto_clear = false,
.fixed_mclk = 0
};
Serial.printf("Attempting to setup I2S ADC with sampling frequency %d Hz\n", I2S_SAMPLE_RATE);
if(ESP_OK != i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL)){
Serial.printf("Error installing I2S. Halt!");
while(1);
}
if(ESP_OK != i2s_set_adc_mode(ADC_UNIT_1, ADC_INPUT)){
Serial.printf("Error setting up ADC. Halt!");
while(1);
}
if(ESP_OK != adc1_config_channel_atten(ADC_INPUT, ADC_ATTEN_DB_11)){
Serial.printf("Error setting up ADC attenuation. Halt!");
while(1);
}
if(ESP_OK != i2s_adc_enable(I2S_NUM_0)){
Serial.printf("Error enabling ADC. Halt!");
while(1);
}
Serial.printf("I2S ADC setup ok\n");
}
void setup() {
Serial.begin(115200);
#ifdef GENERATE_PWM
// PWM setup
Serial.printf("Setting up PWM: frequency = %d; resolution bits %d; Duty cycle = %d; duty value = %d, Output pin = %d\n", PWM_FREQUENCY, PWM_RESOLUTION_BITS, PWM_DUTY_PERCENT, PWM_DUTY_VALUE, OUTPUT_PIN);
uint32_t freq = ledcSetup(0, PWM_FREQUENCY, PWM_RESOLUTION_BITS);
if(freq != PWM_FREQUENCY){
Serial.printf("Error setting up PWM. Halt!");
while(1);
}
ledcAttachPin(OUTPUT_PIN, 0);
ledcWrite(0, PWM_DUTY_VALUE);
Serial.printf("PWM setup ok\n");
#endif
// Initialize the I2S peripheral
i2sInit();
}
void loop(){
// The 4 high bits are the channel, and the data is inverted
size_t bytes_read;
uint16_t buffer[I2S_DMA_BUF_LEN] = {0};
#ifdef AVERAGE_EVERY_N_SAMPLES
uint32_t read_counter = 0;
uint32_t averaged_reading = 0;
uint64_t read_sum = 0;
#endif
while(1){
i2s_read(I2S_NUM_0, &buffer, sizeof(buffer), &bytes_read, 15);
//Serial.printf("read %d Bytes\n", bytes_read);
for(int i = 0; i < bytes_read/2; ++i){
#ifdef PRINT_ALL_VALUES
//Serial.printf("[%d] = %d\n", i, buffer[i] & 0x0FFF); // Print with indexes
Serial.printf("Signal:%d ", buffer[i] & 0x0FFF); // Print compatible with Arduino Plotter
#endif
#ifdef AVERAGE_EVERY_N_SAMPLES
read_sum += buffer[i] & 0x0FFF;
++read_counter;
if(read_counter == AVERAGE_EVERY_N_SAMPLES){
averaged_reading = read_sum / AVERAGE_EVERY_N_SAMPLES;
//Serial.printf("averaged_reading = %d over %d samples\n", averaged_reading, read_counter); // Print with additional info
Serial.printf("Averaged_signal:%d", averaged_reading); // Print compatible with Arduino Plotter
read_counter = 0;
read_sum = 0;
}
#endif
#if defined(PRINT_ALL_VALUES) || defined (AVERAGE_EVERY_N_SAMPLES)
Serial.printf("\n");
#endif
} // for
} // while
}
Code: Select all
Arduino: 1.8.19 (Windows 10), Board: "ESP32S3 Dev Module, Disabled, Disabled, QIO 80MHz, 4MB (32Mb), Core 1, Core 1, Hardware CDC and JTAG, Disabled, Disabled, Disabled, UART0 / Hardware CDC, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi), 921600, None, Disabled"
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino: In function 'void i2sInit()':
HiFreq_ADC:44:58: error: 'I2S_MODE_ADC_BUILT_IN' was not declared in this scope
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_ADC_BUILT_IN),
^~~~~~~~~~~~~~~~~~~~~
HiFreq_ADC:61:33: error: 'ADC_UNIT_1' was not declared in this scope
if(ESP_OK != i2s_set_adc_mode(ADC_UNIT_1, ADC_INPUT)){
^~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:61:33: note: suggested alternative: 'ADC_INPUT'
if(ESP_OK != i2s_set_adc_mode(ADC_UNIT_1, ADC_INPUT)){
^~~~~~~~~~
ADC_INPUT
HiFreq_ADC:27:20: error: 'ADC1_CHANNEL_4' was not declared in this scope
#define ADC_INPUT (ADC1_CHANNEL_4) //pin 32
^~~~~~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:61:45: note: in expansion of macro 'ADC_INPUT'
if(ESP_OK != i2s_set_adc_mode(ADC_UNIT_1, ADC_INPUT)){
^~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:27:20: note: suggested alternative: 'I2S_CHANNEL_MONO'
#define ADC_INPUT (ADC1_CHANNEL_4) //pin 32
^~~~~~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:61:45: note: in expansion of macro 'ADC_INPUT'
if(ESP_OK != i2s_set_adc_mode(ADC_UNIT_1, ADC_INPUT)){
^~~~~~~~~
HiFreq_ADC:61:16: error: 'i2s_set_adc_mode' was not declared in this scope
if(ESP_OK != i2s_set_adc_mode(ADC_UNIT_1, ADC_INPUT)){
^~~~~~~~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:61:16: note: suggested alternative: 'i2s_set_clk'
if(ESP_OK != i2s_set_adc_mode(ADC_UNIT_1, ADC_INPUT)){
^~~~~~~~~~~~~~~~
i2s_set_clk
HiFreq_ADC:27:20: error: 'ADC1_CHANNEL_4' was not declared in this scope
#define ADC_INPUT (ADC1_CHANNEL_4) //pin 32
^~~~~~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:65:42: note: in expansion of macro 'ADC_INPUT'
if(ESP_OK != adc1_config_channel_atten(ADC_INPUT, ADC_ATTEN_DB_11)){
^~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:27:20: note: suggested alternative: 'I2S_CHANNEL_MONO'
#define ADC_INPUT (ADC1_CHANNEL_4) //pin 32
^~~~~~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:65:42: note: in expansion of macro 'ADC_INPUT'
if(ESP_OK != adc1_config_channel_atten(ADC_INPUT, ADC_ATTEN_DB_11)){
^~~~~~~~~
HiFreq_ADC:65:53: error: 'ADC_ATTEN_DB_11' was not declared in this scope
if(ESP_OK != adc1_config_channel_atten(ADC_INPUT, ADC_ATTEN_DB_11)){
^~~~~~~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:65:53: note: suggested alternative: 'ADC_ATTENDB_MAX'
if(ESP_OK != adc1_config_channel_atten(ADC_INPUT, ADC_ATTEN_DB_11)){
^~~~~~~~~~~~~~~
ADC_ATTENDB_MAX
HiFreq_ADC:65:16: error: 'adc1_config_channel_atten' was not declared in this scope
if(ESP_OK != adc1_config_channel_atten(ADC_INPUT, ADC_ATTEN_DB_11)){
^~~~~~~~~~~~~~~~~~~~~~~~~
HiFreq_ADC:70:16: error: 'i2s_adc_enable' was not declared in this scope
if(ESP_OK != i2s_adc_enable(I2S_NUM_0)){
^~~~~~~~~~~~~~
C:\Users\Xinzhou\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\libraries\ESP32\examples\I2S\HiFreq_ADC\HiFreq_ADC.ino:70:16: note: suggested alternative: 'esp_intr_enable'
if(ESP_OK != i2s_adc_enable(I2S_NUM_0)){
^~~~~~~~~~~~~~
esp_intr_enable
exit status 1
'I2S_MODE_ADC_BUILT_IN' was not declared in this scope
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.