Installation with VScode extension on MacOS/Linux

Step 1. Install Prerequisites

In order to use ROGO_ESP32_WILE_SDK with the WILE ESP32 device, you need to install some software packages based on your Operating System. This setup guide helps you on getting everything installed on Linux and macOS based systems.

For Linux Users

To compile using ROGO_ESP32_WILE_SDK, you need to get the following packages. The command to run depends on which distribution of Linux you are using:

  • Ubuntu and Debian:

    sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
    
  • CentOS 7 & 8:

    sudo yum -y update && sudo yum install git wget flex bison gperf python3 cmake ninja-build ccache dfu-util libusbx
    

CentOS 7 is still supported but CentOS version 8 is recommended for a better user experience.

  • Arch:

    sudo pacman -S --needed gcc git make flex bison gperf python cmake ninja ccache dfu-util libusb
    

Note

  • CMake version 3.16 or newer is required for use with ROGO_ESP32_WILE_SDK. Run “tools/idf_tools.py install cmake” to install a suitable version if your OS versions does not have one.

  • If you do not see your Linux distribution in the above list then please check its documentation to find out which command to use for package installation.

For macOS Users

ROGO_ESP32_WILE_SDK uses the version of Python installed by default on macOS.

  • Install CMake & Ninja build:

    • If you have HomeBrew_, you can run:

      brew install cmake ninja dfu-util
      
    • If you have MacPorts_, you can run:

      sudo port install cmake ninja dfu-util
      
    • Otherwise, consult the CMake_ and Ninja_ home pages for macOS installation downloads.

  • It is strongly recommended to also install ccache_ for faster builds. If you have HomeBrew_, this can be done via brew install ccache or sudo port install ccache on MacPorts_.

Note

If an error like this is shown during any step:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

Then you need to install the XCode command line tools to continue. You can install these by running xcode-select --install.

Apple M1 Users

If you use Apple M1 platform and see an error like this:

WARNING: directory for tool xtensa-esp32-elf version esp-2021r2-patch3-8.4.0 is present, but tool was not found
ERROR: tool xtensa-esp32-elf has no installed versions. Please run 'install.sh' to install it.

or:

zsh: bad CPU type in executable: ~/.espressif/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc

Then you need to install Apple Rosetta 2 by running

/usr/sbin/softwareupdate --install-rosetta --agree-to-license

Installing Python 3

Based on macOS `Catalina 10.15 release notes`_, use of Python 2.7 is not recommended and Python 2.7 is not included by default in future versions of macOS. Check what Python you currently have:

python --version

If the output is like Python 2.7.17, your default interpreter is Python 2.7. If so, also check if Python 3 is not already installed on your computer:

python3 --version

If the above command returns an error, it means Python 3 is not installed.

Below is an overview of the steps to install Python 3.

  • Installing with HomeBrew_ can be done as follows:

    brew install python3
    
  • If you have MacPorts_, you can run:

    sudo port install python38
    

Step 2 Download ROGO_ESP32_WILE_SDK

To get ROGO_ESP32_WILE_SDK, navigate to your installation directory and clone the repository with git clone, following instructions below specific to your operating system.

Open Terminal, and run the following commands:

.. code-block:: bash

mkdir -p ~/esp
cd ~/esp
git clone -b dev/v5.1.1 --recursive https://github.com/RogoSolutions/rogo-esp32-sdk.git

ROGO_ESP32_WILE_SDK is downloaded into ~/esp/rogo-esp32-sdk.

Alternatively you can also directly download from the ROGO_ESP32_WILE_SDK’s github page

download zip file of the ROGO_ESP32_WILE_SDK

Step 3 Install VScode extension and ROGO_ESP32_WILE_SDK

Download and install Visual Studio Code.

Open the Extensions view by clicking on the Extension icon in the Activity Bar on the side of Visual Studio Code or the View: Extensions command (shortcut: X or Ctrl+Shift+X.

Extension Search

Search for ESP-IDF Extension, and install it.

Extension Install

(OPTIONAL) Press F1 and type ESP-IDF: Select where to Save Configuration Settings, which can be User Settings, Workspace Settings or Workspace Folder Settings. Please take a look at Working with multiple projects for more information. Default is User settings.

Extension Save Configuration Settings

In Visual Studio Code, Press F1 or select menu “View” and “Command Palette” and type [configure esp-idf extension]. After, choose the ESP-IDF: Configure ESP-IDF Extension option. You can also choose where to save settings in the setup wizard.

Configure ESP-IDF Extension

Now the setup wizard window will be shown with several setup options: Express, Advanced or Use Existing Setup.

Select extension mode

Choose Advanced option, after ESP-IDF is downloaded and extracted, select to either download ESP-IDF Tools or manually provide each ESP-IDF tool absolute path and required environment variables. > NOTE: Consider that IDF_PATH requires each ESP-IDF tool to be of the version described in IDF_PATH/tools/tools.json. > If it is desired to use a different ESP-IDF tool version, check JSON Manual Configuration

Select ESP-IDF Tools

Next step, the user will be asked how to install the ESP_IDF tools, the user can just leave the default option of Download ESP-IDF tools

Select ESP-IDF Tools

Otherwise, if the user already installed the ESP-IDF tools, and want to use them , they can select Use existing ESP-IDF tools and provide the absolute path, please enter the executable container directory for each binary as shown below: > NOTE: Check JSON Manual Configuration for more information.

Enter ESP-IDF Tools paths manually

If everything is installed correctly, the user will see a message that all settings have been configured. You can start using the extension.

Install complete

NOTE: The advance mode allows the user to choose to use existing ESP-IDF tools by manually entering each ESP-IDF tool absolute path. Make sure each ESP-IDF tool path doesn’t have any spaces.

Now that the extension setup is finally done, check the Basic use to learn how to use the SDK Configuration editor, build, flash and monitor your Espressif device.

NOTE: Visual Studio Code has many places where to set configuration settings. This extension uses the idf.saveScope configuration setting to determine where to save settings, Global (User Settings), Workspace and WorkspaceFolder. Please review vscode settings precedence.

NOTE: the setup wizard will install ESP-IDF Python packages and ESP-IDF debug adapter (EXTENSION_PATH/esp_debug_adapter/requirements.txt) python packages. Make sure that if using an existing python virtual environment that installing these packages doesn’t affect your virtual environment. The EXTENSION_PATH is: $HOME/.vscode/extensions/espressif.esp-idf-extension-VERSION

Now since all requirements are met, the next topic will guide you on how to start your first project.

This guide helps you on the first steps using ESP-IDF. Follow this guide to start a new project on the |IDF_TARGET_NAME| and build, flash, and monitor the device output.

Note

If you have not yet installed ESP-IDF, please go to get-started-step-by-step and follow the instruction in order to get all the software needed to use this guide.

Start a Project

Now you are ready to prepare your application for |IDF_TARGET_NAME|. You can start with :example:`get-started/hello_world` project from :idf:`examples` directory in ESP-IDF. ```{eval-rst} .. important:

The ESP-IDF build system does not support spaces in the paths to either ESP-IDF or to projects.

```

cd [Path to SDK]/esp
cp -r $IDF_PATH/examples/get-started/hello_world .

Note

There is a range of example projects in the :idf:`examples` directory in ESP-IDF. You can copy any project in the same way as presented above and run it. It is also possible to build examples in-place without copying them first.

Open VScode, click on Espressif logo on the left panel, you will be greeted with a windows like this:

IDF extension - Homepage

IDF extension - Homepage

Click on import project , a prompt windows will show up, navigate to [Path to SDK]/examples/get-started/hello_world and select the desired example, which is hello_world:

Choosing example folder

Choosing example folder

Then choose the location where you want to save/copy the example project to:

Prompt to select folder

Prompt to select folder

Then put in your project name.

Project configuration - WILE device - Factory board test

Project configuration - WILE device - Factory board test

After that open the project folder you just created.

Project configuration - WILE device - Factory board test

Project configuration - WILE device - Factory board test

Project configuration - WILE device - Factory board test

Project configuration - WILE device - Factory board test

Connect Your Device

Now connect your |IDF_TARGET_NAME| board to the computer and check under which serial port the board is visible.

Serial ports have the following naming patterns:

  • Linux: starting with /dev/tty

  • macOS: starting with /dev/cu.

  • macOS: starting with COM

If you are not sure how to check the serial port name, please refer to establish-serial-connection for full details.

You can also see which serial ports are currently available by click on the serial port icon (🔌) at the tool bar of IDF extension, and choose your device serial port here

Serial Port listing and selection

Serial Port listing and selection

Note

Keep the port name handy as it is needed in the next steps.

Configure Your Project

After opening a new project, you should first set the target with correspond to the hardware or chip module you are using .Note that existing builds and configurations in the project, if any, are cleared and initialized in this process. The target may be saved in the environment variable to skip this step at all. See selecting-idf-target for additional information.

Click on the `Set Espressif device target` icon, to select the correct ESP32 series you are using.

Set target device for the project

Set target device for the project

Click on the `SDK Configuration` icon (⚙) on the tool bar to run the configuration, and the menuconfig should show up like this

SDK Configuration (Menuconfig - GUI version)

SDK Configuration (Menuconfig - GUI version)

You are using this menu to set up project specific variables, e.g., Wi-Fi network name and password, the processor speed, etc. Setting up the project with menuconfig may be skipped for “hello_world”, since this example runs with default configuration.

Note

The colors of the menu could be different in your terminal. You can change the appearance with the option --style. Please run idf.py menuconfig --help for further information.

Build the Project

Build the project by clicking build icon :

Build project

Build project

This compiles the application and all ESP-IDF components, then it generates the bootloader, partition table, and application binaries.

If there are no errors, the build finishes by generating the firmware binary .bin files with output like this.

Build result

Build result

Flash onto the Device

To flash the binaries that you just built for the |IDF_TARGET_NAME| in the previous step, you need to run the following command:

idf.py -p PORT flash

Replace PORT with your |IDF_TARGET_NAME| board’s USB port name. If the PORT is not defined, the idf.py will try to connect automatically using the available USB ports.

For more information on idf.py arguments, see idf.py.

Note

The option flash automatically builds and flashes the project, so running idf.py build is not necessary.

Encountered Issues While Flashing? See the “Additional Tips” below. You can also refer to flashing-troubleshooting page or establish-serial-connection for more detailed information.

Normal Operation

When flashing, you will see the output log similar to the following:

...
esptool.py --chip esp32c3 -p /dev/ttyUSB0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 2MB 0x8000 partition_table/partition-table.bin 0x0 bootloader/bootloader.bin 0x10000 hello_world.bin
esptool.py v3.0
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP32-C3
Features: Wi-Fi
Crystal is 40MHz
MAC: 7c:df:a1:40:02:a4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 4238.1 kbit/s)...
Hash of data verified.
Compressed 18960 bytes to 11311...
Writing at 0x00000000... (100 %)
Wrote 18960 bytes (11311 compressed) at 0x00000000 in 0.3 seconds (effective 584.9 kbit/s)...
Hash of data verified.
Compressed 145520 bytes to 71984...
Writing at 0x00010000... (20 %)
Writing at 0x00014000... (40 %)
Writing at 0x00018000... (60 %)
Writing at 0x0001c000... (80 %)
Writing at 0x00020000... (100 %)
Wrote 145520 bytes (71984 compressed) at 0x00010000 in 2.3 seconds (effective 504.4 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
Done

If there are no issues by the end of the flash process, the board will reboot and start up the “hello_world” application.

If you would like to use the Eclipse or VS Code IDE instead of running idf.py, check out Eclipse Plugin, VSCode Extension.

Monitor the Output

To check if “hello_world” is indeed running, type idf.py -p PORT monitor (Do not forget to replace PORT with your serial port name).

This command launches the IDF Monitor application:

$ idf.py -p <PORT> monitor
Running idf_monitor in directory [...]/esp/hello_world/build
Executing "python [...]/esp-idf/tools/idf_monitor.py -b 115200 [...]/esp/hello_world/build/hello_world.elf"...
--- idf_monitor on <PORT> 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun  8 2016 00:22:57
...

After startup and diagnostic logs scroll up, you should see “Hello world!” printed out by the application.

    ...
    Hello world!
    Restarting in 10 seconds...
    This is {IDF_TARGET_PATH_NAME} chip with {IDF_TARGET_SOC_CPU_CORES_NUM} CPU core(s), {IDF_TARGET_FEATURES}
Minimum free heap size: {IDF_TARGET_HEAP_SIZE} bytes
    Restarting in 9 seconds...
    Restarting in 8 seconds...
    Restarting in 7 seconds...

To exit IDF monitor use the shortcut Ctrl+].

