10

I'm working on BLE project with espressif library. And It returns me founded BLE device.

std::string getManufacturerData();
std::string getName();
int         getRSSI();
BLEScan*    getScan();

When I want to print device name to serial port

BLEAdvertisedDevice founded_dev;
founded_dev=foundDevices.getDevice(0);
Serial.println("Name -> " + founded_dev.getName());

It gives me error like this

no matching function for call to 'HardwareSerial::println(std::__cxx11::basic_string<char>)'

So how can i convert to std:string to String in Arduino?

BK52
  • 203
  • 1
  • 2
  • 4

1 Answers1

11

Don't. Instead just access the underlying C string:

Serial.print(F("Name -> "));
Serial.println(founded_dev.getName().c_str());
Majenko
  • 105,095
  • 5
  • 79
  • 137
  • That works for getName() but not some of the other methods such as BLEAdvertisedDevice::getAddress() or BLEAdvertisedDevice::getServiceUUID() – Tom Auger Jan 31 '20 at 02:04
  • @TomAuger That's because they don't return a string. The first returns a BLEAddress, the second a BLEUUID. Custom types that will need special handling. – Majenko Jan 31 '20 at 09:53
  • 2
    For the UUID you can use getServiceUUID().toString().c_str(), For the address you can use: getAddress().toString().c_str(). – Majenko Jan 31 '20 at 09:54