Keine änderung des BLE Namens des esp32c3

OP #8077142
Lesenswert?

habe einen Server BLE auf einen esp32c3 , wenn ich eine änderung lade wird immer nur der alte Name im Handy gezeigt. die verbindung läuft über die Adresse. Warum andert sich der Name nicht. Die KI war auch nicht erfolgreich bei diesen problem. also nur menschliche ideen sind gefragt?

ein junger 81 Jähriger

: Bearbeitet durch User
#8077164
Lesenswert?

hast du die kopplung mal gelöscht und neu gekoppelt? Als ich vor einiger Zeit mit BLE rumgespielt hatte, ist mir ist auch aufgefallen, dass hinzugefügte Dienste oder geänderte Namen nicht zu sehen waren, bis ich die Kopplung entfernt und neu gekoppelt hatte. Wahrscheinlich ruft er die Characteristiken nicht neu ab, da sich Geräte ja im normalfall nicht ändern.

#8077473
Lesenswert?

Den Namen gibt's zweimal, einmal als Geräte-Name und einmal im Advertising

1
#define SERVER_NAME "esp32c3"
2
BLEServer* pServer = BLEDevice::createServer();
3
BLEDevice::init(SERVER_NAME);
4
BLEAdvertising *pAdvertising = pServer->getAdvertising();
5
pAdvertising->setName(SERVER_NAME);
OP #8077558
Lesenswert?

Hallo alex ein prog als BLE server mit Quitierung

// Blaue Led an Pin 8 zur Meldung

#include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h> #include <BLE2902.h>

#include <SoftwareSerial.h>

String Test=""; #define LED_PIN 8

BLECharacteristic *pCharacteristic;

bool deviceConnected = false;

// UART Service UUIDs (Nordic UART Service) #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" #define CHARACTERISTIC_RX_UUID "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" #define CHARACTERISTIC_TX_UUID "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"

class ServerCallbacks : public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; Serial.println("Verbunden"); }

void onDisconnect(BLEServer* pServer) { deviceConnected = false; Serial.println("Getrennt"); BLEDevice::startAdvertising(); } };

class RXCallbacks : public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pChar) { String received = pChar->getValue().c_str();

1
received.trim();
2
    Test=received; //wird in loop bearbeitet
3
     if (received == "ON") {
4
  digitalWrite(LED_PIN, HIGH);   
5
}
6
else if (received== "OFF") {
7
  digitalWrite(LED_PIN, LOW);    
8
}

Serial.print("Empfangen: "); Serial.println(received); String reply = "Echo: " + received; //der server hängt das dran zur kontrolle pCharacteristic->setValue(reply.c_str()); pCharacteristic->notify(); } };

void setup() {

Serial.begin(115200); //setup_(); delay(100); pinMode(LED_PIN, OUTPUT); BLEDevice::init("ESP32C3_BLE"); BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new ServerCallbacks()); BLEService *pService = pServer->createService(SERVICE_UUID); // TX (ESP32 -> Handy) pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_TX_UUID, BLECharacteristic::PROPERTY_NOTIFY ); pCharacteristic->addDescriptor(new BLE2902()); // RX (Handy -> ESP32) BLECharacteristic *pRX = pService->createCharacteristic( CHARACTERISTIC_RX_UUID, BLECharacteristic::PROPERTY_WRITE ); pRX->setCallbacks(new RXCallbacks()); pService->start(); BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); pAdvertising->start(); }//setup

void aktion(int nr) { if( nr==1) { digitalWrite(LED_PIN, LOW); delay(500); digitalWrite(LED_PIN, HIGH); delay(500);
digitalWrite(LED_PIN, LOW); delay(500); digitalWrite(LED_PIN, HIGH); } }

void Auswertung_Test() { if (Test=="") {}

else { String s = String(Test); int Be_zahl = s.toInt(); if (Be_zahl!=0) {aktion(Be_zahl);}//Bluetooth empfang und Aktion/ledpos,255); Test=""; delay(50); } }

void loop() {

Auswertung_Test(); Test=""; }

Alexander schrieb:

Den Namen gibt's zweimal, einmal als Geräte-Name und einmal im Advertising

wo wird das eingefügt das der name immer übernommen wird

Der 81 jährige p.s. ach ja, es ist ein esp32c3 super mini

: Bearbeitet durch User
#8077582
Lesenswert?

Die letzte Zeile im setup() ist bei Dir pAdvertising->start(); damit wird das Advertising gestartet. Bevor es startet solltest Du dem Advertising einen Namen verpassen. Also fügst Du die Zeile am besten direkt darüber ein.

1
void setup() {
2
  ...
3
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
4
  pAdvertising->addServiceUUID(SERVICE_UUID);
5
  // --> hier
6
  pAdvertising->setName("ESP32C3_BLE");
7
  pAdvertising->start();
8
}//setup

Wenn es dann immer noch nicht geht sind die Strings zu lang. In dem Fall packt man das Advertising in die ScanResponse.

1
void setup() {
2
  ...
3
  pAdvertising->enableScanResponse(true);
4
  pAdvertising->setName("ESP32C3_BLE");
5
  ...
6
}//setup

Damit Du den Namen nicht an zwei Stellen hartcodiert hast, empfehle ich Dir ein #define (oder inline constexpr const char* sonst gibt's Haue von den C++ Experten)

1
#define BLE_NAME "ESP32C3_BLE"

Das musst Du dann natürlich auch an beiden Stellen einsetzen (Zeile 63 + 82)

: Bearbeitet durch User
#8077960
Lesenswert?

Hab's noch mal zurückverfolgt auf Commit 1c79eb8, 'setName' wurde mit 3.3.0-RC1 eingeführt. Entweder hast Du einen älteren Core installiert oder die Includes kommen mit irgendwelchen anderen Libraries nicht klar. Aufschluss gibt das Log..

Zur Info bei mir funktioniert es, ich mache das ja genau so in meinem Projekt. Dieser Weg ist schon der richtige, auch wenn Dir eine KI vielleicht was anderes erzählt hat.

: Bearbeitet durch User
OP #8078051
Lesenswert?

Alexander schrieb:

Zur Info bei mir funktioniert es, ich mache das ja genau so in meinem Projekt. Dieser Weg ist schon der richtige, auch wenn Dir eine KI vielleicht was anderes erzählt hat.

So leichtgläubig bin ich nicht...;--)))

Aber ich bin erst mal fro das ich einen endlich funktionierenden Server habe, den passendenden clienten habe ich auch endlich. so das ich an das eigentliche rangehen kann ,meine Anwendungen zu programmieren.

Der kampf mit dem Systhemen finde ich immer zum Kotzen. Noch dazu das ich nur dadurch zwangsweise lernen muss, und meine Lebenszeit dafür opfern muss.

Schönes Wochenende Der 81 Jährige alte Knacker

#8078114
Lesenswert?

Ich möchte an der Stelle darauf hinweisen, mit der Version der Arduino IDE hat das nur insofern was zu tun, dass zum Installationszeitpunkt wohl die ESP32 Core Version v2 aktuell war.

Ist aber völlig unabhängig voneinander, und mittlerweile sind wir bei Arduino ESP32 Core Version v4.0 (based on ESP-IDF 6.1) angekommen, mit einer Menge Breaking Changes. BT Classic (Bluedroid) fliegt komplett raus, NimBLE ist der neue Standard. Welche IDE man benutzt ist dabei völlig egal.

: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren