esp32实现在线音频播放

环境

vscode+platformio+arduion && 串口,wifi-CSDN博客

代码

cpp 复制代码
// Welcome to www.LingShunLAB.com

#include "Arduino.h"
#include "WiFiMulti.h"
#include "Audio.h"

// Digital I/O used
#define I2S_DOUT      7
#define I2S_BCLK      15
#define I2S_LRC       16

Audio audio;
WiFiMulti wifiMulti;

// config your wifi
String ssid =     "0000";
String password = "000";

void setup() {
    Serial.begin(115200);
    delay(1000);
    Serial.println("\n\nESP32-S3 Audio Streamer Starting...");

    // 初始化 WiFi
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    delay(100);
    
    // 添加 WiFi 网络
    wifiMulti.addAP(ssid.c_str(), password.c_str());
    
    Serial.println("Connecting to WiFi...");
    Serial.print("SSID: ");
    Serial.println(ssid);
    
    // 尝试连接 WiFi,最多重试10次
    int retryCount = 0;
    while (wifiMulti.run() != WL_CONNECTED && retryCount < 20) {
        delay(500);
        Serial.print(".");
        retryCount++;
    }
    
    if (WiFi.status() == WL_CONNECTED) {
        Serial.println("\nWiFi Connected!");
        Serial.print("IP Address: ");
        Serial.println(WiFi.localIP());
        Serial.print("Signal Strength: ");
        Serial.print(WiFi.RSSI());
        Serial.println(" dBm");
    } else {
        Serial.println("\nWiFi Connection Failed!");
        Serial.println("Possible causes:");
        Serial.println("1. Wrong SSID or password");
        Serial.println("2. WiFi network not in range");
        Serial.println("3. Network requires special authentication");
        Serial.println("4. Hardware issue");
        // 继续执行,音频库可能会重试
    }
    
    // 初始化音频
    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    audio.setVolume(12); // 0...21
    
    // 只有在WiFi连接成功后才尝试连接音频流
    if (WiFi.status() == WL_CONNECTED) {
        Serial.println("Connecting to audio stream...");
        audio.connecttohost("http://ngcdn001.cnr.cn/live/zgzs/index.m3u8"); // 128k mp3
    }
}

void loop()
{
    audio.loop();
    
    // 定期检查WiFi状态
    static unsigned long lastCheck = 0;
    if (millis() - lastCheck > 10000) { // 每10秒检查一次
        lastCheck = millis();
        if (WiFi.status() != WL_CONNECTED) {
            Serial.println("WiFi disconnected! Attempting to reconnect...");
            wifiMulti.run();
        }
    }
    
    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 callback functions (same as before)
void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_id3data(const char *info){
    Serial.print("id3data     ");Serial.println(info);
}
void audio_eof_mp3(const char *info){
    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){
    Serial.print("commercial  ");Serial.println(info);
}
void audio_icyurl(const char *info){
    Serial.print("icyurl      ");Serial.println(info);
}
void audio_lasthost(const char *info){
    Serial.print("lasthost    ");Serial.println(info);
}

// 添加WiFi事件处理回调
void WiFiEvent(WiFiEvent_t event) {
    switch(event) {
        case ARDUINO_EVENT_WIFI_STA_GOT_IP:
            Serial.println("WiFi Connected! Got IP: " + WiFi.localIP().toString());
            break;
        case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
            Serial.println("WiFi Disconnected. Attempting to reconnect...");
            wifiMulti.run();
            break;
        default:
            break;
    }
}
相关推荐
hz567892 小时前
电子远程评标系统哪家好?安全、合规、易用平台评测指南
安全·云计算·音视频·实时音视频·信息与通信
星空语4 小时前
音频001_Android+Linux车载/手机音频全链路分层架构图
android·linux·音视频
hz567896 小时前
局域网视频会议解决方案,适配政企专网场景
音视频·实时音视频·信息与通信·安全架构
Cutecat_8 小时前
YouTube 多语种自动配音功能实测:AI 如何让一条视频“开口说”多种语言
人工智能·科技·音视频
潜创微科技8 小时前
国产 USB3.0 千兆网卡芯片 CH9153:Pin-to-Pin 替换 RTL8153,免改板、免驱、工业级
音视频
中微极客12 小时前
2026 AI视频生成器选型指南:Kling 3.0深度解析
人工智能·音视频
ai产品老杨1 天前
NVIDIA GPU部署AI视频分析项目实战记录
人工智能·音视频
REDcker1 天前
远程实时操控技术详解
音视频·实时音视频·数据采集·遥控·遥操作·数据闭环·远程操控
AI_Video_Editing1 天前
长视频转短视频应用怎么选:从成本公式、处理链路到场景适配的判断逻辑
音视频
气泡音人声分离1 天前
技术解析|音频可视化:从波形图到声谱图,把“听觉”变成“视觉”
音视频·音频剪辑·音频可视化