【入门级蓝牙wifi芯片:ESP32cam系列】ESP32cam蓝牙控制SG90舵机旋转(三)
·
1.首先编写esp32cam的arduino的ino文件,代码如下所示,注意arduino选esp32 wrove module
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <ESP32Servo.h>
// 舵机控制引脚
#define SERVO_PIN 13
Servo myservo;
// BLE 相关 UUID
#define SERVICE_UUID "12345678-1234-1234-1234-1234567890ab"
#define CHARACTERISTIC_UUID "abcdefab-1234-5678-1234-abcdefabcdef"
BLECharacteristic *pCharacteristic;
// BLE 特征回调:接收手机/PC写入的数据
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
String value = pCharacteristic->getValue(); // Arduino String
if (value.length() > 0) {
Serial.print("Received: ");
Serial.println(value);
// 将字符串转换为角度
int angle = value.toInt();
if (angle >= 0 && angle <= 180) {
myservo.write(angle); // 控制舵机
} else {
Serial.println("角度无效,只能 0~180");
}
}
}
};
void setup() {
Serial.begin(115200);
Serial.println("ESP32 BLE Servo Control");
// 初始化舵机
myservo.attach(SERVO_PIN);
myservo.write(90); // 初始中位
// 初始化 BLE
BLEDevice::init("ESP32_Servo");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
// 创建特征
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setCallbacks(new MyCallbacks());
// 启动服务
pService->start();
// 开始广播
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(pService->getUUID());
BLEDevice::startAdvertising();
Serial.println("等待 BLE 客户端连接...");
}
void loop() {
// 主循环不需要处理,舵机通过 BLE 写入控制
}
2.手机下载nRF Connect手机版或者PC版,这里使用python脚本连接esp32cam的蓝牙
首先得知道esp32cam的mac地址,所以写一段mac获取脚本
import asyncio
from bleak import BleakScanner
async def scan():
devices = await BleakScanner.discover()
for d in devices:
print(d)
asyncio.run(scan())
接下来是连接脚本,设定旋转90度,mac填写上面搜到的mac,SERVICE_UUID和CHAR_UUID必须和arduino的ino文件里的相同
import asyncio
from bleak import BleakClient
ESP32_MAC = "AA:BB:CC:DD:EE:FF"
SERVICE_UUID = "12345678-1234-1234-1234-1234567890ab"
CHAR_UUID = "abcdefab-1234-5678-1234-abcdefabcdef"
async def main():
async with BleakClient(ESP32_MAC) as client:
print("连接成功:", client.is_connected)
# 发送角度 150°
angle = 30
await client.write_gatt_char(CHAR_UUID, str(angle).encode())
print(f"已写入角度: {angle}")
# 等 5 秒,再发送 0°
asyncio.run(main())
3.连线参考【入门级蓝牙wifi芯片:ESP32cam系列】ESP32cam+烧录座无需TTL如何实现5V供电(一)https://blog.csdn.net/2401_82756020/article/details/150979153?spm=1001.2014.3001.5501
注意SG90舵机黄线连接pin13,红线是电源,棕线是地线。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)