Arduino.h and sdkconfig.h No such file or directory

I have a project that was compiling fine a few months ago. I’ve just returned to the project and updated ~/esp and ~/.espressif. I’m now getting the above errors as well as other errors about the libraries I’m including. Here is my platformio.ini file:

[platformio]
; src_dir = main
description = Monitor Battery Drain

[env:stable]
platform = espressif8266
board = esp_wroom_02
framework = esp8266-rtos-sdk
; lib_ldf_mode = deep+
lib_compat_mode = off
lib_deps = 
	h2zero/NimBLE-Arduino@^1.3.7
	adafruit/Adafruit INA219@^1.1.1

here is the compile output:

> Executing task in folder PowerMeter: platformio run <

Processing stable (platform: espressif8266; board: esp_wroom_02; framework: esp8266-rtos-sdk)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/esp_wroom_02.html
PLATFORM: Espressif 8266 (3.2.0) > ESP-WROOM-02
HARDWARE: ESP8266 80MHz, 80KB RAM, 2MB Flash
PACKAGES: 
 - framework-esp8266-rtos-sdk 1.5.0-beta.5 
 - tool-esptool 1.413.0 (4.13) 
 - tool-esptoolpy 1.30000.201119 (3.0.0) 
 - toolchain-xtensa 1.40802.0 (4.8.2)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ off
Found 6 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <NimBLE-Arduino> 1.3.7
|-- <Adafruit INA219> 1.1.1
|   |-- <Adafruit BusIO> 1.11.1
Building in release mode
Compiling .pio/build/stable/src/ble.o
Compiling .pio/build/stable/src/main.o
Compiling .pio/build/stable/src/power.o
Compiling .pio/build/stable/lib747/NimBLE-Arduino/NimBLE2904.o
Compiling .pio/build/stable/lib747/NimBLE-Arduino/NimBLEAddress.o
src/main.cpp:8:21: fatal error: Arduino.h: No such file or directory

*****************************************************************
* Looking for Arduino.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:Arduino.h"
* Web  > https://registry.platformio.org/search?q=header:Arduino.h
*
*****************************************************************

 #include <Arduino.h>
                     ^
In file included from src/power.cpp:4:0:
.pio/libdeps/stable/Adafruit INA219/Adafruit_INA219.h:20:21: fatal error: Arduino.h: No such file or directory

*****************************************************************
* Looking for Arduino.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:Arduino.h"
* Web  > https://registry.platformio.org/search?q=header:Arduino.h
*
*****************************************************************

 #include "Arduino.h"
                     ^
compilation terminated.
compilation terminated.
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:20:0,
                 from src/ble.cpp:11:
.pio/libdeps/stable/NimBLE-Arduino/src/nimconfig.h:100:0: warning: "CONFIG_BT_NIMBLE_ROLE_CENTRAL" redefined [enabled by default]
 #define CONFIG_BT_NIMBLE_ROLE_CENTRAL
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:17:0,
                 from src/ble.cpp:11:
include/sdkconfig.h:108:0: note: this is the location of the previous definition
 #define CONFIG_BT_NIMBLE_ROLE_CENTRAL 1
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:20:0,
                 from src/ble.cpp:11:
.pio/libdeps/stable/NimBLE-Arduino/src/nimconfig.h:104:0: warning: "CONFIG_BT_NIMBLE_ROLE_OBSERVER" redefined [enabled by default]
 #define CONFIG_BT_NIMBLE_ROLE_OBSERVER
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:17:0,
                 from src/ble.cpp:11:
include/sdkconfig.h:111:0: note: this is the location of the previous definition
 #define CONFIG_BT_NIMBLE_ROLE_OBSERVER 1
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:20:0,
                 from src/ble.cpp:11:
.pio/libdeps/stable/NimBLE-Arduino/src/nimconfig.h:108:0: warning: "CONFIG_BT_NIMBLE_ROLE_PERIPHERAL" redefined [enabled by default]
 #define CONFIG_BT_NIMBLE_ROLE_PERIPHERAL
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:17:0,
                 from src/ble.cpp:11:
include/sdkconfig.h:109:0: note: this is the location of the previous definition
 #define CONFIG_BT_NIMBLE_ROLE_PERIPHERAL 1
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:20:0,
                 from src/ble.cpp:11:
.pio/libdeps/stable/NimBLE-Arduino/src/nimconfig.h:112:0: warning: "CONFIG_BT_NIMBLE_ROLE_BROADCASTER" redefined [enabled by default]
 #define CONFIG_BT_NIMBLE_ROLE_BROADCASTER
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:17:0,
                 from src/ble.cpp:11:
include/sdkconfig.h:110:0: note: this is the location of the previous definition
 #define CONFIG_BT_NIMBLE_ROLE_BROADCASTER 1
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:20:0,
                 from src/ble.cpp:11:
.pio/libdeps/stable/NimBLE-Arduino/src/nimconfig.h:173:0: warning: "CONFIG_BT_NIMBLE_ACL_BUF_COUNT" redefined [enabled by default]
 #define CONFIG_BT_NIMBLE_ACL_BUF_COUNT 12
 ^
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:17:0,
                 from src/ble.cpp:11:
include/sdkconfig.h:119:0: note: this is the location of the previous definition
 #define CONFIG_BT_NIMBLE_ACL_BUF_COUNT 20
 ^
Compiling .pio/build/stable/lib747/NimBLE-Arduino/NimBLEAdvertisedDevice.o
In file included from .pio/libdeps/stable/NimBLE-Arduino/src/nimble/nimble_npl.h:54:0,
Compiling .pio/build/stable/lib747/NimBLE-Arduino/NimBLEAdvertising.o
                 from .pio/libdeps/stable/NimBLE-Arduino/src/os/os.h:38,
                 from .pio/libdeps/stable/NimBLE-Arduino/src/nimble/ble.h:26,
                 from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEAddress.h:20,
                 from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEAdvertisedDevice.h:23,
                 from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEScan.h:22,
                 from .pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:23,
                 from src/ble.cpp:11:
.pio/libdeps/stable/NimBLE-Arduino/src/nimble/nimble_npl_os.h:313:39: error: macro "portENTER_CRITICAL" passed 1 arguments, but takes just 0
     portENTER_CRITICAL(&ble_port_mutex);
                                       ^
.pio/libdeps/stable/NimBLE-Arduino/src/nimble/nimble_npl_os.h:320:38: error: macro "portEXIT_CRITICAL" passed 1 arguments, but takes just 0
     portEXIT_CRITICAL(&ble_port_mutex);
                                      ^
.pio/libdeps/stable/NimBLE-Arduino/src/NimBLE2904.cpp:19:23: fatal error: sdkconfig.h: No such file or directory

*******************************************************************
* Looking for sdkconfig.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:sdkconfig.h"
* Web  > https://registry.platformio.org/search?q=header:sdkconfig.h
*
*******************************************************************

 #include "sdkconfig.h"
                       ^
compilation terminated.
*** [.pio/build/stable/src/main.o] Error 1
*** [.pio/build/stable/src/power.o] Error 1
*** [.pio/build/stable/lib747/NimBLE-Arduino/NimBLE2904.o] Error 1
Compiling .pio/build/stable/lib747/NimBLE-Arduino/NimBLEBeacon.o
.pio/libdeps/stable/NimBLE-Arduino/src/NimBLEAddress.cpp:14:23: fatal error: sdkconfig.h: No such file or directory

*******************************************************************
* Looking for sdkconfig.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:sdkconfig.h"
* Web  > https://registry.platformio.org/search?q=header:sdkconfig.h
*
*******************************************************************

 #include "sdkconfig.h"
                       ^
compilation terminated.
*** [.pio/build/stable/lib747/NimBLE-Arduino/NimBLEAddress.o] Error 1
.pio/libdeps/stable/NimBLE-Arduino/src/NimBLEAdvertisedDevice.cpp:14:23: fatal error: sdkconfig.h: No such file or directory

*******************************************************************
* Looking for sdkconfig.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:sdkconfig.h"
* Web  > https://registry.platformio.org/search?q=header:sdkconfig.h
*
*******************************************************************

 #include "sdkconfig.h"
                       ^
compilation terminated.
*** [.pio/build/stable/lib747/NimBLE-Arduino/NimBLEAdvertisedDevice.o] Error 1
In file included from src/ble.cpp:11:0:
.pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:42:20: fatal error: esp_bt.h: No such file or directory

****************************************************************
* Looking for esp_bt.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:esp_bt.h"
* Web  > https://registry.platformio.org/search?q=header:esp_bt.h
*
****************************************************************

 #include "esp_bt.h"
                    ^
compilation terminated.
*** [.pio/build/stable/src/ble.o] Error 1
.pio/libdeps/stable/NimBLE-Arduino/src/NimBLEAdvertising.cpp:16:23: fatal error: sdkconfig.h: No such file or directory

