DIY 蓝牙音箱 | ESP32 + TFT屏 + 功放 + 小音箱 + Arduino IDE

原创@蓝魔盒出品

🌟你是否想打造一款独一无二的蓝牙音箱?今天我来教你用ESP32、TFT屏、功放和小音箱,结合Arduino IDE,实现播放音乐时屏幕上有眨眼动图的蓝牙音箱!💡

硬件材料及连接方式

- ESP32 开发板

- 1.44寸 TFT 屏:ST7735

-功放模块(MAX98357)

-音箱3W 左右(型号自选)

- 连接线(若干)

-按键*1

我自己做了一块电路板方便接线,也可以用面包板,主要引脚连接参考示意图,音箱和功放连接比较简单,就把音箱的两根线接到功放的输出口,不分正反的

示意图:

代码部分:

1.  安装Arduino IDE(Arduino官网下载,有详细指导),并配置相关库,创建实例。

2. 给出了完整代码如下

3. 可以根据自己的喜好更改动图的内容,数据转换可以用网上工具: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打印后,手工打磨好喷漆处理。

主要功能:

1. **时钟显示** 🕒

   - 通过TFT屏幕实时显示当前时间。

2. **蓝牙播放音乐** 🎵

   - 使用ESP32内置蓝牙功能连接手机播放音乐。

3. **动图显示** 👀

   - 当播放音乐时,屏幕上显示可爱的眨眼睛动图,增加互动性。

DIY不仅能带来乐趣,还能让你学到更多电子知识。记得点赞、收藏和关注我,给我更多动力出新作❤️

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值