Camera and I2S audio simultaneously use

takurot
Posts: 3
Joined: Wed Aug 10, 2022 1:44 am

Camera and I2S audio simultaneously use

Postby takurot » Wed Aug 10, 2022 2:08 am

I could not find the solution in any where, so please let me ask here.

I use ESP32-WROOVER-DEV board and I want to implement both I2S audio and Camera function. But audio does not play at all when I start esp_camera_fb_get().

I use the library for audio as bellow, and I2S amp MAX98357A is attached to the board.
https://github.com/schreibfaul1/ESP32-a ... e285f16d6f

I confirmed that the single function for camera and audio separately, and they works fine as independent. But not in simultaneously.

I'd like to know that this is even possible.
  1. #include "esp_camera.h"
  2. #include <HTTPClient.h>
  3. #include <Preferences.h>
  4. #include <WiFi.h>
  5. #include "Audio.h"
  6.  
  7. #define I2S_DOUT     15
  8. #define I2S_BCLK      12
  9. #define I2S_LRC        33
  10.  
  11. void setup() {
  12.   Serial.begin(115200);
  13.   Serial.setDebugOutput(true);
  14.  
  15.   camera_config_t config;
  16.   config.ledc_channel = LEDC_CHANNEL_0;
  17.   config.ledc_timer = LEDC_TIMER_0;
  18.   config.pin_d0 = Y2_GPIO_NUM;
  19.   config.pin_d1 = Y3_GPIO_NUM;
  20.   config.pin_d2 = Y4_GPIO_NUM;
  21.   config.pin_d3 = Y5_GPIO_NUM;
  22.   config.pin_d4 = Y6_GPIO_NUM;
  23.   config.pin_d5 = Y7_GPIO_NUM;
  24.   config.pin_d6 = Y8_GPIO_NUM;
  25.   config.pin_d7 = Y9_GPIO_NUM;
  26.   config.pin_xclk = XCLK_GPIO_NUM;
  27.   config.pin_pclk = PCLK_GPIO_NUM;
  28.   config.pin_vsync = VSYNC_GPIO_NUM;
  29.   config.pin_href = HREF_GPIO_NUM;
  30.   config.pin_sscb_sda = SIOD_GPIO_NUM;
  31.   config.pin_sscb_scl = SIOC_GPIO_NUM;
  32.   config.pin_pwdn = PWDN_GPIO_NUM;
  33.   config.pin_reset = RESET_GPIO_NUM;
  34.   config.xclk_freq_hz = 20000000;
  35. //  config.frame_size = FRAMESIZE_UXGA;
  36.   config.frame_size = FRAMESIZE_VGA;
  37.   config.pixel_format = PIXFORMAT_JPEG; // for streaming
  38.   //config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
  39.   config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
  40.   config.fb_location = CAMERA_FB_IN_PSRAM;
  41.   config.jpeg_quality = 10;
  42.   config.fb_count = 1;
  43.  
  44.  }
  45.  
  46.   // camera init
  47.   esp_err_t err = esp_camera_init(&config);
  48.   if (err != ESP_OK) {
  49.     Serial.printf("Camera init failed with error 0x%x", err);
  50.     return;
  51.   }
  52.  
  53.   sensor_t * s = esp_camera_sensor_get();
  54.   // initial sensors are flipped vertically and colors are a bit saturated
  55.   if (s->id.PID == OV3660_PID) {
  56.     s->set_vflip(s, 1); // flip it back
  57.     s->set_brightness(s, 1); // up the brightness just a bit
  58.     s->set_saturation(s, -2); // lower the saturation
  59.   }
  60.  
  61.   WiFi.begin(ssid, password);
  62.   WiFi.setSleep(false);
  63.  
  64.   while (WiFi.status() != WL_CONNECTED) {
  65.     delay(500);
  66.     Serial.print(".");
  67.   }
  68.   Serial.println("");
  69.   Serial.println("WiFi connected");
  70.  
  71.   delay(1500);
  72.  
  73.   audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
  74.   audio.setVolume(10);
  75.   audio.connecttohost("http://mp3.ffh.de/radioffh/hqlivestream.mp3");
  76.   Serial.println("Audio Set");
  77.  
  78. }
  79.  
  80. void loop() {
  81.   audio.loop(); //NOT WORKING
  82.  
  83. // ---- get camera capture
  84.   camera_fb_t *fb = NULL;
  85.   fb = esp_camera_fb_get(); //Camera can get an image
  86.  
  87.   if (!fb) {
  88.     Serial.println("failure: Camera capture");
  89.     return;
  90.   }else{
  91.     Serial.println("Success: Camera capture");
  92.   }
  93.   esp_camera_fb_return(fb);
  94. }

BotondColop
Posts: 19
Joined: Tue May 10, 2022 6:46 am

Re: Camera and I2S audio simultaneously use

Postby BotondColop » Wed Aug 10, 2022 7:44 am

Can you share also the defined pin number what are you using to the camera setup?

takurot
Posts: 3
Joined: Wed Aug 10, 2022 1:44 am

Re: Camera and I2S audio simultaneously use

Postby takurot » Wed Aug 10, 2022 7:50 am

Thanks for your reply. Camera Pin assigns are as bellow
  1. #define PWDN_GPIO_NUM    -1
  2. #define RESET_GPIO_NUM   -1
  3. #define XCLK_GPIO_NUM    21
  4. #define SIOD_GPIO_NUM    26
  5. #define SIOC_GPIO_NUM    27
  6.  
  7. #define Y9_GPIO_NUM      35
  8. #define Y8_GPIO_NUM      34
  9. #define Y7_GPIO_NUM      39
  10. #define Y6_GPIO_NUM      36
  11. #define Y5_GPIO_NUM      19
  12. #define Y4_GPIO_NUM      18
  13. #define Y3_GPIO_NUM       5
  14. #define Y2_GPIO_NUM       4
  15. #define VSYNC_GPIO_NUM   25
  16. #define HREF_GPIO_NUM    23
  17. #define PCLK_GPIO_NUM    22

takurot
Posts: 3
Joined: Wed Aug 10, 2022 1:44 am

Re: Camera and I2S audio simultaneously use

Postby takurot » Thu Aug 11, 2022 1:45 am

I did't include the audio definition on the comment above(There is a definition on actual code)

I tried to change the I2C channel, but it did not work either way.

I2S channel 1
  1. Audio audio(false, 3, 1);
I2S channel 0
  1. Audio audio();

BotondColop
Posts: 19
Joined: Tue May 10, 2022 6:46 am

Re: Camera and I2S audio simultaneously use

Postby BotondColop » Thu Aug 11, 2022 8:08 am

One problem what i think, both of the function use PSRAM

Code: Select all

 class AudioBuffer {
// AudioBuffer will be allocated in PSRAM, If PSRAM not available or has not enough space AudioBuffer will be
// allocated in FlashRAM with reduced size
Audio:
you can check this funktion

Code: Select all

bool     havePSRAM() { return m_f_psram; };
This can be a problem. Maybe you can test -> AudioBuffer in FlashRAM

Who is online

Users browsing this forum: stoumk and 80 guests