This commit is contained in:
antopoid 2022-09-09 16:07:13 +02:00
parent 5a23a27927
commit 6848482510
22 changed files with 6010 additions and 0 deletions

View File

@ -0,0 +1,10 @@
# Configuration files
sdkconfig
sdkconfig.old
# Production folder
build/
# HTML documentation
html_doc/

View File

@ -0,0 +1,6 @@
# The following 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.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(main)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
PROJECT_NAME := main
include $(IDF_PATH)/make/project.mk

View File

@ -0,0 +1,22 @@
interface ftdi
ftdi_vid_pid 0x0403 0x6010
ftdi_layout_init 0x0038 0x003b
# The ESP32 only supports JTAG.
transport select jtag
# This can go as high as 20MHz if CPU frequency is 80MHz, or 26MHz
# if CPU frequency is 160MHz or 240MHz.
adapter_khz 20000
# If single core debugging is required, uncomment the following line
#set ESP32_ONLYCPU 1
# To disable RTOS support, uncomment the following line
# set ESP32_RTOS none
# This option defaults to 3.3v
set ESP32_FLASH_VOLTAGE 3.3
# Source the ESP32 configuration file
source [find target/esp32.cfg]

View File

@ -0,0 +1,3 @@
idf_component_register(
SRC_DIRS "."
INCLUDE_DIRS ".")

View File

@ -0,0 +1,2 @@
COMPONENT_SRCDIRS := .
COMPONENT_ADD_INCLUDEDIRS := .

View File

@ -0,0 +1,54 @@
/****************************************************************************
* Copyright (C) 2020 by Fabrice Muller *
* *
* This file is useful for ESP32 Design course. *
* *
****************************************************************************/
/**
* @file lab3-2-1_main.c
* @author Fabrice Muller
* @date 2 Sep. 2020
* @brief File containing the lab3-2-1 of Part 1.
*
* @see https://github.com/fmuller-pns/esp32-vscode-project-template
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_err.h"
#include "sensors.h"
static const char* TAG = "STRUCT";
extern struct SensorSetStruct defaultSensorSet;
void app_main(void) {
int i;
while (1) {
ESP_LOGI(TAG, "DEFAULT Functions - SENSORS");
for (i=0; i<5; i++){
// Wait for 1 sec.
usleep(1000000);
updateAndDisplaySensorValues(&defaultSensorSet,defaultUpdateSensorValues,defaultPrintSensorValues);
}
}
}

View File

@ -0,0 +1,52 @@
#include "sensors.h"
static const char* TAG = "STRUCT";
/**
* @brief Default update sensor values with random values
*
* @param sensorSet
*/
void defaultUpdateSensorValues(struct SensorSetStruct *sensorSet) {
int random = abs(esp_random());
sensorSet->temperature.value.f = (random % 400) / 10;
random = abs(esp_random());
sensorSet->pressure.value.i = 990 + (random % 30);
}
/**
* @brief Default print sensor values
*
* @param sensorSet
*/
void defaultPrintSensorValues(struct SensorSetStruct *sensorSet) {
ESP_LOGI(TAG, "> %s = %f", sensorSet->temperature.name, sensorSet->temperature.value.f);
ESP_LOGI(TAG, "> %s = %d", sensorSet->pressure.name, sensorSet->pressure.value.i);
}
/**
* @brief Update and Display sensor values
*
* @param sensorSet
*/
void updateAndDisplaySensorValues(struct SensorSetStruct *sensorSet ,void (* Update)(struct SensorSetStruct *sensorSet),void (* Display)(struct SensorSetStruct *sensorSet)) {
Update(sensorSet);
Display(sensorSet);
}
struct SensorSetStruct defaultSensorSet = {
.temperature=
{
.name="TEMP",
.type=FLOAT,
.value= {.f=0.0}
},
.pressure=
{
.name="PRES",
.type=INT,
.value={.i=0}
}
};

View File

