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

相关推荐
番茄灭世神4 小时前
PN学堂GD32教程第14篇——Arm单片机启动流程
arm开发·单片机·嵌入式硬件
嵌入式学习菌6 小时前
Modbus 03H 最多读多少寄存器?10H 最多写多少寄存器?
单片机
小李不想当小白7 小时前
USART串口数据包(STM32标准库学习笔记)
经验分享·笔记·stm32·单片机·嵌入式硬件·学习
硅基手札7 小时前
【Linux 内核专栏 18】进程间通信 IPC(下)— Socket·Netlink·fd 三件套·futex·线程同步
linux·运维·驱动开发·单片机·嵌入式硬件·mcu·架构
无敌贵点大王1 天前
嵌入式软件面试经(自用)
c语言·stm32·单片机·学习·mongodb·面试·职场和发展
我是海飞1 天前
使用杰理 AC7925B 实现 Windows电脑 USB 副屏
windows·单片机·电脑·嵌入式·杰理
我是海飞1 天前
杰理 JL703N SDK 实现 AI 自动化调试:自动进入下载模式、下载、重启与日志抓取
人工智能·单片机·自动化·音视频·杰理
Zwawa1 天前
PID 的三个参数之外:位置式、增量式和反馈控制
c语言·单片机·嵌入式
创界工坊工作室1 天前
29-基于单片机的万年历设计
stm32·单片机·嵌入式硬件·proteus
木由里予1 天前
NAND 这门生意
运维·服务器·网络·单片机