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

相关推荐
路上有只喵1 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇 11
单片机·嵌入式硬件
不昀2 小时前
开关电源电流互感器怎么选:匝比、采样电阻与复位的计算笔记
单片机·嵌入式硬件·电子元器件
小李不想当小白4 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
智者知已应修善业8 小时前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
辰哥单片机设计9 小时前
STM32智能药盒丨2027单片机新项目
stm32·单片机·嵌入式硬件
LCG米20 小时前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
La Pulga1 天前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
女神下凡1 天前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
硅基手札1 天前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位