0

For some reason https://github.com/thingsboard/thingsboard-arduino-sdk/blob/master/examples/0008-esp8266_provision_device/0008-esp8266_provision_device.ino is not compiling on Windows Arduino IDE 1.8.19 for FireBeetle ESP32. Error as follows:

Arduino: 1.8.19 (Windows 10), Board: "FireBeetle ESP32-E, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, Core 1, Core 1, None"
C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:7: warning: "WIFI_AP" redefined
#define WIFI_AP "Lemmiku IoT"

In file included from C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi\src/WiFi.h:31,
from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:4:
C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi\src/WiFiType.h:32: note: this is the location of the previous definition
#define WIFI_AP WIFI_MODE_AP
Provision_test:86:46: error: conversion from 'void(Provision_Data&)' {aka 'void(const ArduinoJson6194_F1::ObjectConstRef&)'} to non-scalar type 'const Provision_Callback' requested
const Provision_Callback provisionCallback = processProvisionResponse;
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:8,
from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
from C:\Users\Timo\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:2:
C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'typename ArduinoJson6194_F1::enable_if<((! ArduinoJson6194_F1::is_same<T, char*>::value) && (! ArduinoJson6194_F1::is_same<T, char>::value)), T>::type ArduinoJson6194_F1::VariantConstRef::as() const [with T = ArduinoJson6194_F1::ObjectRef; typename ArduinoJson6194_F1::enable_if<((! ArduinoJson6194_F1::is_same<T, char*>::value) && (! ArduinoJson6194_F1::is_same<T, char>::value)), T>::type = ArduinoJson6194_F1::ObjectRef]':
C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:75:76: required from here
C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp:253:34: error: invalid use of incomplete type 'class ArduinoJson6194_F1::InvalidConversion<ArduinoJson6194_F1::VariantConstRef, ArduinoJson6194_F1::ObjectRef>'
return Converter::fromJson(*this);
~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
In file included from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp:14,
from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:8,
from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
from C:\Users\Timo\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:2:
C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/Converter.hpp:14:7: note: declaration of 'class ArduinoJson6194_F1::InvalidConversion<ArduinoJson6194_F1::VariantConstRef, ArduinoJson6194_F1::ObjectRef>'
class InvalidConversion; // Error here? See https://arduinojson.org/v6/invalid-conversion/
^~~~~~~~~~~~~~~~~
Multiple libraries were found for "WiFi.h"
Used: C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi
Not used: C:\Users\Timo\Documents\Arduino\libraries\WiFiEspAT
Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
conversion from 'void(Provision_Data&)' {aka 'void(const ArduinoJson6194_F1::ObjectConstRef&)'} to non-scalar type 'const Provision_Callback' requested
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Can anyone help out why it's not working?

@devaskim I tried, but nothing:

C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:6: warning: "WIFI_AP" redefined
 #define WIFI_AP             "Lemmiku IoT"
 
In file included from C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi\src/WiFi.h:31,
                 from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:3:
C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi\src/WiFiType.h:32: note: this is the location of the previous definition
 #define WIFI_AP      WIFI_MODE_AP
 
Provision_test:85:46: error: conversion from 'void (*)(Provision_Data&)' {aka 'void (*)(const ArduinoJson6194_F1::ObjectConstRef&)'} to non-scalar type 'const Provision_Callback' requested
 const Provision_Callback provisionCallback = &processProvisionResponse;
                                              ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:8,
                 from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
                 from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
                 from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
                 from C:\Users\Timo\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
                 from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:2:
C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'typename ArduinoJson6194_F1::enable_if<((! ArduinoJson6194_F1::is_same<T, char*>::value) && (! ArduinoJson6194_F1::is_same<T, char>::value)), T>::type ArduinoJson6194_F1::VariantConstRef::as() const [with T = ArduinoJson6194_F1::ObjectRef; typename ArduinoJson6194_F1::enable_if<((! ArduinoJson6194_F1::is_same<T, char*>::value) && (! ArduinoJson6194_F1::is_same<T, char>::value)), T>::type = ArduinoJson6194_F1::ObjectRef]':
C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:74:76:   required from here
C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp:253:34: error: invalid use of incomplete type 'class ArduinoJson6194_F1::InvalidConversion<ArduinoJson6194_F1::VariantConstRef, ArduinoJson6194_F1::ObjectRef>'
     return Converter<T>::fromJson(*this);
            ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
In file included from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp:14,
                 from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:8,
                 from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
                 from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
                 from C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
                 from C:\Users\Timo\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
                 from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:2:
C:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/Converter.hpp:14:7: note: declaration of 'class ArduinoJson6194_F1::InvalidConversion<ArduinoJson6194_F1::VariantConstRef, ArduinoJson6194_F1::ObjectRef>'
 class InvalidConversion;  // Error here? See https://arduinojson.org/v6/invalid-conversion/
       ^~~~~~~~~~~~~~~~~