@ -0,0 +1,41 @@
#ifndef _SENSORS_H_
#define _SENSORS_H_
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_err.h"
enum SensorValueType {INT, FLOAT, DOUBLE};
union SensorValueUnion {
int i;
float f;
double d;
};
typedef struct SensorStruct
{
char name[10];
enum SensorValueType type;
union SensorValueUnion value;
} Sensor;
typedef struct SensorSetStruct
{
Sensor temperature;
Sensor pressure;
} SensorSet;
void defaultUpdateSensorValues(struct SensorSetStruct *sensorSet);
void defaultPrintSensorValues(struct SensorSetStruct *sensorSet);
void updateAndDisplaySensorValues(struct SensorSetStruct *sensorSet ,void (* Update)(struct SensorSetStruct *sensorSet),void (* Display)(struct SensorSetStruct *sensorSet));

View File

@ -0,0 +1,294 @@
# Visual Studio Code Template for ESP32
## Prerequisites
We consider that the Espressif IoT Development Framework (ESP-IDF), version 4.4.1, and Visual Studio Code environment is installed on the computer.
For more details, see:
- https://docs.espressif.com/projects/esp-idf/en/v4.4.1/esp32/get-started/index.html#installation-step-by-step
- https://code.visualstudio.com/
As of VS-code v1.56.1 integrated terminals require additional configuration to work correctly. see https://code.visualstudio.com/docs/getstarted/settings#_settings-file-locations to edit the `setting.json` file and add the following entry:
```bash
"terminal.integrated.allowWorkspaceConfiguration":true
```
In Linux (from Ubuntu 20.x), on connecting an ESP32 board with a CP210x USB to serial converter, there is a problem of connection. Add the following entries below that disable both parts of the brltty service and allowed the ESP32 development boards to properly connect.
```bash
sudo systemctl stop brltty-udev.service
sudo systemctl mask brltty-udev.service
sudo systemctl stop brltty.service
sudo systemctl disable brltty.service
```
Another solution is to uninstall brltty as below:
```bash
sudo apt remove brltty
```
## Getting Started
Firstly, you have to clone the `esp32-vscode-project-template` project and follow the next steps.
```bash
git clone https://github.com/fmuller-pns/esp32-vscode-project-template.git
```
#### 1. Rename the `vscode_project_template` folder
```bash
mv esp32-vscode-project-template <my_project_name>
```
#### 2. Go to the project directory
```bash
cd <my_project_name>
```
#### 3. Remove the GIT directory
```bash
rm -fR .git
```
#### 4. Open visual studio code for the new project
```bash
code .
```
#### 5. Verify paths in the `c_cpp_properties.json` file and change them if wrong.
```json
"IDF_TOOLS": "~/.espressif/tools",
"IDF_PATH": "~/esp/esp-idf"
```
#### 6. [Not required] Change the default project name called `main` in files.
This step renames the executable file. By default, the executable file is `main.elf`.
1. Open `CMakeLists.txt` and replace `main` by <my_project_name>
2. Open `Makefile` and replace `main` by <my_project_name>
3. Open `.vscode/launch.json` and replace `main` by <my_project_name> (lines 11 and 19)
#### 7. Open a terminal from Visual Studio Code to perform commands
Choose an external or internal terminal.
##### Open integrated terminal from Visual Studio Code
* using keyboard shortcut: `Ctrl+Shift+`<sup>2</sup>
* or pressing `F1` key and typing `integrated`
##### Open external terminal from Visual Studio Code
* using keyboard shortcut: `Ctrl+Shift+C`
* or pressing `F1` key and typing `external`
#### 8. Identify the USB serial port (usually `/dev/ttyUSB0`)
```bash
ls /dev/ttyUSB*
```
<span style="color:yellow">/dev/ttyUSB0</span>
#### 9. Building, flashing and running project
The serial port is `/dev/ttyUSB0` identified above.
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
##### Push the button on the ESP32 board when connecting
```bash
Serial port /dev/ttyUSB0
Connecting........_____....._
Detecting chip type... ESP32
Chip is ESP32-PICO-D4 (revision 1)
```
##### Flashing and monitoring
The message "`Hello ESP32 !`" appears.
```bash
...
W (290) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
I (300) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Hello ESP32 !
```
To exit monitoring, typing `Ctrl+AltGr+]`
## Useful Commands
#### Open external terminal from vscode to perform commands
* using keyboard shortcut: `Ctrl+Shift+C`
* or pressing `F1` key and typing `external`
#### Open integrated terminal from vscode to perform commands
* using keyboard shortcut: `Ctrl+Shift+`<sup>2</sup>
* or pressing `F1` key and typing `integrated`
#### Clean project
```bash
idf.py fullclean
```
#### Configuration of the ESP32 board (only in external terminal)
```bash
idf.py menuconfig
```
#### Compile and build the executable file (`.elf` extension)
```bash
idf.py build
```
#### Identify the USB serial port (usually `/dev/ttyUSB0`)
```bash
ls /dev/ttyUSB*
```
#### Compile, build, flash
```bash
idf.py -p /dev/ttyUSB0 flash
```
#### Compile, build, flash and monitor
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
To exit monitoring, typing `Ctrl+AltGr+]`
## Using Tasks for ESP32 to run, debug Project and so on
1. In the menu, select `Run Task...`
2. Select the task you want to launch:
- `ESP32 - Build only`: just build the project
- `ESP32 - Flash and Monitor`: build (when modifications of code), flash and monitor
- `ESP32 - Clean Project`: Clean project (Full clean)
- `ESP32 - OpenOCD with FT2232`: Run in dedicated terminal the openOCD command to debug the project
- `ESP32 - Doxygen - HTML doc.`: Generate HTML documentation with Doxygen
## Configure GIT for your new project
#### Go to your new project folder
```bash
cd <project_name>
```
#### Configure name and email address
```bash
git config --global user.name "your name"
git config --global user.email "your email address"
```
#### Avoid typing your username and personal access token in vscode each time
This is useful when connecting your GIT to GitHub.
```bash
git config credential.helper store
```
## Using GITHUB with visual studio code
We consider you have followed the sections above:
* Getting Started
* Configure GIT for your new project
Now, how to communicate with GitHub ?
1. Open visual studio code.
2. Click on the `Source Control` icon on your left side or use `Ctrl+Shift+G` shortcut.
3. For the first time, click on `Initialize Repository` button
4. Enter a message for your first commit (ex: first commit) and click on Commit icon
5. Press `F1` and typing `git add remote` and entering :
* *remote name* : your github repository previously created
* *remote url* : https://github.com/xxx/your_project.git
* *username* and *password*
6. Push to the GitHub server (master branch)
See https://code.visualstudio.com/docs/editor/versioncontrol for more details.
## Debugging with JTAG FT2232
You must install FTDI FT2232 driver.
### Quick Driver installation for Linux:
1. Install USB Driver
```bash
sudo apt-get install libusb-1.0
$ lsusb
Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
```
2. Install OpenOCD rules. The path for rule copy can be different and depend on your ESP-IDF installation.
```bash
$ sudo usermod -a -G dialout $USER
$ sudo usermod -a -G plugdev $USER
$ sudo cp ~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210401/openocd-esp32/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d/
$ sudo reboot
```
### Step 1: From external terminals
1. Connect the ESP32 board (USB)
2. Open an external terminal for building, flashing and running project
The serial port is `/dev/ttyUSB0` identified above.
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
3. Connect the JTAG FT2232 (USB)
4. Open another external terminal for running `openocd` with configuration file (`ftdi_ft2232.cfg`) located in the project root.
```bash
openocd -f ftdi_ft2232.cfg
```
5. Result on openocd terminal
```bash
Open On-Chip Debugger v0.10.0-esp32-20190313 (2019-03-13-09:52)
Licensed under GNU GPL v2
adapter speed: 20000 kHz
Info : Configured 2 cores
esp32 interrupt mask on
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
Info : clock speed 20000 kHz
Info : JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : esp32: Debug controller 0 was reset (pwrstat=0x5F, after clear 0x0F).
Info : esp32: Core 0 was reset (pwrstat=0x5F, after clear 0x0F).
Info : esp32: Debug controller 1 was reset (pwrstat=0x5F, after clear 0x0F).
Info : esp32: Core 1 was reset (pwrstat=0x5F, after clear 0x0F).
Info : Detected debug stubs @ 3ffb2950 on core0 of target 'esp32'
Info : Listening on port 3333 for gdb connections
```
### Step 2: From Visual Studio Code
1. Click on the left on the line you want to set a breakpoint. A red bullet appears.
2. Click on debug Icon
3. Click on RUN `ESP32 OpenOCD`. If an error arises, click again.
4. The program stops at the breakpoint and you can see variables and more
### Step 3: When you modify the code
Do not touch the terminal with `openocd` command.
1. Stop the program into the terminal, typing `Ctrl+AltGr+]`
2. Build, flash and run program
The serial port is `/dev/ttyUSB0` identified above.
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
3. Click on RUN `ESP32 OpenOCD`. If an error arises, click again.
4. The program stops at the breakpoint and you can see variables and more
## Generate Doxygen documentation
You can use [Using Tasks for ESP32](#using-tasks-for-esp32-to-run-debug-project-and-so-on) or follow the steps below.
1. Open external terminal from vscode, using keyboard shortcut: `Ctrl+Shift+C`, or pressing `F1` key and typing `external`
2. Generate HTML documentation in `html_doc` folder
* From the User interface (allow you updating the `Doxyfile` configuration file)
```bash
doxywizard
```
* Directly from `Doxyfile` configuration file
```bash
doxygen
```
3. A new `html` folder is created, the entry file is `index.html`

View File

@ -0,0 +1,10 @@
# Configuration files
sdkconfig
sdkconfig.old
# Production folder
build/
# HTML documentation
html_doc/

View File

@ -0,0 +1,6 @@
# The following 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.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(main)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
PROJECT_NAME := main
include $(IDF_PATH)/make/project.mk

View File

@ -0,0 +1,22 @@
interface ftdi
ftdi_vid_pid 0x0403 0x6010
ftdi_layout_init 0x0038 0x003b
# The ESP32 only supports JTAG.
transport select jtag
# This can go as high as 20MHz if CPU frequency is 80MHz, or 26MHz
# if CPU frequency is 160MHz or 240MHz.
adapter_khz 20000
# If single core debugging is required, uncomment the following line
#set ESP32_ONLYCPU 1
# To disable RTOS support, uncomment the following line
# set ESP32_RTOS none
# This option defaults to 3.3v
set ESP32_FLASH_VOLTAGE 3.3
# Source the ESP32 configuration file
source [find target/esp32.cfg]

View File

@ -0,0 +1,3 @@
idf_component_register(
SRC_DIRS "."
INCLUDE_DIRS ".")

View File

@ -0,0 +1,2 @@
COMPONENT_SRCDIRS := .
COMPONENT_ADD_INCLUDEDIRS := .

View File

@ -0,0 +1,97 @@
/****************************************************************************
* Copyright (C) 2020 by Fabrice Muller *
* *
* This file is useful for ESP32 Design course. *
* *
****************************************************************************/
/**
* @file lab3-3-2_main.c
* @author Fabrice Muller
* @date 2 Sep. 2020
* @brief File containing the lab3-3-2 of Part 1.
*
* @see https://github.com/fmuller-pns/esp32-vscode-project-template
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_err.h"
#include "sensors.h"
static const char* TAG = "MAIN";
extern struct SensorSetStruct defaultSensorSet;
/*
- Use custom functions
*/
/**
* @brief update sensor values with random values
*
* @param sensorSet
*/
void updateSensorValues(struct SensorSetStruct *sensorSet) {
int random = abs(esp_random());
sensorSet->temperature.value.f = (random % 400) / 10;
random = abs(esp_random());
sensorSet->pressure.value.i = 990 + (random % 30);
}
/**
* @brief print sensor values
*
* @param sensorSet
*/
void printSensorValues(struct SensorSetStruct *sensorSet) {
printf("Sensor Informations\n");
printf("%s : %f\n", sensorSet->temperature.name, sensorSet->temperature.value.f);
printf("%s : %d\n", sensorSet->pressure.name, sensorSet->pressure.value.i);
}
/**
* @brief Starting point function
*
*/
void app_main(void)
{
int i;
while (1) {
ESP_LOGI(TAG, "DEFAULT Functions - SENSORS");
for (i=0; i<5; i++) {
// Wait for 1 sec.
usleep(1000000);
updateAndDisplaySensorValues(&defaultSensorSet);
}
ESP_LOGI(TAG, "CUSTOM Functions - SENSORS");
defaultSensorSet.Update = updateSensorValues;
defaultSensorSet.Display = printSensorValues;
for (i=0; i<5; i++) {
// Wait for 1 sec.
usleep(1000000);
updateAndDisplaySensorValues(&defaultSensorSet);
}
// Set Default functions and run again
defaultSensorSet.Update = defaultUpdateSensorValues;
defaultSensorSet.Display = defaultPrintSensorValues;
}
}

View File

@ -0,0 +1,54 @@
#include "sensors.h"
static const char* TAG = "STRUCT";
/**
* @brief Default update sensor values with random values
*
* @param sensorSet
*/
void defaultUpdateSensorValues(struct SensorSetStruct *sensorSet) {
int random = abs(esp_random());
sensorSet->temperature.value.f = (random % 400) / 10;
random = abs(esp_random());
sensorSet->pressure.value.i = 990 + (random % 30);
}
/**
* @brief Default print sensor values
*
* @param sensorSet
*/
void defaultPrintSensorValues(struct SensorSetStruct *sensorSet) {
ESP_LOGI(TAG, "> %s = %f", sensorSet->temperature.name, sensorSet->temperature.value.f);
ESP_LOGI(TAG, "> %s = %d", sensorSet->pressure.name, sensorSet->pressure.value.i);
}
/**
* @brief Update and Display sensor values
*
* @param sensorSet
*/
void updateAndDisplaySensorValues(struct SensorSetStruct *sensorSet) {
sensorSet->Update(sensorSet);
sensorSet->Display(sensorSet);
}
struct SensorSetStruct defaultSensorSet = {
.temperature=
{
.name="TEMP",
.type=FLOAT,
.value= {.f=0.0}
},
.pressure=
{
.name="PRES",
.type=INT,
.value={.i=0}
},
.Update= defaultUpdateSensorValues,
.Display= defaultPrintSensorValues
};

View File

@ -0,0 +1,44 @@
#ifndef _SENSORS_H_
#define _SENSORS_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_err.h"
enum SensorValueType {INT, FLOAT, DOUBLE};
union SensorValueUnion {
int i;
float f;
double d;
};
typedef struct SensorStruct
{
char name[10];
enum SensorValueType type;
union SensorValueUnion value;
} Sensor;
typedef struct SensorSetStruct
{
Sensor temperature;
Sensor pressure;
void (* Update)(struct SensorSetStruct *sensorSet);
void (* Display)(struct SensorSetStruct *sensorSet);
} SensorSet;
void defaultUpdateSensorValues();
void defaultPrintSensorValues(struct SensorSetStruct *);
void updateAndDisplaySensorValues(struct SensorSetStruct *);
#endif

View File

@ -0,0 +1,294 @@
# Visual Studio Code Template for ESP32
## Prerequisites
We consider that the Espressif IoT Development Framework (ESP-IDF), version 4.4.1, and Visual Studio Code environment is installed on the computer.
For more details, see:
- https://docs.espressif.com/projects/esp-idf/en/v4.4.1/esp32/get-started/index.html#installation-step-by-step
- https://code.visualstudio.com/
As of VS-code v1.56.1 integrated terminals require additional configuration to work correctly. see https://code.visualstudio.com/docs/getstarted/settings#_settings-file-locations to edit the `setting.json` file and add the following entry:
```bash
"terminal.integrated.allowWorkspaceConfiguration":true
```
In Linux (from Ubuntu 20.x), on connecting an ESP32 board with a CP210x USB to serial converter, there is a problem of connection. Add the following entries below that disable both parts of the brltty service and allowed the ESP32 development boards to properly connect.
```bash
sudo systemctl stop brltty-udev.service
sudo systemctl mask brltty-udev.service
sudo systemctl stop brltty.service
sudo systemctl disable brltty.service
```
Another solution is to uninstall brltty as below:
```bash
sudo apt remove brltty
```
## Getting Started
Firstly, you have to clone the `esp32-vscode-project-template` project and follow the next steps.
```bash
git clone https://github.com/fmuller-pns/esp32-vscode-project-template.git
```
#### 1. Rename the `vscode_project_template` folder
```bash
mv esp32-vscode-project-template <my_project_name>
```
#### 2. Go to the project directory
```bash
cd <my_project_name>
```
#### 3. Remove the GIT directory
```bash
rm -fR .git
```
#### 4. Open visual studio code for the new project
```bash
code .
```
#### 5. Verify paths in the `c_cpp_properties.json` file and change them if wrong.
```json
"IDF_TOOLS": "~/.espressif/tools",
"IDF_PATH": "~/esp/esp-idf"
```
#### 6. [Not required] Change the default project name called `main` in files.
This step renames the executable file. By default, the executable file is `main.elf`.
1. Open `CMakeLists.txt` and replace `main` by <my_project_name>
2. Open `Makefile` and replace `main` by <my_project_name>
3. Open `.vscode/launch.json` and replace `main` by <my_project_name> (lines 11 and 19)
#### 7. Open a terminal from Visual Studio Code to perform commands
Choose an external or internal terminal.
##### Open integrated terminal from Visual Studio Code
* using keyboard shortcut: `Ctrl+Shift+`<sup>2</sup>
* or pressing `F1` key and typing `integrated`
##### Open external terminal from Visual Studio Code
* using keyboard shortcut: `Ctrl+Shift+C`
* or pressing `F1` key and typing `external`
#### 8. Identify the USB serial port (usually `/dev/ttyUSB0`)
```bash
ls /dev/ttyUSB*
```
<span style="color:yellow">/dev/ttyUSB0</span>
#### 9. Building, flashing and running project
The serial port is `/dev/ttyUSB0` identified above.
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
##### Push the button on the ESP32 board when connecting
```bash
Serial port /dev/ttyUSB0
Connecting........_____....._
Detecting chip type... ESP32
Chip is ESP32-PICO-D4 (revision 1)
```
##### Flashing and monitoring
The message "`Hello ESP32 !`" appears.
```bash
...
W (290) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
I (300) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Hello ESP32 !
```
To exit monitoring, typing `Ctrl+AltGr+]`
## Useful Commands
#### Open external terminal from vscode to perform commands
* using keyboard shortcut: `Ctrl+Shift+C`
* or pressing `F1` key and typing `external`
#### Open integrated terminal from vscode to perform commands
* using keyboard shortcut: `Ctrl+Shift+`<sup>2</sup>
* or pressing `F1` key and typing `integrated`
#### Clean project
```bash
idf.py fullclean
```
#### Configuration of the ESP32 board (only in external terminal)
```bash
idf.py menuconfig
```
#### Compile and build the executable file (`.elf` extension)
```bash
idf.py build
```
#### Identify the USB serial port (usually `/dev/ttyUSB0`)
```bash
ls /dev/ttyUSB*
```
#### Compile, build, flash
```bash
idf.py -p /dev/ttyUSB0 flash
```
#### Compile, build, flash and monitor
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
To exit monitoring, typing `Ctrl+AltGr+]`
## Using Tasks for ESP32 to run, debug Project and so on
1. In the menu, select `Run Task...`
2. Select the task you want to launch:
- `ESP32 - Build only`: just build the project
- `ESP32 - Flash and Monitor`: build (when modifications of code), flash and monitor
- `ESP32 - Clean Project`: Clean project (Full clean)
- `ESP32 - OpenOCD with FT2232`: Run in dedicated terminal the openOCD command to debug the project
- `ESP32 - Doxygen - HTML doc.`: Generate HTML documentation with Doxygen
## Configure GIT for your new project
#### Go to your new project folder
```bash
cd <project_name>
```
#### Configure name and email address
```bash
git config --global user.name "your name"
git config --global user.email "your email address"
```
#### Avoid typing your username and personal access token in vscode each time
This is useful when connecting your GIT to GitHub.
```bash
git config credential.helper store
```
## Using GITHUB with visual studio code
We consider you have followed the sections above:
* Getting Started
* Configure GIT for your new project
Now, how to communicate with GitHub ?
1. Open visual studio code.
2. Click on the `Source Control` icon on your left side or use `Ctrl+Shift+G` shortcut.
3. For the first time, click on `Initialize Repository` button
4. Enter a message for your first commit (ex: first commit) and click on Commit icon
5. Press `F1` and typing `git add remote` and entering :
* *remote name* : your github repository previously created
* *remote url* : https://github.com/xxx/your_project.git
* *username* and *password*
6. Push to the GitHub server (master branch)
See https://code.visualstudio.com/docs/editor/versioncontrol for more details.
## Debugging with JTAG FT2232
You must install FTDI FT2232 driver.
### Quick Driver installation for Linux:
1. Install USB Driver
```bash
sudo apt-get install libusb-1.0
$ lsusb
Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
```
2. Install OpenOCD rules. The path for rule copy can be different and depend on your ESP-IDF installation.
```bash
$ sudo usermod -a -G dialout $USER
$ sudo usermod -a -G plugdev $USER
$ sudo cp ~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210401/openocd-esp32/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d/
$ sudo reboot
```
### Step 1: From external terminals
1. Connect the ESP32 board (USB)
2. Open an external terminal for building, flashing and running project
The serial port is `/dev/ttyUSB0` identified above.
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
3. Connect the JTAG FT2232 (USB)
4. Open another external terminal for running `openocd` with configuration file (`ftdi_ft2232.cfg`) located in the project root.
```bash
openocd -f ftdi_ft2232.cfg
```
5. Result on openocd terminal
```bash
Open On-Chip Debugger v0.10.0-esp32-20190313 (2019-03-13-09:52)
Licensed under GNU GPL v2
adapter speed: 20000 kHz
Info : Configured 2 cores
esp32 interrupt mask on
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
Info : clock speed 20000 kHz
Info : JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : esp32: Debug controller 0 was reset (pwrstat=0x5F, after clear 0x0F).
Info : esp32: Core 0 was reset (pwrstat=0x5F, after clear 0x0F).
Info : esp32: Debug controller 1 was reset (pwrstat=0x5F, after clear 0x0F).
Info : esp32: Core 1 was reset (pwrstat=0x5F, after clear 0x0F).
Info : Detected debug stubs @ 3ffb2950 on core0 of target 'esp32'
Info : Listening on port 3333 for gdb connections
```
### Step 2: From Visual Studio Code
1. Click on the left on the line you want to set a breakpoint. A red bullet appears.
2. Click on debug Icon
3. Click on RUN `ESP32 OpenOCD`. If an error arises, click again.
4. The program stops at the breakpoint and you can see variables and more
### Step 3: When you modify the code
Do not touch the terminal with `openocd` command.
1. Stop the program into the terminal, typing `Ctrl+AltGr+]`
2. Build, flash and run program
The serial port is `/dev/ttyUSB0` identified above.
```bash
idf.py -p /dev/ttyUSB0 flash monitor
```
3. Click on RUN `ESP32 OpenOCD`. If an error arises, click again.
4. The program stops at the breakpoint and you can see variables and more
## Generate Doxygen documentation
You can use [Using Tasks for ESP32](#using-tasks-for-esp32-to-run-debug-project-and-so-on) or follow the steps below.
1. Open external terminal from vscode, using keyboard shortcut: `Ctrl+Shift+C`, or pressing `F1` key and typing `external`
2. Generate HTML documentation in `html_doc` folder
* From the User interface (allow you updating the `Doxyfile` configuration file)
```bash
doxywizard
```
* Directly from `Doxyfile` configuration file
```bash
doxygen
```
3. A new `html` folder is created, the entry file is `index.html`