Analog Sound Sampling Sketch Example
Use this basic code to read and calculate the average from the INMP401/MAX4466/MAX9814 microphone on an ESP32 or ESP8266
- Use the Arduino Serial plotter to view the output and compare your results to those found here.
- Make sure you have set the baud rate on your Serial plotter to 115200 (as defined in the sketch).
- Note that the ESP32 employs a 12 bit ADC, while the ESP8266 has a 10 bit ADC. Also note the anomalous spikes on the ESP8266.
- The
micLev
variable is the DC Offset value that you can use for zeroing your samples.
/* ESPSample
*
* By: Andrew Tuline
*
* Updated: Feb, 2019
*
* Basic code to read and calculate average from the Sparkfun INMP401/MAX4466/MAX9814 microphone
* on an ESP32 or ESP8266.
*
* Use the Arduino Serial plotter to view the output. Compare results to those found at:
*
* https://github.com/atuline/WLED/blob/assets/docs/Microphones.pdf
*
* Note that the ESP32 employs a 12 bit A/D, while the ESP8266 has a 10 bit A/D. Also note
* the anomalous spikes on the ESP8266.
*
* The micLev variable is the DC Offset value that you can use for zeroeing your samples.
*
*/
#ifdef ESP8266
#define MIC_PIN A0 // ESP8266 pin A0
#else
#define MIC_PIN 36 // ESP32 pin also known as 'VP'.
#endif
void setup() {
delay(1000);
Serial.begin(115200); // Initialize serial port for debugging.
} // setup()
void loop() {
analog_sample();
} // loop()
void analog_sample() {
static float micLev; // Needs to be a float, or smoothing calculation below will be very inaccurate.
int micIn = analogRead(MIC_PIN);
micLev = ((micLev*31)+micIn)/32; // Smooth out the data to get average value (used for zeroeing).
Serial.print(micIn); Serial.print(" ");
Serial.print(micLev); Serial.println(" ");
} // analog_sample()