Hallo an alle,
ich habe mir letztens eine Philips HUE BLE Lampe gekauft und mir dann in den Kopf gesetzt, diese mit einem ESP32 steuern zu wollen (AN AUS und Dimmen).
Ich habe mir einmal den BLEClient Sketch vorgenommen.
//-----------------------------------------------------------------\\
//
// BLE Phillips HUE Lampe schalten bzw. Dimmen
// c7:f7:7e:8e:76:0a
//-----------------------------------------------------------------\\
#include "BLEDevice.h"
static BLEUUID serviceUUID("932c32bd-0000-47a2-835a-a8d455b859dd"); //Service der Lampe
static BLEUUID charONFUUID("932c32bd-0002-47a2-835a-a8d455b859dd"); //Characteristic für an und aus
static BLEUUID charDIMUUID("932c32bd-0003-47a2-835a-a8d455b859dd"); //Characteristic für Dimmen
bool conected = false;
static BLEAdvertisedDevice* myDevice;
class MyCallbacks: public BLEAdvertisedDeviceCallbacks
{
void onResult(BLEAdvertisedDevice advertisedDevice)
{
const char* compareAddress = advertisedDevice.getAddress().toString().c_str();
//BLEAddress adress = advertisedDevice.getAddress();
if (strcmp(compareAddress, "c7:f7:7e:8e:76:0a") == 0)
{
Serial.print("found it");
advertisedDevice.getScan()->stop();
myDevice = new BLEAdvertisedDevice(advertisedDevice);
conected = true;
}
}
};
bool ConnectToServer()
{
BLEClient* pMyClient = BLEDevice::createClient();
pMyClient->connect(myDevice);
Serial.println("connected is here");
conected = false;
BLERemoteService* pRemoteService = pMyClient->getService(serviceUUID);
BLERemoteCharacteristic* pRemoteCharacteristic = pRemoteService->getCharacteristic(charONFUUID);
if (pRemoteCharacteristic->canRead())
{
Serial.println("canRead");
std::string myValue;
uint8_t* test = pRemoteCharacteristic->readRawData();
if (test == nullptr)
{
Serial.println("Fail-NullPointer");
}
}
//Serial.println(pMyClient->getService(serviceUUID).toString().c_str());
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
BLEDevice::init("");
BLEScan* pMyScan = BLEDevice::getScan();
pMyScan->setAdvertisedDeviceCallbacks(new MyCallbacks());
pMyScan->start(2);
}
void loop() {
// put your main code here, to run repeatedly:
if (conected == true)
{
ConnectToServer();
Serial.println("HI");
}
delay(200);
}
Mein Problem, wenn ich versuche den Wert der Characteristic auszulesen, bekomme ich einen NullPointer.
Die UUIDs habe ich mit der nRFConnect App ausgelesen, und mit dieser konnte ich auch die Lampe steuern (an aus dimmen) nur kann ich mit meinem ESP32 weder Werte schreiben noch lesen. Sieht jemand was ich falsch mache (hab schon eine weile nicht mehr programmiert und mit BLE oder Bluetooth habe ich noch nie etwas gemacht)?
Vielen Dank schon mal im Vorraus,
LG Hansbeder