Build Error when split code to multiple files

Hi everyone, i want to split my code to multiple files as helper functions like bellow and i want to specified 2 different main file when upload code to 2 board (esp8266 and arduino uno) :


the “constant.h” is where i define pin ports, “customlibs.h” and “extralibs.h” are where i include my own functions and extra library like:

#ifndef EXTRALIBS_H
#define EXTRALIBS_H

#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "constants.h"
#include <Servo.h>  
#include <Adafruit_Sensor.h>
#include<DHT.h>    

#endif // CUSTOMLIBS_H

here is my plaformio.ini file:

[platformio]

src_dir = ./

default_envs = esp8266

[env]

lib_extra_dirs = ./lib

[env:esp8266]

framework = arduino

platform = espressif8266

board = esp12e

lib_deps =

marcoschwartz/LiquidCrystal_I2C@^1.1.4

adafruit/DHT sensor library@^1.4.4

adafruit/Adafruit Unified Sensor@^1.1.9

build_src_filter = +<*>-<arduino.cpp>

[env:arduino]

platform = atmelavr

board = ATmega328P

framework = arduino

and i got this error when build:

 5 | #include <LiquidCrystal_I2C.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [.pio\build\esp8266\lib63b\devices\dc_motor\dc_motor.cpp.o] Error 1
Compiling .pio\build\esp8266\lib5ac\ESP8266WiFi\ESP8266WiFiAP.cpp.o
*** [.pio\build\esp8266\lib63b\devices\hc_sr04\distance.cpp.o] Error 1
============================================================================================== [FAILED] Took 72.96 seconds ==============================================================================================

Environment    Status    Duration
-------------  --------  ------------
esp8266        FAILED    00:01:12.958

Please help me!!!

  1. u didnt paste all the error message
  2. src_dir = ./ is wrong → remove it
  3. lib_extra_dirs is deprecated and i think wrong in here → remove it
  4. for [env:esp8266] you have defined build_src_filter = +<*>-<arduino.cpp>, while you have not defined it for [env:arduino] → isn’t this obviously wrong?

thanks for replying, i edited my code like u said:
// platformio.ini
[platformio]

default_envs = esp8266

[env:esp8266]

framework = arduino

platform = espressif8266

board = esp12e

lib_deps =

marcoschwartz/LiquidCrystal_I2C@^1.1.4

adafruit/DHT sensor library@^1.4.4

adafruit/Adafruit Unified Sensor@^1.1.9

build_src_filter = +<*>-<arduino.cpp>

[env:arduino]

platform = atmelavr

board = ATmega328P

framework = arduino

build_src_filter = +<*>-<esp8266.cpp>

but i still throw errors:

Processing esp8266 (framework: arduino; platform: espressif8266; board: esp12e)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: Redirecting...
PLATFORM: Espressif 8266 (4.2.0) > Espressif ESP8266 ESP-12E
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES:

  • framework-arduinoespressif8266 @ 3.30102.0 (3.1.2)
  • tool-esptool @ 1.413.0 (4.13)
  • tool-esptoolpy @ 1.30000.201119 (3.0.0)
  • toolchain-xtensa @ 2.100300.220621 (10.3.0)
    LDF: Library Dependency Finder → htt ps://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 42 compatible libraries
    Scanning dependencies…
    Dependency Graph
    |-- LiquidCrystal_I2C @ 1.1.4
    |-- DHT sensor library @ 1.4.4
    |-- Adafruit Unified Sensor @ 1.1.9
    Building in release mode
    Compiling .pio\build\esp8266\src\esp8266.cpp.o
    Generating LD script .pio\build\esp8266\ld\local.eagle.app.v6.common.ld
    Compiling .pio\build\esp8266\lib751\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o
    Compiling .pio\build\esp8266\libe85\Adafruit Unified Sensor\Adafruit_Sensor.cpp.o
    Compiling .pio\build\esp8266\libcc7\DHT sensor library\DHT.cpp.o
    Compiling .pio\build\esp8266\libcc7\DHT sensor library\DHT_U.cpp.o
    Archiving .pio\build\esp8266\libFrameworkArduinoVariant.a
    Compiling .pio\build\esp8266\FrameworkArduino\Crypto.cpp.o
    Compiling .pio\build\esp8266\FrameworkArduino\Esp-frag.cpp.o
    In file included from .pio\libdeps\esp8266\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp:3:
    .pio\libdeps\esp8266\LiquidCrystal_I2C\LiquidCrystal_I2C.h:7:10: fatal error: Wire.h: No such file or directory

  • Looking for Wire.h dependency? Check our library registry!
  • CLI > platformio lib search “header:Wire.h”
  • Web > https ://registry.platformio.org/search?q=header:Wire.h

7 | #include <Wire.h>
  |          ^~~~~~~~

compilation terminated.
Compiling .pio\build\esp8266\FrameworkArduino\Esp-version.cpp.o
*** [.pio\build\esp8266\lib 751\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o] Error 1
In file included from src../lib/devices/dc_motor/…/…/extralibs.h:5,
from src../li b/devices/dc_motor/dc_motor.h:5,
from src../lib/customlibs.h:4,
from src../li b/set_up.h:5,
from src\es p8266.cpp:2:
.pio\libdeps\esp8266\Liqu idCrystal_I2C/LiquidCrystal_I2C.h:7:10: fatal error: Wire.h: No such file or directory


  • Looking for Wire.h dependency? Check our library registry!
  • CLI > platformio lib search “header:Wire.h”
  • Web > PlatformIO Registry

7 | #include <Wire.h>
  |          ^~~~~~~~

compilation terminated.
*** [.pio\build\esp8266\src\esp8266.cpp.o] Error 1
============================================================================================== [FAILED] Took 3.94 seconds ==============================================================================================

Environment Status Duration


esp8266 FAILED 00:00:03.936
========================================================================================= 1 failed, 0 succeeded in 00:00:03.936 =========================================================================================

that was full error message

Oh, I found out why there are the errors, because the librabry marcoschwartz/LiquidCrystal_I2C@^1.1.4 #include “Wire.h” but it cant found Wire.h in anywhere. I just removed that library because it is temporary unnecessary but do you have solutions to fix that ??

Wire.h is built into the Arduino core. If it can’t find it, best to verify that 1. you include the LiquidCrystal_I2C header file in your main code and 2. change lib_ldf_mode if neded.

1 Like