基于esp32的ble蓝牙模块控制宿舍关灯

前言

本文分享的是一个嵌入式小项目,实现了通过手机进行远程关灯,成本低廉,制作简单,本文的分享适合对iot开发进行初步学习,也适合针对宿舍远程关灯的需求作为参考。

准备硬件:esp32单片机(型号选最经典款即够用),杜邦线公母头(视情况而选,用到的至少3根),sg90舵机180度(也可以多花几块选性能更好的),螺丝刀(用于固定舵机的摇臂),多出来的手机充电器和充电线(typec口)

准备软件:Arduino IDE https://www.arduino.cc/en/software

连线处理

ESP32开发板                       SG90舵机
├── GPIO13                      → 信号线(橙色) 
├── 5V引脚(或者叫vin) → VCC(红色) 
└── GND                           → GND(棕色)

安装库

ESP32支持库

打开Arduino IDE后
1. 进入 工具 → 开发板 → 开发板管理器,搜索 esp32,安装 ESP32 by Espressif Systems(可能安装不上,选低一点版本)。
2. 选择开发板:工具 → 开发板 → ESP32 Arduino → (自己的esp32的具体型号)。
3. 选择端口:工具 → 端口 → 选择对应的COM口

舵机库

项目 → 加载库 → 管理库,搜索 ESP32Servo,安装 ESP32Servo by Kevin

代码

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <ESP32Servo.h>  // 使用 ESP32 专用的舵机库

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
#define SERVO_PIN 13  // 舵机信号线接 GPIO13

Servo myservo;  // 使用 ESP32Servo 库创建舵机对象
bool deviceConnected = false;
BLEServer* pServer = nullptr;
BLECharacteristic* pChar = nullptr;

class MyCallbacks : public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic) {
        std::string value = pCharacteristic->getValue();
        if (value == "OFF") {           
            myservo.write(100);          
            delay(1000);                
            myservo.write(50);
            delay(1000);
            myservo.write(10);
            delay(1000);
            myservo.write(50);
        } 
    }
};


class MyServerCallbacks : public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
        deviceConnected = true;
    }

    void onDisconnect(BLEServer* pServer) {
        deviceConnected = false;
    }
};

void setup() {
    Serial.begin(115200);  // 初始化串行通信
    myservo.attach(SERVO_PIN);  // 将舵机绑定到 GPIO13
    myservo.write(50);
    BLEDevice::init("SmartLight_BLE"); // 设备名称
    pServer = BLEDevice::createServer();
    pServer->setCallbacks(new MyServerCallbacks());
    BLEService *pService = pServer->createService(SERVICE_UUID);
    pChar = pService->createCharacteristic(
        CHARACTERISTIC_UUID,
        BLECharacteristic::PROPERTY_WRITE
    );
    pChar->setCallbacks(new MyCallbacks());
    pService->start();
    pServer->getAdvertising()->start();
    Serial.println("BLE 广告开始,等待连接...");
}

void loop() {
    if (!deviceConnected) {
        // 如果设备断开连接,重新启动广告
        pServer->getAdvertising()->start();
    }
    delay(2000);
    
}

esp32用数据线连接到电脑,确认连接好后,进行上传完成烧录

手机控制

下载nrfconnect(或者蓝牙调试器,ble调试助手...等等),发现设备,连接设备,确认uuid值无误后,即可发送OFF特征值,控制舵机开始关灯动作

安装硬件

如图,杜邦线,舵机,都适当用胶带粘一下,舵机要多粘几层。

这里其实能看出来,这个装置很鸡肋的是,一个舵机,却有两个开关,所以只能做到同时关灯,无法开灯qaq。

得上面再安装一个舵机才可以开灯。

对于只有一个开关的情况,可以选择把舵机手臂竖着放,就能实现一个舵机开关灯了,当然对应的代码也要改。

舵机一定要粘牢,里面贴双面胶,外面再粘几层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值