Unable to compile M5Stack factory Arduino examples

M5Stamp won’t compile factory Arduino examples.

I can’t get the factory examples to compile for the M5Dial (based upon the M5Stamp-S3)

Platformio.ini

[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = arduino
lib_extra_dirs = ~/Documents/Arduino/libraries
lib_deps = 
	m5stack/M5Dial@^1.0.2
	m5stack/M5Unified@^0.1.11
        m5stack/M5GFX@^0.1.11

Build output:

Processing m5stack-stamps3 (platform: espressif32; board: m5stack-stamps3; framework: arduino)
------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/m5stack-stamps3.html
PLATFORM: Espressif 32 (6.4.0) > M5Stack StampS3
HARDWARE: ESP32S3 240MHz, 320KB RAM, 8MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-builtin, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-arduinoespressif32 @ 3.20011.230801 (2.0.11)
 - tool-esptoolpy @ 1.40501.0 (4.5.1)
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5
 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch5
Converting rfid.ino
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 36 compatible libraries
Scanning dependencies...
Dependency Graph
|-- M5Dial @ 1.0.2
|-- M5Unified @ 0.1.11
|-- M5GFX @ 0.1.11
Building in release mode
Compiling .pio\build\m5stack-stamps3\src\rfid.cpp.o
Compiling .pio\build\m5stack-stamps3\src\rfid.ino.cpp.o
Building .pio\build\m5stack-stamps3\bootloader.bin
Generating partitions .pio\build\m5stack-stamps3\partitions.bin
esptool.py v4.5.1
Creating esp32s3 image...
Merged 1 ELF section
Successfully created esp32s3 image.
Compiling .pio\build\m5stack-stamps3\libc60\Wire\Wire.cpp.o
Compiling .pio\build\m5stack-stamps3\libcd9\SPI\SPI.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\M5GFX.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\Fonts\IPA\lgfx_font_japan.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\Fonts\efont\lgfx_efont_cn.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\Fonts\efont\lgfx_efont_ja.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\Fonts\efont\lgfx_efont_kr.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\Fonts\efont\lgfx_efont_tw.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\utility\lgfx_pngle.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\utility\lgfx_qoi.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\utility\lgfx_qrcode.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\utility\lgfx_tjpgd.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\utility\miniz.c.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\LGFXBase.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\LGFX_Button.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\LGFX_Sprite.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\lgfx_fonts.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\misc\DividedFrameBuffer.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\misc\SpriteBuffer.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\misc\common_function.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\misc\pixelcopy.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_Device.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_FrameBufferBase.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_GDEW0154M09.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_HasBuffer.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_IT8951.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_LCD.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_M5HDMI.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_M5UnitGLASS.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_M5UnitLCD.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\panel\Panel_SSD1306.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\platforms\esp32\Bus_I2C.cpp.o
src/rfid.cpp: In function 'void setup()':
src/rfid.cpp:26:57: warning: 'void lgfx::v1::LGFXBase::setTextFont(const lgfx::v1::IFont*)' is deprecated: use setFont(&fonts::Font) [-Wdeprecated-declarations]
     M5Dial.Display.setTextFont(&fonts::Orbitron_Light_32);
                                                         ^
In file included from .pio/libdeps/m5stack-stamps3/M5GFX/src/M5GFX.h:22,
                 from .pio/libdeps/m5stack-stamps3/M5Unified/src/M5Unified.hpp:19,
                 from .pio/libdeps/m5stack-stamps3/M5Unified/src/M5Unified.h:5,
                 from .pio/libdeps/m5stack-stamps3/M5Dial/src/M5Dial.h:4,
                 from src/rfid.cpp:19:
.pio/libdeps/m5stack-stamps3/M5GFX/src/lgfx/v1/LGFXBase.hpp:733:10: note: declared here
     void setTextFont(const IFont* font = nullptr) { setFont(font); }
          ^~~~~~~~~~~
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\platforms\esp32\Bus_Parallel8.cpp.o
D:/My Documents/PlatformIO/Projects/231126-105121-m5stack-stamps3/src/rfid.ino: In function 'void setup()':
D:/My Documents/PlatformIO/Projects/231126-105121-m5stack-stamps3/src/rfid.ino:26:57: warning: 'void lgfx::v1::LGFXBase::setTextFont(const lgfx::v1::IFont*)' is deprecated: use setFont(&fonts::Font) [-Wdeprecated-declarations]
     M5Dial.Display.setTextFont(&fonts::Orbitron_Light_32);
                                                         ^
In file included from .pio/libdeps/m5stack-stamps3/M5GFX/src/M5GFX.h:22,
                 from .pio/libdeps/m5stack-stamps3/M5Unified/src/M5Unified.hpp:19,
                 from .pio/libdeps/m5stack-stamps3/M5Unified/src/M5Unified.h:5,
                 from .pio/libdeps/m5stack-stamps3/M5Dial/src/M5Dial.h:4,
                 from D:/My Documents/PlatformIO/Projects/231126-105121-m5stack-stamps3/src/rfid.ino:19:
.pio/libdeps/m5stack-stamps3/M5GFX/src/lgfx/v1/LGFXBase.hpp:733:10: note: declared here
     void setTextFont(const IFont* font = nullptr) { setFont(font); }
          ^~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp: In member function 'void SPIClass::begin(int8_t, int8_t, int8_t, int8_t)':
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:88:37: error: 'SCK' was not declared in this scope
         _sck = (_spi_num == FSPI) ? SCK : -1;
                                     ^~~
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\platforms\esp32\Bus_SPI.cpp.o
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:88:37: note: suggested alternative: 'SCL'         _sck = (_spi_num == FSPI) ? SCK : -1;
                                     ^~~
                                     SCL
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:89:38: error: 'MISO' was not declared in 
this scope
         _miso = (_spi_num == FSPI) ? MISO : -1;
                                      ^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:89:38: note: suggested alternative: 'EIO'         _miso = (_spi_num == FSPI) ? MISO : -1;
                                      ^~~~
                                      EIO
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:90:38: error: 'MOSI' was not declared in 
this scope
         _mosi = (_spi_num == FSPI) ? MOSI : -1;
                                      ^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:90:38: note: suggested alternative: 'M_PI'
         _mosi = (_spi_num == FSPI) ? MOSI : -1;
                                      ^~~~
                                      M_PI
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:91:36: error: 'SS' was not declared in this scope
         _ss = (_spi_num == FSPI) ? SS : -1;
                                    ^~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:91:36: note: suggested alternative: 'PS'
         _ss = (_spi_num == FSPI) ? SS : -1;
                                    ^~
                                    PS
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\platforms\esp32\Light_PWM.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\platforms\esp32\Panel_CVBS.cpp.o
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\platforms\esp32\common.cpp.o
*** [.pio\build\m5stack-stamps3\libcd9\SPI\SPI.cpp.o] Error 1
Compiling .pio\build\m5stack-stamps3\libf67\M5GFX\lgfx\v1\platforms\esp32c3\Bus_Parallel8.cpp.o
=================================================== [FAILED] Took 12.12 seconds ================

It has probably been solved a 1000 times before, However I can’t find an example that works.

If I run the same example through Arduino 2.x I don’t have a problem.

Yours Simon M.

Well something is messing up so that the SPI.h header cannot be found. Maybe a library having a header file with the same name?

In any case, you need to show the full example code, not only the platformio.ini and output.

Thanks for the quick reply.
I used the ‘Import Arduino Project’ and pointed it at a working example.

**
 * @file rfid.ino
 * @author SeanKwok (shaoxiang@m5stack.com)
 * @brief M5Dial RFID Test
 * @version 0.2
 * @date 2023-10-18
 *
 *
 * @Hardwares: M5Dial
 * @Platform Version: Arduino M5Stack Board Manager v2.0.7
 * @Dependent Library:
 * M5GFX: https://github.com/m5stack/M5GFX
 * M5Unified: https://github.com/m5stack/M5Unified
 * Home page https://docs.m5stack.com/en/core/M5Dial
 * <Tools><board><Boards Manager><M5Stack Arduino> = M5Stamp-S3
 */
 

#include <M5Dial.h>

void setup() {
    auto cfg = M5.config();
    M5Dial.begin(cfg, false, true);
    M5Dial.Display.setTextColor(GREEN);
    M5Dial.Display.setTextDatum(middle_center);
    M5Dial.Display.setTextFont(&fonts::Orbitron_Light_32);
    M5Dial.Display.setTextSize(1);

    M5Dial.Display.drawString("RFID Card", M5Dial.Display.width() / 2,
                              M5Dial.Display.height() / 2);
}

void loop() {
    if (M5Dial.Rfid.PICC_IsNewCardPresent() &&
        M5Dial.Rfid.PICC_ReadCardSerial()) {
        M5Dial.Display.clear();

        Serial.print(F("PICC type: "));
        uint8_t piccType = M5Dial.Rfid.PICC_GetType(M5Dial.Rfid.uid.sak);
        Serial.println(M5Dial.Rfid.PICC_GetTypeName(piccType));

        // Check is the PICC of Classic MIFARE type
        if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
            piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
            piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
            Serial.println(F("Your tag is not of type MIFARE Classic."));
            M5Dial.Display.drawString("not support", M5Dial.Display.width() / 2,
                                      M5Dial.Display.height() / 2);
            return;
        }
        String uid = "";
        for (byte i = 0; i < M5Dial.Rfid.uid.size;
             i++) {  // Output the stored UID data.  将存储的UID数据输出
            Serial.printf("%02X ", M5Dial.Rfid.uid.uidByte[i]);
            uid += String(M5Dial.Rfid.uid.uidByte[i], HEX);
        }
        M5Dial.Speaker.tone(8000, 20);
        M5Dial.Display.drawString(M5Dial.Rfid.PICC_GetTypeName(piccType),
                                  M5Dial.Display.width() / 2,
                                  M5Dial.Display.height() / 2 - 30);

        M5Dial.Display.drawString("card id:", M5Dial.Display.width() / 2,
                                  M5Dial.Display.height() / 2);

        M5Dial.Display.drawString(uid, M5Dial.Display.width() / 2,
                                  M5Dial.Display.height() / 2 + 30);
        Serial.println();
    }
}

