New ESP32 Board - how to add

Hi,

I am trying to add a custom board to the platformio directory, so far I’ve copied a file from platforms/esp32, and following the instructions I can see the new board with platformio.

When I try creating a new project with that new board, I get an error. PIO is updated.

PIO Core Call Error: 
The next files/directories have been created in C:\Users\fault\Documents\PlatformIO\Projects\HelloWorld
include - Put project header files here
lib - Put here project specific (private) libraries
src - Put project source files here
platformio.ini - Project Configuration File
Error: Traceback (most recent call last):
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\__main__.py", line 121, in main
 cli() # pylint: disable=no-value-for-parameter
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 1128, in __call__
 return self.main(*args, **kwargs)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 1053, in main
 rv = self.invoke(ctx)
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\commands\__init__.py", line 44, in invoke
 return super(PlatformioCLI, self).invoke(ctx)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 1659, in invoke
 return _process_result(sub_ctx.command.invoke(sub_ctx))
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 1395, in invoke
 return ctx.invoke(self.callback, **ctx.params)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 754, in invoke
 return __callback(*args, **kwargs)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\decorators.py", line 26, in new_func
 return f(get_current_context(), *args, **kwargs)
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\commands\project.py", line 194, in project_init
 ProjectGenerator(config, environment, ide, board).generate()
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\project\generator.py", line 147, in generate
 tpl_vars = self._load_tplvars()
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\project\generator.py", line 96, in _load_tplvars
 tpl_vars.update(load_project_ide_data(self.project_dir, self.env_name) or {})
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\project\helpers.py", line 124, in load_project_ide_data
 result.update(_load_project_ide_data(project_dir, missed_env_names))
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\project\helpers.py", line 142, in _load_project_ide_data
 raise result.exception
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\testing.py", line 408, in invoke
 return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 1053, in main
 rv = self.invoke(ctx)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 1395, in invoke
 return ctx.invoke(self.callback, **ctx.params)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\core.py", line 754, in invoke
 return __callback(*args, **kwargs)
 File "c:\users\fault\.platformio\penv\lib\site-packages\click\decorators.py", line 26, in new_func
 return f(get_current_context(), *args, **kwargs)
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\commands\run\command.py", line 134, in cli
 process_env(
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\commands\run\command.py", line 176, in process_env
 result = {"env": name, "duration": time(), "succeeded": ep.process()}
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\commands\run\processor.py", line 67, in process
 result = init_platform(self.options["platform"]).run(
 File "c:\users\fault\.platformio\penv\lib\site-packages\platformio\platform\_run.py", line 59, in run
 self.configure_default_packages(options, targets)
 File "C:\Users\fault\.platformio\platforms\atmelavr\platform.py", line 39, in configure_default_packages
 self.packages[framework_package]["optional"] = False
KeyError: 'framework-arduino-avr-esp32'

============================================================

An unexpected error occurred. Further steps:

* Verify that you have the latest version of PlatformIO using
 `pip install -U platformio` command

* Try to find answer in FAQ Troubleshooting section
 https://docs.platformio.org/page/faq.html

* Report this problem to the developers
 https://github.com/platformio/platformio-core/issues

============================================================"

o_O? How does that get in there?

Please post your full board JSON file and platformio.ini.

Hi,

The JSON file that I copied and edited is below. I don’t have a platformio.ini as I could not create a new project.

{
  "build": {
    "arduino":{
      "ldscript": "esp32_out.ld"
    },
    "core": "esp32",
    "extra_flags": "-DARDUINO_ESP32_DEV",
    "f_cpu": "240000000L",
    "f_flash": "40000000L",
    "flash_mode": "dio",
    "hwids": [
      [
        "0x0403",
        "0x6010"
      ]
    ],
    "mcu": "esp32",
    "variant": "esp32"
  },
  "connectivity": [
    "wifi",
    "bluetooth",
    "ethernet",
    "can"
  ],
  "debug": {
    "default_tool": "ftdi",
    "onboard_tools": [
      "ftdi"
    ],
    "openocd_board": "esp32-wroom-32.cfg"
  },
  "frameworks": [
    "arduino",
    "espidf"
  ],
  "name": "MyESP32",
  "upload": {
    "flash_size": "4MB",
    "maximum_ram_size": 327680,
    "maximum_size": 4194304,
    "protocols": [
      "esptool",
      "espota",
      "ftdi"
    ],
    "require_upload_port": true,
    "speed": 460800
  },
  "url": "none",
  "vendor": "none"
}

Well I don’t know how you created a project then but PlatformIO somehow thinks you have a chip from the Atmel AVR platform. You can manually create a project by creating an Arduino Uno project first and then overwriting the platformio.ini to reference the correct platform, board and framework.

[env:my_custom_board]
platform = espressif32
board = <board file name without .json>
framework = arduino

When creating the file all I’ve done is copy an existing .json file. I re-did the procedure, and the result keeps being the same.

Then I copied the new .json board file into \.platformio\platforms\espressif32\boards, and I can now create a project with the new board.