ESP32与MAX98357:打造智能收音机的奇妙之旅

在当今数字化浪潮汹涌的年代,收音机似乎已被人们遗忘在角落。然而,当新兴的 ESP32 芯片邂逅经典的 MAX98357 模块,一场关于声音与科技融合的奇妙旅程就此开启。今天,就让我们一同探索如何利用这两者搭建起一座连接过去与未来的收音机桥梁,让无线电波中的精彩节目重新走进我们的生活。

如何搭建ESP32和MAX98357?

参考ESP32 使用 MAX98357 播放MP3 - FBshark - 博客园 (cnblogs.com)

代码实现
复制代码
#include "Arduino.h"
#include "WiFiMulti.h"
#include "Audio.h"
 
// Digital I/O used
#define I2S_DOUT      12//更换你的pin位
#define I2S_BCLK      13//更换你的pin位
#define I2S_LRC       2//更换你的pin位
 
Audio audio;
WiFiMulti wifiMulti;
 
// config your wifi
String ssid = "";//wifi用户名
String password = "";//wifi密码
 
void setup() {
 
    Serial.begin(115200);
 
    WiFi.mode(WIFI_STA);
    wifiMulti.addAP(ssid.c_str(), password.c_str());
    wifiMulti.run();
    if(WiFi.status() != WL_CONNECTED){
        WiFi.disconnect(true);
        wifiMulti.run();
    }
    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    audio.setVolume(14); // 0...21
 
    audio.connecttohost(""); 
}
 
void loop()
{
    audio.loop();
    if(Serial.available()){ // put streamURL in serial monitor
        audio.stopSong();
        String r=Serial.readString(); r.trim();
        if(r.length()>5) audio.connecttohost(r.c_str());
        log_i("free heap=%i", ESP.getFreeHeap());
    }
}
 
// optional
void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_id3data(const char *info){  //id3 metadata
    Serial.print("id3data     ");Serial.println(info);
}
void audio_eof_mp3(const char *info){  //end of file
    Serial.print("eof_mp3     ");Serial.println(info);
}
void audio_showstation(const char *info){
    Serial.print("station     ");Serial.println(info);
}
void audio_showstreamtitle(const char *info){
    Serial.print("streamtitle ");Serial.println(info);
}
void audio_bitrate(const char *info){
    Serial.print("bitrate     ");Serial.println(info);
}
void audio_commercial(const char *info){  //duration in sec
    Serial.print("commercial  ");Serial.println(info);
}
void audio_icyurl(const char *info){  //homepage
    Serial.print("icyurl      ");Serial.println(info);
}
void audio_lasthost(const char *info){  //stream URL played
    Serial.print("lasthost    ");Serial.println(info);
}
重点来了

上面代码中双引号需要填入网址,在这里尝试了好久,因为许多网站是很难找到如下图可在线播放的地址的,尤其对于广播。

这里我们找到了蜻蜓FM的网站,选择你要听的网址,如下图,当前页面输入F12,调出开发界面,刷新网页,点击网络,选择媒体,点开该文件,会出现如上图的界面,

网址只要截取如下图的网址,放到代码中双引号里边即可。

复制代码
 audio.connecttohost("https://lhttp-hw.qtfm.cn/live/20211620/64k.mp3");

经过一系列精心的调试与优化,我们成功地将 ESP32 的强大网络连接能力与 MAX98357 模块的音频处理优势完美结合。这台自制的智能收音机,不仅能够接收来自世界各地的广播信号,还能通过网络实时更新节目列表,让我们随时随地享受多元化的音频盛宴。它仿佛是一扇神奇的窗口,让我们得以窥探不同地域的文化与生活。而在这个过程中,我们所收获的,不仅仅是收音机本身,更是对电子技术的深刻理解和对创新实践的无尽热爱。未来,我们将继续探索更多电子元件的组合可能,用双手创造出更多富有创意与实用价值的作品,让科技的光芒在生活的每一个角落闪耀。

相关推荐
啃硬骨头8 小时前
Aurix TC387 Ethernet代码解析之六_MAC的LwIP初始化3
单片机·嵌入式硬件
啃硬骨头8 小时前
Aurix TC387 Ethernet代码解析之四_MAC的LwIP初始化1
单片机·嵌入式硬件
xingzhemengyou18 小时前
STM32简介
stm32·单片机·嵌入式硬件
意法半导体STM329 小时前
【官方原创】使用STM32N6测试Helium指令 LAT1567
stm32·单片机·嵌入式硬件·mcu·stm32开发
iCxhust18 小时前
8255 PORTC 按键输入测试
单片机·嵌入式硬件·微机原理
d111111111d21 小时前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
♛识尔如昼♛1 天前
计算机组成原理(21) 第五章 - 总线性能指标
单片机·嵌入式硬件
快乐的划水a1 天前
windows用户态到内核态
stm32·单片机·嵌入式硬件
richxu202510011 天前
嵌入式学习之路>单片机核心原理篇>(11) 存储器(Flash & SRam)
单片机·嵌入式硬件·学习