数码之家

 找回密码
 立即注册
搜索
查看: 8522|回复: 20

[Arduino] ESP8266添加声卡播放MP3网络电台

[复制链接]
发表于 2020-5-24 23:14:00 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
上次8266直接GPIO播放音频。音质不怎么样,
现在买了“声卡” 下同。
PCM5102驱动耳机,

98357直接驱动喇叭,
二选一,
程序通用,
音质提高了不少,

===========================

1.jpg
2.jpg



===========================



  1. // 按钮控制播放音频





  2. #include <Arduino.h>
  3. #include "AudioFileSourceSPIFFS.h"
  4. #include "AudioGeneratorMP3.h"
  5. #include "AudioOutputI2S.h"

  6. AudioGeneratorMP3 *mp3;
  7. AudioFileSourceSPIFFS *file;
  8. AudioOutputI2S *out;

  9. int SWITCH_PIN = 0;


  10. int switchVal = 1;


  11. int ID;


  12. int volume = 25;

  13. int ff;


  14. void setup()
  15. {
  16.   Serial.begin(115200);
  17.   delay(1000);



  18.        Serial.println(" ");
  19.         Serial.println(" ");
  20.    
  21.      Serial.println("==== ESP8266 OK   =====");
  22.      
  23.   
  24.   SPIFFS.begin();
  25.   out = new AudioOutputI2S();
  26.   mp3 = new AudioGeneratorMP3();

  27.    pinMode(   SWITCH_PIN,  INPUT_PULLUP);
  28. //  pinMode(SWITCH_PIN, INPUT);




  29. ID=12;


  30. }








  31. void loop()

  32. {




  33.   
  34.   switchVal = digitalRead(SWITCH_PIN);


  35.   
  36. //  Serial.println(switchVal);



  37.    if(  digitalRead(SWITCH_PIN)==0      )
  38.    {
  39. if(ff==1)
  40. {
  41.   ff=0;
  42.    volume=volume-10;
  43.    if(volume<=5 )
  44.    volume=100;
  45. }
  46.    
  47.    }
  48.    else
  49.    {

  50.     ff=1;
  51.    }











  52. //=======================================================

  53.   if (mp3->isRunning())
  54.   {
  55.     // 是否在播放
  56.     if (!mp3->loop())
  57.     {  
  58.       
  59.       // 是否播放完了
  60.        Serial.println( "== 播放完毕== ");
  61.       
  62.       mp3->stop();        // 停止播放
  63.       delete file;
  64.       delete mp3;
  65. delay(100);
  66.         out = new AudioOutputI2S();
  67.         mp3 = new AudioGeneratorMP3();
  68.   
  69.      
  70.       
  71. delay(1000);
  72.       
  73.     }
  74.     else
  75.     {
  76. Serial.println( "======= 正在播放== ");




  77.     }


  78.    
  79.   }


  80.   
  81.   else

  82.   
  83.   {


  84.   Serial.println( "==================== 播放 END == ");   
  85.     if (switchVal == 0)
  86.     {  


  87.     ID++;
  88.     if(ID>13)
  89.     ID=0;


  90.     if( ID==0 )
  91.        file = new AudioFileSourceSPIFFS("/0.mp3"); // 初始化音频文件
  92.       
  93. else  if( ID==1 )
  94.        file = new AudioFileSourceSPIFFS("/1.mp3"); // 初始化音频文件


  95. else  if( ID==2 )
  96.        file = new AudioFileSourceSPIFFS("/2.mp3"); // 初始化音频文件

  97.        else  if( ID==3 )
  98.        file = new AudioFileSourceSPIFFS("/3.mp3"); // 初始化音频文件

  99.        else  if( ID==4 )
  100.        file = new AudioFileSourceSPIFFS("/4.mp3"); // 初始化音频文件

  101.        else  if( ID==5 )
  102.        file = new AudioFileSourceSPIFFS("/5.mp3"); // 初始化音频文件

  103.        else  if( ID==6 )
  104.        file = new AudioFileSourceSPIFFS("/6.mp3"); // 初始化音频文件

  105.        else  if( ID==7 )
  106.        file = new AudioFileSourceSPIFFS("/7.mp3"); // 初始化音频文件

  107.        else  if( ID==8 )
  108.        file = new AudioFileSourceSPIFFS("/8.mp3"); // 初始化音频文件

  109.        else  if( ID==9 )
  110.        file = new AudioFileSourceSPIFFS("/9.mp3"); // 初始化音频文件

  111.        else  if( ID==10 )
  112.        file = new AudioFileSourceSPIFFS("/10.mp3"); // 初始化音频文件

  113.        else  if( ID==11 )
  114.        file = new AudioFileSourceSPIFFS("/11.mp3"); // 初始化音频文件



  115. else  if( ID==12 )
  116.        file = new AudioFileSourceSPIFFS("/12.mp3"); // 初始化音频文件



  117.       
  118.       else
  119.          file = new AudioFileSourceSPIFFS("/aa.mp3"); // 初始化音频文件
  120.       // 开关接通为低电平
  121.    
  122.       Serial.printf("MP3 done\n");
  123.          Serial.println( "== 跟换音频文件== ");
  124.           Serial.print( "=--ID=:  ");
  125.            Serial.println(    ID  );
  126.            
  127. delay(1000);
  128.           while (  digitalRead(SWITCH_PIN)==0      );  
  129.       delay(1000);
  130.       
  131.       mp3->begin(file, out);  // 开始播放文件
  132.       
  133.     //    decoder->begin(buff, out);
  134.   
  135.        out->SetGain(((float)volume)/100.0);
  136.       
  137.     }



  138.    
  139.   }


复制代码






======================================================








  
}












