1***********
2Get Started
3***********
4
5{IDF_TARGET_CORE_NUM:default="2", esp32s2="1", esp32c3="1"}
6
7{IDF_TARGET_FEATURES:default="WiFi/BT/BLE, silicon revision 1, 2MB external flash", esp32="WiFi/BT/BLE, silicon revision 1, 2MB external flash", esp32s2="WiFi, silicon revision 0, 2MB external flash", esp32s3="This is esp32s3 chip with 2 CPU core(s), WiFi/BLE, silicon revision 0, 2MB external flash", esp32c3="WiFi/BLE, silicon revision 0, 2MB external flash"}
8
9{IDF_TARGET_HEAP_SIZE:default="298968", esp32="298968", esp32s2="253900", esp32s3="390684", esp32c3="337332"}
10
11
12:link_to_translation:`zh_CN:[中文]`
13
14.. Please keep README.md in sync with these instructions.
15
16This document is intended to help you set up the software development environment for the hardware based on the {IDF_TARGET_NAME} chip by Espressif. After that, a simple example will show you how to use ESP-IDF (Espressif IoT Development Framework) for menu configuration, then for building and flashing firmware onto an {IDF_TARGET_NAME} board.
17
18.. include-build-file:: inc/version-note.inc
19
20Introduction
21============
22
23{IDF_TARGET_NAME} is a system on a chip that integrates the following features:
24
25.. only:: esp32
26
27    * Wi-Fi (2.4 GHz band)
28    * Bluetooth
29    * Dual high performance Xtensa® 32-bit LX6 CPU cores
30    * Ultra Low Power co-processor
31    * Multiple peripherals
32
33.. only:: esp32s2
34
35    * Wi-Fi (2.4 GHz band)
36    * High performance single core Xtensa® 32-bit LX7 CPU
37    * Ultra Low Power co-processor running either RISC-V or FSM core
38    * Multiple peripherals
39    * Built-in security hardware
40    * USB OTG interface
41
42.. only:: esp32s3
43
44    * Wi-Fi (2.4 GHz band)
45    * Bluetooth Low Energy
46    * Dual high performance Xtensa® 32-bit LX7 CPU cores
47    * Ultra Low Power co-processor running either RISC-V or FSM core
48    * Multiple peripherals
49    * Built-in security hardware
50    * USB OTG interface
51    * USB Serial/JTAG Controller
52
53.. only:: esp32c3
54
55    * Wi-Fi (2.4 GHz band)
56    * Bluetooth Low Energy
57    * High performance 32-bit RISC-V single-core processor
58    * Multiple peripherals
59    * Built-in security hardware
60
61Powered by 40 nm technology, {IDF_TARGET_NAME} provides a robust, highly integrated platform, which helps meet the continuous demands for efficient power usage, compact design, security, high performance, and reliability.
62
63Espressif provides basic hardware and software resources to help application developers realize their ideas using the {IDF_TARGET_NAME} series hardware. The software development framework by Espressif is intended for development of Internet-of-Things (IoT) applications with Wi-Fi, Bluetooth, power management and several other system features.
64
65
66What You Need
67=============
68
69Hardware:
70
71* An **{IDF_TARGET_NAME}** board
72* **USB cable** - USB A / micro USB B
73* **Computer** running Windows, Linux, or macOS
74
75Software:
76
77You have a choice to either download and install the following software manually
78
79    * **Toolchain** to compile code for {IDF_TARGET_NAME}
80    * **Build tools** - CMake and Ninja to build a full **Application** for {IDF_TARGET_NAME}
81    * **ESP-IDF** that essentially contains API (software libraries and source code) for {IDF_TARGET_NAME} and scripts to operate the **Toolchain**
82
83**or** get through the onboarding process using the following official plugins for integrated development environments (IDE) described in separate documents
84
85    * `Eclipse Plugin <https://github.com/espressif/idf-eclipse-plugin>`_ (`installation link <https://github.com/espressif/idf-eclipse-plugin#installing-idf-plugin-using-update-site-url>`_)
86    * `VS Code Extension <https://github.com/espressif/vscode-esp-idf-extension>`_ (`setup <https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/tutorial/install.md>`_)
87
88.. figure:: ../../_static/what-you-need.png
89    :align: center
90    :alt: Development of applications for {IDF_TARGET_NAME}
91    :figclass: align-center
92
93    Development of applications for {IDF_TARGET_NAME}
94
95
96Development Board Overviews
97===========================
98
99If you have one of {IDF_TARGET_NAME} development boards listed below, you can click on the link to learn more about its hardware.
100
101.. only:: esp32
102
103    .. toctree::
104        :maxdepth: 1
105
106        ESP32-DevKitC <../hw-reference/esp32/get-started-devkitc>
107        ESP-WROVER-KIT <../hw-reference/esp32/get-started-wrover-kit>
108        ESP32-PICO-KIT <../hw-reference/esp32/get-started-pico-kit>
109        ESP32-Ethernet-Kit <../hw-reference/esp32/get-started-ethernet-kit>
110        ESP32-DevKit-S(-R) <../hw-reference/esp32/user-guide-devkits-r-v1.1>
111        ESP32-PICO-KIT-1 <../hw-reference/esp32/get-started-pico-kit-1>
112        ESP32-PICO-DevKitM-2 <../hw-reference/esp32/get-started-pico-devkitm-2>
113        ESP32-DevKitM-1 <../hw-reference/esp32/user-guide-devkitm-1>
114
115.. only:: esp32s2
116
117    .. toctree::
118        :maxdepth: 1
119
120        ESP32-S2-Saola-1 <../hw-reference/esp32s2/user-guide-saola-1-v1.2>
121        ESP32-S2-DevKitM-1(U) <../hw-reference/esp32s2/user-guide-devkitm-1-v1>
122        ESP32-S2-DevKitC-1 <../hw-reference/esp32s2/user-guide-s2-devkitc-1>
123        ESP32-S2-Kaluga-Kit <../hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit>
124
125.. only:: esp32c3
126
127    .. toctree::
128        :maxdepth: 1
129
130        ESP32-C3-DevKitM-1 <../hw-reference/esp32c3/user-guide-devkitm-1>
131        ESP32-C3-DevKitC-02 <../hw-reference/esp32c3/user-guide-devkitc-02>
132
133
134.. only:: esp32s3
135
136    .. toctree::
137        :maxdepth: 1
138
139        ESP32-S3-DevKitC-1 <../hw-reference/esp32s3/user-guide-devkitc-1>
140
141
142.. _get-started-step-by-step:
143
144Installation Step by Step
145=========================
146
147This is a detailed roadmap to walk you through the installation process.
148
149Setting up Development Environment
150~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
151
152* :ref:`get-started-get-prerequisites` for :doc:`Windows <windows-setup>`, :doc:`Linux <linux-setup>`, or :doc:`macOS <macos-setup>`
153* :ref:`get-started-get-esp-idf`
154* :ref:`get-started-set-up-tools`
155* :ref:`get-started-set-up-env`
156
157Creating Your First Project
158~~~~~~~~~~~~~~~~~~~~~~~~~~~
159
160* :ref:`get-started-start-project`
161* :ref:`get-started-connect`
162* :ref:`get-started-configure`
163* :ref:`get-started-build`
164* :ref:`get-started-flash`
165* :ref:`get-started-build-monitor`
166
167
168.. _get-started-get-prerequisites:
169
170Step 1. Install prerequisites
171=============================
172
173Some tools need to be installed on the computer before proceeding to the next steps. Follow the links below for the instructions for your OS:
174
175.. toctree::
176    :hidden:
177
178    Windows <windows-setup>
179    Linux <linux-setup>
180    macOS <macos-setup>
181
182+-------------------+-------------------+-------------------+
183| |windows-logo|    | |linux-logo|      | |macos-logo|      |
184+-------------------+-------------------+-------------------+
185| `Windows`_        | `Linux`_          | `Mac OS`_         |
186+-------------------+-------------------+-------------------+
187
188.. |windows-logo| image:: ../../_static/windows-logo.png
189    :target: ../get-started/windows-setup.html
190
191.. |linux-logo| image:: ../../_static/linux-logo.png
192    :target: ../get-started/linux-setup.html
193
194.. |macos-logo| image:: ../../_static/macos-logo.png
195    :target: ../get-started/macos-setup.html
196
197.. _Windows: ../get-started/windows-setup.html
198.. _Linux: ../get-started/linux-setup.html
199.. _Mac OS: ../get-started/macos-setup.html
200
201.. note::
202
203    This guide uses the directory ``~/esp`` on Linux and macOS or ``%userprofile%\esp`` on Windows as an installation folder for ESP-IDF. You can use any directory, but you will need to adjust paths for the commands respectively. Keep in mind that ESP-IDF does not support spaces in paths.
204
205.. _get-started-get-esp-idf:
206
207Step 2. Get ESP-IDF
208===================
209
210To build applications for the {IDF_TARGET_NAME}, you need the software libraries provided by Espressif in `ESP-IDF repository <https://github.com/espressif/esp-idf>`_.
211
212To get ESP-IDF, navigate to your installation directory and clone the repository with ``git clone``, following instructions below specific to your operating system.
213
214Linux and macOS
215~~~~~~~~~~~~~~~
216
217Open Terminal, and run the following commands:
218
219.. include-build-file:: inc/git-clone-bash.inc
220
221ESP-IDF will be downloaded into ``~/esp/esp-idf``.
222
223Consult :doc:`/versions` for information about which ESP-IDF version to use in a given situation.
224
225Windows
226~~~~~~~
227
228In addition to installing the tools, :ref:`get-started-windows-tools-installer` for Windows introduced in Step 1 can also download a copy of ESP-IDF.
229
230Consult :doc:`/versions` for information about which ESP-IDF version to use in a given situation.
231
232If you wish to download ESP-IDF without the help of ESP-IDF Tools Installer, refer to these :ref:`instructions <get-esp-idf-windows-command-line>`.
233
234.. _get-started-set-up-tools:
235
236Step 3. Set up the tools
237========================
238
239Aside from the ESP-IDF, you also need to install the tools used by ESP-IDF, such as the compiler, debugger, Python packages, etc.
240
241Windows
242~~~~~~~
243
244:ref:`get-started-windows-tools-installer` for Windows introduced in Step 1 installs all the required tools.
245
246If you want to install the tools without the help of ESP-IDF Tools Installer, open the Command Prompt and follow these steps:
247
248.. code-block:: batch
249
250    cd %userprofile%\esp\esp-idf
251    install.bat {IDF_TARGET_PATH_NAME}
252
253or with Windows PowerShell
254
255.. code-block:: powershell
256
257    cd ~/esp/esp-idf
258    ./install.ps1 {IDF_TARGET_PATH_NAME}
259
260Linux and macOS
261~~~~~~~~~~~~~~~
262
263.. code-block:: bash
264
265    cd ~/esp/esp-idf
266    ./install.sh {IDF_TARGET_PATH_NAME}
267
268or with Fish shell
269
270.. code-block:: fish
271
272    cd ~/esp/esp-idf
273    ./install.fish {IDF_TARGET_PATH_NAME}
274
275.. note::
276    To install tools for multiple targets you can specify those targets at once. For example: ``./install.sh esp32,esp32c3,esp32s3``.
277    To install tools for all supported targets, run the script without specifying targets ``./install.sh`` or use ``./install.sh all``.
278
279Alternative File Downloads
280~~~~~~~~~~~~~~~~~~~~~~~~~~
281
282The tools installer downloads a number of files attached to GitHub Releases. If accessing GitHub is slow then it is possible to set an environment variable to prefer Espressif's download server for GitHub asset downloads.
283
284.. note:: This setting only controls individual tools downloaded from GitHub releases, it doesn't change the URLs used to access any Git repositories.
285
286Windows
287-------
288
289To prefer the Espressif download server when running the ESP-IDF Tools Installer, mark the **Use Espressif download mirror instead of GitHub** in the screen **Select Components** section **Optimization**.
290
291Linux and macOS
292---------------
293
294To prefer the Espressif download server when installing tools, use the following sequence of commands when running ``install.sh``:
295
296.. code-block:: bash
297
298    cd ~/esp/esp-idf
299    export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
300    ./install.sh
301
302Customizing the tools installation path
303~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
304
305The scripts introduced in this step install compilation tools required by ESP-IDF inside the user home directory: ``$HOME/.espressif`` on Linux and macOS, ``%USERPROFILE%\.espressif`` on Windows. If you wish to install the tools into a different directory, set the environment variable ``IDF_TOOLS_PATH`` before running the installation scripts. Make sure that your user account has sufficient permissions to read and write this path.
306
307If changing the ``IDF_TOOLS_PATH``, make sure it is set to the same value every time the Install script (``install.bat``, ``install.ps1`` or ``install.sh``) and an Export script (``export.bat``, ``export.ps1`` or ``export.sh``) are executed.
308
309.. _get-started-set-up-env:
310
311
312Step 4. Set up the environment variables
313========================================
314
315The installed tools are not yet added to the PATH environment variable. To make the tools usable from the command line, some environment variables must be set. ESP-IDF provides another script which does that.
316
317Windows
318~~~~~~~
319
320:ref:`get-started-windows-tools-installer` for Windows creates an "ESP-IDF Command Prompt" shortcut in the Start Menu. This shortcut opens the Command Prompt and sets up all the required environment variables. You can open this shortcut and proceed to the next step.
321
322Alternatively, if you want to use ESP-IDF in an existing Command Prompt window, you can run:
323
324.. code-block:: batch
325
326    %userprofile%\esp\esp-idf\export.bat
327
328or with Windows PowerShell
329
330.. code-block:: powershell
331
332    .$HOME/esp/esp-idf/export.ps1
333
334.. _get-started-export:
335
336Linux and macOS
337~~~~~~~~~~~~~~~
338
339In the terminal where you are going to use ESP-IDF, run:
340
341.. code-block:: bash
342
343    . $HOME/esp/esp-idf/export.sh
344
345or for fish (supported only since fish version 3.0.0):
346
347.. code-block:: bash
348
349    . $HOME/esp/esp-idf/export.fish
350
351Note the space between the leading dot and the path!
352
353If you plan to use esp-idf frequently, you can create an alias for executing ``export.sh``:
354
3551.  Copy and paste the following command to your shell's profile (``.profile``, ``.bashrc``, ``.zprofile``, etc.)
356
357    .. code-block:: bash
358
359        alias get_idf='. $HOME/esp/esp-idf/export.sh'
360
3612.  Refresh the configuration by restarting the terminal session or by running ``source [path to profile]``, for example, ``source ~/.bashrc``.
362
363Now you can run ``get_idf`` to set up or refresh the esp-idf environment in any terminal session.
364
365Technically, you can add ``export.sh`` to your shell's profile directly; however, it is not recommended. Doing so activates IDF virtual environment in every terminal session (including those where IDF is not needed), defeating the purpose of the virtual environment and likely affecting other software.
366
367.. _get-started-start-project:
368
369Step 5. Start a Project
370=======================
371
372Now 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 IDF.
373
374Copy the project :example:`get-started/hello_world` to ``~/esp`` directory:
375
376Linux and macOS
377~~~~~~~~~~~~~~~
378
379.. code-block:: bash
380
381    cd ~/esp
382    cp -r $IDF_PATH/examples/get-started/hello_world .
383
384Windows
385~~~~~~~
386
387.. code-block:: batch
388
389    cd %userprofile%\esp
390    xcopy /e /i %IDF_PATH%\examples\get-started\hello_world hello_world
391
392There 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.
393
394.. important::
395
396    The ESP-IDF build system does not support spaces in the paths to either ESP-IDF or to projects.
397
398.. _get-started-connect:
399
400Step 6. Connect Your Device
401===========================
402
403Now connect your {IDF_TARGET_NAME} board to the computer and check under what serial port the board is visible.
404
405Serial ports have the following patterns in their names:
406
407- **Windows**: names like ``COM1``
408- **Linux**: starting with ``/dev/tty``
409- **macOS**: starting with ``/dev/cu.``
410
411If you are not sure how to check the serial port name, please refer to :doc:`establish-serial-connection` for full details.
412
413.. note::
414
415    Keep the port name handy as you will need it in the next steps.
416
417
418.. _get-started-configure:
419
420Step 7. Configure
421=================
422
423Navigate to your ``hello_world`` directory from :ref:`get-started-start-project`, set {IDF_TARGET_NAME} chip as the target and run the project configuration utility ``menuconfig``.
424
425Linux and macOS
426~~~~~~~~~~~~~~~
427
428.. code-block:: bash
429
430    cd ~/esp/hello_world
431    idf.py set-target {IDF_TARGET_PATH_NAME}
432    idf.py menuconfig
433
434Windows
435~~~~~~~
436
437.. code-block:: batch
438
439    cd %userprofile%\esp\hello_world
440    idf.py set-target {IDF_TARGET_PATH_NAME}
441    idf.py menuconfig
442
443Setting the target with ``idf.py set-target {IDF_TARGET_PATH_NAME}`` should be done once, after opening a new project. If the project contains some existing builds and configuration, they will be cleared and initialized. The target may be saved in environment variable to skip this step at all. See :ref:`selecting-idf-target` for additional information.
444
445If the previous steps have been done correctly, the following menu appears:
446
447.. figure:: ../../_static/project-configuration.png
448    :align: center
449    :alt: Project configuration - Home window
450    :figclass: align-center
451
452    Project configuration - Home window
453
454You 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_word". This example will run with default configuration.
455
456.. only:: esp32
457
458    .. attention::
459
460        If you use ESP32-DevKitC board with the **ESP32-SOLO-1** module, or ESP32-DevKitM-1 board with the **ESP32-MIN1-1(1U)** module, enable single core mode (:ref:`CONFIG_FREERTOS_UNICORE`) in menuconfig before flashing examples.
461
462.. note::
463
464    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.
465
466.. _get-started-build:
467
468Step 8. Build the Project
469=========================
470
471Build the project by running:
472
473.. code-block:: batch
474
475    idf.py build
476
477This command will compile the application and all ESP-IDF components, then it will generate the bootloader, partition table, and application binaries.
478
479.. code-block:: none
480
481   $ idf.py build
482   Running cmake in directory /path/to/hello_world/build
483   Executing "cmake -G Ninja --warn-uninitialized /path/to/hello_world"...
484   Warn about uninitialized values.
485   -- Found Git: /usr/bin/git (found version "2.17.0")
486   -- Building empty aws_iot component due to configuration
487   -- Component names: ...
488   -- Component paths: ...
489
490   ... (more lines of build system output)
491
492   [527/527] Generating hello_world.bin
493   esptool.py v2.3.1
494
495   Project build complete. To flash, run this command:
496   ../../../components/esptool_py/esptool/esptool.py -p (PORT) -b 921600 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x10000 build/hello_world.bin  build 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin
497   or run 'idf.py -p PORT flash'
498
499If there are no errors, the build will finish by generating the firmware binary .bin files.
500
501
502.. _get-started-flash:
503
504Step 9. Flash onto the Device
505=============================
506
507Flash the binaries that you just built (bootloader.bin, partition-table.bin and hello_world.bin) onto your {IDF_TARGET_NAME} board by running:
508
509.. code-block:: bash
510
511    idf.py -p PORT [-b BAUD] flash
512
513Replace PORT with your {IDF_TARGET_NAME} board's serial port name from :ref:`get-started-connect`.
514
515You can also change the flasher baud rate by replacing BAUD with the baud rate you need. The default baud rate is ``460800``.
516
517For more information on idf.py arguments, see :ref:`idf.py`.
518
519.. note::
520
521    The option ``flash`` automatically builds and flashes the project, so running ``idf.py build`` is not necessary.
522
523
524Encountered Issues While Flashing?
525~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
526{IDF_TARGET_STRAP_GPIO:default="GPIO0", esp32="GPIO0", esp32s2="GPIO0", esp32s3="GPIO0", esp32c3="GPIO9"}
527
528If you run the given command and see errors such as "Failed to connect", there might be several reasons for this. One of the reasons might be issues encountered by ``esptool.py``, the utility that is called by the build system to reset the chip, interact with the ROM bootloader, and flash firmware. One simple solution to try is manual reset described below, and if it does not help you can find more details about possible issues in `Troubleshooting <https://github.com/espressif/esptool#bootloader-wont-respond>`_.
529
530``esptool.py`` resets {IDF_TARGET_NAME} automatically by asserting DTR and RTS control lines of the USB to serial converter chip, i.e., FTDI or CP210x (for more information, see :doc:`establish-serial-connection`). The DTR and RTS control lines are in turn connected to ``{IDF_TARGET_STRAP_GPIO}`` and ``CHIP_PU`` (EN) pins of {IDF_TARGET_NAME}, thus changes in the voltage levels of DTR and RTS will boot {IDF_TARGET_NAME} into Firmware Download mode. As an example, check the `schematic <https://dl.espressif.com/dl/schematics/esp32_devkitc_v4-sch-20180607a.pdf>`_ for the ESP32 DevKitC development board.
531
532In general, you should have no problems with the official esp-idf development boards. However, ``esptool.py`` is not able to reset your hardware automatically in the following cases:
533
534- Your hardware does not have the DTR and RTS lines connected to ``{IDF_TARGET_STRAP_GPIO}`` and ``CHIP_PU``
535- The DTR and RTS lines are configured differently
536- There are no such serial control lines at all
537
538Depending on the kind of hardware you have, it may also be possible to manually put your {IDF_TARGET_NAME} board into Firmware Download mode (reset).
539
540- For development boards produced by Espressif, this information can be found in the respective getting started guides or user guides. For example, to manually reset an esp-idf development board, hold down the **Boot** button (``{IDF_TARGET_STRAP_GPIO}``) and press the **EN** button (``CHIP_PU``).
541- For other types of hardware, try pulling ``{IDF_TARGET_STRAP_GPIO}`` down.
542
543
544Normal Operation
545~~~~~~~~~~~~~~~~
546
547When flashing, you will see the output log similar to the following:
548
549.. only:: esp32
550
551    .. code-block:: none
552
553        ...
554        esptool.py --chip esp32 -p /dev/ttyUSB0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size 2MB 0x8000 partition_table/partition-table.bin 0x1000 bootloader/bootloader.bin 0x10000 hello_world.bin
555        esptool.py v3.0-dev
556        Serial port /dev/ttyUSB0
557        Connecting........_
558        Chip is ESP32D0WDQ6 (revision 0)
559        Features: WiFi, BT, Dual Core, Coding Scheme None
560        Crystal is 40MHz
561        MAC: 24:0a:c4:05:b9:14
562        Uploading stub...
563        Running stub...
564        Stub running...
565        Changing baud rate to 460800
566        Changed.
567        Configuring flash size...
568        Compressed 3072 bytes to 103...
569        Writing at 0x00008000... (100 %)
570        Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 5962.8 kbit/s)...
571        Hash of data verified.
572        Compressed 26096 bytes to 15408...
573        Writing at 0x00001000... (100 %)
574        Wrote 26096 bytes (15408 compressed) at 0x00001000 in 0.4 seconds (effective 546.7 kbit/s)...
575        Hash of data verified.
576        Compressed 147104 bytes to 77364...
577        Writing at 0x00010000... (20 %)
578        Writing at 0x00014000... (40 %)
579        Writing at 0x00018000... (60 %)
580        Writing at 0x0001c000... (80 %)
581        Writing at 0x00020000... (100 %)
582        Wrote 147104 bytes (77364 compressed) at 0x00010000 in 1.9 seconds (effective 615.5 kbit/s)...
583        Hash of data verified.
584
585        Leaving...
586        Hard resetting via RTS pin...
587        Done
588
589.. only:: esp32s2
590
591    .. code-block:: none
592
593        ...
594        esptool.py --chip esp32s2 -p /dev/ttyUSB0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size 2MB 0x8000 partition_table/partition-table.bin 0x1000 bootloader/bootloader.bin 0x10000 hello_world.bin
595        esptool.py v3.0-dev
596        Serial port /dev/ttyUSB0
597        Connecting....
598        Chip is ESP32-S2
599        Features: WiFi
600        Crystal is 40MHz
601        MAC: 18:fe:34:72:50:e3
602        Uploading stub...
603        Running stub...
604        Stub running...
605        Changing baud rate to 460800
606        Changed.
607        Configuring flash size...
608        Compressed 3072 bytes to 103...
609        Writing at 0x00008000... (100 %)
610        Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 3851.6 kbit/s)...
611        Hash of data verified.
612        Compressed 22592 bytes to 13483...
613        Writing at 0x00001000... (100 %)
614        Wrote 22592 bytes (13483 compressed) at 0x00001000 in 0.3 seconds (effective 595.1 kbit/s)...
615        Hash of data verified.
616        Compressed 140048 bytes to 70298...
617        Writing at 0x00010000... (20 %)
618        Writing at 0x00014000... (40 %)
619        Writing at 0x00018000... (60 %)
620        Writing at 0x0001c000... (80 %)
621        Writing at 0x00020000... (100 %)
622        Wrote 140048 bytes (70298 compressed) at 0x00010000 in 1.7 seconds (effective 662.5 kbit/s)...
623        Hash of data verified.
624
625        Leaving...
626        Hard resetting via RTS pin...
627        Done
628
629.. only:: esp32s3
630
631    .. code-block:: none
632
633        ...
634        esptool.py esp32s3 -p /dev/ttyUSB0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 2MB 0x0 bootloader/bootloader.bin 0x10000 hello_world.bin 0x8000 partition_table/partition-table.bin
635        esptool.py v3.2-dev
636        Serial port /dev/ttyUSB0
637        Connecting....
638        Chip is ESP32-S3
639        Features: WiFi, BLE
640        Crystal is 40MHz
641        MAC: 7c:df:a1:e0:00:64
642        Uploading stub...
643        Running stub...
644        Stub running...
645        Changing baud rate to 460800
646        Changed.
647        Configuring flash size...
648        Flash will be erased from 0x00000000 to 0x00004fff...
649        Flash will be erased from 0x00010000 to 0x00039fff...
650        Flash will be erased from 0x00008000 to 0x00008fff...
651        Compressed 18896 bytes to 11758...
652        Writing at 0x00000000... (100 %)
653        Wrote 18896 bytes (11758 compressed) at 0x00000000 in 0.5 seconds (effective 279.9 kbit/s)...
654        Hash of data verified.
655        Compressed 168208 bytes to 88178...
656        Writing at 0x00010000... (16 %)
657        Writing at 0x0001a80f... (33 %)
658        Writing at 0x000201f1... (50 %)
659        Writing at 0x00025dcf... (66 %)
660        Writing at 0x0002d0be... (83 %)
661        Writing at 0x00036c07... (100 %)
662        Wrote 168208 bytes (88178 compressed) at 0x00010000 in 2.4 seconds (effective 569.2 kbit/s)...
663        Hash of data verified.
664        Compressed 3072 bytes to 103...
665        Writing at 0x00008000... (100 %)
666        Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.1 seconds (effective 478.9 kbit/s)...
667        Hash of data verified.
668
669        Leaving...
670        Hard resetting via RTS pin...
671        Done
672
673
674.. only:: esp32c3
675
676    .. code-block:: none
677
678        ...
679        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
680        esptool.py v3.0
681        Serial port /dev/ttyUSB0
682        Connecting....
683        Chip is ESP32-C3
684        Features: Wi-Fi
685        Crystal is 40MHz
686        MAC: 7c:df:a1:40:02:a4
687        Uploading stub...
688        Running stub...
689        Stub running...
690        Changing baud rate to 460800
691        Changed.
692        Configuring flash size...
693        Compressed 3072 bytes to 103...
694        Writing at 0x00008000... (100 %)
695        Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 4238.1 kbit/s)...
696        Hash of data verified.
697        Compressed 18960 bytes to 11311...
698        Writing at 0x00000000... (100 %)
699        Wrote 18960 bytes (11311 compressed) at 0x00000000 in 0.3 seconds (effective 584.9 kbit/s)...
700        Hash of data verified.
701        Compressed 145520 bytes to 71984...
702        Writing at 0x00010000... (20 %)
703        Writing at 0x00014000... (40 %)
704        Writing at 0x00018000... (60 %)
705        Writing at 0x0001c000... (80 %)
706        Writing at 0x00020000... (100 %)
707        Wrote 145520 bytes (71984 compressed) at 0x00010000 in 2.3 seconds (effective 504.4 kbit/s)...
708        Hash of data verified.
709
710        Leaving...
711        Hard resetting via RTS pin...
712        Done
713
714
715If there are no issues by the end of the flash process, the board will reboot and start up the “hello_world” application.
716
717If you'd like to use the Eclipse or VS Code IDE instead of running ``idf.py``, check out the :doc:`Eclipse guide <eclipse-setup>`, :doc:`VS Code guide <vscode-setup>`.
718
719
720.. _get-started-build-monitor:
721
722Step 10. Monitor
723================
724
725To check if "hello_world" is indeed running, type ``idf.py -p PORT monitor`` (Do not forget to replace PORT with your serial port name).
726
727This command launches the :doc:`IDF Monitor <../api-guides/tools/idf-monitor>` application::
728
729    $ idf.py -p /dev/ttyUSB0 monitor
730    Running idf_monitor in directory [...]/esp/hello_world/build
731    Executing "python [...]/esp-idf/tools/idf_monitor.py -b 115200 [...]/esp/hello_world/build/hello_world.elf"...
732    --- idf_monitor on /dev/ttyUSB0 115200 ---
733    --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
734    ets Jun  8 2016 00:22:57
735
736    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
737    ets Jun  8 2016 00:22:57
738    ...
739
740After startup and diagnostic logs scroll up, you should see "Hello world!" printed out by the application.
741
742.. code-block:: none
743
744    	...
745    	Hello world!
746    	Restarting in 10 seconds...
747    	This is {IDF_TARGET_PATH_NAME} chip with {IDF_TARGET_CORE_NUM} CPU core(s), {IDF_TARGET_FEATURES}
748	Minimum free heap size: {IDF_TARGET_HEAP_SIZE} bytes
749    	Restarting in 9 seconds...
750    	Restarting in 8 seconds...
751    	Restarting in 7 seconds...
752
753To exit IDF monitor use the shortcut ``Ctrl+]``.
754
755.. only:: esp32
756
757    If IDF monitor fails shortly after the upload, or, if instead of the messages above, you see random garbage similar to what is given below, your board is likely using a 26 MHz crystal. Most development board designs use 40 MHz, so ESP-IDF uses this frequency as a default value.
758
759    .. figure:: ../../_static/get-started-garbled-output.png
760        :align: center
761        :alt: Garbled output
762        :figclass: align-center
763
764    If you have such a problem, do the following:
765
766    1. Exit the monitor.
767    2. Go back to :ref:`menuconfig <get-started-configure>`.
768    3. Go to Component config --> ESP32-specific --> Main XTAL frequency, then change :ref:`CONFIG_ESP32_XTAL_FREQ_SEL` to 26 MHz.
769    4. After that, :ref:`build and flash <get-started-flash>` the application again.
770
771.. note::
772
773    You can combine building, flashing and monitoring into one step by running::
774
775       idf.py -p PORT flash monitor
776
777.. only:: esp32s3
778
779    .. note::
780
781        If a board with Octal Flash resets before the second-stage bootloader, please refer to :ref:`Octal Flash Error Handling <flash-psram-error>`
782
783See also:
784
785- :doc:`IDF Monitor <../api-guides/tools/idf-monitor>` for handy shortcuts and more details on using IDF monitor.
786- :ref:`idf.py` for a full reference of ``idf.py`` commands and options.
787
788**That's all that you need to get started with {IDF_TARGET_NAME}!**
789
790Now you are ready to try some other :idf:`examples`, or go straight to developing your own applications.
791
792.. important::
793
794    Some of examples do not support {IDF_TARGET_NAME} because required hardware is not included in {IDF_TARGET_NAME} so it cannot be supported.
795
796    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}.
797
798
799Updating ESP-IDF
800================
801
802You should update ESP-IDF from time to time, as newer versions fix bugs and provide new features. The simplest way to do the update is to delete the existing ``esp-idf`` folder and clone it again, as if performing the initial installation described in :ref:`get-started-get-esp-idf`.
803
804Another solution is to update only what has changed. :ref:`The update procedure depends on the version of ESP-IDF you are using <updating>`.
805
806After updating ESP-IDF, execute the Install script again, in case the new ESP-IDF version requires different versions of tools. See instructions at :ref:`get-started-set-up-tools`.
807
808Once the new tools are installed, update the environment using the Export script. See instructions at :ref:`get-started-set-up-env`.
809
810Related Documents
811=================
812
813.. toctree::
814    :maxdepth: 1
815
816    establish-serial-connection
817    eclipse-setup
818    vscode-setup
819    ../api-guides/tools/idf-monitor
820    toolchain-setup-scratch
821    :esp32: ../get-started-legacy/index
822
823.. _Stable version: https://docs.espressif.com/projects/esp-idf/en/stable/
824.. _Releases page: https://github.com/espressif/esp-idf/releases
825