arduino-esp32/idf_component_examples/hw_cdc_hello_world
Rodrigo Garcia e70f4d3819
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: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
2024-09-02 13:21:05 +03:00
..
main Adds HW Serial CDC as IDF component example (#10262) 2024-09-02 13:21:05 +03:00
CMakeLists.txt Adds HW Serial CDC as IDF component example (#10262) 2024-09-02 13:21:05 +03:00
README.md Adds HW Serial CDC as IDF component example (#10262) 2024-09-02 13:21:05 +03:00
sdkconfig.defaults Adds HW Serial CDC as IDF component example (#10262) 2024-09-02 13:21:05 +03:00

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 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. The file is located in folder 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 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 will execute Serial.begin(); with no baudrate, which only works for USB CDC.