打赏

参与人数 2家元 +38 收起 理由
hongo + 8 原創內容
家睦 + 30

查看全部打赏

本帖被以下淘专辑推荐:

  • · MCU|主题: 24, 订阅: 18
发表于 2020-5-25 07:23:01 | 显示全部楼层
成本增加了多少呀
回复 支持 反对

使用道具 举报

发表于 2020-5-25 08:44:30 | 显示全部楼层
PCM5102不能算声卡,是解码芯片,负责把数字信号转换为模拟信号。
音质可不是GPIO直接输出可以比的。
用来播放mp3还是有点浪费了,楼主应该试着播放wav,flac这些无损格式。

别看这块板子小,它比8266贵:loveliness:

淘宝20左右,不过这点钱贵得值
回复 支持 反对

使用道具 举报

发表于 2020-5-25 09:15:06 | 显示全部楼层
楼主这个貌似和电台没啥关系吧!
Esp8266Audio这个库的网络电台功能我到现在都还没试出来过:funk:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 18:15:56 来自手机浏览器 | 显示全部楼层
jjbboox 发表于 2020-5-25 09:15
楼主这个貌似和电台没啥关系吧!
Esp8266Audio这个库的网络电台功能我到现在都还没试出来过 ...

叫网络收音机吧,那个示例程序里写上你自己的无线网络,烧录后,在web控制页里填写网络电台的地址即可,
回复 支持 反对

使用道具 举报

发表于 2020-5-25 19:25:56 | 显示全部楼层
mckk520 发表于 2020-5-25 18:15
叫网络收音机吧,那个示例程序里写上你自己的无线网络,烧录后,在web控制页里填写网络电台的地址即可, ...

你的代码只能播放存放在SPIFFS里面的mp3文件,不能播放网络音频流
回复 支持 反对

使用道具 举报

发表于 2020-5-25 20:29:14 | 显示全部楼层
用VS1003 1053不好么:lol:
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-26 08:18:57 来自手机浏览器 | 显示全部楼层
jjbboox 发表于 2020-5-25 19:25
你的代码只能播放存放在SPIFFS里面的mp3文件,不能播放网络音频流

第二个代码就是
回复 支持 反对

使用道具 举报

发表于 2020-5-26 14:53:02 | 显示全部楼层
有接线图吗  搞不清 如何 连接 模块脚
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 23:43:57 | 显示全部楼层
17363205076 发表于 2020-5-26 14:53
有接线图吗  搞不清 如何 连接 模块脚

很简单,TXD,2,15脚,就三根线
回复 支持 反对

使用道具 举报

发表于 2020-5-28 08:09:20 | 显示全部楼层
还以为可以接收广播电台呢,原来不是。不过这也是另外一种可以试试的其它应用。
回复 支持 反对

使用道具 举报

发表于 2020-5-28 08:53:09 | 显示全部楼层
手上还有个8266的模块,有空了试试。
回复 支持 反对

使用道具 举报

发表于 2020-5-28 09:17:01 | 显示全部楼层
hzw6834 发表于 2020-5-28 08:09
还以为可以接收广播电台呢,原来不是。不过这也是另外一种可以试试的其它应用。 ...

Esp8266Audio这个库据称是能够支持webradio的,也提供了一个简单的例子,但是我试了一下,失败了。
可能是网络电台的连接不能兼容。
回复 支持 反对

使用道具 举报

发表于 2020-5-28 10:10:31 | 显示全部楼层
mckk520 发表于 2020-5-26 23:43
很简单,TXD,2,15脚,就三根线

我记得是RXD吧。
回复 支持 反对

使用道具 举报

发表于 2020-5-28 10:34:58 | 显示全部楼层
本帖最后由 jjbboox 于 2020-5-28 10:43 编辑

最新的版本好像已经可以直接同轴信号输出到音响了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 05:34:51 来自手机浏览器 | 显示全部楼层
jjbboox 发表于 2020-5-28 09:17
Esp8266Audio这个库据称是能够支持webradio的,也提供了一个简单的例子,但是我试了一下,失败了。
可能 ...

http://ctt.rgd.com.cn/fm914这个广东台,绝对可以听
回复 支持 反对

使用道具 举报

发表于 2020-5-31 23:25:30 | 显示全部楼层
mckk520 发表于 2020-5-29 05:34
http://ctt.rgd.com.cn/fm914这个广东台,绝对可以听

码率很低,效果很差。
回复 支持 反对

使用道具 举报

发表于 2020-6-3 20:26:01 | 显示全部楼层
这个得好好研究研究  有可玩性
回复 支持 反对

使用道具 举报

发表于 2021-10-9 18:16:02 | 显示全部楼层
这个好,这个好,最近正在玩esp32,然后看到这个东西,
回复 支持 反对

使用道具 举报

发表于 2021-10-9 18:16:52 | 显示全部楼层
这个如果可以播放txt里面的网络电台的连接的话就给力了,我知道蜻蜓fm的后缀是MP3格式,就是说他的是MP3的流,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-19 20:26 , Processed in 0.327600 second(s), 16 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表