Skip to content

Add Arduino as Component examples #8878

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Nov 29, 2023
2 changes: 2 additions & 0 deletions idf_component.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,6 @@ dependencies:
version: "^1.4.2"
rules:
- if: "target in [esp32s3]"
examples:
- path: ../idf_component_examples/

8 changes: 8 additions & 0 deletions idf_component_examples/Hello_world/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# For more information about build system see
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(main)
63 changes: 63 additions & 0 deletions idf_component_examples/Hello_world/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- |

# _Hello world example_

This is the simplest buildable example made to be used as a template for new projects running Arduino-esp32 as an ESP-IDF component.
See [Arduino-esp32](https://components.espressif.com/components/espressif/arduino-esp32) in ESP Registry.

## How to use example

To create a ESP-IDF project from this example with the latest relase of Arduino-esp32, you can simply run command: `idf.py create-project-from-example "espressif/arduino-esp32:hello_world"`.
ESP-IDF will download all dependencies needed from the component registry and setup the project for you.

If you want to use cloned Arduino-esp32 repository, you can build this example directly.
Go to the example folder `arduino-esp32/idf_component_examples/Hello_world`.
First you need to comment line 6 `pre_release: true` in examples `/main/idf_component.yml`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just tested it in a separated folder.
It is also necessary to comment out the line 5 override_path: '../../../' as it may not exist.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, it should be removed by the ESP Registry so if you get it from there as an example, this won't exist. On other components it is done same way, for development purposes. If I understood correctly :)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't test it using the ESP component registry, but just copying it to my ~userName folder and then running it from idf.py flash.
Let's publish it and then we can test it with the ESP Registry tool. As you said it should work fine.
Some users may try it doing the same I did. This is the reason for the comment.

Then just run command: `idf.py build`.

## Example folder contents

The project **Hello_world** contains one source file in C++ language [main.cpp](main/main.cpp). The file is located in folder [main](main).

ESP-IDF projects are built using CMake. The project build configuration is contained in `CMakeLists.txt`
files that provide set of directives and instructions describing the project's source files and targets
(executable, library, or both).

Below is short explanation of remaining files in the project folder.

```
├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│ ├── idf_component.yml
│   └── main.cpp
└── README.md This is the file you are currently reading
```

## How to add Arduino libraries

In the project create folder `components/` and clone the library there.
In the library folder create new CMakeLists.txt file, add lines shown below to the file and edit the SRCS to match the library source files.

```
idf_component_register(SRCS "user_library.cpp" "another_source.c"
INCLUDE_DIRS "."
REQUIRES arduino-esp32
)
```

Below is structure of the project folder with the Arduino libraries.

```
├── CMakeLists.txt
├── components
│   ├── user_library
│   │   ├── CMakeLists.txt This needs to be added
│   │   ├── ...
├── main
│   ├── CMakeLists.txt
│ ├── idf_component.yml
│   └── main.cpp
└── README.md This is the file you are currently reading
```
2 changes: 2 additions & 0 deletions idf_component_examples/Hello_world/main/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
idf_component_register(SRCS "main.cpp"
INCLUDE_DIRS ".")
6 changes: 6 additions & 0 deletions idf_component_examples/Hello_world/main/idf_component.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## IDF Component Manager Manifest File
dependencies:
espressif/arduino-esp32:
version: '*'
override_path: '../../../'
pre_release: true
10 changes: 10 additions & 0 deletions idf_component_examples/Hello_world/main/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "Arduino.h"

void setup(){
Serial.begin(115200);
}

void loop(){
Serial.println("Hello world!");
delay(1000);
}
12 changes: 12 additions & 0 deletions idf_component_examples/Hello_world/sdkconfig.defaults
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#
# Arduino ESP32
#
CONFIG_AUTOSTART_ARDUINO=y
# end of Arduino ESP32

#
# FREERTOS
#
CONFIG_FREERTOS_HZ=1000
# end of FREERTOS
# end of Component config