跟川爸做个网络小音箱
啊,川仔终于骑上了心爱的小童车。这款摇依摇童车小区里几乎一娃一台,实在不想跟风,可娃抓着别人的车不撒手啊。赶上疫情仓库疯了厂商又不发货,最后同城自提了别人的爱车。
川仔最喜欢按车上的按键,4个按键无论你怎么按都是4首曲子循环,很快川仔按够了,我们也听烦了。心想要是能改一改音乐就好了,在小区里溜娃的时候也不怕遇到同款了,毕竟灵魂是不一样的。故事就这么开始了。
对硬件零基础的川爸一直想尝试下,这次重要找到了动力(jiekou)搞一下。经过一番搜索,发现资料很少,所以有了这篇分享。如果你和川爸一样零基础那么可以看一下。
主要材料介绍
ESP32这块开发板,这是一颗由乐鑫研发的国产芯片,性能强劲,自带WIFI和蓝牙模块,是目前最有性价比的物联网微控制器。它相当于电脑和手机里的CPU+主板+内存+硬盘,他有30个针脚,通过控制针脚的电平来实现对其他配件的控制。
MAX98357A功率放大器,由于ESP32只能驱动耳机无法很好的驱动扬声器所以我们需要这么一块小功放。
3W小喇叭一枚,我这是小米蓝牙音箱上拆的。4Ω3W扬声器都可以,3元可购入。
其他材料:非自锁按键2个,母对母杜邦线5根,micro usb数据线一根。最好再准备一块5v microusb的电池。
还有个最关键的,找一个自己喜欢的盒子,为其注入个性。
我随手找了个葱伴侣面酱盒,所以这个作品就有了名字,“音乐酱”。无论放在厨房还是餐桌都毫无违和感,这个风格我们就叫居家朋克风吧。
硬件连接
接下来就是用杜邦线把ESP32和配件链接起来
认识下ESP32的引脚编号,图上我标识了下D25,D26,D27三颗引脚。用杜邦线分别对应链接到MAX98357A的LRC,BCLK,DOUT。这就完成了数据传输接口(I2S)的链接。
再分别将3v3和VIN链接,GND和GND链接,这就完成了供电的链接,让MAX98357A可以从ESP32获得电源,再将扬声器插入MAX98357A。完成后的硬件链接如图。
软件环境搭建
1. 安装arduino,我们采用arduino进行软件开发,arduino是一个面向艺术家等非职业用户的微控制器开发系统。可免费下载使用 https://www.arduino.cc/en/software
2. 在arduino里安装ESP32驱动套件,因为arduino官方并不原生支持ESP32芯片,所以我们需要手动进行配置,让arduino载入ESP32官方提供的驱动套件。
打开arduino的文件-首选项,在其他开发板管理器地址里输入以下地址,点击确定。
gh…com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
3. 点击arduino的工具->开发板管理器,输入ESP32,点击安装,会进行自动下载。
4.用microusb数据线链接电脑和ESP32,ESP32亮灯,并且电脑识别到串口,再选择ESP32-WROOM-DA Module。环境配置就完成了。
软件编写
1. 安装MP3的解码库,ESP32是支持WAV等非压缩格式的播放,因为ESP32强大的计算能力所以可以进行MP3的软件解码。
下载软件解码器。gh....com/schreibfaul1/ESP32-audioI2S/archive/refs/tags/2.0.5.zip
安装解码器到arduino,点击项目-包含库-添加.zip库
2. 编写软件,复制一下代码到你的arduino里,把wifi的名称和密码修改成你家的。
#include "Arduino.h"
#include "WiFi.h"
#include "Audio.h"
#define I2S_DOUT 27
#define I2S_BCLK 26
#define I2S_LRC 25
Audio audio;
String ssid = "你的WIFI名称";
String password = "你的WIFI密码";
void setup() {
Serial.begin(115200);
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid.c_str(), password.c_str());
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("");
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
audio.setVolume(12);
audio.connecttohost("0n-80s.radionetz.de:8000/0n-70s.mp3");
}
void loop()
{
audio.loop();
}
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_showstreaminfo(const char *info) {
Serial.print("streaminfo "); 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);
}
void audio_eof_speech(const char *info) {
Serial.print("eof_speech "); Serial.println(info);
}
3. 插上ESP32,点击运行。音乐响起。
4.插上充电宝,2秒钟就想起了音乐。
后续,等电池到了,再把电池和按键设置好,小作品就完成了。
那么问题来了川仔的小童车怎么办?
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
beecat
校验提示文案
无上流沙
校验提示文案
GaryFps
校验提示文案
GaryFps
校验提示文案
无上流沙
校验提示文案
beecat
校验提示文案