Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

Micropython esp32 写一段使用INMP441测量声音大小的I2S驱动代码


Micropython esp32 写一段使用INMP441测量声音大小的I2S驱动代码


以下是Micropython esp32使用INMP441测量声音大小的I2S驱动代码:
import machine
import time

# 定义I2S总线
i2s = machine.I2S(sck=machine.Pin(18), ws=machine.Pin(19), sd=machine.Pin(21))

# 定义INMP441模块
inmp441 = machine.I2S(0, mode=machine.I2S.MASTER_RX, dataformat=machine.I2S.B32)
inmp441.set_pin(0, 12, 13)
inmp441.set_sample_rate(16000)
inmp441.set_bits(32)

# 在控制台输出声音大小
while True:
    sound_data = inmp441.read(32)
    sound_sum = 0
    for i in range(16):
        sound_sum += abs(int.from_bytes(sound_data[i]))


Micropython esp32 写一段i2s驱动INMP441测量声音大小的代码

以下是Micropython esp32使用INMP441传感器的I2S驱动代码示例:
import struct
from machine import I2S, Pin
from time import sleep

# 定义I2S输入和输出引脚
I2S_WS = Pin(22, Pin.IN)
I2S_SCLK = Pin(23, Pin.OUT)
I2S_DOUT = Pin(21, Pin.OUT)
I2S_DIN = Pin(19, Pin.IN)

# 配置I2S实例
i2s = I2S(I2S_NUM=0, I2S_MODE=I2S.MODE_MASTER | I2S.MODE_RX, I2S_FIFO_MOD=I2S.FIFO_MOD_SINGLE, I2S_SAMPLE_RATE=16000, I2S_BITS_PER_SAMPLE=16, I2S_CHANNEL_FORMAT=I2S.CHANNEL_FMT_RIGHT_LEFT, I2S_DATA_OUT_NUM=0, I2S_DATA_IN_NUM=31, I2S_DATA_IN=i2s_din_pin)

# INMP441相关配置参数
INMP441_I2C_ADDR = 0x76

# INMP441寄存器地址定义
INMP441_REG_CFG = 0x00
INMP441_REG_PDM_CFG = 0x19
INMP441_REG_RMSL = 0x04  # 左声道RMS值
INMP441_REG_RMSR = 0x05  # 右声道RMS值

# 初始化INMP441
def init_INMP441():
    # 配置PDM数据采样率为1.536MHz
    i2c.writeto(INMP441_I2C_ADDR, bytes([INMP441_REG_PDM_CFG, 0x0C]))
    # 使能麦克风
    i2c.writeto(INMP441_I2C_ADDR, bytes([INMP441_REG_CFG, 0x01]))

# 循环读取声音大小并打印出来
while True:
    # 读取RMS值
    rms = i2c.readfrom_mem(INMP441_I2C_ADDR, INMP441_REG_RMSL, 2)
    # 解析RMS值并计算DB
    rms_l, rms_r = struct.unpack('H' * 2, rms)
    db = 20 * math.log10((rms_l + rms_r) / 2)
    # 打印当前声音大小
    print('Current dB: ', db)
    sleep(0.1)
    
    
这段代码会不停地从INMP441传感器读取声音大小。在每次循环中,它会读取左右声道的RMS值,并计算出一个平均值。然后使用20 * math.log10()函数将RMS值转换为分贝值,并打印出来。



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 ESP56.com All Rights Reserved

执行时间: 0.0076911449432373 seconds