Erreur lors de l'utilisation de la libraire legoino pour commande des hubs lego

bonjour,
Lorsque j'essai de compiler un exemple d'ultilisation de la libriaire legoino pour piloter des trains lego par BT J'obtient un message d'erreur de ce type
;error: 'string' in namespace 'std' does not name a type
Pouvez vous m'aider à résoudre ce problème ?
Merci

postez un lien vers la bibliothèque, votre code (en utilisant les balises de code) et le message d'erreur complet que vous avez à la compilation (en utilisant aussi les balises de code)

la bibliothèque est legoino
https://github.com/corneliusmunz/legoino
et le fichier exemple est
https://github.com/corneliusmunz/legoino/blob/master/examples/TrainHub/TrainHub.ino
J'utilise le dernier IDE arduino 2.3.4
les erreurs dépendent de la carte sélectionnée.
avec la carte arduino nano esp 32 :slight_smile:

In file included from c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.cpp:11:
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:30:15: error: 'string' in namespace 'std' does not name a type
   30 |   static std::string ColorStringFromColor(Color color);
      |               ^~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:16:1: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   15 | #include "Lpf2HubConst.h"
  +++ |+#include <string>
   16 | #include <string.h>
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:31:15: error: 'string' in namespace 'std' does not name a type
   31 |   static std::string ColorStringFromColor(int color);
      |               ^~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:31:10: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   31 |   static std::string ColorStringFromColor(int color);
      |          ^~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.cpp:39:6: error: 'string' in namespace 'std' does not name a type
   39 | std::string LegoinoCommon::ColorStringFromColor(Color color)
      |      ^~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.cpp:12:1: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   11 | #include "LegoinoCommon.h"
  +++ |+#include <string>
   12 | 
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.cpp:48:6: error: 'string' in namespace 'std' does not name a type
   48 | std::string LegoinoCommon::ColorStringFromColor(int color)
      |      ^~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.cpp:48:1: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   48 | std::string LegoinoCommon::ColorStringFromColor(int color)
      | ^~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.cpp:101:10: error: no declaration matches 'uint32_t LegoinoCommon::ReadUInt32LE(uint8_t*, int)'
  101 | uint32_t LegoinoCommon::ReadUInt32LE(uint8_t *data, int offset = 0)
      |          ^~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:28:23: note: candidate is: 'static unsigned int LegoinoCommon::ReadUInt32LE(uint8_t*, int)'
   28 |   static unsigned int ReadUInt32LE(uint8_t *data, int offset);
      |                       ^~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:18:7: note: 'class LegoinoCommon' defined here
   18 | class LegoinoCommon
      |       ^~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.cpp:107:9: error: no declaration matches 'int32_t LegoinoCommon::ReadInt32LE(uint8_t*, int)'
  107 | int32_t LegoinoCommon::ReadInt32LE(uint8_t *data, int offset = 0)
      |         ^~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:29:21: note: candidate is: 'static int LegoinoCommon::ReadInt32LE(uint8_t*, int)'
   29 |   static signed int ReadInt32LE(uint8_t *data, int offset);
      |                     ^~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\LegoinoCommon.h:18:7: note: 'class LegoinoCommon' defined here
   18 | class LegoinoCommon
      |       ^~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2HubEmulation.cpp: In member function 'void Lpf2HubEmulation::start()':
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2HubEmulation.cpp:393:25: error: no matching function for call to 'NimBLEDevice::setPower(esp_power_level_t, esp_ble_power_type_t)'
  393 |   NimBLEDevice::setPower(ESP_PWR_LVL_N0, ESP_BLE_PWR_TYPE_ADV); // 0dB, Advertisment
      |   ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2HubEmulation.h:20,
                 from c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2HubEmulation.cpp:17:
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEDevice.h:117:26: note: candidate: 'static bool NimBLEDevice::setPower(int8_t)'
  117 |     static bool          setPower(int8_t dbm);
      |                          ^~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEDevice.h:117:26: note:   candidate expects 1 argument, 2 provided
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2HubEmulation.cpp:418:18: error: 'class NimBLEAdvertising' has no member named 'setScanResponse'; did you mean 'setScanResponseData'?
  418 |   _pAdvertising->setScanResponse(true);
      |                  ^~~~~~~~~~~~~~~
      |                  setScanResponseData
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2HubEmulation.cpp:451:27: error: no matching function for call to 'NimBLEAdvertisementData::addData(std::string)'
  451 |   scanResponseData.addData(std::string{0x02, 0x0A, 0x00});
      |   ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertising.h:35,
                 from c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEServer.h:29,
                 from c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEDevice.h:255:
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:29:10: note: candidate: 'bool NimBLEAdvertisementData::addData(const uint8_t*, size_t)'
   29 |     bool addData(const uint8_t* data, size_t length);
      |          ^~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:29:10: note:   candidate expects 2 arguments, 1 provided
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:30:10: note: candidate: 'bool NimBLEAdvertisementData::addData(const std::vector<unsigned char>&)'
   30 |     bool addData(const std::vector<uint8_t>& data);
      |          ^~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:30:46: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'const std::vector<unsigned char>&'
   30 |     bool addData(const std::vector<uint8_t>& data);
      |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2HubEmulation.cpp:453:27: error: no matching function for call to 'NimBLEAdvertisementData::addData(std::string)'
  453 |   scanResponseData.addData(std::string{0x05, 0x12, 0x10, 0x00, 0x20, 0x00});
      |   ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:29:10: note: candidate: 'bool NimBLEAdvertisementData::addData(const uint8_t*, size_t)'
   29 |     bool addData(const uint8_t* data, size_t length);
      |          ^~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:29:10: note:   candidate expects 2 arguments, 1 provided
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:30:10: note: candidate: 'bool NimBLEAdvertisementData::addData(const std::vector<unsigned char>&)'
   30 |     bool addData(const std::vector<uint8_t>& data);
      |          ^~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEAdvertisementData.h:30:46: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'const std::vector<unsigned char>&'
   30 |     bool addData(const std::vector<uint8_t>& data);
      |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp:58:1: error: expected class-name before '{' token
   58 | {
      | ^
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp: In constructor 'Lpf2HubAdvertisedDeviceCallbacks::Lpf2HubAdvertisedDeviceCallbacks(Lpf2Hub*)':
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp:62:58: error: class 'Lpf2HubAdvertisedDeviceCallbacks' does not have any field named 'NimBLEAdvertisedDeviceCallbacks'
   62 |     Lpf2HubAdvertisedDeviceCallbacks(Lpf2Hub *lpf2Hub) : NimBLEAdvertisedDeviceCallbacks()
      |                                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp: In member function 'void Lpf2Hub::init()':
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp:818:15: error: 'class NimBLEScan' has no member named 'setAdvertisedDeviceCallbacks'
  818 |     pBLEScan->setAdvertisedDeviceCallbacks(new Lpf2HubAdvertisedDeviceCallbacks(this));
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp: In member function 'bool Lpf2Hub::connectHub()':
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp:1092:23: error: 'getClientListSize' is not a member of 'NimBLEDevice'
 1092 |     if (NimBLEDevice::getClientListSize())
      |                       ^~~~~~~~~~~~~~~~~
c:\Users\Eric\Documents\Arduino\libraries\Legoino\src\Lpf2Hub.cpp:1120:27: error: 'getClientListSize' is not a member of 'NimBLEDevice'
 1120 |         if (NimBLEDevice::getClientListSize() >= NIMBLE_MAX_CONNECTIONS)
      |                           ^~~~~~~~~~~~~~~~~

exit status 1

Compilation error: exit status 1

ils disent

The library is implemented for ESP32 boards and uses the ESP32 NimBLE-Arduino library as dependency. This should be installed via the Arduino library manager before using Legoino.

vous avez installé cette bibliothèque ?

Sinon ne prenez pas la "arduino nano esp 32" essayez avec une carte ESP32 générique

Bonsoir J-M-L

J'ai fait l'essai avec ESP32 Dev Module, en installant la bibliothèque avec ses dépendances et j'ai plein d'erreurs dont j'en mets les premières lignes:

In file included from c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.cpp:11:
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.h:29:15: error: 'string' in namespace 'std' does not name a type
   29 |   static std::string ColorStringFromColor(Color color);
      |               ^~~~~~
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.h:16:1: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   15 | #include "Lpf2HubConst.h"
  +++ |+#include <string>
   16 | 
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.h:30:15: error: 'string' in namespace 'std' does not name a type
   30 |   static std::string ColorStringFromColor(int color);
      |               ^~~~~~
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.h:30:10: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   30 |   static std::string ColorStringFromColor(int color);
      |          ^~~
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.cpp:39:6: error: 'string' in namespace 'std' does not name a type
   39 | std::string LegoinoCommon::ColorStringFromColor(Color color)
      |      ^~~~~~
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.cpp:12:1: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   11 | #include "LegoinoCommon.h"
  +++ |+#include <string>
   12 | 
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.cpp:48:6: error: 'string' in namespace 'std' does not name a type
   48 | std::string LegoinoCommon::ColorStringFromColor(int color)
      |      ^~~~~~
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.cpp:48:1: note: 'std::string' is defined in header '<string>'; did you forget to '#include <string>'?
   48 | std::string LegoinoCommon::ColorStringFromColor(int color)
      | ^~~
c:\Users\.....\Arduino\Croquis\libraries\Legoino\src\LegoinoCommon.cpp:101:10: error: no declaration matches 'uint32_t LegoinoCommon::ReadUInt32LE(uint8_t*, int)'
  101 | uint32_t LegoinoCommon::ReadUInt32LE(uint8_t *data, int offset = 0)

Bonne soirée
jpbbricole

Ok c’est peut être dû au nouveau core pour ESP32 alors?

Bonsoir, oui effectivement avec une carte ESP32 Dev Module on bien ce type d'erreur.. Où peut- on trouver l'ancien core pour ESP 32?

Essayez dans le menu de gestion des cartes

J'ai contacté l'auteur de la librairie, Cornelius Munz et il m'a répondu et donné la solution .
voici sa réponse:
The issue is related to a breaking change in the Arduino ESP32 library. You have to follow the instructions described here:
error example lego trainhub · Issue #82 · corneliusmunz/legoino · GitHub

You have to go to the boards manager and select the 2.0.17 version of the esp32 board library.

Additionally you have to select in the Library Manager the version 1.4.3 version of the NimBLE-Arduino library.

With this two dependencies, the TrainHub.ino example should compile without any issues

1 Like

En 3 ans le core ESP32 pour IDE Arduino et la bibliothèque NimBLE-Arduino ont effectivement évolué ......
Revenir aux versions "d'époque" est une solution en attente de mise à jour de legoino par l'auteur et/ou un contributeur.

Super, merci beaucoup pour ton message qui m'a débloqué !