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

相关推荐
LCMICRO-133108477466 小时前
长芯微LPS123完全P2P替代ADP123,高性能、低压差的线性稳压器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·线性稳压器
守护安静星空7 小时前
esp32开发笔记-工程搭建
笔记·单片机·嵌入式硬件·物联网·visual studio code
时空自由民.9 小时前
ST7701S 3.5寸显示屏
单片机
金戈鐡馬9 小时前
BetaFlight中的定时器引脚绑定详解
stm32·单片机·嵌入式硬件·无人机
Wave84510 小时前
FreeRTOS软件定时器详解
stm32·单片机·freertos
VBsemi-专注于MOSFET研发定制11 小时前
奶茶制作机器人功率MOSFET选型方案——高效、精准与可靠驱动系统设计指南
单片机·嵌入式硬件
水云桐程序员12 小时前
单片机项目从入门到精通
单片机·嵌入式硬件
Wave84513 小时前
STM32 裸机中断与 FreeRTOS 中断管理的四大核心差异
单片机·嵌入式硬件
若忘即安13 小时前
【硬件电路设计18】WIFI+BlueTooth
单片机·嵌入式硬件
时空自由民.14 小时前
ESP32 JEPEG作用
单片机