#include <Arduino.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <TFT_eSPI.h> // 依赖 TFT_eSPI 库
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> // 若需 OLED 支持,需在 libraries.txt 添加 Adafruit_SSD1306
// 初始化 TFT 屏幕
TFT_eSPI tft = TFT_eSPI();
// 蓝牙服务/特征 UUID
#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
// 蓝牙回调类(处理接收数据)
class MyCallbacks : public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic* pCharacteristic) {
// 获取蓝牙接收的数据(转换为 Arduino String)
String rxValue = pCharacteristic->getValue().c_str();
if (rxValue.length() > 0) {
char cmd = rxValue[0]; // 取第一个字符作为命令
if (cmd == '1') selectSong(0);
else if (cmd == '2') selectSong(1);
else if (cmd == '3') selectSong(2);
}
}
};
// 歌曲选择函数(根据索引更新屏幕)
void selectSong(int songIndex) {
tft.fillScreen(TFT_BLACK); // 清屏
tft.setCursor(0, 0);
tft.setTextColor(TFT_WHITE);
tft.setTextSize(2);
// 根据索引显示歌曲名
switch (songIndex) {
case 0: tft.print("Playing: Song 1"); break;
case 1: tft.print("Playing: Song 2"); break;
case 2: tft.print("Playing: Song 3"); break;
default: tft.print("Invalid Song");
}
}
void setup() {
Serial.begin(115200);
// 初始化 TFT 屏幕
tft.init();
tft.fillScreen(TFT_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(TFT_WHITE);
tft.setTextSize(2);
tft.print("Bluetooth Music Player");
// 初始化蓝牙
BLEDevice::init("ESP32_Music");
BLEServer* pServer = BLEDevice::createServer();
BLEService* pService = pServer->createService(SERVICE_UUID);
// 创建接收特征(可写)
BLECharacteristic* pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_RX,
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setCallbacks(new MyCallbacks()); // 绑定回调
pService->start(); // 启动服务
BLEAdvertising* pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->start();
}
void loop() {
delay(1000); // 主循环空转,蓝牙事件由回调处理
}Loading
ssd1306
ssd1306