I see. This is due to PlatformIO using an outdated Arduino-ESP32 version (2.0.11). The m5stack_stamp_s3/pins_arduino.h of 2.0.14 has

to define the SPI pins, but the 2.0.11 version does not have that (source). This results in the SPI library being uncompilable.

You can hotfix this by using the platformio.ini

[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = arduino
lib_deps = 
   m5stack/M5Dial@^1.0.2
   m5stack/M5Unified@^0.1.11
   m5stack/M5GFX@^0.1.11
build_flags =
   -D SS=7
   -D MOSI=6
   -D MISO=5
   -D SCK=4

Alternatively, you can make PlatformIO use the proper Arduino-ESP32 2.0.14 directly by using only this platformio.ini

[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = arduino
lib_deps = 
   m5stack/M5Dial@^1.0.2
   m5stack/M5Unified@^0.1.11
   m5stack/M5GFX@^0.1.11
platform_packages =
   framework-arduinoespressif32@https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.14.zip

Compilation will succeed for both these configurations.

1 Like

That did the trick!
Thanks for your help

That happens quite often to me with SPI.h or Wire.h

The work-around is to add the spi and wire libraries to the lib_dep section in platformio.ini

lib_deps =
Wire
SPI

This was not the fix in this situation, it detected the dependencies to Wire and SPI just fine, but because of missing definitions it was uncompilable.

Thanks again Max. Can you just clear one thing up for me though, how did you find the ```
https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.14.zip

https://github.com/espressif/arduino-esp32/

grafik

grafik

Hi Max, I followed your instructions, and I had no luck.

platform_packages = framework-arduinoespressif32@https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.14.zip works

platform_packages = framework-arduinoespressif32@GitHub - espressif/arduino-esp32: Arduino core for the ESP32 = fail.

I can’t see where you got the …/…/archive/refs/tags/2.0.14.zip link from??

You literally right-click on “Download Zip” and use “Copy Link”. Of course, with a 2.0.x tag selected previously.

Git master or a 3.x version will not work this way, it needs build scripts adaptations (and is also not needed in your case).

Perfect! The <right-click on “Download Zip” and use “Copy Link”.> I missed. Many thanks

Same subject different M5Stack board.
Using the simple LED factory example (https://github.com/m5stack/M5Atom) and using

; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:m5stack-atom]
platform = espressif32
;board = m5Stick-c
;Board = m5stack-core2
Board = M5Atom
framework = arduino
lib_deps =
  adafruit/Adafruit NeoPixel@^1.12.0
  m5stack/M5Unified@^0.1.11
  fastled/FastLED@^3.6.0
  ;m5stack/M5Atom@^0.1.2
platform_packages =
   framework-arduinoespressif32@https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.14.zip
monitor_port = COM12
monitor_speed = 115200
upload_port = COM12
upload_speed = 1500000

and the header

#include <Adafruit_NeoPixel.h>

#include <M5Atom.h>
#define PIN       27

#define NUMPIXELS 1

As you can see I have tried differing board definitions and each has its own error.
What is the recommended header / platformio.ini for the M5Atom??

And that is what exactly?

Executing task: C:\Users\simon\.platformio\penv\Scripts\platformio.exe run 
Processing m5stack-atom (platform: espressif32; framework: arduino; board: m5stack-atom)
---------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/m5stack-atom.html
PLATFORM: Espressif 32 (6.4.0) > M5Stack-ATOM
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-arduinoespressif32 @ 2.0.14
 - tool-esptoolpy @ 1.40501.0 (4.5.1)
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 38 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Adafruit NeoPixel @ 1.12.0
|-- M5Unified @ 0.1.11        
|-- FastLED @ 3.6.0
|-- M5Atom @ 0.1.2
Building in release mode
Linking .pio\build\m5stack-atom\firmware.elf
c:/users/simon/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\m5stack-atom\lib3ea\libM5Atom.a(M5Atom.cpp.o):D:\My Documents\PlatformIO\Projects\M5Atom_Pixel/.pio/libdeps/m5stack-atom/M5Atom/src/M5Atom.cpp:41: multiple definition of `M5'; .pio\build\m5stack-atom\libb90\libM5Unified.a(M5Unified.cpp.o):D:\My Documents\PlatformIO\Projects\M5Atom_Pixel/.pio/libdeps/m5stack-atom/M5Unified/src/M5Unified.cpp:32: first defined here
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\m5stack-atom\firmware.elf] Error 1
================================================== [FAILED] Took 11.54 seconds ==================================================
 *  The terminal process "C:\Users\simon\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it.

Don’t have both M5 libraries in there, only one.

Hi Max,
version 1

[env:m5stack-atom]
platform = espressif32
framework = arduino
lib_deps = 
	adafruit/Adafruit NeoPixel@^1.12.0
	m5stack/M5Unified@^0.1.11
	;fastled/FastLED@^3.6.0
	;m5stack/M5Atom@^0.1.2

header
#include <Arduino.h>


#include <Adafruit_NeoPixel.h>
//#include <FastLED.h>

#include <M5Atom.h>
#define PIN       27

#define NUMPIXELS 1


Processing m5stack-atom (platform: espressif32; framework: arduino; board: m5stick-c)
---------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/m5stick-c.html
PLATFORM: Espressif 32 (6.4.0) > M5Stick-C
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-arduinoespressif32 @ 2.0.14
 - tool-esptoolpy @ 1.40501.0 (4.5.1)
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 36 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Adafruit NeoPixel @ 1.12.0
|-- M5Unified @ 0.1.11        
Building in release mode
Compiling .pio\build\m5stack-atom\src\main.cpp.o
src/main.cpp:7:10: fatal error: M5Atom.h: No such file or directory

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

 #include <M5Atom.h>
          ^~~~~~~~~~
compilation terminated.
Archiving .pio\build\m5stack-atom\lib150\libM5GFX.a
Compiling .pio\build\m5stack-atom\libb90\M5Unified\utility\imu\BMI270_Class.cpp.o
Compiling .pio\build\m5stack-atom\libb90\M5Unified\utility\imu\BMM150_Class.cpp.o
Compiling .pio\build\m5stack-atom\libb90\M5Unified\utility\imu\IMU_Base.cpp.o
Compiling .pio\build\m5stack-atom\libb90\M5Unified\utility\imu\MPU6886_Class.cpp.o
Compiling .pio\build\m5stack-atom\libb90\M5Unified\utility\imu\SH200Q_Class.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\Esp.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\FirmwareMSC.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\HWCDC.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\Print.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\USB.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\USBCDC.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\USBMSC.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\WString.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\base64.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-i2c-slave.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\esp32-hal-misc.c.o
*** [.pio\build\m5stack-atom\src\main.cpp.o] Error 1
================================================== [FAILED] Took 9.19 seconds ==================================================

 *  The terminal process "C:\Users\simon\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it. 

Version2

[env:m5stack-atom]
platform = espressif32
framework = arduino
lib_deps = 
	;adafruit/Adafruit NeoPixel@^1.12.0
	;m5stack/M5Unified@^0.1.11
	fastled/FastLED@^3.6.0
	m5stack/M5Atom@^0.1.2

header
#include <Arduino.h>


#include <Adafruit_NeoPixel.h>

#include <M5Atom.h>
#define PIN       27

#define NUMPIXELS 1


result
Compiling .pio\build\m5stack-atom\FrameworkArduino\main.cpp.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\m5stack-atom\FrameworkArduino\wiring_shift.c.o
*** [.pio\build\m5stack-atom\lib3ea\M5Atom\utility\MPU6886.cpp.o] Error 1
*** [.pio\build\m5stack-atom\src\main.cpp.o] Error 1
In file included from .pio/libdeps/m5stack-atom/M5Atom/src/M5Atom.cpp:5:
.pio/libdeps/m5stack-atom/M5Atom/src/M5Atom.h:53: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
*
**************************************************************

 #include <Wire.h>
          ^~~~~~~~
compilation terminated.
*** [.pio\build\m5stack-atom\lib3ea\M5Atom\M5Atom.cpp.o] Error 1
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/cores/esp32/esp32-hal-uart.c: In function 'uartSetPins':
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/cores/esp32/esp32-hal-uart.c:153:9: warning: 'return' with no value, in function returning non-void
         return;
         ^~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/cores/esp32/esp32-hal-uart.c:149:6: note: declared here
 bool uartSetPins(uint8_t uart_num, int8_t rxPin, int8_t txPin, int8_t ctsPin, int8_t rtsPin)
      ^~~~~~~~~~~
================================================== [FAILED] Took 6.02 seconds ==================================================

 *  The terminal process "C:\Users\simon\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it. 

Version 3

Platformio.ini
lib_deps = 
	adafruit/Adafruit NeoPixel@^1.12.0
	m5stack/M5Unified@^0.1.11
	fastled/FastLED@^3.6.0

Header
#include <Arduino.h>


#include <Adafruit_NeoPixel.h>

include <M5Atom.h>
#define PIN       27

#define NUMPIXELS 1



Result
Compiling .pio\build\m5stack-atom\lib150\M5GFX\lgfx\v1\LGFX_Button.cpp.o
Compiling .pio\build\m5stack-atom\lib150\M5GFX\lgfx\v1\LGFX_Sprite.cpp.o
src/main.cpp:6:1: error: 'include' does not name a type
 include <M5Atom.h>
 ^~~~~~~
src/main.cpp: In function 'uint32_t Wheel(byte)':
src/main.cpp:21:12: error: 'pixels' was not declared in this scope
     return pixels.Color(255-WheelPos * 3, 0, WheelPos * 3);
            ^~~~~~
src/main.cpp:21:12: note: suggested alternative: 'pipe2'
     return pixels.Color(255-WheelPos * 3, 0, WheelPos * 3);
            ^~~~~~
            pipe2
src/main.cpp:27:12: error: 'pixels' was not declared in this scope
     return pixels.Color(0, WheelPos * 3, 255-WheelPos * 3);
            ^~~~~~
src/main.cpp:27:12: note: suggested alternative: 'pipe2'
     return pixels.Color(0, WheelPos * 3, 255-WheelPos * 3);
            ^~~~~~
            pipe2
src/main.cpp:30:10: error: 'pixels' was not declared in this scope
   return pixels.Color(WheelPos * 3, 255-WheelPos * 3, 0);
          ^~~~~~
src/main.cpp:30:10: note: suggested alternative: 'pipe2'
   return pixels.Color(WheelPos * 3, 255-WheelPos * 3, 0);
          ^~~~~~
          pipe2
src/main.cpp: In function 'void rainbow(uint8_t)':
src/main.cpp:39:21: error: 'pixels' was not declared in this scope
     for (i = 0; i < pixels.numPixels(); i++)
                     ^~~~~~
src/main.cpp:39:21: note: suggested alternative: 'pipe2'
     for (i = 0; i < pixels.numPixels(); i++)
                     ^~~~~~
                     pipe2
src/main.cpp:42:14: error: 'M5' was not declared in this scope
       while (M5.Btn.read() == 1);
              ^~
Compiling .pio\build\m5stack-atom\lib150\M5GFX\lgfx\v1\lgfx_fonts.cpp.o
src/main.cpp:42:14: note: suggested alternative: 'MR'
       while (M5.Btn.read() == 1);
              ^~
              MR
src/main.cpp:44:5: error: 'pixels' was not declared in this scope
     pixels.show();
     ^~~~~~
src/main.cpp:44:5: note: suggested alternative: 'pipe2'
     pixels.show();
     ^~~~~~
     pipe2
src/main.cpp: In function 'void setup()':
src/main.cpp:53:3: error: 'M5' was not declared in this scope
   M5.begin();
   ^~
src/main.cpp:53:3: note: suggested alternative: 'MR'
   M5.begin();
   ^~
   MR
src/main.cpp:54:3: error: 'pixels' was not declared in this scope
   pixels.begin();
   ^~~~~~
src/main.cpp:54:3: note: suggested alternative: 'pipe2'
   pixels.begin();
   ^~~~~~
   pipe2
Compiling .pio\build\m5stack-atom\lib150\M5GFX\lgfx\v1\misc\DividedFrameBuffer.cpp.o
Compiling .pio\build\m5stack-atom\lib150\M5GFX\lgfx\v1\misc\SpriteBuffer.cpp.o
Compiling .pio\build\m5stack-atom\lib150\M5GFX\lgfx\v1\misc\common_function.cpp.o
*** [.pio\build\m5stack-atom\src\main.cpp.o] Error 1
================================================== [FAILED] Took 10.73 seconds ==================================================
 *  The terminal process "C:\Users\simon\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it. 

Any other variation causes a similar or the same response.

In this version, add lib_ldf_mode = deep+.

lib_deps = 
	adafruit/Adafruit NeoPixel@^1.12.0
	;m5stack/M5Unified@^0.1.11
	fastled/FastLED@^3.6.0
	m5stack/M5Atom@^0.1.2
platform_packages = framework-arduinoespressif32@https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.14.zip

along with

#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <M5Atom.h>

Thanks Max. That worked again. Shame the factory examples take a bit of modifying each time though.
Why did I need lib_ldf_mode = deep+.?