在这个项目中,我将使用便宜的 esp32 板构建一个具有 3.5 英寸大显示屏的互联网广播设备。
你可能不太相信,在这个项目,我们能够以不到 10 分钟的时间内并且用不到 30 美元的成本构建一个网络收音机。接下来让我们开始吧!
几个月前,我完成了一个arduino fm radio 项目,效果很好。问题是,虽然那台收音机看起来很酷,但它并不实用,我住的地方发射信号并不好。所以,我在笔记本电脑或平板电脑上在线收听我最喜欢的收音机,但这也不太实用。所以,今天我要构建一个网络广播设备,以便能够收听来自世界各地的我最喜欢的广播电台!
我已经收听了真正的 fm 广播电台,通过使用这些按钮,我们可以更改我们正在收听的广播电台。我已将我最喜欢的广播电台保存到 esp32 的内存中,因此我可以轻松访问它们。使用这个电位器,我可以改变扬声器的音量。我在带有复古用户界面的 3.5 英寸大显示屏上显示我们正在收听的广播电台的名称。该项目运行良好,并且非常容易构建。
您可以在不到 10 分钟的时间内构建相同的项目,但您需要有一些经验。如果这是您的第一个项目,请考虑先构建一个更简单的项目,以获得一些经验。现在让我们开始构建我们自己的 internet radio。
第 1 步:获取所有零件
我们将需要以下部分:
esp32
mp3 解码器
隔离变压器
放大器
3w 扬声器
3.5“ nextion 显示器
按钮
面包板
电线
第 2 步:esp32 开发板
该项目的核心当然是功能强大的 esp32 开发板。如果您不熟悉,esp32 芯片是我们过去多次使用的流行的 esp8266 芯片的继任者。它提供两个运行频率为 160mhz 的 32 位处理内核、大量内存、wifi、蓝牙和许多其他功能。
esp32功能如此强大,同时也提供了仅需要 10μa 电流的深度睡眠模式。这使得 esp32 成为低功耗应用的理想芯片。
在这个项目中,esp32 板连接到 internet,然后它从我们正在收听的广播电台接收 mp3 数据,并向显示器发送一些命令。
第 3 步:mp3 解码器
然后使用 spi 接口将 mp3 数据发送到 mp3 解码器模块。该模块使用vs1053 ic。本 ic 是专用的硬件 mp3 解码器。它从 esp32 获取 mp3 数据并将其快速转换为音频信号。它在这个音频插孔输出的音频信号很弱,所以我们需要放大它。这就是为什么我使用 pam8403 音频放大器来放大音频信号,然后将其发送到扬声器。
我还在 esp32 上连接了两个按钮,只是为了改变我们从中获取数据的 mp3 流和一个 nextion 显示器来显示我们正在收听的广播电台。
第 4 步:nextion 显示
我选择在这个项目中使用 nextion 显示器,因为它非常易于使用。我们只需要连接一根线来控制它。
nextion 显示器是一种新型显示器。他们在背面有自己的 arm 处理器,负责驱动显示器和创建图形用户界面。因此,我们可以将它们与任何微控制器一起使用并取得惊人的效果。
第 5 步:连接所有部件
我们现在要做的就是根据这个示意图将所有部件连接在一起。您可以在此处找到所附的示意图。连接很简单。
不过有一点需要注意。mp3 解码器模块输出立体声信号,但我在这个项目中只使用一个音频通道。为了获得音频信号,我将一条音频线连接到模块的音频插孔,并剪断它以露出里面的四根电线。我连接了两根线。其中一个是 gnd,另一个是两个音频通道之一的音频信号。如果您愿意,您可以将两个通道连接到放大器模块并驱动两个扬声器。
要将数据发送到显示器,我们只需要将一根线连接到 esp32 的 tx0 引脚。连接部件后,我们必须将代码加载到 esp32,我们必须将 gui 加载到 nextion 显示器。
要将 gui 加载到 nextion 显示器,请将 internetradio.tft 文件复制到空的 sd 卡中。将 sd 卡放入显示器背面的 sd 卡插槽中。然后打开显示器电源,gui 将被加载。然后取出 sd 卡并重新连接电源。
成功加载代码后,让我们启动项目。它会在显示屏上显示文本“正在连接。。.”几秒钟。连接到互联网后,项目连接到预定义的广播电台。硬件按预期工作,但现在让我们看看项目的软件方面。
第 6 步:项目代码
首先,让我向您展示一些东西。该项目的代码不到 140 行代码。想想看,我们可以用 140 行代码构建一个 3.5 英寸显示屏的网络收音机,这太神奇了。当然,我们可以使用包含数千行代码的各种库来实现这一切。
在这个项目中,我将 vs1053 库用于 esp32 板。
首先,我们必须定义 wi-fi 网络的 ssid 和密码。接下来,我们必须在这里保存一些广播电台。我们需要主机 url、流所在的路径以及我们需要使用的端口。我们将所有这些信息保存到这些变量中:
char ssid[] = yourssid; // your network ssid (name) char pass[] = yourwifipassword; // your network password// 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(); pinmode(previousbutton, input_pullup);
pinmode(nextbutton, input_pullup); attachinterrupt(digitalpintointerrupt(previousbutton), previousbuttoninterrupt, falling);
attachinterrupt(digitalpintointerrupt(nextbutton), nextbuttoninterrupt, falling); initmp3decoder();
connecttowifi();
}
在循环函数中,首先,我们检查用户是否选择了与我们从中获取数据的电台不同的电台。如果是这样,我们连接到新的广播电台,否则我们从流中获取数据并将它们发送到 mp3 解码器模块。
void loop() {
if(radiostation!=previousradiostation)
{
station_connect(radiostation);
previousradiostation = radiostation;
}
if (client.available() > 0)
{
uint8_t bytesread = client.read(mp3buff, 32);
player.playchunk(mp3buff, bytesread);
}
}
就这样!当用户按下按钮时,会发生中断,并更改变量的值,该变量告诉要连接到哪个流。
void iram_attr previousbuttoninterrupt() { 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;
}
要更新显示,我们只需向串行端口发送一些命令。
void drawradiostationname(int id){
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
}
}
现在让我们看一下 nextion display gui。nextion gui 由背景图片和显示电台名称的图片组成。esp32 板发送命令以从嵌入的图像中更改广播电台的名称。
第 7 步:最后的想法和改进
这个项目非常简单。我想要一个简单的 internet 广播项目框架来使用。到了这一步,项目已经准备就绪,但我们还可以添加许多功能来改进它。所以,我设计了一个外壳来容纳所有电子设备。
关于smt贴片加工时回流焊缺陷问题
柯尼卡美能达 19 款复合机获国产麒麟、统信 UOS 系统兼容认证
EC推出加速部署人工智能的计划
爱丁堡大学教授呼吁英国应立刻停止部署5G网络
PCB厂如何应对中美贸易冲突
基于ESP32构建一个具有3.5英寸大显示屏的互联网广播设备
一加6T国内发布 屏下指纹配全新电光紫配色 售价3399元起
电子故障排除指南
高压断路器的类型
芯耀辉如何看待Chiplet国内发展情况
OPPON1拆解 内部结构是怎样的
FCC Part25.205~208-功率通量密度PFD限值介绍
希望森兰SB70变频器在位置控制中的应用
手机摄像头还能这么用_赶快去测试测试
前置隐藏镜头+全屏!这是我想要的小米MIX2
商汤科技联合CARA共同发布AI数字人白皮书
5G时代已到来,关于5G手机该如何选择
5G | 加速推进5G部署,韩国一周部署7000基站
热卖光耦型号内部结构图
为锂离子电池使用配置好安全技术