(一)SET.h库文件 (用于整合各种用到的类和实例化对象)
#pragma once
#include <NimBLEDevice.h>
NimBLEAddress Address("03:66:00:29:27:68");
NimBLEUUID ServiceUUID("91680001-1111-6666-8888-0123456789ab");
NimBLEAdvertisedDevice *advDevice;
bool scanning = false, connected = false;
int scanTime = 0, printInterval = 100;
class ClientCallbacks : public NimBLEClientCallbacks
{
void onConnect(NimBLEClient *pClient)
{
Serial.println("连接成功");
connected = true;
}
void onDisconnect(NimBLEClient *pClient)
{
connected = false;
}
};
class AdvertisedDeviceCallbacks : public NimBLEAdvertisedDeviceCallbacks
{
void onResult(NimBLEAdvertisedDevice *advertisedDevice)
{
if (advertisedDevice->getAddress() == Address)
{
Serial.println("发现蓝牙手柄");
NimBLEDevice::getScan()->stop();
advDevice = advertisedDevice;
}
}
};
(二)读取ble信号
#include "set.h"
ClientCallbacks clientCB;
int padData[11];
bool up_btn, dw_btn, lf_btn, rg_btn, x_btn, y_btn, a_btn, b_btn;
bool L1_btn, R1_btn, L2_btn, R2_btn, M1_btn, M2_btn;
bool START, SELECT, HOME;
int joystick1, joystick2;
void startScan()
{
scanning = true;
auto pScan = NimBLEDevice::getScan();
pScan->setAdvertisedDeviceCallbacks(new AdvertisedDeviceCallbacks());
pScan->setInterval(45);
pScan->setWindow(15);
Serial.println("Start scan");
pScan->start(scanTime, scanEndedCB);
}
void scanEndedCB(NimBLEScanResults results)
{
scanning = false;
}
void notifyCB(NimBLERemoteCharacteristic *pRemoteCharacteristic, uint8_t *pData, size_t length, bool isNotify)
{
static bool isPrinting = false;
static unsigned long printedAt = 0;
if (isPrinting || millis() - printedAt < printInterval)
return;
isPrinting = true;
for (int i = 3; i < 12; ++i)
{
Serial.printf("%d/", i);
Serial.printf("%03d ", pData[i]);
padData[i]</