liqinliqin
2024-04-28 19:30:47 +08:00
#include <Arduino.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
// 定义 BLE 服务、特征和 UUID
BLEServer* pServer;
BLEService* pService;
BLECharacteristic* pCharacteristic;
// 定义马达控制参数
const int motorPin = 12; // 马达控制引脚
int motorSpeed = 0; // 马达转速
// 定义温度传感器引脚
const int tempSensorPin = 34; // 温度传感器引脚
// 定义运动检测参数
const int motionSensorPin = 35; // 运动传感器引脚
int motionDetected = 0; // 运动检测结果
// 定义开关机按键参数
const int powerButtonPin = 27; // 开关机按键引脚
bool powerState = false; // 开关机状态
// 定义 BLE 特征的 UUID
#define CHARACTERISTIC_UUID "1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p"
// 回调函数,当有 BLE 中心设备连接或断开连接时调用
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
Serial.println("BLE 设备已连接");
};
void onDisconnect(BLEServer* pServer) {
Serial.println("BLE 设备已断开连接");
}
};
// 初始化 BLE 服务
void initBLE() {
BLEDevice::init("ESP32_BLE_Server");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
pService = pServer->createService(BLEUUID((uint16_t)0x180F));
pCharacteristic = pService->createCharacteristic(
BLEUUID((uint16_t)0x2A19),
BLECharacteristic::PROPERTY_READ
);
pCharacteristic->setValue(0); // 初始化特征值为 0
pService->start();
BLEAdvertising* pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
// 初始化硬件
void setup() {
Serial.begin(115200);
initBLE();
pinMode(motorPin, OUTPUT);
pinMode(tempSensorPin, INPUT);
pinMode(motionSensorPin, INPUT);
pinMode(powerButtonPin, INPUT_PULLUP);
}
// 主循环
void loop() {
// 读取温度传感器数据
float temperature = analogRead(tempSensorPin) * 3.3 / 4095 * 100; // 假设温度传感器为模拟传感器,实际情况请根据传感器类型调整
// 检测运动传感器
motionDetected = digitalRead(motionSensorPin);
// 检测开关机按键状态
if (digitalRead(powerButtonPin) == LOW) {
powerState = !powerState; // 切换开关机状态
}
// 发送数据到 BLE 中心设备
pCharacteristic->setValue(temperature); // 将温度值写入 BLE 特征
pCharacteristic->notify();
delay(1000); // 等待 1 秒钟
}