Unverified Commit e70f4d38 authored by Rodrigo Garcia's avatar Rodrigo Garcia Committed by GitHub

Adds HW Serial CDC as IDF component example (#10262)

* feat(hw_cdc): creates documentation for the example

Adds a README file that exaplains the example.

* feat(hw_cdc): create cmake config file

Adds necessary CMakeLists.txt file to the project with the HW CDC defines that will enable it.

* feat(hw_cdc): create sdkconfig.defaults

Adds necessary and minimum sdkconfig settings in order to make Arduino run as IDF Compoenent.

* feat(hw_cdc): create cmake config file

Create the Arduino Sketch source code CMakeLists.txt file that will include all source code files and header files in the proejct.

* feat(hw_cdc): create main.cpp

Adds the minimum Arduino Sketch that will print "Hello World!" in the HW Serial USB CDC port.

* feat(hw_cdc): create idf_component.yml

Adds necessary ESP32 Registry information in order to make ESP32 Arduino to be automatically included in the project as an IDF component.

* feat(hw_cdc): update main.cpp

adds code to wait for the user to open the Serial Monitor

* feat(hw_cdc): formating text code

Applying Code style and formating.

* feat(hw_cdc): adds the example to idf_component.yml

Adds the example to the list of example in the ESP32 Registry.

* ci(pre-commit): Apply automatic fixes

* fix(chw_cdc): typo fix

Fixed Typo in the documentation.

* fix(hw_cdc): fixed a commentary typo

Fixed commantary typo

---------
Co-authored-by: default avatarpre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
parent 7a4587b4
......@@ -96,3 +96,4 @@ dependencies:
require: public
examples:
- path: ./idf_component_examples/hello_world
- path: ./idf_component_examples/hw_cdc_hello_world
# 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)
# Adds necessary definitions for compiling it using Serial symbol attached to the HW USB CDC port
list(APPEND compile_definitions "ARDUINO_USB_CDC_ON_BOOT=1")
list(APPEND compile_definitions "ARDUINO_USB_MODE=1")
project(hw_cdc_hello_world)
| Supported Targets | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S3 |
| ----------------- | -------- | -------- | -------- | -------- |
# _HW Serial USB CDC 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 that will redefine the `Serial` interface to be attached to the USB CDC Hardware Serial port.\
See [arduino-esp32](https://components.espressif.com/components/espressif/arduino-esp32) in ESP Registry.
## How to use example
After cloning this repository, go to the `hw_cdc_hello_world` folder and select the target by executing\
`idf.py set-target <SoC_target>`.\
`<SoC_target>` can be one of the installed IDF version supported targets.
It is possible to just clone this folder be executing\
`idf.py create-project-from-example "espressif/arduino-esp32^3.0.5:hw_cdc_hello_world"`
For IDF 5.1.x and forward, the list of targets that support Hardware USB CDC are, at least: esp32s3, esp32c3, esp32c6 and esp32h2.\
Then just run command: `idf.py build` or `idf.py -p USB_PORT flash monitor`.
Usually, it is necessary to make the ESP32 SoC to enter in `Download Mode` before uploading the firmware.\
After that, just press `RESET/EN` to start the new firmware.
## Example folder contents
The project **hw_serial_example** 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 building configuration is contained in `CMakeLists.txt`
file that provide a set of directives and instructions describing the project's source files and targets
(executable, library, or both).
Below is the minimum list of files in the project folder.
```
├── CMakeLists.txt Global project CMake configuration file
├── sdkconfig.defaults sdkconfig setting for an Arduino project
├── main
│   ├── CMakeLists.txt Arduino sketch CMake configuration file
│ ├── idf_component.yml List of IDF components necessary to build the project
│   └── main.cpp Arduino Sketch code - don't forget to add "#include <Arduino.h>" on it
└── README.md This is the file you are currently reading
```
## Configuring the Hardware USB CDC Serial
ESP32 Arduino has two macro defined symbols that control what `Serial` symbol will represent.
Default `Serial` is the UART0 from `HardwareSerial` class.
`Serial` can be changed to be attached to the HW Serial JTAG port fro the SoC.
In order to make it work, it is necessary to define 2 symbols: `ARDUINO_USB_CDC_ON_BOOT` and `ARDUINO_USB_MODE` to `1`.
This is achieved by adding a couple lines to the [Project Folder CMakeLists.txt](CMakeLists.txt) file.
```
# Adds necessary definitions for compiling it using Serial symbol attached to the HW USB CDC port
list(APPEND compile_definitions "ARDUINO_USB_CDC_ON_BOOT=1")
list(APPEND compile_definitions "ARDUINO_USB_MODE=1")
```
Those two lines will add a `-DSYMBOL=VAL` when compiling every source code file.
In order to make sure that it is actually working correctly, the [sketch](main/main.cpp) will execute `Serial.begin();` with no baudrate, which only works for USB CDC.
idf_component_register(
SRC_DIRS "."
INCLUDE_DIRS "."
)
## IDF Component Manager Manifest File
dependencies:
espressif/arduino-esp32:
version: "*"
override_path: "../../../"
pre_release: true
#include <Arduino.h>
void setup() {
// USB CDC doesn't need a baud rate
Serial.begin();
// wait for the Serial Monitor to be open
while (!Serial) {
delay(100);
}
Serial.println("\r\nStarting...\r\n");
}
void loop() {
Serial.println("Hello world!");
delay(1000);
}
#
# Arduino ESP32
#
CONFIG_AUTOSTART_ARDUINO=y
# end of Arduino ESP32
#
# FREERTOS
#
CONFIG_FREERTOS_HZ=1000
# end of FREERTOS
# end of Component config
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment