使用 ESP32 的网络电台


暗哑于秋
转载
发布时间: 2025-09-20 16:22:42 | 阅读数 0收藏数 0评论数 0
封面
亲爱的朋友们,欢迎来到新一期的 Instructable!今天,我们将使用一块价格实惠的 ESP32 开发板,打造一款配备 3.5 英寸大显示屏的网络收音机。信不信由你,我们现在可以在不到 10 分钟的时间内,花费不到 30 美元就打造出一台网络收音机。内容很丰富,让我们开始吧! 您可以在不到10分钟的时间内完成相同的项目,但您需要一些经验。如果这是您的第一个项目,可以考虑先做一个更简单的项目,积累一些经验。查看我的Instructables,了解一些简单的项目创意,等您熟悉了Arduino的电路之后,再来构建这个很酷的项目。现在,让我们开始构建我们自己的网络收音机吧。
1

获取所有零件

我们需要以下部件:

  1. ESP32 ▶ http://educ8s.tv/part/ESP32
  2. MP3解码器▶ http://educ8s.tv/part/MP3Decoder
  3. 隔离变压器 ▶ http://educ8s.tv/part/AudioTransformer
  4. 放大器 ▶ http://educ8s.tv/part/PAM8403
  5. 3W扬声器 ▶ http://educ8s.tv/part/3WSpeaker
  6. 3.5 英寸 Nextion 显示屏 ▶ http://educ8s.tv/part/Nextion35
  7. 按钮 ▶ http://educ8s.tv/part/Buttons
  8. 面包板 ▶ http://educ8s.tv/part/LargeBreadboard
  9. 电线 ▶ http://educ8s.tv/part/Wires

整个项目的成本大约是40美元,但如果不使用显示器,项目成本大约是20美元。太棒了!我们只需20美元就能打造自己的网络电台!


2

ESP32板

这个项目的核心当然是强大的 ESP32 开发板。如果您不熟悉它,ESP32 芯片是我们过去多次使用的热门 ESP8266 芯片的继任者。ESP32 简直是一头猛兽!它提供两个 32 位处理核心,主频 160MHz,拥有海量内存、WiFi、蓝牙以及许多其他功能,售价仅为 7 美元左右!真是太棒了!

请观看我为这款开发板准备的详细评测。我已将视频上传到 Instructable。这将有助于理解这款芯片为何将彻底改变我们的制造方式!ESP32 最令人兴奋的一点是,尽管它功能强大,但它提供了深度睡眠模式,仅需 10μA 的电流。这使得 ESP32 成为低功耗应用的理想芯片。

在这个项目中,ESP32 板连接到互联网,然后从我们正在收听的广播电台接收 MP3 数据,并向显示器发送一些命令。


3

MP3解码器

然后,MP3 数据通过 SPI 接口发送到 MP3 解码器模块。该模块使用 VS1053 IC。该 IC 是一款专用的硬件 MP3 解码器。它从 ESP32 获取 MP3 数据,并将其快速转换为音频信号。

此音频插孔输出的音频信号微弱且噪声较大,因此我们需要去除噪声并进行放大。(如果您使用耳机,则无需去除噪声或放大信号。)因此,我使用隔离变压器去除音频中的噪声,并使用 PAM8403 音频放大器放大音频信号,然后将其发送到扬声器。我还在 ESP32 上连接了两个按钮,用于切换数据来源的 MP3 流,以及一个 Nextion 显示屏,用于显示正在收听的电台。


4

Nextion显示

我选择在这个项目中使用 Nextion 显示器,因为它非常容易使用。我们只需要连接一根电线就可以控制它。

Nextion 显示器是一种新型显示器。它们内置 ARM 处理器,负责驱动显示器并创建图形用户界面。因此,我们可以将它们与任何微控制器配合使用,并获得出色的效果。我准备了一份关于 Nextion 显示器的详细评测,深入讲解了它们的工作原理、使用方法及其缺点。您可以点击此处阅读,或观看附件中的视频。


5

连接所有部件

现在我们要做的就是按照这个原理图把所有部件连接起来。你可以在这里找到附件中的原理图。连接很简单。

不过有两点需要注意。MP3 解码器模块输出立体声信号,但我在本项目中只使用了一个音频通道。为了获取音频信号,我将一根音频线连接到模块的音频插孔,然后剪断,露出里面的四根线。我连接了两根线。其中一根是地线 (GND),另一根是两个音频通道之一的音频信号。如果您愿意,可以将两个通道都连接到功放模块,并驱动两个扬声器。

每个音频通道在连接到放大器之前都必须经过隔离变压器来清除任何存在的噪音。

要将数据发送到显示器,我们只需将一根线连接到 ESP32 的 TX0 引脚。连接好各个部件后,我们需要将代码加载到 ESP32,并将 GUI 加载到 Nextion 显示器。