*******************************************************************
* Looking for sdkconfig.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:sdkconfig.h"
* Web  > https://registry.platformio.org/search?q=header:sdkconfig.h
*
*******************************************************************

 #include "sdkconfig.h"
                       ^
compilation terminated.
*** [.pio/build/stable/lib747/NimBLE-Arduino/NimBLEAdvertising.o] Error 1
.pio/libdeps/stable/NimBLE-Arduino/src/NimBLEBeacon.cpp:14:23: fatal error: sdkconfig.h: No such file or directory

*******************************************************************
* Looking for sdkconfig.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:sdkconfig.h"
* Web  > https://registry.platformio.org/search?q=header:sdkconfig.h
*
*******************************************************************

 #include "sdkconfig.h"
                       ^
compilation terminated.
*** [.pio/build/stable/lib747/NimBLE-Arduino/NimBLEBeacon.o] Error 1
========================================================================= [FAILED] Took 0.76 seconds =========================================================================
The terminal process "platformio 'run'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.

here is my main.cpp

#include <Arduino.h>
#include <NimBLEDevice.h>
#include <Adafruit_INA219.h>

extern "C" void ble_setup();
void power_setup();

void setup() {
	pinMode(2, OUTPUT);

	Serial.begin(115200);
	Serial.println("Starting BLE work!");
	//
	// Setup bluetooth
	//
	ble_setup();

}

void loop() {

	ble_loop();
	recordPowerValue();

	delay(100);

}

extern "C" void app_main()
{
	setup();

	while(1) {
		loop();
	}
}

here is my directory tree:

├── CMakeLists.txt
├── include
│   ├── README
│   └── sdkconfig.h
├── lib
│   └── README
├── platformio.ini
├── sdkconfig
├── sdkconfig.h
├── sdkconfig.old
├── src
│   ├── CMakeLists.txt
│   ├── ble.cpp
│   ├── main.cpp
│   └── power.cpp
├── test
│   └── README
└── workspace.code-workspace

I also had to change my main.cpp in use app_main() instead of just being able to supply just setup() and loop().

Huh? How can using Arduino libraries work when you’re using the RTOS SDK (in which PlatformIO is several major versions behind). Are you sure it’s not framework = arduino?

OK that fixed the Arduino.h issue but I’m still getting the sdkconfig.h error.

The Arduino framework provides sdkconfig.h, it is also unchangable for the user since it’s just an information on which settings were used for the precompiled ESP-IDF libs in Arduino IDE. (changing them does not cause a recompile of these libs, so it’s effectless).

Thus I suggest removing the sdkconfig.h from your project, or renaming it temporarily.

Removed it completely from the file tree. But I’m still getting errors. Here is an example:

In file included from src/ble.cpp:11:
.pio/libdeps/stable/NimBLE-Arduino/src/NimBLEDevice.h:17:10: fatal error: sdkconfig.h: No such file or directory

NumBLE is one of the libraries I’m including in my project.

P.S. On second thought how can the framework supply an sdkconfig.h? Unless it is generic and can be overridden by a local one allowing for the developer to choose additional configuration options for the particular CPU.

Eh my bad, in Arduino-ESP32, the sdkconfig.h is included, since it builds on ESP-IDF.

I reread your log and you are compiling for an ESP8266 (esp_wroom_02). A chip that has no native bluetooth capability, only WiFi. And the NimBLE (GitHub - h2zero/NimBLE-Arduino: A fork of the NimBLE library structured for compilation with Ardruino, for use with ESP32, nRF5x.) is consequently for an ESP32.

There is something really fundamentally wrong here. Are you sure the target microcontroller is an ESP8266? How could compilation of this ESP32 bluetooth library ever work before?

If you try the platformio.ini

[platformio]
; src_dir = main
description = Monitor Battery Drain

[env:stable]
platform = espressif32
board = esp32dev
framework = arduino
lib_ldf_mode = deep+
lib_deps = 
	h2zero/NimBLE-Arduino@^1.3.7
	adafruit/Adafruit INA219@^1.1.1

does it magically work?

So magic is possible. :grinning: Compiled successfully!
What now? Will this work with an ESP32-WROOM-32D board?

Yes it should, since esp32dev is a WROOM-32 board.

Of course the firmware code might have bugs, which I can’t judge, but that’s out of scope.

I will press on and see what happens. Thank you very much for all your help.

Cheers,
Chris