Note

You can combine building, flashing and monitoring into one step by running:

idf.py -p PORT flash monitor

See also:

  • IDF Monitor for handy shortcuts and more details on using IDF monitor.

  • idf.py for a full reference of idf.py commands and options.

That is all that you need to get started with |IDF_TARGET_NAME| !

Now you are ready to try some other :idf:`examples`, or go straight to developing your own applications.

Important

Some of examples do not support |IDF_TARGET_NAME| because required hardware is not included in |IDF_TARGET_NAME| so it cannot be supported.

If building an example, please check the README file for the Supported Targets table. If this is present including |IDF_TARGET_NAME| target, or the table does not exist at all, the example will work on |IDF_TARGET_NAME|.

Additional Tips

Permission Denied Issue

With some Linux distributions, you may get the error message similar to Could not open port <PORT>: Permission denied: '<PORT>' when flashing the |IDF_TARGET_NAME|. This can be solved by adding the current user to the specific group, such as dialout or uucp group.

Python Compatibility

ESP-IDF supports Python 3.8 or newer. It is recommended to upgrade your operating system to a recent version satisfying this requirement. Other options include the installation of Python from sources or the use of a Python version management system such as pyenv.

Flash Erase

Erasing the flash is also possible. To erase the entire flash memory you can run the following command:

idf.py -p PORT erase-flash

For erasing the OTA data, if present, you can run this command:

idf.py -p PORT erase-otadata

The flash erase command can take a while to be done. Do not disconnect your device while the flash erasing is in progress.