MAX98357A ESP32 Micropython

MAX98357A — это цифровой усилитель класса D с входом I²S, который принимает аудиопоток напрямую от ESP32 и воспроизводит его через динамик.
 



ESP32 > MAX98357A
 GND > GND
 VN > VIN
 D25 > LRC
 D26 > BCLK
 D22 > DIN


Простой аудиотест.

main.py     


from machine import I2S, Pin
import math, array, time

# --- Настройка I2S ---
i2s = I2S(
0,
sck=Pin(26),
ws=Pin(25),
sd=Pin(22),
mode=I2S.TX,
bits=16,
format=I2S.MONO,
rate=22050,
ibuf=10000
)

# --- Функция для генерации и воспроизведения тона ---
def play_tone(freq=440, duration=0.2, volume=0.4):
sample_rate = 22050
block_size = 1024
total_samples = int(sample_rate * duration)
samples_written = 0

while samples_written < total_samples:
buf = array.array("h", [0] * block_size)
for i in range(block_size):
t = (samples_written + i) / sample_rate
buf[i] = int(volume * 32767 * math.sin(2 * math.pi * freq * t))
i2s.write(buf)
samples_written += block_size

# --- Список нот мелодии ---
# частота (Гц), длительность (сек)
melody = [
(523, 0.2), # C5
(659, 0.2), # E5
(784, 0.2), # G5
(1046, 0.3), # C6
(784, 0.2), # G5
(659, 0.2), # E5
(523, 0.4), # C5
]

# --- Воспроизведение ---
for freq, dur in melody:
play_tone(freq, dur)
time.sleep(0.05) # короткая пауза между нотами

i2s.deinit()




Супермарио. 

main.py     


from machine import I2S, Pin
import math, array, time

# --- Настройка I2S ---
i2s = I2S(
0,
sck=Pin(26), # BCLK
ws=Pin(25), # LRCLK
sd=Pin(22), # DIN
mode=I2S.TX,
bits=16,
format=I2S.MONO,
rate=22050,
ibuf=10000
)

# --- Функция воспроизведения ноты ---
def play_tone(freq=440, duration=0.15, volume=0.4):
sample_rate = 22050
block_size = 512
total_samples = int(sample_rate * duration)
samples_written = 0

while samples_written < total_samples:
buf = array.array("h", [0] * block_size)
for i in range(block_size):
t = (samples_written + i) / sample_rate
buf[i] = int(volume * 32767 * math.sin(2 * math.pi * freq * t))
i2s.write(buf)
samples_written += block_size

# --- Определение нот ---
C5 = 523
D5 = 587
E5 = 659
F5 = 698
G5 = 784
A5 = 880
B5 = 988
C6 = 1047
R = 0 # пауза (rest)

# --- Мелодия (первая фраза темы Mario) ---
melody = [
(E5, 0.15), (E5, 0.15), (R, 0.1), (E5, 0.15),
(R, 0.1), (C5, 0.15), (E5, 0.15),
(G5, 0.3), (R, 0.3), (G4 := 392, 0.15),
(R, 0.3),

(C5, 0.15), (R, 0.1), (G4, 0.15),
(R, 0.1), (E4 := 330, 0.15), (A4 := 440, 0.15),
(B4 := 494, 0.15), (Bb4 := 466, 0.15), (A4, 0.15),
(G4, 0.1), (E5, 0.15), (G5, 0.15), (A5, 0.15),
(F5, 0.15), (G5, 0.15)
]

# --- Проигрывание ---
for freq, dur in melody:
if freq == 0:
time.sleep(dur) # пауза
else:
play_tone(freq, dur)
time.sleep(0.02)

i2s.deinit()
print("🎶 Мелодия завершена!")





Комментарии

Популярные сообщения из этого блога

Установка micropython на ESP32

LORA Приемник и передатчик

LORA Upgrade E32 400M30S