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

相关推荐
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
CODECOLLECT6 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen7 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠9 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
深圳市九鼎创展科技12 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计12 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报13 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业13 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
czwxkn13 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件
Love Song残响14 小时前
NVIDIA显卡终极优化指南
stm32·单片机·嵌入式硬件