前言
本文分享的是一个嵌入式小项目,实现了通过手机进行远程关灯,成本低廉,制作简单,本文的分享适合对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。
得上面再安装一个舵机才可以开灯。
对于只有一个开关的情况,可以选择把舵机手臂竖着放,就能实现一个舵机开关灯了,当然对应的代码也要改。
舵机一定要粘牢,里面贴双面胶,外面再粘几层。