原创@蓝魔盒出品
🌟你是否想打造一款独一无二的蓝牙音箱?今天我来教你用ESP32、TFT屏、功放和小音箱,结合Arduino IDE,实现播放音乐时屏幕上有眨眼动图的蓝牙音箱!💡
硬件材料及连接方式:
ESP32 开发板
1.44寸 TFT 屏:ST7735
-功放模块(MAX98357)
-音箱3W 左右(型号自选)
- 连接线(若干)
-按键*1
我自己做了一块电路板方便接线,也可以用面包板,主要引脚连接参考示意图,音箱和功放连接比较简单,就把音箱的两根线接到功放的输出口,不分正反的
示意图:
代码部分:
安装Arduino IDE(Arduino官网下载,有详细指导),并配置相关库,创建实例。
给出了完整代码如下
可以根据自己的喜好更改动图的内容,数据转换可以用网上工具:File to C style array converter
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <BluetoothA2DPSink.h>
#include <driver/i2s.h>
#include <SPI.h>
#define TFT_CS 5
#define TFT_RST 19
#define TFT_DC 33
#define BUTTON_PIN 21
#define TFT_MOSI 18
#define TFT_SCLK 14
#define I2S_BCK_PIN 26
#define I2S_WS_PIN 27
#define I2S_DATA_PIN 25
#define BUFFER_SIZE 1024
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
BluetoothA2DPSink a2dp_sink;
// Placeholder for image arrays
const uint16_t eyeImage1[120 * 120] = {};
const uint16_t eyeImage2[120 * 120] = {};
const uint16_t eyeImage3[120 * 120] = {};
uint8_t currentBackground = 0;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
tft.initR(INITR_BLACKTAB); // Initialize the display
tft.setRotation(1);
//load initial background
loadBackground(currentBackground);
a2dp_sink.set_pin_config(i2s_pin_config_t {
.bck_io_num = 26,
.ws_io_num = 27,
.data_out_num = 25,
.data_in_num = I2S_PIN_NO_CHANGE
});
a2dp_sink.set_i2s_port(I2S_NUM_0);
a2dp_sink.start("ESP32 Music Player");
// Initialize I2S for audio output
i2s_config_t i2s_config = {
.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_TX),
.sample_rate = 44100,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S_MSB,
.intr_alloc_flags = 0,
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false,
.tx_desc_auto_clear = true,
.fixed_mclk = 0
};
i2s_pin_config_t pin_config = {
.bck_io_num = I2S_BCK_PIN,
.ws_io_num = I2S_WS_PIN,
.data_out_num = I2S_DATA_PIN,
.data_in_num = I2S_PIN_NO_CHANGE // Not used
};
// Install and start I2S driver
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
i2s_set_pin(I2S_NUM_0, &pin_config);
i2s_zero_dma_buffer(I2S_NUM_0);
}
void loop() {
// Check for button press to switch background
if (digitalRead(BUTTON_PIN) == LOW) {
delay(200); // Debounce delay
currentBackground = (currentBackground + 1) % 3;
loadBackground(currentBackground);
}
}
void loadBackground(uint8_t bgNumber) {
tft.fillScreen(ST7735_BLACK); // Clear the screen
switch (bgNumber) {
case 0:
tft.drawRGBBitmap(0, 0, eyeImage1, 120, 120);
break;
case 1:
tft.drawRGBBitmap(0, 0, eyeImage2, 120, 120);
break;
case 2:
tft.drawRGBBitmap(0, 0, eyeImage3, 120, 120);
break;
}
}
成品展示:
成品外壳采用freeCad设计,3D打印后,手工打磨好喷漆处理。
主要功能:
时钟显示 🕒
- 通过TFT屏幕实时显示当前时间。
蓝牙播放音乐 🎵
- 使用ESP32内置蓝牙功能连接手机播放音乐。
动图显示 👀
- 当播放音乐时,屏幕上显示可爱的眨眼睛动图,增加互动性。
DIY不仅能带来乐趣,还能让你学到更多电子知识。记得点赞、收藏和关注我,给我更多动力出新作❤️
版权归原作者 huiming60606 所有, 如有侵权,请联系我们删除。