From eddc94f6bf0c30316fc3b29474d98190df4d1334 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Wed, 16 Jun 2021 20:13:46 +0100 Subject: [PATCH 01/38] Added docs structure using sphinx --- docs/Makefile | 20 +++++++++++++++++++ docs/conf.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 20 +++++++++++++++++++ docs/make.bat | 35 +++++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/make.bat diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000000..d4bb2cbb9ed --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000000..4473b34671a --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,52 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'arduino-esp32' +copyright = '2021, Espressif Systems' +author = 'Espressif Systems' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000000..5b9b8973914 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,20 @@ +.. arduino-esp32 documentation master file, created by + sphinx-quickstart on Wed Jun 16 20:08:02 2021. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to arduino-esp32's documentation! +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000000..2119f51099b --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd From 5821d3c06be0a05585cb53b773ea40a488259b5c Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Fri, 18 Jun 2021 18:17:15 +0100 Subject: [PATCH 02/38] Added docs/_build folder to gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 14ef5315550..3307fabed11 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,10 @@ tools/esptool.exe tools/mkspiffs tools/mklittlefs .DS_Store - + +# Ignore docs build +docs/_build + #Ignore files built by Visual Studio/Visual Micro [Dd]ebug*/ [Rr]elease*/ From b67a5e5e5777e46ebcffb12eac0c641a2fa0a108 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 21 Jun 2021 10:01:18 +0100 Subject: [PATCH 03/38] Added docs initial structure --- .gitignore | 7 ++++--- docs/Makefile | 4 ++-- docs/index.rst | 20 ------------------ docs/make.bat | 4 ++-- docs/source/boards/boards.rst | 20 ++++++++++++++++++ docs/source/boards/esp32-c3-devkit.rst | 2 ++ docs/source/boards/esp32-devkitC.rst | 2 ++ docs/{ => source}/conf.py | 28 ++++++++++++++++++-------- docs/source/getting_started.rst | 5 +++++ docs/source/index.rst | 13 ++++++++++++ docs/source/installing.rst | 5 +++++ docs/source/libraries.rst | 5 +++++ 12 files changed, 80 insertions(+), 35 deletions(-) delete mode 100644 docs/index.rst create mode 100644 docs/source/boards/boards.rst create mode 100644 docs/source/boards/esp32-c3-devkit.rst create mode 100644 docs/source/boards/esp32-devkitC.rst rename docs/{ => source}/conf.py (78%) create mode 100644 docs/source/getting_started.rst create mode 100644 docs/source/index.rst create mode 100644 docs/source/installing.rst create mode 100644 docs/source/libraries.rst diff --git a/.gitignore b/.gitignore index 3307fabed11..b8b2d61eac8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,9 +8,6 @@ tools/mkspiffs tools/mklittlefs .DS_Store -# Ignore docs build -docs/_build - #Ignore files built by Visual Studio/Visual Micro [Dd]ebug*/ [Rr]elease*/ @@ -21,3 +18,7 @@ __vm/ platform.sloeber.txt boards.sloeber.txt tools/mklittlefs + +# Ignore docs build (Sphinx) +docs/_build +docs/build diff --git a/docs/Makefile b/docs/Makefile index d4bb2cbb9ed..d0c3cbf1020 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -5,8 +5,8 @@ # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build +SOURCEDIR = source +BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 5b9b8973914..00000000000 --- a/docs/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. arduino-esp32 documentation master file, created by - sphinx-quickstart on Wed Jun 16 20:08:02 2021. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to arduino-esp32's documentation! -========================================= - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/make.bat b/docs/make.bat index 2119f51099b..6247f7e2317 100644 --- a/docs/make.bat +++ b/docs/make.bat @@ -7,8 +7,8 @@ REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) -set SOURCEDIR=. -set BUILDDIR=_build +set SOURCEDIR=source +set BUILDDIR=build if "%1" == "" goto help diff --git a/docs/source/boards/boards.rst b/docs/source/boards/boards.rst new file mode 100644 index 00000000000..f33fe918a58 --- /dev/null +++ b/docs/source/boards/boards.rst @@ -0,0 +1,20 @@ +Boards +====== + +Espressif Boards +---------------- + +ESP32 +----- + +- ESP32-DevKitC-1 + +ESP32-S2 +-------- + +- ESP32-S2-Saola-1 + +ESP32-C3 +-------- + +- ESP32-C3-DevKitM-1 diff --git a/docs/source/boards/esp32-c3-devkit.rst b/docs/source/boards/esp32-c3-devkit.rst new file mode 100644 index 00000000000..2c14b215571 --- /dev/null +++ b/docs/source/boards/esp32-c3-devkit.rst @@ -0,0 +1,2 @@ +ESP32-C3-DevKit +=============== diff --git a/docs/source/boards/esp32-devkitC.rst b/docs/source/boards/esp32-devkitC.rst new file mode 100644 index 00000000000..41833502da4 --- /dev/null +++ b/docs/source/boards/esp32-devkitC.rst @@ -0,0 +1,2 @@ +ESP32-DevKit +============ diff --git a/docs/conf.py b/docs/source/conf.py similarity index 78% rename from docs/conf.py rename to docs/source/conf.py index 4473b34671a..70b3cec4309 100644 --- a/docs/conf.py +++ b/docs/source/conf.py @@ -10,16 +10,19 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -# import os -# import sys +import os +import sys # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- -project = 'arduino-esp32' -copyright = '2021, Espressif Systems' -author = 'Espressif Systems' +project = 'Arduino-ESP32' +copyright = '2021, Espressif' +author = 'Espressif' + +# The full version, including alpha/beta/rc tags +release = '2.0.0' # -- General configuration --------------------------------------------------- @@ -33,10 +36,19 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = [] # -- Options for HTML output ------------------------------------------------- @@ -44,9 +56,9 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = 'default' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] \ No newline at end of file +html_static_path = ['_static'] diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst new file mode 100644 index 00000000000..58223538734 --- /dev/null +++ b/docs/source/getting_started.rst @@ -0,0 +1,5 @@ +Getting Started +=============== + +About Arduino ESP32 +------------------- diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000000..1a010aeecf7 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,13 @@ +Welcome to ESP32 Arduino Core's documentation +================================================ + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + Getting Started + Installing + Boards + ESP32 DevKit + ESP32-C3 DevKit + Libraries diff --git a/docs/source/installing.rst b/docs/source/installing.rst new file mode 100644 index 00000000000..f5a62e4d82b --- /dev/null +++ b/docs/source/installing.rst @@ -0,0 +1,5 @@ +Installing +========== + +Boards Manager +-------------- diff --git a/docs/source/libraries.rst b/docs/source/libraries.rst new file mode 100644 index 00000000000..41bc289e478 --- /dev/null +++ b/docs/source/libraries.rst @@ -0,0 +1,5 @@ +Libraries +========= + +Index +----- From 57df5bbd15e7fa83fc9d9f0deb4e07d7ee8d0017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Barto=C5=A1ka?= <76958047+VojtechBartoska@users.noreply.github.com> Date: Fri, 25 Jun 2021 16:50:23 +0200 Subject: [PATCH 04/38] Adding Documentation - Boards_manager.rst First try of upload Documentation for Readthedocs project. Boards Manager Documentation. --- docs/boards_manager.rst | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/boards_manager.rst diff --git a/docs/boards_manager.rst b/docs/boards_manager.rst new file mode 100644 index 00000000000..c1e8d64e1ec --- /dev/null +++ b/docs/boards_manager.rst @@ -0,0 +1,25 @@ +Installation instructions using Arduino IDE Boards Manager +---------------------------------------------------------- + +========================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Stable release link: + ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json`` +- Development release link: + ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json`` + +Starting with 1.6.4, Arduino allows installation of third-party platform +packages using Boards Manager. We have packages available for Windows, +Mac OS, and Linux (x86, amd64, armhf and arm64). + +- Install the current upstream Arduino IDE at the 1.8 level or later. + The current version is at the `Arduino + website `__. +- Start Arduino and open Preferences window. +- Enter one of the release links above into *Additional Board Manager + URLs* field. You can add multiple URLs, separating them with commas. +- Open Boards Manager from Tools > Board menu and install *esp32* + platform (and do not forget to select your ESP32 board from Tools > + Board menu after installation). + From d7d08e2a2a2d190e2a323051ac8bc6d0c7fed8ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Barto=C5=A1ka?= <76958047+VojtechBartoska@users.noreply.github.com> Date: Fri, 25 Jun 2021 17:40:43 +0200 Subject: [PATCH 05/38] Adding Boards_Manager.rst Doc Upload into Readthedocs project --- docs/source/boards_manager.rst | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/source/boards_manager.rst diff --git a/docs/source/boards_manager.rst b/docs/source/boards_manager.rst new file mode 100644 index 00000000000..c1e8d64e1ec --- /dev/null +++ b/docs/source/boards_manager.rst @@ -0,0 +1,25 @@ +Installation instructions using Arduino IDE Boards Manager +---------------------------------------------------------- + +========================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Stable release link: + ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json`` +- Development release link: + ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json`` + +Starting with 1.6.4, Arduino allows installation of third-party platform +packages using Boards Manager. We have packages available for Windows, +Mac OS, and Linux (x86, amd64, armhf and arm64). + +- Install the current upstream Arduino IDE at the 1.8 level or later. + The current version is at the `Arduino + website `__. +- Start Arduino and open Preferences window. +- Enter one of the release links above into *Additional Board Manager + URLs* field. You can add multiple URLs, separating them with commas. +- Open Boards Manager from Tools > Board menu and install *esp32* + platform (and do not forget to select your ESP32 board from Tools > + Board menu after installation). + From c78fd3e9972cc768d5c4295fc03b3a2f1bc691aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Barto=C5=A1ka?= <76958047+VojtechBartoska@users.noreply.github.com> Date: Fri, 25 Jun 2021 17:42:47 +0200 Subject: [PATCH 06/38] Delete boards_manager.rst --- docs/boards_manager.rst | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 docs/boards_manager.rst diff --git a/docs/boards_manager.rst b/docs/boards_manager.rst deleted file mode 100644 index c1e8d64e1ec..00000000000 --- a/docs/boards_manager.rst +++ /dev/null @@ -1,25 +0,0 @@ -Installation instructions using Arduino IDE Boards Manager ----------------------------------------------------------- - -========================================================== -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- Stable release link: - ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json`` -- Development release link: - ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json`` - -Starting with 1.6.4, Arduino allows installation of third-party platform -packages using Boards Manager. We have packages available for Windows, -Mac OS, and Linux (x86, amd64, armhf and arm64). - -- Install the current upstream Arduino IDE at the 1.8 level or later. - The current version is at the `Arduino - website `__. -- Start Arduino and open Preferences window. -- Enter one of the release links above into *Additional Board Manager - URLs* field. You can add multiple URLs, separating them with commas. -- Open Boards Manager from Tools > Board menu and install *esp32* - platform (and do not forget to select your ESP32 board from Tools > - Board menu after installation). - From b6c2759ee14360485dc26df6c3d2419f8b32cc80 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Fri, 25 Jun 2021 18:48:53 +0100 Subject: [PATCH 07/38] Added boards description (pin and images) and moved boards manager instructions --- README.md | 8 -- docs/boards_manager.rst | 25 ------- docs/{ => source/_static}/esp32_pinmap.png | Bin docs/{ => source/_static}/esp32c3_pinmap.png | Bin docs/{ => source/_static}/esp32s2_pinmap.png | Bin docs/source/boards/ESP32-C3-DevKitM-1.rst | 60 +++++++++++++++ docs/source/boards/ESP32-DevKitC-1.rst | 70 ++++++++++++++++++ docs/source/boards/ESP32-S2-Saola-1.rst | 74 +++++++++++++++++++ docs/source/boards/boards.rst | 20 ++--- docs/source/boards/esp32-c3-devkit.rst | 2 - docs/source/boards/esp32-devkitC.rst | 2 - docs/source/getting_started.rst | 6 ++ docs/source/index.rst | 2 - docs/source/installing.rst | 35 ++++++++- docs/source/libraries.rst | 3 + 15 files changed, 254 insertions(+), 53 deletions(-) delete mode 100644 docs/boards_manager.rst rename docs/{ => source/_static}/esp32_pinmap.png (100%) rename docs/{ => source/_static}/esp32c3_pinmap.png (100%) rename docs/{ => source/_static}/esp32s2_pinmap.png (100%) create mode 100644 docs/source/boards/ESP32-C3-DevKitM-1.rst create mode 100644 docs/source/boards/ESP32-DevKitC-1.rst create mode 100644 docs/source/boards/ESP32-S2-Saola-1.rst delete mode 100644 docs/source/boards/esp32-c3-devkit.rst delete mode 100644 docs/source/boards/esp32-devkitC.rst diff --git a/README.md b/README.md index 1421656ae04..7cdd2b4e828 100644 --- a/README.md +++ b/README.md @@ -44,14 +44,6 @@ Before reporting an issue, make sure you've searched for similar one that was al Finally, if you are sure no one else had the issue, follow the [ISSUE_TEMPLATE](docs/ISSUE_TEMPLATE.md) while reporting any issue. -### ESP32Dev Board PINMAP - -![Pin Functions](docs/esp32_pinmap.png) - -![ESP32S2_Pinmap](docs/esp32s2_pinmap.png) - -![ESP32C3_Pinmap](docs/esp32c3_pinmap.png) - ### Tip Sometimes to program ESP32 via serial you must keep GPIO0 LOW during the programming process diff --git a/docs/boards_manager.rst b/docs/boards_manager.rst deleted file mode 100644 index c1e8d64e1ec..00000000000 --- a/docs/boards_manager.rst +++ /dev/null @@ -1,25 +0,0 @@ -Installation instructions using Arduino IDE Boards Manager ----------------------------------------------------------- - -========================================================== -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- Stable release link: - ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json`` -- Development release link: - ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json`` - -Starting with 1.6.4, Arduino allows installation of third-party platform -packages using Boards Manager. We have packages available for Windows, -Mac OS, and Linux (x86, amd64, armhf and arm64). - -- Install the current upstream Arduino IDE at the 1.8 level or later. - The current version is at the `Arduino - website `__. -- Start Arduino and open Preferences window. -- Enter one of the release links above into *Additional Board Manager - URLs* field. You can add multiple URLs, separating them with commas. -- Open Boards Manager from Tools > Board menu and install *esp32* - platform (and do not forget to select your ESP32 board from Tools > - Board menu after installation). - diff --git a/docs/esp32_pinmap.png b/docs/source/_static/esp32_pinmap.png similarity index 100% rename from docs/esp32_pinmap.png rename to docs/source/_static/esp32_pinmap.png diff --git a/docs/esp32c3_pinmap.png b/docs/source/_static/esp32c3_pinmap.png similarity index 100% rename from docs/esp32c3_pinmap.png rename to docs/source/_static/esp32c3_pinmap.png diff --git a/docs/esp32s2_pinmap.png b/docs/source/_static/esp32s2_pinmap.png similarity index 100% rename from docs/esp32s2_pinmap.png rename to docs/source/_static/esp32s2_pinmap.png diff --git a/docs/source/boards/ESP32-C3-DevKitM-1.rst b/docs/source/boards/ESP32-C3-DevKitM-1.rst new file mode 100644 index 00000000000..0b863974e79 --- /dev/null +++ b/docs/source/boards/ESP32-C3-DevKitM-1.rst @@ -0,0 +1,60 @@ +ESP32-C3-DevKitM-1 +================== + +Header Block +------------ + +J1 +^^^ +=== ==== ========== =================================== +No. Name Type [1]_ Function +=== ==== ========== =================================== +1 GND G Ground +2 3V3 P 3.3 V power supply +3 3V3 P 3.3 V power supply +4 IO2 I/O/T GPIO2 [2]_, ADC1_CH2, FSPIQ +5 IO3 I/O/T GPIO3, ADC1_CH3 +6 GND G Ground +7 RST I CHIP_PU +8 GND G Ground +9 IO0 I/O/T GPIO0, ADC1_CH0, XTAL_32K_P +10 IO1 I/O/T GPIO1, ADC1_CH1, XTAL_32K_N +11 IO10 I/O/T GPIO10, FSPICS0 +12 GND G Ground +13 5V P 5 V power supply +14 5V P 5 V power supply +15 GND G Ground +=== ==== ========== =================================== + +J3 +^^^ +=== ==== ========== ==================================== +No. Name Type [1]_ Function +=== ==== ========== ==================================== +1 GND G Ground +2 TX I/O/T GPIO21, U0TXD +3 RX I/O/T GPIO20, U0RXD +4 GND G Ground +5 IO9 I/O/T GPIO9 [2]_ +6 IO8 I/O/T GPIO8 [2]_, RGB LED +7 GND G Ground +8 IO7 I/O/T GPIO7, FSPID, MTDO +9 IO6 I/O/T GPIO6, FSPICLK, MTCK +10 IO5 I/O/T GPIO5, ADC2_CH0, FSPIWP, MTDI +11 IO4 I/O/T GPIO4, ADC1_CH4, FSPIHD, MTMS +12 GND G Ground +13 IO18 I/O/T GPIO18, USB_D- +14 IO19 I/O/T GPIO19, USB_D+ +15 GND G Ground +=== ==== ========== ==================================== + +.. [1] P: Power supply; I: Input; O: Output; T: High impedance. +.. [2] GPIO2, GPIO8, and GPIO9 are strapping pins of the ESP32-C3FN4 chip. During the chip's system reset, the latches of the strapping pins sample the voltage level as strapping bits, and hold these bits until the chip is powered down or shut down. For description and application of strapping pins. + +Pin Layout +---------- + +.. figure:: ../_static/esp32c3_pinmap.png + :align: center + :alt: ESP32-C3-DevKitM-1 (click to enlarge) + :figclass: align-center diff --git a/docs/source/boards/ESP32-DevKitC-1.rst b/docs/source/boards/ESP32-DevKitC-1.rst new file mode 100644 index 00000000000..bd877a5818b --- /dev/null +++ b/docs/source/boards/ESP32-DevKitC-1.rst @@ -0,0 +1,70 @@ +ESP32-DevKitC-1 +=============== + +Header Block +------------ + +J1 +^^^ +=== ==== ===== =================================== +No. Name Type Function +=== ==== ===== =================================== +1 3V3 P 3.3 V power supply +2 EN I CHIP_PU, Reset +3 IO36 I GPIO36, ADC1_CH0, S_VP +4 IO39 I GPIO39, ADC1_CH3, S_VN +5 IO34 I GPIO34, ADC1_CH6, VDET_1 +6 IO35 I GPIO35, ADC1_CH7, VDET_2 +7 IO32 I/O GPIO32, ADC1_CH4, TOUCH_CH9, XTAL_32K_P +8 IO33 I/O GPIO33, ADC1_CH5, TOUCH_CH8, XTAL_32K_N +9 IO25 I/O GPIO25, ADC1_CH8, DAC_1 +10 IO26 I/O GPIO26, ADC2_CH9, DAC_2 +11 IO27 I/O GPIO27, ADC2_CH7, TOUCH_CH7 +12 IO14 I/O GPIO14, ADC2_CH6, TOUCH_CH6, MTMS +13 IO12 I/O GPIO12, ADC2_CH5, TOUCH_CH5, MTDI +14 GND G Ground +15 IO13 I/O GPIO13, ADC2_CH4, TOUCH_CH4, MTCK +16 IO9 I/O GPIO9, D2 +17 IO10 I/O GPIO10, D3 +18 IO11 I/O GPIO11, CMD +19 5V0 P 5 V power supply +=== ==== ===== =================================== + +J3 +^^^ +=== ==== ===== ==================================== +No. Name Type Function +=== ==== ===== ==================================== +1 GND G Ground +2 IO23 I/O GPIO23 +3 IO22 I/O GPIO22 +4 IO1 I/O GPIO1, U0TXD +5 IO3 I/O GPIO3, U0RXD +6 IO21 I/O GPIO21 +7 GND G Ground +8 IO19 I/O GPIO19 +9 IO18 I/O GPIO18 +10 IO5 I/O GPIO5 +11 IO17 I/O GPIO17 +12 IO16 I/O GPIO16 +13 IO4 I/O GPIO4, ADC2_CH0, TOUCH_CH0 +14 IO0 I/O GPIO0, ADC2_CH1, TOUCH_CH1, Boot +16 IO2 I/O GPIO2, ADC2_CH2, TOUCH_CH2 +17 IO15 I/O GPIO15, ADC2_CH3, TOUCH_CH3, MTDO +17 IO8 I/O GPIO8, D1 +18 IO7 I/O GPIO7, D0 +19 IO6 I/O GPIO6, SCK +=== ==== ===== ==================================== + + P: Power supply; + I: Input; + O: Output; + T: High impedance. + +Pin Layout +---------- + +.. figure:: ../_static/esp32_pinmap.png + :align: center + :alt: ESP32-DevKitC-1 (click to enlarge) + :figclass: align-center diff --git a/docs/source/boards/ESP32-S2-Saola-1.rst b/docs/source/boards/ESP32-S2-Saola-1.rst new file mode 100644 index 00000000000..6aebec8a7b0 --- /dev/null +++ b/docs/source/boards/ESP32-S2-Saola-1.rst @@ -0,0 +1,74 @@ +ESP32-S2-Saola-1 +================ + +Header Block +------------ + +J2 +^^^ +=== ==== ===== =================================== +No. Name Type Function +=== ==== ===== =================================== +1 3V3 P 3.3 V power supply +2 IO0 I/O GPIO0, Boot +3 IO1 I/O GPIO1, ADC1_CH0, TOUCH_CH1 +4 IO2 I/O GPIO2, ADC1_CH1, TOUCH_CH2 +5 IO3 I/O GPIO3, ADC1_CH2, TOUCH_CH3 +6 IO4 I/O GPIO4, ADC1_CH3, TOUCH_CH4 +7 IO5 I/O GPIO5, ADC1_CH4, TOUCH_CH5 +8 IO6 I/O GPIO6, ADC1_CH5, TOUCH_CH6 +9 IO7 I/O GPIO7, ADC1_CH6, TOUCH_CH7 +10 IO8 I/O GPIO8, ADC1_CH7, TOUCH_CH8 +11 IO9 I/O GPIO9, ADC1_CH8, TOUCH_CH9 +12 IO10 I/O GPIO10, ADC1_CH9, TOUCH_CH10 +13 IO11 I/O GPIO11, ADC2_CH0, TOUCH_CH11 +14 IO12 I/O GPIO12, ADC2_CH1, TOUCH_CH12 +15 IO13 I/O GPIO13, ADC2_CH2, TOUCH_CH13 +16 IO14 I/O GPIO14, ADC2_CH3, TOUCH_CH14 +17 IO15 I/O GPIO15, ADC2_CH4, XTAL_32K_P +18 IO16 I/O GPIO16, ADC2_CH5, XTAL_32K_N +19 IO17 I/O GPIO17, ADC2_CH6, DAC_1 +20 5V0 P 5 V power supply +21 GND G Ground +=== ==== ===== =================================== + +J3 +^^^ +=== ==== ===== ==================================== +No. Name Type Function +=== ==== ===== ==================================== +1 GND G Ground +2 RST I CHIP_PU, Reset +3 IO46 I GPIO46 +4 IO45 I/O GPIO45 +5 IO44 I/O GPIO44, U0RXD +6 IO43 I/O GPIO43, U0TXD +7 IO42 I/O GPIO42, MTMS +8 IO41 I/O GPIO41, MTDI +9 IO40 I/O GPIO40, MTDO +10 IO39 I/O GPIO39, MTCK +11 IO38 I/O GPIO38 +12 IO37 I/O GPIO37 +13 IO36 I/O GPIO36 +14 IO35 I/O GPIO35 +16 IO34 I/O GPIO34 +17 IO33 I/O GPIO33 +17 IO26 I/O GPIO26 +18 IO21 I/O GPIO21 +19 IO20 I/O GPIO20, ADC2_CH3, USB_D+ +20 IO19 I/O GPIO19, ADC2_CH3, USB_D- +21 IO18 I/O GPIO18, ADC2_CH3, DAC_2 +=== ==== ===== ==================================== + + P: Power supply; + I: Input; + O: Output; + T: High impedance. + +Pin Layout +---------- + +.. figure:: ../_static/esp32s2_pinmap.png + :align: center + :alt: ESP32-S2-Saola-1 (click to enlarge) + :figclass: align-center diff --git a/docs/source/boards/boards.rst b/docs/source/boards/boards.rst index f33fe918a58..cdaddce0ee1 100644 --- a/docs/source/boards/boards.rst +++ b/docs/source/boards/boards.rst @@ -4,17 +4,13 @@ Boards Espressif Boards ---------------- -ESP32 ------ +.. toctree:: + :maxdepth: 1 + :caption: Boards: -- ESP32-DevKitC-1 + ESP32-DevKitC + ESP32-S2-Saola-1 + ESP32-C3-DevKitM-1 -ESP32-S2 --------- - -- ESP32-S2-Saola-1 - -ESP32-C3 --------- - -- ESP32-C3-DevKitM-1 +Third Party +----------- diff --git a/docs/source/boards/esp32-c3-devkit.rst b/docs/source/boards/esp32-c3-devkit.rst deleted file mode 100644 index 2c14b215571..00000000000 --- a/docs/source/boards/esp32-c3-devkit.rst +++ /dev/null @@ -1,2 +0,0 @@ -ESP32-C3-DevKit -=============== diff --git a/docs/source/boards/esp32-devkitC.rst b/docs/source/boards/esp32-devkitC.rst deleted file mode 100644 index 41833502da4..00000000000 --- a/docs/source/boards/esp32-devkitC.rst +++ /dev/null @@ -1,2 +0,0 @@ -ESP32-DevKit -============ diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index 58223538734..cb4c8c7d8d2 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -3,3 +3,9 @@ Getting Started About Arduino ESP32 ------------------- + +How to Contribute +----------------- + +Installation +------------ diff --git a/docs/source/index.rst b/docs/source/index.rst index 1a010aeecf7..006ebcc806a 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,6 +8,4 @@ Welcome to ESP32 Arduino Core's documentation Getting Started Installing Boards - ESP32 DevKit - ESP32-C3 DevKit Libraries diff --git a/docs/source/installing.rst b/docs/source/installing.rst index f5a62e4d82b..ff5a54bea9d 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -1,5 +1,36 @@ Installing ========== -Boards Manager --------------- +Before Installing +----------------- + +Installing using Boards Manager +------------------------------- + +- Stable release link: + ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json`` +- Development release link: + ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json`` + +Starting with 1.6.4, Arduino allows installation of third-party platform +packages using Boards Manager. We have packages available for Windows, +Mac OS, and Linux (x86, amd64, armhf and arm64). + +- Install the current upstream Arduino IDE at the 1.8 level or later. + The current version is at the `Arduino + website `__. +- Start Arduino and open Preferences window. +- Enter one of the release links above into *Additional Board Manager + URLs* field. You can add multiple URLs, separating them with commas. +- Open Boards Manager from Tools > Board menu and install *esp32* + platform (and do not forget to select your ESP32 board from Tools > + Board menu after installation). + +Windows +------- + +Linux +----- + +MacOS +----- \ No newline at end of file diff --git a/docs/source/libraries.rst b/docs/source/libraries.rst index 41bc289e478..f0b78f4e06b 100644 --- a/docs/source/libraries.rst +++ b/docs/source/libraries.rst @@ -3,3 +3,6 @@ Libraries Index ----- + +* WiFi +* Bluetooth \ No newline at end of file From 38169b03fa61a8aa1ce11b1134e947a79cdd763c Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Fri, 25 Jun 2021 19:16:40 +0100 Subject: [PATCH 08/38] Added lib builder and esp-idf as component rst files --- docs/source/esp-idf_component.rst | 2 ++ docs/source/index.rst | 4 +++- docs/source/lib_builder.rst | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 docs/source/esp-idf_component.rst create mode 100644 docs/source/lib_builder.rst diff --git a/docs/source/esp-idf_component.rst b/docs/source/esp-idf_component.rst new file mode 100644 index 00000000000..cb9364b7252 --- /dev/null +++ b/docs/source/esp-idf_component.rst @@ -0,0 +1,2 @@ +ESP-IDF as Component +==================== diff --git a/docs/source/index.rst b/docs/source/index.rst index 006ebcc806a..cfd63da092b 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,5 +1,5 @@ Welcome to ESP32 Arduino Core's documentation -================================================ +============================================= .. toctree:: :maxdepth: 2 @@ -9,3 +9,5 @@ Welcome to ESP32 Arduino Core's documentation Installing Boards Libraries + Library Builder + ESP-IDF as Component diff --git a/docs/source/lib_builder.rst b/docs/source/lib_builder.rst new file mode 100644 index 00000000000..506d4ea0aff --- /dev/null +++ b/docs/source/lib_builder.rst @@ -0,0 +1,24 @@ +Library Builder +=============== + +How to Use Library Builder +************************** + +Espressif has provided a [tool](https://github.com/espressif/esp32-arduino-lib-builder) to simplify building your own compiled libraries for use in Arduino IDE (or your favorite IDE). +To use it to generate custom libraries, follow these steps: + + +- Ubuntu and Debian:: + +git clone https://github.com/espressif/esp32-arduino-lib-builder + +#. Step 1. `` +#. Step 2. `cd esp32-arduino-lib-builder` +#. Step 3. `./tools/update-components.sh` +#. Step 4. `./tools/install-esp-idf.sh` (if you already have an $IDF_PATH defined, it will use your local copy of the repository) +#. Step 5. `make menuconfig` or directly edit sdkconfig. +#. Step 6. `./build.sh` + +The script automates the process of building [arduino as an ESP-IDF component](https://github.com/espressif/arduino-esp32/blob/master/docs/esp-idf_component.md). +Once it is complete, you can cherry pick the needed libraries from `out/tools/sdk/lib`, or run `tools/copy-to-arduino.sh` to copy the entire built system. +`tools/config.sh` contains a number of variables that control the process, particularly the $IDF_BRANCH variable. You can adjust this to try building against newer versions, but there are absolutely no guarantees that any components will work or even successfully compile against a newer IDF. From 8caf58541733f277c3dacfd66ef76b839c4c88ae Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 09:59:30 +0100 Subject: [PATCH 09/38] Work in progress on the Getting started and install guide --- README.md | 6 +++--- docs/source/getting_started.rst | 7 +++++-- docs/source/installing.rst | 33 +++++++++++++++++++++++++++++---- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7cdd2b4e828..d5dd9afff87 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ - [Installation Instructions](#installation-instructions) - [Decoding Exceptions](#decoding-exceptions) - [Issue/Bug report template](#issuebug-report-template) -- [ESP32Dev Board PINMAP](#esp32dev-board-pinmap) ### ESP32-S2 and ESP32-C3 Support If you want to test ESP32-S2 and/or ESP32-C3 through the board manager, please use the development release link: `https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json` and install the latest 2.0.0 version. @@ -22,6 +21,7 @@ Latest Development Release [![Release Version](https://img.shields.io/github/re ### Installation Instructions + - Using Arduino IDE Boards Manager (preferred) + [Instructions for Boards Manager](docs/arduino-ide/boards_manager.md) - Using Arduino IDE with the development repository @@ -30,9 +30,9 @@ Latest Development Release [![Release Version](https://img.shields.io/github/re + [Instructions for Debian/Ubuntu Linux](docs/arduino-ide/debian_ubuntu.md) + [Instructions for Fedora](docs/arduino-ide/fedora.md) + [Instructions for openSUSE](docs/arduino-ide/opensuse.md) -- [Using PlatformIO](docs/platformio.md) +- REMOVE: [Using PlatformIO](docs/platformio.md) - [Building with make](docs/make.md) -- [Using as ESP-IDF component](docs/esp-idf_component.md) +- REMOVE: [Using as ESP-IDF component](docs/esp-idf_component.md) - [Using OTAWebUpdater](docs/OTAWebUpdate/OTAWebUpdate.md) ### Decoding exceptions diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index cb4c8c7d8d2..5873cad6037 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -7,5 +7,8 @@ About Arduino ESP32 How to Contribute ----------------- -Installation ------------- +Supported Operational Systems +----------------------------- + +Currently, the supported OS are: Windows, Linux and macOS. + diff --git a/docs/source/installing.rst b/docs/source/installing.rst index ff5a54bea9d..bc480a8e76e 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -1,16 +1,22 @@ +********** Installing -========== +********** Before Installing ----------------- + + Installing using Boards Manager ------------------------------- - Stable release link: - ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json`` + + https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json + - Development release link: - ``https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json`` + + https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json Starting with 1.6.4, Arduino allows installation of third-party platform packages using Boards Manager. We have packages available for Windows, @@ -33,4 +39,23 @@ Linux ----- MacOS ------ \ No newline at end of file +----- + + +PlatformIO +---------- + +Installation instructions for using PlatformIO +********************************************** + +`What is PlatformIO? `_ + +`PlatformIO IDE `_ + +`PlatformIO Core `_ + +`Advanced usage `_: Custom settings, uploading to SPIFFS, Over-the-Air (OTA), staging version + +`Integration with Cloud and Standalone IDEs `_: Cloud9, Codeanywhere, Eclipse Che (Codenvy), Atom, CLion, Eclipse, Emacs, NetBeans, Qt Creator, Sublime Text, VIM, Visual Studio, and VSCode + +`Project Examples `_ From e041e1794baec19ea47a80bcc322fa90a58f5dcf Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 11:13:47 +0100 Subject: [PATCH 10/38] Added Linux and macOS install guide --- docs/Makefile | 8 ++ docs/source/conf.py | 1 + docs/source/installing.rst | 160 ++++++++++++++++++++++++++++++------ docs/source/lib_builder.rst | 37 ++++++--- 4 files changed, 171 insertions(+), 35 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index d0c3cbf1020..ba5447de969 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -8,6 +8,14 @@ SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = build +LINKCHECKDIR = build/linkcheck + +.PHONY: checklinks + checklinks: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(LINKCHECKDIR) + @echo + @echo "Check finished. Report is in $(LINKCHECKDIR)." + # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/source/conf.py b/docs/source/conf.py index 70b3cec4309..e01813abf3e 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -31,6 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ + 'sphinx_copybutton' ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/installing.rst b/docs/source/installing.rst index bc480a8e76e..dac6eab58b5 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -5,57 +5,171 @@ Installing Before Installing ----------------- - - Installing using Boards Manager ------------------------------- -- Stable release link: +- Stable release link:: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json -- Development release link: +- Development release link:: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json + Starting with 1.6.4, Arduino allows installation of third-party platform packages using Boards Manager. We have packages available for Windows, -Mac OS, and Linux (x86, amd64, armhf and arm64). +macOS, and Linux (x86, amd64, armhf and arm64). + + +- Install the current upstream Arduino IDE at the 1.8 level or later. The current version is at the `arduino.cc`_ website. -- Install the current upstream Arduino IDE at the 1.8 level or later. - The current version is at the `Arduino - website `__. - Start Arduino and open Preferences window. -- Enter one of the release links above into *Additional Board Manager - URLs* field. You can add multiple URLs, separating them with commas. -- Open Boards Manager from Tools > Board menu and install *esp32* - platform (and do not forget to select your ESP32 board from Tools > - Board menu after installation). + +- Enter one of the release links above into *Additional Board Manager URLs* field. You can add multiple URLs, separating them with commas. + +- Open Boards Manager from Tools > Board menu and install *esp32* platform (and do not forget to select your ESP32 board from Tools > Board menu after installation). Windows ------- + + Linux ----- -MacOS ------ +Debian/Ubuntu +=============== + +- Install latest Arduino IDE from `arduino.cc`_. + +- Open Terminal and execute the following command (copy -> paste and hit enter): + +.. code-block:: bash + + sudo usermod -a -G dialout $USER && \ + sudo apt-get install git && \ + wget https://bootstrap.pypa.io/get-pip.py && \ + sudo python3 get-pip.py && \ + sudo pip3 install pyserial && \ + mkdir -p ~/Arduino/hardware/espressif && \ + cd ~/Arduino/hardware/espressif && \ + git clone https://github.com/espressif/arduino-esp32.git esp32 && \ + cd esp32 && \ + git submodule update --init --recursive && \ + cd tools && \ + python3 get.py + +- Restart Arduino IDE. + +- If you have Arduino installed to ~/, modify the installation as follows, beginning at `mkdir -p ~/Arduino/hardware`: + +.. code-block:: bash + + cd ~/Arduino/hardware + mkdir -p espressif && \ + cd espressif && \ + git clone https://github.com/espressif/arduino-esp32.git esp32 && \ + cd esp32 && \ + git submodule update --init --recursive && \ + cd tools && \ + python3 get.py + +Fedora +====== + +- Install the latest Arduino IDE from `arduino.cc`_. + - Command ``$ sudo dnf -y install arduino`` will most likely install an older release. + +- Open Terminal and execute the following command (copy -> paste and hit enter): + +.. code-block:: bash + sudo usermod -a -G dialout $USER && \ + sudo dnf install git python3-pip python3-pyserial && \ + mkdir -p ~/Arduino/hardware/espressif && \ + cd ~/Arduino/hardware/espressif && \ + git clone https://github.com/espressif/arduino-esp32.git esp32 && \ + cd esp32 && \ + git submodule update --init --recursive && \ + cd tools && \ + python get.py + +- Restart Arduino IDE. + +openSUSE +======== + +- Install the latest Arduino IDE from `arduino.cc`_. + +- Open Terminal and execute the following command (copy -> paste and hit enter): + +.. code-block:: bash + + sudo usermod -a -G dialout $USER && \ + if [ `python --version 2>&1 | grep '2.7' | wc -l` = "1" ]; then \ + sudo zypper install git python-pip python-pyserial; \ + else \ + sudo zypper install git python3-pip python3-pyserial; \ + fi && \ + mkdir -p ~/Arduino/hardware/espressif && \ + cd ~/Arduino/hardware/espressif && \ + git clone https://github.com/espressif/arduino-esp32.git esp32 && \ + cd esp32 && \ + git submodule update --init --recursive && \ + cd tools && \ + python get.py + +- Restart Arduino IDE. + + +macOS +===== + +- Install the latest Arduino IDE from `arduino.cc`_. + +- Open Terminal and execute the following command (copy -> paste and hit enter): + +.. code-block:: bash + + mkdir -p ~/Documents/Arduino/hardware/espressif && \ + cd ~/Documents/Arduino/hardware/espressif && \ + git clone https://github.com/espressif/arduino-esp32.git esp32 --depth 1 && \ + cd esp32 && \ + git submodule update --init --recursive --depth 1 && \ + cd tools && \ + python get.py + +Where ``~/Documents/Arduino`` represents your sketch book location as per "Arduino" > "Preferences" > "Sketchbook location" (in the IDE once started). Adjust the command above accordingly if necessary! + +- If you get the error below. Install the command line dev tools with xcode-select --install and try the command above again: + +```xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun``` + +```xcode-select --install``` + +- Try `python3` instead of `python` if you get the error: `IOError: [Errno socket error] [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)` when running `python get.py` + +- If you get the following error when running `python get.py` urllib.error.URLError: Applications > Python3.6 folder (or any other python version), and run the following scripts: Install Certificates.command and Update Shell Profile.command + +- Restart Arduino IDE. PlatformIO ---------- -Installation instructions for using PlatformIO -********************************************** +- `What is PlatformIO? `_ + +- `PlatformIO IDE `_ -`What is PlatformIO? `_ +- `PlatformIO Core `_ -`PlatformIO IDE `_ +- `Advanced usage `_: Custom settings, uploading to SPIFFS, Over-the-Air (OTA), staging version -`PlatformIO Core `_ +- `Integration with Cloud and Standalone IDEs `_: Cloud9, Codeanywhere, Eclipse Che (Codenvy), Atom, CLion, Eclipse, Emacs, NetBeans, Qt Creator, Sublime Text, VIM, Visual Studio, and VSCode -`Advanced usage `_: Custom settings, uploading to SPIFFS, Over-the-Air (OTA), staging version +- `Project Examples `_ -`Integration with Cloud and Standalone IDEs `_: Cloud9, Codeanywhere, Eclipse Che (Codenvy), Atom, CLion, Eclipse, Emacs, NetBeans, Qt Creator, Sublime Text, VIM, Visual Studio, and VSCode +References +========== -`Project Examples `_ +.. _Arduino.cc: https://www.arduino.cc/en/Main/Software diff --git a/docs/source/lib_builder.rst b/docs/source/lib_builder.rst index 506d4ea0aff..feb9849a376 100644 --- a/docs/source/lib_builder.rst +++ b/docs/source/lib_builder.rst @@ -4,21 +4,34 @@ Library Builder How to Use Library Builder ************************** -Espressif has provided a [tool](https://github.com/espressif/esp32-arduino-lib-builder) to simplify building your own compiled libraries for use in Arduino IDE (or your favorite IDE). +Espressif has provided a `tool `_ to simplify building your own compiled libraries for use in Arduino IDE (or your favorite IDE). To use it to generate custom libraries, follow these steps: -- Ubuntu and Debian:: +- Step 1 - Clone the ESP32 Arduino lib builder:: -git clone https://github.com/espressif/esp32-arduino-lib-builder + git clone https://github.com/espressif/esp32-arduino-lib-builder -#. Step 1. `` -#. Step 2. `cd esp32-arduino-lib-builder` -#. Step 3. `./tools/update-components.sh` -#. Step 4. `./tools/install-esp-idf.sh` (if you already have an $IDF_PATH defined, it will use your local copy of the repository) -#. Step 5. `make menuconfig` or directly edit sdkconfig. -#. Step 6. `./build.sh` +- Step 2 - Go to the ``esp32-arduino-lib-builder`` folder:: -The script automates the process of building [arduino as an ESP-IDF component](https://github.com/espressif/arduino-esp32/blob/master/docs/esp-idf_component.md). -Once it is complete, you can cherry pick the needed libraries from `out/tools/sdk/lib`, or run `tools/copy-to-arduino.sh` to copy the entire built system. -`tools/config.sh` contains a number of variables that control the process, particularly the $IDF_BRANCH variable. You can adjust this to try building against newer versions, but there are absolutely no guarantees that any components will work or even successfully compile against a newer IDF. + cd esp32-arduino-lib-builder + +- Step 3 - Run the ``update-components`` script:: + + ./tools/update-components.sh` + +- Step 4 - Run ``install-esp-idf`` installation script (if you already have an ``$IDF_PATH`` defined, it will use your local copy of the repository):: + + ./tools/install-esp-idf.sh + +- Step 5 - Run the configuration or directly edit sdkconfig:: + + make menuconfig + +- Step 6 - Build:: + + ./build.sh + +The script automates the process of building `arduino as an ESP-IDF component `_. +Once it is complete, you can cherry pick the needed libraries from ``out/tools/sdk/lib``, or run ``tools/copy-to-arduino.sh`` to copy the entire built system. +``tools/config.sh`` contains a number of variables that control the process, particularly the $IDF_BRANCH variable. You can adjust this to try building against newer versions, but there are absolutely no guarantees that any components will work or even successfully compile against a newer IDF. From 6e3ea9edbefecce298daf1922f4ab905c992e66b Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 14:56:14 +0100 Subject: [PATCH 11/38] Added boards information --- docs/source/boards/ESP32-C3-DevKitM-1.rst | 58 +++++++++++++++- docs/source/boards/ESP32-DevKitC-1.rst | 84 ++++++++++++++++++++++- docs/source/boards/ESP32-S2-Saola-1.rst | 77 ++++++++++++++++++++- docs/source/getting_started.rst | 19 ++++- docs/source/installing.rst | 10 +-- 5 files changed, 237 insertions(+), 11 deletions(-) diff --git a/docs/source/boards/ESP32-C3-DevKitM-1.rst b/docs/source/boards/ESP32-C3-DevKitM-1.rst index 0b863974e79..348237819dd 100644 --- a/docs/source/boards/ESP32-C3-DevKitM-1.rst +++ b/docs/source/boards/ESP32-C3-DevKitM-1.rst @@ -1,5 +1,36 @@ +****************** ESP32-C3-DevKitM-1 -================== +****************** + +The ESP32-C3-DevKitM-1 development board is one of the Espressif official boards. This board is based on the `ESP32-C3-MINI-1`_ module, with the `ESP32-C3`_ as the core. + +Specifications +-------------- + +- Small­sized 2.4 GHz Wi­Fi (802.11 b/g/n) and Bluetooth® 5 module +- Built around ESP32­C3 series of SoCs, RISC­V single­core microprocessor +- 4 MB flash in chip package +- 15 available GPIOs (module) +- Peripherals + - 22 × programmable GPIOs + - Digital interfaces: + - 3 × SPI + - 2 × UART + - 1 × I2C + - 1 × I2S + - Remote control peripheral, with 2 transmit channels and 2 receive channels + - LED PWM controller, with up to 6 channels + - Full-speed USB Serial/JTAG controller + - General DMA controller (GDMA), with 3 transmit channels and 3 receive channels + - 1 × TWAI® controller (compatible with ISO 11898-1) + - Analog interfaces: + - 2 × 12-bit SAR ADCs, up to 6 channels + - 1 × temperature sensor + - Timers: + - 2 × 54-bit general-purpose timers + - 3 × watchdog timers + - 1 × 52-bit system timer +- On­board PCB antenna or external antenna connector Header Block ------------ @@ -58,3 +89,28 @@ Pin Layout :align: center :alt: ESP32-C3-DevKitM-1 (click to enlarge) :figclass: align-center + +Straping Pins +------------- + +Some of the GPIO's has important feature during the booting process. Here is the list of the strapping pins on the `ESP32-C3`_. + +==== ========= ===================================================================== ================ ================= +GPIO Default Function Pull-up Pull-down +==== ========= ===================================================================== ================ ================= +IO2 N/A Booting Mode See `ESP32-C3`_ See `ESP32-C3`_ +IO9 Pull-up Booting Mode SPI Boot Download Boot +IO8 N/A Booting Mode Don't Care Download Boot +IO8 Pull-up Enabling/Disabling Log Print See `ESP32-C3`_ See `ESP32-C3`_ +==== ========= ===================================================================== ================ ================= + +For more detailed information, see the `ESP32-C3`_ datasheet. + +Resources +--------- + +* `ESP32-C3`_ (Datasheet) +* `ESP32-C3-MINI-1`_ (Datasheet) + +.. _ESP32-C3: https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf +.. _ESP32-C3-MINI-1: https://www.espressif.com/sites/default/files/documentation/esp32-c3-mini-1_datasheet_en.pdf diff --git a/docs/source/boards/ESP32-DevKitC-1.rst b/docs/source/boards/ESP32-DevKitC-1.rst index bd877a5818b..eb2a9c0ede5 100644 --- a/docs/source/boards/ESP32-DevKitC-1.rst +++ b/docs/source/boards/ESP32-DevKitC-1.rst @@ -1,5 +1,34 @@ +*************** ESP32-DevKitC-1 -=============== +*************** + +The `ESP32-DevKitC-1`_ development board is one of the Espressif official boards. This board is based on the `ESP32-WROVER-E`_ module, with the `ESP32`_ as the core. + +Specifications +-------------- + +- Wi-Fi 802.11 b/g/n (802.11n up to 150 Mbps) +- Bluetooth v4.2 BR/EDR and BLE specification +- Built around ESP32 series of SoCs +- Integrated 4 MB SPI flash +- Integrated 8 MB PSRAM +- Peripherals + - SD card + - UART + - SPI + - SDIO + - I2C + - LED PWM + - Motor PWM + - I2S + - IR + - Pulse Counter + - GPIO + - Capacitive Touch Sensor + - ADC + - DAC + - Two-Wire Automotive Interface (TWAI®, compatible with ISO11898-1) +- On­board PCB antenna or external antenna connector Header Block ------------ @@ -68,3 +97,56 @@ Pin Layout :align: center :alt: ESP32-DevKitC-1 (click to enlarge) :figclass: align-center + +Straping Pins +------------- + +Some of the GPIO's has important feature during the booting process. Here is the list of the strapping pins on the `ESP32`_. + +==== ========= ===================================================================== ============ ============== +GPIO Default Function Pull-up Pull-down +==== ========= ===================================================================== ============ ============== +IO12 Pull-down Voltage of Internal LDO (VDD_SDIO) 1V8 3V3 +IO0 Pull-up Booting Mode SPI Boot Download Boot +IO2 Pull-down Booting Mode Don't Care Download Boot +IO15 Pull-up Enabling/Disabling Log Print During Booting and Timing of SDIO Slave U0TXD Active U0TXD Silent +IO5 Pull-up Timing of SDIO Slave See `ESP32`_ See `ESP32`_ +==== ========= ===================================================================== ============ ============== + +Restricted Usage GPIOS +---------------------- + +Some of the GPIO's are used for the external flash and PSRAM. These GPIO's cannot be used: + +==== =================== +GPIO Shared Function +==== =================== +IO6 External SPI Flash +IO7 External SPI Flash +IO8 External SPI Flash +IO9 External SPI Flash +IO10 External SPI Flash +IO11 External SPI Flash +==== =================== + +Other GPIO's are `INPUT ONLY` and cannot be used as output pin: + +==== ========================= +GPIO Function +==== ========================= +IO36 GPIO36, ADC1_CH0, S_VP +IO39 GPIO39, ADC1_CH3, S_VN +IO34 GPIO34, ADC1_CH6, VDET_1 +IO35 GPIO35, ADC1_CH7, VDET_2 +==== ========================= + +Resources +--------- + +* `ESP32`_ (Datasheet) +* `ESP32-WROVER-E`_ (Datasheet) +* `ESP32-DevKitC`_ (Schematic) + +.. _ESP32: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf +.. _ESP32-WROVER-E: https://www.espressif.com/sites/default/files/documentation/esp32-wrover-e_esp32-wrover-ie_datasheet_en.pdf +.. _ESP32-DevKitC: https://dl.espressif.com/dl/schematics/esp32_devkitc_v4-sch.pdf diff --git a/docs/source/boards/ESP32-S2-Saola-1.rst b/docs/source/boards/ESP32-S2-Saola-1.rst index 6aebec8a7b0..416c6df63d7 100644 --- a/docs/source/boards/ESP32-S2-Saola-1.rst +++ b/docs/source/boards/ESP32-S2-Saola-1.rst @@ -1,5 +1,34 @@ +**************** ESP32-S2-Saola-1 -================ +**************** + +The `ESP32-S2-Saola-1`_ development board is one of the Espressif official boards. This board is based on the `ESP32-S2-WROVER`_ module, with the `ESP32-S2`_ as the core. + +Specifications +-------------- + +- Wi-Fi 802.11 b/g/n (802.11n up to 150 Mbps) +- Built around ESP32-S2 series of SoCs Xtensa® single-core +- Integrated 4 MB SPI flash +- Integrated 2 MB PSRAM +- Peripherals + - 43 × programmable GPIOs + - 2 × 13-bit SAR ADCs, up to 20 channels + - 2 × 8-bit DAC + - 14 × touch sensing IOs + - 4 × SPI + - 1 × I2S + - 2 × I2C + - 2 × UART + - RMT (TX/RX) + - LED PWM controller, up to 8 channels + - 1 × full-speed USB OTG + - 1 × temperature sensor + - 1 × DVP 8/16 camera interface, implemented using the hardware resources of I2S + - 1 × LCD interface (8-bit serial RGB/8080/6800), implemented using the hardware resources of SPI2 + - 1 × LCD interface (8/16/24-bit parallel), implemented using the hardware resources of I2S + - 1 × TWAI® controller (compatible with ISO 11898-1) +- On­board PCB antenna or external antenna connector Header Block ------------ @@ -72,3 +101,49 @@ Pin Layout :align: center :alt: ESP32-S2-Saola-1 (click to enlarge) :figclass: align-center + +Straping Pins +------------- + +Some of the GPIO's has important feature during the booting process. Here is the list of the strapping pins on the `ESP32-S2`_. + +==== ========= ===================================================================== ============ ============== +GPIO Default Function Pull-up Pull-down +==== ========= ===================================================================== ============ ============== +IO45 Pull-down Voltage of Internal LDO (VDD_SDIO) 1V8 3V3 +IO0 Pull-up Booting Mode SPI Boot Download Boot +IO46 Pull-down Booting Mode Don't Care Download Boot +IO46 Pull-up Enabling/Disabling Log Print During Booting and Timing of SDIO Slave U0TXD Active U0TXD Silent +==== ========= ===================================================================== ============ ============== + +For more detailed information, see the `ESP32-S2`_ datasheet. + +Restricted Usage GPIOS +---------------------- + +Some of the GPIO's are used for the external flash and PSRAM. These GPIO's cannot be used: + +==== =================== +GPIO Shared Function +==== =================== +IO26 Connected to PSRAM +==== =================== + +Other GPIO's are `INPUT ONLY` and cannot be used as output pin: + +==== =========================== +GPIO Function +==== =========================== +IO46 GPIO46 +==== =========================== + +Resources +--------- + +* `ESP32-S2`_ (Datasheet) +* `ESP32-S2-WROVER`_ (Datasheet) +* `ESP32-S2-Saola-1`_ (Schematics) + +.. _ESP32-S2: https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf +.. _ESP32-S2-WROVER: https://www.espressif.com/sites/default/files/documentation/esp32-s2-wrover_esp32-s2-wrover-i_datasheet_en.pdf +.. _ESP32-S2-Saola-1: https://dl.espressif.com/dl/schematics/ESP32-S2-SAOLA-1_V1.1_schematics.pdf diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index 5873cad6037..d0d3c183605 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -1,5 +1,6 @@ +*************** Getting Started -=============== +*************** About Arduino ESP32 ------------------- @@ -7,8 +8,24 @@ About Arduino ESP32 How to Contribute ----------------- +Supported SoC's +--------------- + +======== ====== =========== =================================== +No. Stable Development Datasheet +======== ====== =========== =================================== +ESP32 Yes Yes `ESP32 Datasheet`_ +ESP32-S2 No Yes `ESP32-S2 Datasheet`_ +ESP32-C3 No Yes `ESP32-C3 Datasheet`_ +ESP32-S3 No No Not Available Yet +======== ====== =========== =================================== + Supported Operational Systems ----------------------------- Currently, the supported OS are: Windows, Linux and macOS. +.. _ESP32 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf +.. _ESP32-S2 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf +.. _ESP32-C3 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf +.. _Arduino.cc: https://www.arduino.cc/en/Main/Software diff --git a/docs/source/installing.rst b/docs/source/installing.rst index dac6eab58b5..bfe58cb3f56 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -16,11 +16,12 @@ Installing using Boards Manager https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json - Starting with 1.6.4, Arduino allows installation of third-party platform packages using Boards Manager. We have packages available for Windows, macOS, and Linux (x86, amd64, armhf and arm64). +.. note:: + Currently, the support for new chips (ESP32-S2 and ESP32-C3) are in the development release. Consider installing the development release if you need to test the new supported SoC in beta. - Install the current upstream Arduino IDE at the 1.8 level or later. The current version is at the `arduino.cc`_ website. @@ -33,8 +34,6 @@ macOS, and Linux (x86, amd64, armhf and arm64). Windows ------- - - Linux ----- @@ -122,9 +121,8 @@ openSUSE - Restart Arduino IDE. - macOS -===== +----- - Install the latest Arduino IDE from `arduino.cc`_. @@ -169,7 +167,5 @@ PlatformIO - `Project Examples `_ -References -========== .. _Arduino.cc: https://www.arduino.cc/en/Main/Software From 2a796af54b549ecad88424195af46f7469205cac Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 16:16:19 +0100 Subject: [PATCH 12/38] Docs: Added Arduino as IDF component --- README.md | 21 +------ docs/esp-idf_component.md | 2 +- docs/source/conf.py | 2 +- docs/source/esp-idf_component.rst | 93 ++++++++++++++++++++++++++++++- docs/source/getting_started.rst | 3 +- docs/source/index.rst | 1 + docs/source/installing.rst | 13 ++--- docs/source/lib_builder.rst | 2 +- docs/source/troubleshooting.rst | 24 ++++++++ 9 files changed, 129 insertions(+), 32 deletions(-) create mode 100644 docs/source/troubleshooting.rst diff --git a/README.md b/README.md index d5dd9afff87..ae245807bf6 100644 --- a/README.md +++ b/README.md @@ -20,20 +20,9 @@ Latest Stable Release [![Release Version](https://img.shields.io/github/release Latest Development Release [![Release Version](https://img.shields.io/github/release/espressif/arduino-esp32/all.svg?style=plastic)](https://github.com/espressif/arduino-esp32/releases/latest/) [![Release Date](https://img.shields.io/github/release-date-pre/espressif/arduino-esp32.svg?style=plastic)](https://github.com/espressif/arduino-esp32/releases/latest/) [![Downloads](https://img.shields.io/github/downloads-pre/espressif/arduino-esp32/latest/total.svg?style=plastic)](https://github.com/espressif/arduino-esp32/releases/latest/) -### Installation Instructions - -- Using Arduino IDE Boards Manager (preferred) - + [Instructions for Boards Manager](docs/arduino-ide/boards_manager.md) -- Using Arduino IDE with the development repository - + [Instructions for Windows](docs/arduino-ide/windows.md) - + [Instructions for Mac](docs/arduino-ide/mac.md) - + [Instructions for Debian/Ubuntu Linux](docs/arduino-ide/debian_ubuntu.md) - + [Instructions for Fedora](docs/arduino-ide/fedora.md) - + [Instructions for openSUSE](docs/arduino-ide/opensuse.md) -- REMOVE: [Using PlatformIO](docs/platformio.md) -- [Building with make](docs/make.md) -- REMOVE: [Using as ESP-IDF component](docs/esp-idf_component.md) -- [Using OTAWebUpdater](docs/OTAWebUpdate/OTAWebUpdate.md) +### Documentation + +You can use [Arduino-ESP32 Online Documentation](https://docs.espressif.com/projects/arduino-esp32/en/docs-structure/index.html) to get all information about this project. ### Decoding exceptions @@ -43,7 +32,3 @@ You can use [EspExceptionDecoder](https://github.com/me-no-dev/EspExceptionDecod Before reporting an issue, make sure you've searched for similar one that was already created. Also make sure to go through all the issues labelled as [for reference](https://github.com/espressif/arduino-esp32/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3A%22for%20reference%22%20). Finally, if you are sure no one else had the issue, follow the [ISSUE_TEMPLATE](docs/ISSUE_TEMPLATE.md) while reporting any issue. - -### Tip - -Sometimes to program ESP32 via serial you must keep GPIO0 LOW during the programming process diff --git a/docs/esp-idf_component.md b/docs/esp-idf_component.md index 17bfd66e9e3..89a660371ee 100644 --- a/docs/esp-idf_component.md +++ b/docs/esp-idf_component.md @@ -1,5 +1,5 @@ To use as a component of ESP-IDF -================================================= +================================ ## esp32-arduino-lib-builder diff --git a/docs/source/conf.py b/docs/source/conf.py index e01813abf3e..9998f252475 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -31,7 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx_copybutton' +# 'sphinx_copybutton' ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/esp-idf_component.rst b/docs/source/esp-idf_component.rst index cb9364b7252..651c8e607d4 100644 --- a/docs/source/esp-idf_component.rst +++ b/docs/source/esp-idf_component.rst @@ -1,2 +1,91 @@ -ESP-IDF as Component -==================== +Arduino as a ESP-IDF component +============================== + +ESP32 Arduino lib-builder +------------------------- + +For a simplified method, see `lib-builder `_. + +Installation +------------ + +- Download and install `ESP-IDF `_. +- Create blank idf project (from one of the examples). +- in the project folder, create a folder called components and clone this repository inside. + +.. code-block:: bash + + mkdir -p components && \ + cd components && \ + git clone https://github.com/espressif/arduino-esp32.git arduino && \ + cd arduino && \ + git submodule update --init --recursive && \ + cd ../.. && \ + idf.py menuconfig + + +- ```idf.py menuconfig``` has some Arduino options + - "Autostart Arduino setup and loop on boot" + - If you enable this options, your main.cpp should be formated like any other sketch + +.. code-block:: c + + //file: main.cpp + #include "Arduino.h" + + void setup(){ + Serial.begin(115200); + } + + void loop(){ + Serial.println("loop"); + delay(1000); + } + +- Else you need to implement ```app_main()``` and call ```initArduino();``` in it. + +Keep in mind that setup() and loop() will not be called in this case. +If you plan to base your code on examples provided in `examples `_, please make sure move the app_main() function in main.cpp from the files in the example. + +.. code-block:: cpp + + //file: main.cpp + #include "Arduino.h" + + extern "C" void app_main() + { + initArduino(); + pinMode(4, OUTPUT); + digitalWrite(4, HIGH); + //do your own thing + } + +- "Disable mutex locks for HAL" +- If enabled, there will be no protection on the drivers from concurently accessing them from another thread/interrupt/core + - "Autoconnect WiFi on boot" +- If enabled, WiFi will start with the last known configuration +- Else it will wait for WiFi.begin + +- ```idf.py -p flash monitor``` will build, upload and open serial monitor to your board + +Logging To Serial +----------------- + +If you are writing code that does not require Arduino to compile and you want your `ESP_LOGx` macros to work in Arduino IDE, you can enable the compatibility by adding the following lines after your includes: + +.. code-block:: c + + #ifdef ARDUINO_ARCH_ESP32 + #include "esp32-hal-log.h" + #endif + +FreeRTOS Tick Rate (Hz) +----------------------- + +You might notice that Arduino-esp32's `delay()` function will only work in multiples of 10ms. That is because, by default, esp-idf handles task events 100 times per second. +To fix that behavior you need to set FreeRTOS tick rate to 1000Hz in `make menuconfig` -> `Component config` -> `FreeRTOS` -> `Tick rate`. + +Compilation Errors +------------------ + +As commits are made to esp-idf and submodules, the codebases can develop incompatibilities which cause compilation errors. If you have problems compiling, follow the instructions in `Issue #1142 `_ to roll esp-idf back to a known good version. diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index d0d3c183605..bf563a028fe 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -1,6 +1,5 @@ -*************** Getting Started -*************** +=============== About Arduino ESP32 ------------------- diff --git a/docs/source/index.rst b/docs/source/index.rst index cfd63da092b..73746c0b55f 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -11,3 +11,4 @@ Welcome to ESP32 Arduino Core's documentation Libraries Library Builder ESP-IDF as Component + Troubleshooting diff --git a/docs/source/installing.rst b/docs/source/installing.rst index bfe58cb3f56..c705d18a129 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -1,12 +1,11 @@ -********** Installing -********** +========== Before Installing ----------------- -Installing using Boards Manager -------------------------------- +Installing using Boards Manager (preferred way) +----------------------------------------------- - Stable release link:: @@ -38,7 +37,7 @@ Linux ----- Debian/Ubuntu -=============== +------------- - Install latest Arduino IDE from `arduino.cc`_. @@ -75,7 +74,7 @@ Debian/Ubuntu python3 get.py Fedora -====== +------ - Install the latest Arduino IDE from `arduino.cc`_. - Command ``$ sudo dnf -y install arduino`` will most likely install an older release. @@ -97,7 +96,7 @@ Fedora - Restart Arduino IDE. openSUSE -======== +-------- - Install the latest Arduino IDE from `arduino.cc`_. diff --git a/docs/source/lib_builder.rst b/docs/source/lib_builder.rst index feb9849a376..2b9c0d8ae39 100644 --- a/docs/source/lib_builder.rst +++ b/docs/source/lib_builder.rst @@ -2,7 +2,7 @@ Library Builder =============== How to Use Library Builder -************************** +-------------------------- Espressif has provided a `tool `_ to simplify building your own compiled libraries for use in Arduino IDE (or your favorite IDE). To use it to generate custom libraries, follow these steps: diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst new file mode 100644 index 00000000000..f6e48de0ea4 --- /dev/null +++ b/docs/source/troubleshooting.rst @@ -0,0 +1,24 @@ +Troubleshotting +############### + +Common Issues +============= + +Here are some of the most common issues around ESP32 development using Arduino. + +.. note:: Please consider contributing if you found any issue with the solution here. + +Installing +========== + +Building +-------- + +Flashing +-------- + +Hardware +-------- + +- Power Source +- Bad USB cable or charging only cables From 832182c1b5fe1d1877c89d0b320955fa1c630f18 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 16:29:27 +0100 Subject: [PATCH 13/38] Docs: Fix on install guide headers --- docs/source/installing.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/installing.rst b/docs/source/installing.rst index c705d18a129..6a9e11e39ed 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -31,10 +31,10 @@ macOS, and Linux (x86, amd64, armhf and arm64). - Open Boards Manager from Tools > Board menu and install *esp32* platform (and do not forget to select your ESP32 board from Tools > Board menu after installation). Windows -------- +======= Linux ------ +===== Debian/Ubuntu ------------- @@ -152,7 +152,7 @@ Where ``~/Documents/Arduino`` represents your sketch book location as per "Ardui - Restart Arduino IDE. PlatformIO ----------- +========== - `What is PlatformIO? `_ From e892bfe462fbac67bd0031ee80cef86f88631563 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 16:42:59 +0100 Subject: [PATCH 14/38] Docs: Fix on table of contents levels --- docs/source/installing.rst | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/source/installing.rst b/docs/source/installing.rst index 6a9e11e39ed..64aa302e00e 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -1,5 +1,6 @@ +########## Installing -========== +########## Before Installing ----------------- @@ -31,13 +32,13 @@ macOS, and Linux (x86, amd64, armhf and arm64). - Open Boards Manager from Tools > Board menu and install *esp32* platform (and do not forget to select your ESP32 board from Tools > Board menu after installation). Windows -======= +------- Linux -===== +----- Debian/Ubuntu -------------- +************* - Install latest Arduino IDE from `arduino.cc`_. @@ -74,7 +75,7 @@ Debian/Ubuntu python3 get.py Fedora ------- +****** - Install the latest Arduino IDE from `arduino.cc`_. - Command ``$ sudo dnf -y install arduino`` will most likely install an older release. @@ -96,7 +97,7 @@ Fedora - Restart Arduino IDE. openSUSE --------- +******** - Install the latest Arduino IDE from `arduino.cc`_. @@ -152,7 +153,7 @@ Where ``~/Documents/Arduino`` represents your sketch book location as per "Ardui - Restart Arduino IDE. PlatformIO -========== +---------- - `What is PlatformIO? `_ From e54764489d58c98b89d491bdcffaae51a2a60001 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 17:03:40 +0100 Subject: [PATCH 15/38] Docs: Added scale opn the boards pin layout images --- docs/esp-idf_component.md | 82 ----------------------- docs/source/boards/ESP32-C3-DevKitM-1.rst | 5 +- docs/source/boards/ESP32-DevKitC-1.rst | 9 +-- docs/source/boards/ESP32-S2-Saola-1.rst | 5 +- docs/source/boards/boards.rst | 8 ++- docs/source/esp-idf_component.rst | 11 +-- docs/source/getting_started.rst | 3 +- docs/source/index.rst | 5 +- docs/source/installing.rst | 12 +++- docs/source/lib_builder.rst | 3 +- docs/source/libraries.rst | 3 +- docs/source/troubleshooting.rst | 1 + 12 files changed, 43 insertions(+), 104 deletions(-) delete mode 100644 docs/esp-idf_component.md diff --git a/docs/esp-idf_component.md b/docs/esp-idf_component.md deleted file mode 100644 index 89a660371ee..00000000000 --- a/docs/esp-idf_component.md +++ /dev/null @@ -1,82 +0,0 @@ -To use as a component of ESP-IDF -================================ - -## esp32-arduino-lib-builder - -For a simplified method, see [lib-builder](lib_builder.md) - -## Installation - -- Download and install [esp-idf](https://github.com/espressif/esp-idf) -- Create blank idf project (from one of the examples) -- in the project folder, create a folder called components and clone this repository inside - - ```bash - mkdir -p components && \ - cd components && \ - git clone https://github.com/espressif/arduino-esp32.git arduino && \ - cd arduino && \ - git submodule update --init --recursive && \ - cd ../.. && \ - idf.py menuconfig - ``` -- ```idf.py menuconfig``` has some Arduino options - - "Autostart Arduino setup and loop on boot" - - If you enable this options, your main.cpp should be formated like any other sketch - - ```arduino - //file: main.cpp - #include "Arduino.h" - - void setup(){ - Serial.begin(115200); - } - - void loop(){ - Serial.println("loop"); - delay(1000); - } - ``` - - - Else you need to implement ```app_main()``` and call ```initArduino();``` in it. - - Keep in mind that setup() and loop() will not be called in this case. - If you plan to base your code on examples provided in [esp-idf](https://github.com/espressif/esp-idf/tree/master/examples), please make sure move the app_main() function in main.cpp from the files in the example. - - ```arduino - //file: main.cpp - #include "Arduino.h" - - extern "C" void app_main() - { - initArduino(); - pinMode(4, OUTPUT); - digitalWrite(4, HIGH); - //do your own thing - } - ``` - - "Disable mutex locks for HAL" - - If enabled, there will be no protection on the drivers from concurently accessing them from another thread/interrupt/core - - "Autoconnect WiFi on boot" - - If enabled, WiFi will start with the last known configuration - - Else it will wait for WiFi.begin -- ```idf.py -p flash monitor``` will build, upload and open serial monitor to your board - -## Logging To Serial - -If you are writing code that does not require Arduino to compile and you want your `ESP_LOGx` macros to work in Arduino IDE, you can enable the compatibility by adding the following lines after your includes: - -```cpp -#ifdef ARDUINO_ARCH_ESP32 -#include "esp32-hal-log.h" -#endif -``` - -## FreeRTOS Tick Rate (Hz) - -You might notice that Arduino-esp32's `delay()` function will only work in multiples of 10ms. That is because, by default, esp-idf handles task events 100 times per second. -To fix that behavior you need to set FreeRTOS tick rate to 1000Hz in `make menuconfig` -> `Component config` -> `FreeRTOS` -> `Tick rate`. - -## Compilation Errors - -As commits are made to esp-idf and submodules, the codebases can develop incompatibilities which cause compilation errors. If you have problems compiling, follow the instructions in [Issue #1142](https://github.com/espressif/arduino-esp32/issues/1142) to roll esp-idf back to a known good version. diff --git a/docs/source/boards/ESP32-C3-DevKitM-1.rst b/docs/source/boards/ESP32-C3-DevKitM-1.rst index 348237819dd..e27ff221cfb 100644 --- a/docs/source/boards/ESP32-C3-DevKitM-1.rst +++ b/docs/source/boards/ESP32-C3-DevKitM-1.rst @@ -1,6 +1,6 @@ -****************** +################## ESP32-C3-DevKitM-1 -****************** +################## The ESP32-C3-DevKitM-1 development board is one of the Espressif official boards. This board is based on the `ESP32-C3-MINI-1`_ module, with the `ESP32-C3`_ as the core. @@ -87,6 +87,7 @@ Pin Layout .. figure:: ../_static/esp32c3_pinmap.png :align: center + :scale: 15% :alt: ESP32-C3-DevKitM-1 (click to enlarge) :figclass: align-center diff --git a/docs/source/boards/ESP32-DevKitC-1.rst b/docs/source/boards/ESP32-DevKitC-1.rst index eb2a9c0ede5..e61c235d3ba 100644 --- a/docs/source/boards/ESP32-DevKitC-1.rst +++ b/docs/source/boards/ESP32-DevKitC-1.rst @@ -1,6 +1,6 @@ -*************** +############### ESP32-DevKitC-1 -*************** +############### The `ESP32-DevKitC-1`_ development board is one of the Espressif official boards. This board is based on the `ESP32-WROVER-E`_ module, with the `ESP32`_ as the core. @@ -95,6 +95,7 @@ Pin Layout .. figure:: ../_static/esp32_pinmap.png :align: center + :scale: 15% :alt: ESP32-DevKitC-1 (click to enlarge) :figclass: align-center @@ -113,8 +114,8 @@ IO15 Pull-up Enabling/Disabling Log Print During Booting and Timing of SDIO IO5 Pull-up Timing of SDIO Slave See `ESP32`_ See `ESP32`_ ==== ========= ===================================================================== ============ ============== -Restricted Usage GPIOS ----------------------- +Restricted Usage GPIO's +----------------------- Some of the GPIO's are used for the external flash and PSRAM. These GPIO's cannot be used: diff --git a/docs/source/boards/ESP32-S2-Saola-1.rst b/docs/source/boards/ESP32-S2-Saola-1.rst index 416c6df63d7..1dca1489008 100644 --- a/docs/source/boards/ESP32-S2-Saola-1.rst +++ b/docs/source/boards/ESP32-S2-Saola-1.rst @@ -1,6 +1,6 @@ -**************** +################ ESP32-S2-Saola-1 -**************** +################ The `ESP32-S2-Saola-1`_ development board is one of the Espressif official boards. This board is based on the `ESP32-S2-WROVER`_ module, with the `ESP32-S2`_ as the core. @@ -99,6 +99,7 @@ Pin Layout .. figure:: ../_static/esp32s2_pinmap.png :align: center + :scale: 15% :alt: ESP32-S2-Saola-1 (click to enlarge) :figclass: align-center diff --git a/docs/source/boards/boards.rst b/docs/source/boards/boards.rst index cdaddce0ee1..bbe7e42cbd9 100644 --- a/docs/source/boards/boards.rst +++ b/docs/source/boards/boards.rst @@ -1,5 +1,6 @@ +###### Boards -====== +###### Espressif Boards ---------------- @@ -14,3 +15,8 @@ Espressif Boards Third Party ----------- + +Add here the third party boards, listed by vendors. + +Generic +******* diff --git a/docs/source/esp-idf_component.rst b/docs/source/esp-idf_component.rst index 651c8e607d4..eded8ff98e3 100644 --- a/docs/source/esp-idf_component.rst +++ b/docs/source/esp-idf_component.rst @@ -1,5 +1,6 @@ +############################## Arduino as a ESP-IDF component -============================== +############################## ESP32 Arduino lib-builder ------------------------- @@ -11,7 +12,7 @@ Installation - Download and install `ESP-IDF `_. - Create blank idf project (from one of the examples). -- in the project folder, create a folder called components and clone this repository inside. +- In the project folder, create a new folder called `components` and clone this repository inside the new created folder. .. code-block:: bash @@ -24,9 +25,9 @@ Installation idf.py menuconfig -- ```idf.py menuconfig``` has some Arduino options - - "Autostart Arduino setup and loop on boot" - - If you enable this options, your main.cpp should be formated like any other sketch +- The `idf.py menuconfig` has some Arduino options. + - On `Autostart Arduino setup and loop on boot`. + - If you enable this options, your main.cpp should be formated like any other sketch. .. code-block:: c diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index bf563a028fe..0e43a765c71 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -1,5 +1,6 @@ +############### Getting Started -=============== +############### About Arduino ESP32 ------------------- diff --git a/docs/source/index.rst b/docs/source/index.rst index 73746c0b55f..004007e4ca8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,8 +1,9 @@ +############################################# Welcome to ESP32 Arduino Core's documentation -============================================= +############################################# .. toctree:: - :maxdepth: 2 + :maxdepth: 3 :caption: Contents: Getting Started diff --git a/docs/source/installing.rst b/docs/source/installing.rst index 64aa302e00e..7cf11692067 100644 --- a/docs/source/installing.rst +++ b/docs/source/installing.rst @@ -140,11 +140,17 @@ macOS Where ``~/Documents/Arduino`` represents your sketch book location as per "Arduino" > "Preferences" > "Sketchbook location" (in the IDE once started). Adjust the command above accordingly if necessary! -- If you get the error below. Install the command line dev tools with xcode-select --install and try the command above again: +- If you get the error below. Install the command line dev tools with `xcode-select --install` and try the command above again: -```xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun``` +.. code-block:: bash + + xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun + +- Run the command: + +.. code-block:: bash -```xcode-select --install``` + xcode-select --install - Try `python3` instead of `python` if you get the error: `IOError: [Errno socket error] [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)` when running `python get.py` diff --git a/docs/source/lib_builder.rst b/docs/source/lib_builder.rst index 2b9c0d8ae39..a9a433941ee 100644 --- a/docs/source/lib_builder.rst +++ b/docs/source/lib_builder.rst @@ -1,5 +1,6 @@ +############### Library Builder -=============== +############### How to Use Library Builder -------------------------- diff --git a/docs/source/libraries.rst b/docs/source/libraries.rst index f0b78f4e06b..287b20979de 100644 --- a/docs/source/libraries.rst +++ b/docs/source/libraries.rst @@ -1,5 +1,6 @@ +######### Libraries -========= +######### Index ----- diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index f6e48de0ea4..2b1ee47d932 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -1,3 +1,4 @@ +############### Troubleshotting ############### From 70205d8417e7d297d6d0c99a265448adbf2a2f11 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 19:12:10 +0100 Subject: [PATCH 16/38] Docs: Added contributing file to docs source and images size modified --- docs/source/_static/linux-logo.png | Bin 0 -> 24381 bytes docs/source/_static/macos-logo.png | Bin 0 -> 23904 bytes docs/source/_static/windows-logo.png | Bin 0 -> 3455 bytes docs/source/boards/ESP32-C3-DevKitM-1.rst | 2 +- docs/source/boards/ESP32-DevKitC-1.rst | 2 +- docs/source/boards/ESP32-S2-Saola-1.rst | 2 +- docs/source/boards/boards.rst | 8 ++++- docs/source/boards/generic.rst | 19 ++++++++++++ .../source/contributing.rst | 12 ++------ docs/source/getting_started.rst | 29 ++++++++++++++++-- docs/source/index.rst | 1 + 11 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 docs/source/_static/linux-logo.png create mode 100644 docs/source/_static/macos-logo.png create mode 100644 docs/source/_static/windows-logo.png create mode 100644 docs/source/boards/generic.rst rename CONTRIBUTING.rst => docs/source/contributing.rst (88%) diff --git a/docs/source/_static/linux-logo.png b/docs/source/_static/linux-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1112db655d31bd4f0b517776d806ff1b1a6c2090 GIT binary patch literal 24381 zcmcGV^(8XzDcjL}Fch?Jy+)BvR=l@KIk zq%_hX-@QNI@4xW<;okeWKkVG|Io5004!qj+QCm+56u`0wvrl ziM4wO4SoVvw{wXz@2?#9 zxDIE5h_oc`dQ{nxx3siWSKn|;#!wU8E_(2}igPZ?SW{C1CfLV^2cq!aMCG+0XvlaUEP-HS;52@~w_3T9U7PhS~MHHtlDt zEKIi^Q=u_lzdq~6AXtkG-^h&DI_tYlR%G4s{Areb%Z;~#AlVJ}}CZT7F_hlxo)`Hm^OU#_<@ zkhZd%q?)dmCe(ZqJgiV@{mEM1XA#%ZY6zpBR-H%{6ni7(JV2kOCxyc6sH;%0DtzZj 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/macos-logo.png b/docs/source/_static/macos-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..289d1f601a25aecc21c32f9b63d5eeeaf05abd38 GIT binary patch literal 23904 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 literal 0 HcmV?d00001 diff --git a/docs/source/boards/ESP32-C3-DevKitM-1.rst b/docs/source/boards/ESP32-C3-DevKitM-1.rst index e27ff221cfb..927a94c5a4b 100644 --- a/docs/source/boards/ESP32-C3-DevKitM-1.rst +++ b/docs/source/boards/ESP32-C3-DevKitM-1.rst @@ -87,7 +87,7 @@ Pin Layout .. figure:: ../_static/esp32c3_pinmap.png :align: center - :scale: 15% + :width: 600 :alt: ESP32-C3-DevKitM-1 (click to enlarge) :figclass: align-center diff --git a/docs/source/boards/ESP32-DevKitC-1.rst b/docs/source/boards/ESP32-DevKitC-1.rst index e61c235d3ba..2bb4884bd16 100644 --- a/docs/source/boards/ESP32-DevKitC-1.rst +++ b/docs/source/boards/ESP32-DevKitC-1.rst @@ -95,7 +95,7 @@ Pin Layout .. figure:: ../_static/esp32_pinmap.png :align: center - :scale: 15% + :width: 600 :alt: ESP32-DevKitC-1 (click to enlarge) :figclass: align-center diff --git a/docs/source/boards/ESP32-S2-Saola-1.rst b/docs/source/boards/ESP32-S2-Saola-1.rst index 1dca1489008..ba45f8bc64a 100644 --- a/docs/source/boards/ESP32-S2-Saola-1.rst +++ b/docs/source/boards/ESP32-S2-Saola-1.rst @@ -99,7 +99,7 @@ Pin Layout .. figure:: ../_static/esp32s2_pinmap.png :align: center - :scale: 15% + :width: 600 :alt: ESP32-S2-Saola-1 (click to enlarge) :figclass: align-center diff --git a/docs/source/boards/boards.rst b/docs/source/boards/boards.rst index bbe7e42cbd9..b809d9c1b35 100644 --- a/docs/source/boards/boards.rst +++ b/docs/source/boards/boards.rst @@ -7,7 +7,7 @@ Espressif Boards .. toctree:: :maxdepth: 1 - :caption: Boards: + :caption: Espressif Boards: ESP32-DevKitC ESP32-S2-Saola-1 @@ -20,3 +20,9 @@ Add here the third party boards, listed by vendors. Generic ******* + +.. toctree:: + :maxdepth: 1 + :caption: Generic Boards: + + Generic \ No newline at end of file diff --git a/docs/source/boards/generic.rst b/docs/source/boards/generic.rst new file mode 100644 index 00000000000..aa6a1e2ff88 --- /dev/null +++ b/docs/source/boards/generic.rst @@ -0,0 +1,19 @@ +#################### +Generic ESP32 Boards +#################### + +Specifications +-------------- + +Header Block +------------ + +Pin Layout +---------- + +Resources +--------- + +* `ESP32`_ (Datasheet) + +.. _ESP32: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf diff --git a/CONTRIBUTING.rst b/docs/source/contributing.rst similarity index 88% rename from CONTRIBUTING.rst rename to docs/source/contributing.rst index 0c0d6936474..84040ef41af 100644 --- a/CONTRIBUTING.rst +++ b/docs/source/contributing.rst @@ -1,5 +1,6 @@ +################### Contributions Guide -=================== +################### We welcome contributions to the Arduino ESP32 project! @@ -39,12 +40,5 @@ If this process passes, it will be merged onto the public github repository. Legal Part ---------- -Before a contribution can be accepted, you will need to sign our :doc:`contributor-agreement`. You will be prompted for this automatically as part of the Pull Request process. +Before a contribution can be accepted, you will need to sign our contributor-agreement. You will be prompted for this automatically as part of the Pull Request process. -Related Documents ------------------ - -.. toctree:: - :maxdepth: 1 - - contributor-agreement diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index 0e43a765c71..8683c2d11b8 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -5,8 +5,7 @@ Getting Started About Arduino ESP32 ------------------- -How to Contribute ------------------ +Welcome to the Arduino ESP32 documentation! Here you will find important information on how to use the project. Supported SoC's --------------- @@ -23,7 +22,31 @@ ESP32-S3 No No Not Available Yet Supported Operational Systems ----------------------------- -Currently, the supported OS are: Windows, Linux and macOS. +.. toctree:: + :hidden: + + Windows + Linux + macOS + ++-------------------+-------------------+-------------------+ +| |windows-logo| | |linux-logo| | |macos-logo| | ++-------------------+-------------------+-------------------+ +| `Windows`_ | `Linux`_ | `macOS`_ | ++-------------------+-------------------+-------------------+ + +.. |windows-logo| image:: _static/windows-logo.png + :target: ../installing.html + +.. |linux-logo| image:: _static/linux-logo.png + :target: ../installing.html + +.. |macos-logo| image:: _static/macos-logo.png + :target: ../installing.html + +.. _Windows: ../installing.html +.. _Linux: ../installing.html +.. _macOS: ../installing.html .. _ESP32 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf .. _ESP32-S2 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf diff --git a/docs/source/index.rst b/docs/source/index.rst index 004007e4ca8..fa150cbc19c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,3 +13,4 @@ Welcome to ESP32 Arduino Core's documentation Library Builder ESP-IDF as Component Troubleshooting + Contributing From 0dbc17e37e8a3a4518eb8574f25626924c3f6068 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 19:16:03 +0100 Subject: [PATCH 17/38] Docs: Fixed typo --- docs/source/getting_started.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index 8683c2d11b8..598bc092ee5 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -19,8 +19,8 @@ ESP32-C3 No Yes `ESP32-C3 Datasheet`_ ESP32-S3 No No Not Available Yet ======== ====== =========== =================================== -Supported Operational Systems ------------------------------ +Supported Operating Systems +--------------------------- .. toctree:: :hidden: From fb5ee36a91aa1830985a4ed53019f523260e7cf4 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 19:21:44 +0100 Subject: [PATCH 18/38] Docs: Boards tree fixed --- docs/source/boards/boards.rst | 6 ------ docs/source/getting_started.rst | 19 ++++++------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/docs/source/boards/boards.rst b/docs/source/boards/boards.rst index b809d9c1b35..740a64214b5 100644 --- a/docs/source/boards/boards.rst +++ b/docs/source/boards/boards.rst @@ -2,9 +2,6 @@ Boards ###### -Espressif Boards ----------------- - .. toctree:: :maxdepth: 1 :caption: Espressif Boards: @@ -18,9 +15,6 @@ Third Party Add here the third party boards, listed by vendors. -Generic -******* - .. toctree:: :maxdepth: 1 :caption: Generic Boards: diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index 598bc092ee5..c534e61d9cf 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -22,13 +22,6 @@ ESP32-S3 No No Not Available Yet Supported Operating Systems --------------------------- -.. toctree:: - :hidden: - - Windows - Linux - macOS - +-------------------+-------------------+-------------------+ | |windows-logo| | |linux-logo| | |macos-logo| | +-------------------+-------------------+-------------------+ @@ -36,17 +29,17 @@ Supported Operating Systems +-------------------+-------------------+-------------------+ .. |windows-logo| image:: _static/windows-logo.png - :target: ../installing.html + :target: ../installing.html#windows .. |linux-logo| image:: _static/linux-logo.png - :target: ../installing.html + :target: ../installing.html#linux .. |macos-logo| image:: _static/macos-logo.png - :target: ../installing.html + :target: ../installing.html#macos -.. _Windows: ../installing.html -.. _Linux: ../installing.html -.. _macOS: ../installing.html +.. _Windows: ../installing.html#windows +.. _Linux: ../installing.html#linux +.. _macOS: ../installing.html#macos .. _ESP32 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf .. _ESP32-S2 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf From cbc04d0c131138196da29eefa13d7da638ff96dd Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Mon, 28 Jun 2021 21:58:45 +0100 Subject: [PATCH 19/38] Removed link from the getting started OS icons --- docs/source/getting_started.rst | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index c534e61d9cf..9573ce8676f 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -25,17 +25,12 @@ Supported Operating Systems +-------------------+-------------------+-------------------+ | |windows-logo| | |linux-logo| | |macos-logo| | +-------------------+-------------------+-------------------+ -| `Windows`_ | `Linux`_ | `macOS`_ | +| Windows | Linux | macOS | +-------------------+-------------------+-------------------+ .. |windows-logo| image:: _static/windows-logo.png - :target: ../installing.html#windows - .. |linux-logo| image:: _static/linux-logo.png - :target: ../installing.html#linux - .. |macos-logo| image:: _static/macos-logo.png - :target: ../installing.html#macos .. _Windows: ../installing.html#windows .. _Linux: ../installing.html#linux From d833fab6fd1f87c8f3ebbdd66df34ed4e954c9d8 Mon Sep 17 00:00:00 2001 From: "pedro.minatel" Date: Tue, 29 Jun 2021 15:23:05 +0100 Subject: [PATCH 20/38] Pin layout images updated and added the requirements file for sphinx extensions --- docs/requirements.txt | 5 +++++ .../_static/esp32-c3_devkitM-1_pinlayout.png | Bin 0 -> 1182027 bytes .../_static/esp32-s2_saola1_pinlayout.png | Bin 0 -> 1744570 bytes .../_static/esp32_devkitC_pinlayout.png | Bin 0 -> 1531659 bytes docs/source/_static/esp32_pinmap.png | Bin 1538663 -> 0 bytes docs/source/_static/esp32c3_pinmap.png | Bin 1192965 -> 0 bytes docs/source/_static/esp32s2_pinmap.png | Bin 1751214 -> 0 bytes docs/source/boards/ESP32-C3-DevKitM-1.rst | 5 ++++- docs/source/boards/ESP32-DevKitC-1.rst | 5 ++++- docs/source/boards/ESP32-S2-Saola-1.rst | 5 ++++- docs/source/installing.rst | 4 +++- 11 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 docs/requirements.txt create mode 100644 docs/source/_static/esp32-c3_devkitM-1_pinlayout.png create mode 100644 docs/source/_static/esp32-s2_saola1_pinlayout.png create mode 100644 docs/source/_static/esp32_devkitC_pinlayout.png delete mode 100644 docs/source/_static/esp32_pinmap.png delete mode 100644 docs/source/_static/esp32c3_pinmap.png delete mode 100644 docs/source/_static/esp32s2_pinmap.png diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000000..0e4fb8ab59c --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,5 @@ +# This is a list of python packages used to generate documentation. This file is used with pip: +# pip install --user -r requirements.txt +# +# matplotlib is currently required only by the script generate_chart.py +sphinx-copybutton==0.3.0 diff --git a/docs/source/_static/esp32-c3_devkitM-1_pinlayout.png b/docs/source/_static/esp32-c3_devkitM-1_pinlayout.png new file mode 100644 index 0000000000000000000000000000000000000000..fb22c120340aab24d4ba288fce12e3cf64a69648 GIT binary patch literal 1182027 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