9343f74ca21059a49dc11eb7426d8b12def82a76
Chip-cn-dat/denovocn-dat/MSM261S4030H0R-dat/2024-12-26-15-04-51.png
| ... | ... | Binary files /dev/null and b/Chip-cn-dat/denovocn-dat/MSM261S4030H0R-dat/2024-12-26-15-04-51.png differ |
Chip-cn-dat/denovocn-dat/MSM261S4030H0R-dat/2024-12-26-15-05-41.png
| ... | ... | Binary files /dev/null and b/Chip-cn-dat/denovocn-dat/MSM261S4030H0R-dat/2024-12-26-15-05-41.png differ |
Chip-cn-dat/denovocn-dat/MSM261S4030H0R-dat/MSM261S4030H0R-dat.md
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | + |
|
| 2 | +# MSM261S4030H0R-dat |
|
| 3 | + |
|
| 4 | +- https://www.denovocn.com/sites/default/files/MSM261S4030H0R.pdf |
|
| 5 | + |
|
| 6 | + |
|
| 7 | + |
|
| 8 | +## SCH |
|
| 9 | + |
|
| 10 | + |
|
| 11 | + |
|
| 12 | +- [[I2S-dat]] |
|
| ... | ... | \ No newline at end of file |
Chip-dat/InvenSense-dat/INMP441-dat/2024-12-26-15-08-01.png
| ... | ... | Binary files /dev/null and b/Chip-dat/InvenSense-dat/INMP441-dat/2024-12-26-15-08-01.png differ |
Chip-dat/InvenSense-dat/INMP441-dat/INMP441-code.ino
| ... | ... | @@ -0,0 +1,108 @@ |
| 1 | + |
|
| 2 | +/* |
|
| 3 | +ESP32 I2S Microphone Sample |
|
| 4 | +esp32-i2s-mic-sample.ino |
|
| 5 | +Sample sound from I2S microphone, display on Serial Plotter |
|
| 6 | +Requires INMP441 I2S microphone |
|
| 7 | + |
|
| 8 | +Faranux Electronics |
|
| 9 | +*/ |
|
| 10 | + |
|
| 11 | +// Include I2S driver |
|
| 12 | +#include <driver/i2s.h> |
|
| 13 | + |
|
| 14 | +// Connections to INMP441 I2S microphone |
|
| 15 | +#define I2S_WS 25 |
|
| 16 | +#define I2S_SD 33 |
|
| 17 | +#define I2S_SCK 32 |
|
| 18 | + |
|
| 19 | +// Use I2S Processor 0 |
|
| 20 | +#define I2S_PORT I2S_NUM_0 |
|
| 21 | + |
|
| 22 | +// Define input buffer length |
|
| 23 | +#define bufferLen 64 |
|
| 24 | +int16_t sBuffer[bufferLen]; |
|
| 25 | + |
|
| 26 | +void i2s_install() |
|
| 27 | +{ |
|
| 28 | + // Set up I2S Processor configuration |
|
| 29 | + const i2s_config_t i2s_config = { |
|
| 30 | + .mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX), |
|
| 31 | + .sample_rate = 44100, |
|
| 32 | + //.sample_rate = 11025, if you like |
|
| 33 | + .bits_per_sample = i2s_bits_per_sample_t(16), |
|
| 34 | + .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, |
|
| 35 | + //.communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S), |
|
| 36 | + .communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB), |
|
| 37 | + .intr_alloc_flags = 0, |
|
| 38 | + .dma_buf_count = 8, |
|
| 39 | + .dma_buf_len = bufferLen, |
|
| 40 | + .use_apll = false}; |
|
| 41 | + |
|
| 42 | + i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL); |
|
| 43 | +} |
|
| 44 | + |
|
| 45 | +void i2s_setpin() |
|
| 46 | +{ |
|
| 47 | + // Set I2S pin configuration |
|
| 48 | + const i2s_pin_config_t pin_config = { |
|
| 49 | + .bck_io_num = I2S_SCK, |
|
| 50 | + .ws_io_num = I2S_WS, |
|
| 51 | + .data_out_num = -1, |
|
| 52 | + .data_in_num = I2S_SD}; |
|
| 53 | + |
|
| 54 | + i2s_set_pin(I2S_PORT, &pin_config); |
|
| 55 | +} |
|
| 56 | + |
|
| 57 | +void setup() |
|
| 58 | +{ |
|
| 59 | + |
|
| 60 | + // Set up Serial Monitor |
|
| 61 | + Serial.begin(115200); |
|
| 62 | + Serial.println(" "); |
|
| 63 | + |
|
| 64 | + delay(1000); |
|
| 65 | + |
|
| 66 | + // Set up I2S |
|
| 67 | + i2s_install(); |
|
| 68 | + i2s_setpin(); |
|
| 69 | + i2s_start(I2S_PORT); |
|
| 70 | + |
|
| 71 | + delay(500); |
|
| 72 | +} |
|
| 73 | + |
|
| 74 | +void loop() |
|
| 75 | +{ |
|
| 76 | + |
|
| 77 | + // False print statements to "lock range" on serial plotter display |
|
| 78 | + // Change rangelimit value to adjust "sensitivity" |
|
| 79 | + int rangelimit = 3000; |
|
| 80 | + Serial.print(rangelimit * -1); |
|
| 81 | + Serial.print(" "); |
|
| 82 | + Serial.print(rangelimit); |
|
| 83 | + Serial.print(" "); |
|
| 84 | + |
|
| 85 | + // Get I2S data and place in data buffer |
|
| 86 | + size_t bytesIn = 0; |
|
| 87 | + esp_err_t result = i2s_read(I2S_PORT, &sBuffer, bufferLen, &bytesIn, portMAX_DELAY); |
|
| 88 | + |
|
| 89 | + if (result == ESP_OK) |
|
| 90 | + { |
|
| 91 | + // Read I2S data buffer |
|
| 92 | + int16_t samples_read = bytesIn / 8; |
|
| 93 | + if (samples_read > 0) |
|
| 94 | + { |
|
| 95 | + float mean = 0; |
|
| 96 | + for (int16_t i = 0; i < samples_read; ++i) |
|
| 97 | + { |
|
| 98 | + mean += (sBuffer[i]); |
|
| 99 | + } |
|
| 100 | + |
|
| 101 | + // Average the data reading |
|
| 102 | + mean /= samples_read; |
|
| 103 | + |
|
| 104 | + // Print to serial plotter |
|
| 105 | + Serial.println(mean); |
|
| 106 | + } |
|
| 107 | + } |
|
| 108 | +} |
|
| ... | ... | \ No newline at end of file |
Chip-dat/InvenSense-dat/INMP441-dat/INMP441-code/INMP441-code.ino
| ... | ... | @@ -1,108 +0,0 @@ |
| 1 | - |
|
| 2 | -/* |
|
| 3 | -ESP32 I2S Microphone Sample |
|
| 4 | -esp32-i2s-mic-sample.ino |
|
| 5 | -Sample sound from I2S microphone, display on Serial Plotter |
|
| 6 | -Requires INMP441 I2S microphone |
|
| 7 | - |
|
| 8 | -Faranux Electronics |
|
| 9 | -*/ |
|
| 10 | - |
|
| 11 | -// Include I2S driver |
|
| 12 | -#include <driver/i2s.h> |
|
| 13 | - |
|
| 14 | -// Connections to INMP441 I2S microphone |
|
| 15 | -#define I2S_WS 25 |
|
| 16 | -#define I2S_SD 33 |
|
| 17 | -#define I2S_SCK 32 |
|
| 18 | - |
|
| 19 | -// Use I2S Processor 0 |
|
| 20 | -#define I2S_PORT I2S_NUM_0 |
|
| 21 | - |
|
| 22 | -// Define input buffer length |
|
| 23 | -#define bufferLen 64 |
|
| 24 | -int16_t sBuffer[bufferLen]; |
|
| 25 | - |
|
| 26 | -void i2s_install() |
|
| 27 | -{ |
|
| 28 | - // Set up I2S Processor configuration |
|
| 29 | - const i2s_config_t i2s_config = { |
|
| 30 | - .mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX), |
|
| 31 | - .sample_rate = 44100, |
|
| 32 | - //.sample_rate = 11025, if you like |
|
| 33 | - .bits_per_sample = i2s_bits_per_sample_t(16), |
|
| 34 | - .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, |
|
| 35 | - //.communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S), |
|
| 36 | - .communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB), |
|
| 37 | - .intr_alloc_flags = 0, |
|
| 38 | - .dma_buf_count = 8, |
|
| 39 | - .dma_buf_len = bufferLen, |
|
| 40 | - .use_apll = false}; |
|
| 41 | - |
|
| 42 | - i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL); |
|
| 43 | -} |
|
| 44 | - |
|
| 45 | -void i2s_setpin() |
|
| 46 | -{ |
|
| 47 | - // Set I2S pin configuration |
|
| 48 | - const i2s_pin_config_t pin_config = { |
|
| 49 | - .bck_io_num = I2S_SCK, |
|
| 50 | - .ws_io_num = I2S_WS, |
|
| 51 | - .data_out_num = -1, |
|
| 52 | - .data_in_num = I2S_SD}; |
|
| 53 | - |
|
| 54 | - i2s_set_pin(I2S_PORT, &pin_config); |
|
| 55 | -} |
|
| 56 | - |
|
| 57 | -void setup() |
|
| 58 | -{ |
|
| 59 | - |
|
| 60 | - // Set up Serial Monitor |
|
| 61 | - Serial.begin(115200); |
|
| 62 | - Serial.println(" "); |
|
| 63 | - |
|
| 64 | - delay(1000); |
|
| 65 | - |
|
| 66 | - // Set up I2S |
|
| 67 | - i2s_install(); |
|
| 68 | - i2s_setpin(); |
|
| 69 | - i2s_start(I2S_PORT); |
|
| 70 | - |
|
| 71 | - delay(500); |
|
| 72 | -} |
|
| 73 | - |
|
| 74 | -void loop() |
|
| 75 | -{ |
|
| 76 | - |
|
| 77 | - // False print statements to "lock range" on serial plotter display |
|
| 78 | - // Change rangelimit value to adjust "sensitivity" |
|
| 79 | - int rangelimit = 3000; |
|
| 80 | - Serial.print(rangelimit * -1); |
|
| 81 | - Serial.print(" "); |
|
| 82 | - Serial.print(rangelimit); |
|
| 83 | - Serial.print(" "); |
|
| 84 | - |
|
| 85 | - // Get I2S data and place in data buffer |
|
| 86 | - size_t bytesIn = 0; |
|
| 87 | - esp_err_t result = i2s_read(I2S_PORT, &sBuffer, bufferLen, &bytesIn, portMAX_DELAY); |
|
| 88 | - |
|
| 89 | - if (result == ESP_OK) |
|
| 90 | - { |
|
| 91 | - // Read I2S data buffer |
|
| 92 | - int16_t samples_read = bytesIn / 8; |
|
| 93 | - if (samples_read > 0) |
|
| 94 | - { |
|
| 95 | - float mean = 0; |
|
| 96 | - for (int16_t i = 0; i < samples_read; ++i) |
|
| 97 | - { |
|
| 98 | - mean += (sBuffer[i]); |
|
| 99 | - } |
|
| 100 | - |
|
| 101 | - // Average the data reading |
|
| 102 | - mean /= samples_read; |
|
| 103 | - |
|
| 104 | - // Print to serial plotter |
|
| 105 | - Serial.println(mean); |
|
| 106 | - } |
|
| 107 | - } |
|
| 108 | -} |
|
| ... | ... | \ No newline at end of file |
Chip-dat/InvenSense-dat/INMP441-dat/INMP441-dat.md
| ... | ... | @@ -3,6 +3,12 @@ |
| 3 | 3 | |
| 4 | 4 | https://invensense.tdk.com/wp-content/uploads/2015/02/INMP441.pdf |
| 5 | 5 | |
| 6 | + |
|
| 7 | +## Pins |
|
| 8 | + |
|
| 9 | + |
|
| 10 | + |
|
| 11 | + |
|
| 6 | 12 | ## wiring to ESP32 |
| 7 | 13 | |
| 8 | 14 |  |
| ... | ... | @@ -12,3 +18,7 @@ https://invensense.tdk.com/wp-content/uploads/2015/02/INMP441.pdf |
| 12 | 18 | - [[INMP441-code.ino]] |
| 13 | 19 | |
| 14 | 20 | |
| 21 | + |
|
| 22 | +## ref |
|
| 23 | + |
|
| 24 | +- [[I2S-dat]] |
Tech-dat/Interface-dat/I2S-dat/I2S-dat.md
| ... | ... | @@ -24,9 +24,9 @@ This makes I2S a popular choice for high-speed data transfer applications. |
| 24 | 24 | |
| 25 | 25 | ## Solution |
| 26 | 26 | |
| 27 | -I2S Output Digital Microphone - [[INMP441-dat]] - [[ICS-43434-dat]] - [[SPH0645-dat]] |
|
| 27 | +I2S Output Digital Microphone - [[INMP441-dat]] - [[ICS-43434-dat]] - [[SPH0645-dat]] - [[MSM261S4030H0R-dat]] |
|
| 28 | 28 | |
| 29 | -- [[WM8960-dat]] |
|
| 29 | +- [[WM8960-dat]] - [[WM8978-dat]] |
|
| 30 | 30 | |
| 31 | 31 | - [[PCM5102-dat]] - [[AMP1006-dat]] |
| 32 | 32 | |
| ... | ... | @@ -36,10 +36,14 @@ I2S Output Digital Microphone - [[INMP441-dat]] - [[ICS-43434-dat]] - [[SPH0645- |
| 36 | 36 | |
| 37 | 37 | - [[bt-audio-dat]] - [[ESP32-DAC-dat]] - [[ADC-dat]] |
| 38 | 38 | |
| 39 | -- [[ES9023-dat]] - [[MPC1111-dat]] |
|
| 39 | +- [[ES9023-dat]] - [[MPC1111-dat]] - [[ES9018-dat]] |
|
| 40 | 40 | |
| 41 | 41 | - [[PCM1808-dat]] |
| 42 | 42 | |
| 43 | +- audio amplifer - [[MAX98357-dat]] |
|
| 44 | + |
|
| 45 | + |
|
| 46 | + |
|
| 43 | 47 | ## ref |
| 44 | 48 | |
| 45 | 49 | https://en.wikipedia.org/wiki/I%C2%B2S |