要将 GUI 加载到 Nextion 显示屏,请将我接下来要分享的 InternetRadio.tft 文件复制到一张空的 SD 卡上。将 SD 卡插入显示屏背面的 SD 卡插槽。然后打开显示屏电源,GUI 就会加载。之后,取出 SD 卡并重新连接电源。

成功加载代码后,我们启动项目。显示屏上会显示“Connecting…”字样几秒钟。连接到互联网后,项目会连接到一个预设的电台。硬件工作正常,现在我们来看看项目的软件部分。


6

项目代码

首先,让我给你展示一些东西。这个项目的代码不到140行。想想看,我们用140行代码就能构建一个带3.5英寸显示屏的网络收音机,这太神奇了。当然,我们可以使用包含数千行代码的各种库来实现这一切。这就是Arduino和开源社区的力量。它让创客们的工作变得轻松便捷。

在这个项目中,我使用了 ESP32 板的 VS1053 库。

首先,我们需要定义 Wi-Fi 网络的 SSID 和密码。接下来,我们需要在这里保存一些广播电台。我们需要主机 URL、流所在的路径以及需要使用的端口。我们将所有这些信息保存到这些变量中。

char ssid[] = "yourSSID"; // your network SSID (name) <br>char pass[] = "yourWifiPassword"; // your network password</p><p>// Few Radio Stations
char *host[4] = {"149.255.59.162","radiostreaming.ert.gr","realfm.live24.gr", "secure1.live24.gr"};
char *path[4] = {"/1","/ert-kosmos","/realfm","/skai1003"};
int port[4] = {8062,80,80,80};

我在这个例子中包含了 4 个广播电台。

在设置功能中,我们将中断附加到按钮,初始化 MP3 解码器模块并连接到 Wi-Fi。

void setup () {

Serial.begin(9600);
delay(500);
SPI.begin();</p><p> pinMode(previousButton, INPUT_PULLUP);
pinMode(nextButton, INPUT_PULLUP);</p><p> attachInterrupt(digitalPinToInterrupt(previousButton), previousButtonInterrupt, FALLING);
attachInterrupt(digitalPinToInterrupt(nextButton), nextButtonInterrupt, FALLING);
initMP3Decoder();
connectToWIFI();
}



在循环函数中,我们首先检查用户是否选择了与我们正在获取数据的电台不同的电台。如果是,则连接到新的电台,否则从流中获取数据并将其发送到 MP3 解码器模块。

<p>void loop() {<br>
if(radioStation!=previousRadioStation)
{
station_connect(radioStation);
previousRadioStation = radioStation;
}
if (client.available() > 0)
{
uint8_t bytesread = client.read(mp3buff, 32);
player.playChunk(mp3buff, bytesread);
}
}</p>




就这样!当用户按下按钮时,就会发生中断,并改变一个变量的值,该变量决定连接到哪个流。

<p>void IRAM_ATTR previousButtonInterrupt() {</p><p> static unsigned long last_interrupt_time = 0;
unsigned long interrupt_time = millis();
if (interrupt_time - last_interrupt_time > 200)
{
if(radioStation>0)
radioStation--;
else
radioStation = 3;
}
last_interrupt_time = interrupt_time;
}</p>


要更新显示,我们只需向串行端口发送一些命令。

<p>void drawRadioStationName(int id)<br>{
String command;
switch (id)
{
case 0: command = "p1.pic=2"; Serial.print(command); endNextionCommand(); break; //1940 UK Radio
case 1: command = "p1.pic=3"; Serial.print(command); endNextionCommand(); break; //KOSMOS GREEK
case 2: command = "p1.pic=4"; Serial.print(command); endNextionCommand(); break; //REAL FM GREEK
case 3: command = "p1.pic=5"; Serial.print(command); endNextionCommand(); break; //SKAI 100.3 GREEK
}
}</p>



现在让我们来看看 Nextion 的显示 GUI。Nextion GUI 由一张背景图片和一张显示电台名称的图片组成。ESP32 开发板会发送命令,从嵌入的图片中更改电台名称。操作非常简单。请观看我之前准备的 Nextion 显示教程,了解更多信息。如果您愿意,可以快速设计自己的 GUI,并在其中显示更多内容。

与往常一样,您可以在此 Instructable 中找到附加的项目代码。


ZIP
FCXPBTRJX8T6NF8.zip
839.33KB
7

最终想法和改进

这个项目非常简单。我想要一个简单的网络电台项目框架。现在项目的第一个版本已经完成,我们可以添加许多功能来改进它。首先,我需要设计一个外壳来容纳所有电子设备。

在这本关于史上最美收音机的书中,有很多非常酷的收音机可供选择,作为这个项目的外壳。我想围绕这台精美的装饰艺术收音机做一个外壳。你觉得怎么样?你喜欢这台收音机的外观,还是更喜欢现代风格的?你还有其他外壳设计的想法吗?另外,你喜欢这个网络收音机项目吗?你认为我们需要添加哪些功能才能让它更实用?我很想听听你的想法和创意,请在下方评论区留言。


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载
pdf下载 举报