Multiple libraries were found for "WiFi.h"
 Used: C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi
 Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
 Not used: C:\Users\Timo\Documents\Arduino\libraries\WiFiEspAT
exit status 1
conversion from 'void (*)(Provision_Data&)' {aka 'void (*)(const ArduinoJson6194_F1::ObjectConstRef&)'} to non-scalar type 'const Provision_Callback' requested

Hmm, I got something different this time:

C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:6: warning: "WIFI_AP" redefined
 #define WIFI_AP             "Lemmiku IoT"
 
In file included from C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi\src/WiFi.h:31,
                 from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:3:
C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi\src/WiFiType.h:32: note: this is the location of the previous definition
 #define WIFI_AP      WIFI_MODE_AP
 
In file included from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:8,
                 from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
                 from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
                 from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
                 from c:\Users\Timo\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
                 from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:2:
c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'typename ArduinoJson6194_F1::enable_if<((! ArduinoJson6194_F1::is_same<T, char*>::value) && (! ArduinoJson6194_F1::is_same<T, char>::value)), T>::type ArduinoJson6194_F1::VariantConstRef::as() const [with T = ArduinoJson6194_F1::ObjectRef; typename ArduinoJson6194_F1::enable_if<((! ArduinoJson6194_F1::is_same<T, char*>::value) && (! ArduinoJson6194_F1::is_same<T, char>::value)), T>::type = ArduinoJson6194_F1::ObjectRef]':
C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:74:76:   required from here
c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp:253:34: error: invalid use of incomplete type 'class ArduinoJson6194_F1::InvalidConversion<ArduinoJson6194_F1::VariantConstRef, ArduinoJson6194_F1::ObjectRef>'
     return Converter<T>::fromJson(*this);
            ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
In file included from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRef.hpp:14,
                 from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:8,
                 from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
                 from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
                 from c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
                 from c:\Users\Timo\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
                 from C:\Users\Timo\Documents\Arduino\Provision_test\Provision_test.ino:2:
c:\Users\Timo\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/Converter.hpp:14:7: note: declaration of 'class ArduinoJson6194_F1::InvalidConversion<ArduinoJson6194_F1::VariantConstRef, ArduinoJson6194_F1::ObjectRef>'
 class InvalidConversion;  // Error here? See https://arduinojson.org/v6/invalid-conversion/
       ^~~~~~~~~~~~~~~~~
Multiple libraries were found for "WiFi.h"
  Used: C:\Users\Timo\AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\libraries\WiFi
  Not used: C:\Users\Timo\Documents\Arduino\libraries\WiFiEspAT
exit status 1

Compilation error: exit status 1
stacktimo
  • 1
  • 1
  • Try to add `&` before `processProvisionResponse`, i.e. `const Provision_Callback provisionCallback = &processProvisionResponse;` – devaskim Sep 29 '22 at 11:51
  • Also use `static_cast` as described in [this SO](https://stackoverflow.com/a/4771101/17782348) – devaskim Sep 29 '22 at 12:03
  • @devaskim I'm not goot at using this forum, but I edited my post to reflect the results. – stacktimo Oct 06 '22 at 12:42
  • I see, replace my previous suggestion `&processProvisionResponse;` to `Provision_Callback(processProvisionResponse);` – devaskim Oct 06 '22 at 18:40
  • @devaskim, the latest run added to the post. – stacktimo Oct 07 '22 at 08:29
  • Just to be clear, I tried ```const Provision_Callback provisionCallback = Provision_Callback(processProvisionResponse);``` – stacktimo Oct 07 '22 at 08:30
  • Yes. I checked that this line fixes compilation error of `const Provision_Callback provisionCallback = processProvisionResponse;` but in my case a lot of new appear that not related to suggested changes. It seems like something changed either in ESP82 toolchain or in Arduino tools from the moment when core Thingsboard team had tested this example project. – devaskim Oct 07 '22 at 11:32

1 Answers1

0

As you've already noticed, there are two issues to fix, which I've highlighted in the code sample below.

There is also an open issue about this here: https://github.com/thingsboard/thingsboard-arduino-sdk/issues/89

Note that while this fixes the compilation issues, at least my self-hosted ThingsBoard server fails to register the provisioning request, so there's likely more that's broken with it.

// ...

// FIX #1
//
// We're dealing with const data
//
//JsonObject credentials_value = data["credentialsValue"].as<JsonObject>();
JsonObjectConst credentials_value = data["credentialsValue"].as<JsonObjectConst>();

// ...

// FIX #2
//
// Provision_Callback is a class that takes the callback as a constructor parameter
//
//const Provision_Callback provisionCallback = processProvisionResponse;
const Provision_Callback provisionCallback(processProvisionResponse);

// ...
Dids
  • 569
  • 7
  • 24