blob: aca21930429f638dd38659d8f0a261bf3d48e081 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ESP32 DevKitC &mdash; NuttX latest documentation</title>
<link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../../../_static/tabs.css" type="text/css" />
<link rel="stylesheet" href="../../../../../_static/custom.css" type="text/css" />
<link rel="shortcut icon" href="../../../../../_static/favicon.ico"/>
<!--[if lt IE 9]>
<script src="../../../../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../../../../../_static/jquery.js"></script>
<script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script>
<script src="../../../../../_static/doctools.js"></script>
<script src="../../../../../_static/sphinx_highlight.js"></script>
<script src="../../../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../../search.html" />
<link rel="next" title="ESP-WROVER-KIT" href="../esp32-wrover-kit/index.html" />
<link rel="prev" title="Espressif ESP32" href="../../index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../../../../latest" selected="selected">latest</option>
<option value="../../../../../../10.0.0" >10.0.0</option>
<option value="../../../../../../10.0.1" >10.0.1</option>
<option value="../../../../../../10.1.0" >10.1.0</option>
<option value="../../../../../../10.2.0" >10.2.0</option>
<option value="../../../../../../10.3.0" >10.3.0</option>
<option value="../../../../../../11.0.0" >11.0.0</option>
<option value="../../../../../../12.0.0" >12.0.0</option>
<option value="../../../../../../12.1.0" >12.1.0</option>
<option value="../../../../../../12.2.0" >12.2.0</option>
<option value="../../../../../../12.2.1" >12.2.1</option>
<option value="../../../../../../12.3.0" >12.3.0</option>
<option value="../../../../../../12.4.0" >12.4.0</option>
<option value="../../../../../../12.5.0" >12.5.0</option>
<option value="../../../../../../12.5.1" >12.5.1</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../../../index.html">Supported Platforms</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../../../arm/index.html">ARM</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../../risc-v/index.html">RISC-V</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../../sim/index.html">Simulators</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../../../index.html">Xtensa</a><ul class="current">
<li class="toctree-l3 current"><a class="reference internal" href="../../index.html">Espressif ESP32</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="../../index.html#toolchain">Toolchain</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#flashing">Flashing</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#peripheral-support">Peripheral Support</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#memory-map">Memory Map</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#bit-timers">64-bit Timers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#watchdog-timers">Watchdog Timers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#smp">SMP</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#wifi">WiFi</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#wifi-softap">WiFi SoftAP</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#bluetooth">Bluetooth</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#using-qemu">Using QEMU</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../index.html#things-to-do">Things to Do</a></li>
<li class="toctree-l4 current"><a class="reference internal" href="../../index.html#supported-boards">Supported Boards</a><ul class="current">
<li class="toctree-l5 current"><a class="current reference internal" href="#">ESP32 DevKitC</a></li>
<li class="toctree-l5"><a class="reference internal" href="../esp32-wrover-kit/index.html">ESP-WROVER-KIT</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../../glossary.html">Glossary</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../../../index.html">Supported Platforms</a></li>
<li class="breadcrumb-item"><a href="../../../index.html">Xtensa</a></li>
<li class="breadcrumb-item"><a href="../../index.html">Espressif ESP32</a></li>
<li class="breadcrumb-item active">ESP32 DevKitC</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../../_sources/platforms/xtensa/esp32/boards/esp32-devkitc/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="esp32-devkitc">
<h1>ESP32 DevKitC<a class="headerlink" href="#esp32-devkitc" title="Permalink to this heading"></a></h1>
<p>The <a class="reference external" href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/modules-and-boards.html#esp32-devkitc-v4">ESP32 DevKitC</a> is a development board for the ESP32 SoC from Espressif, based on a ESP-WROOM-32 module. You can find the original V2 version and the newer V4 variant. They are
pin compatible.</p>
<table class="docutils align-center">
<tbody>
<tr class="row-odd"><td><figure class="align-center" id="id3">
<img alt="../../../../../_images/esp32-core-board-v2.jpg" src="../../../../../_images/esp32-core-board-v2.jpg" />
<figcaption>
<p><span class="caption-text">ESP32 DevKitC/Core V2</span><a class="headerlink" href="#id3" title="Permalink to this image"></a></p>
</figcaption>
</figure>
</td>
<td><figure class="align-center" id="id4">
<img alt="../../../../../_images/esp32-devkitc-v4-front.jpg" src="../../../../../_images/esp32-devkitc-v4-front.jpg" />
<figcaption>
<p><span class="caption-text">ESP32 DevKitC V4</span><a class="headerlink" href="#id4" title="Permalink to this image"></a></p>
</figcaption>
</figure>
</td>
</tr>
</tbody>
</table>
<section id="features">
<h2>Features<a class="headerlink" href="#features" title="Permalink to this heading"></a></h2>
<blockquote>
<div><ul class="simple">
<li><p>ESP32 WROOM Module</p></li>
<li><p>USB-to-UART bridge via micro USB port</p></li>
<li><p>Power LED</p></li>
<li><p>EN and BOOT buttons (BOOT accessible to user)</p></li>
<li><p>SPI FLASH (size varies according to model</p></li>
</ul>
</div></blockquote>
</section>
<section id="serial-console">
<h2>Serial Console<a class="headerlink" href="#serial-console" title="Permalink to this heading"></a></h2>
<p>UART0 is, by default, the serial console. It connects to the on-board
CP2102 converter and is available on the USB connector USB CON8 (J1).</p>
<p>It will show up as /dev/ttypUSB[n] where [n] will probably be 0 (is it 1
on my PC because I have a another device at ttyUSB0).</p>
</section>
<section id="buttons-and-leds">
<h2>Buttons and LEDs<a class="headerlink" href="#buttons-and-leds" title="Permalink to this heading"></a></h2>
<section id="buttons">
<h3>Buttons<a class="headerlink" href="#buttons" title="Permalink to this heading"></a></h3>
<p>There are two buttons labeled Boot and EN. The EN button is not available
to software. It pulls the chip enable line that doubles as a reset line.</p>
<p>The BOOT button is connected to IO0. On reset it is used as a strapping
pin to determine whether the chip boots normally or into the serial
bootloader. After reset, however, the BOOT button can be used for software
input.</p>
</section>
<section id="leds">
<h3>LEDs<a class="headerlink" href="#leds" title="Permalink to this heading"></a></h3>
<p>There are several on-board LEDs for that indicate the presence of power
and USB activity. None of these are available for use by software.</p>
</section>
</section>
<section id="ethernet">
<h2>Ethernet<a class="headerlink" href="#ethernet" title="Permalink to this heading"></a></h2>
<p>ESP32 has a 802.11 hardware MAC, so just connects to external PHY chip.
Due to the limited number of GPIOs in ESP32, it’s recommended to use RMII to
connect to an external PHY chip. Current driver also only supports RMII option.</p>
<p>The RMII GPIO pins are fixed, but the SMI and functional GPIO pins are optional.</p>
<p>RMII GPIO pins are as following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>ESP32 GPIO PHY Chip GPIO
IO25 &lt;--&gt; RXD[0]
IO26 &lt;--&gt; RXD[1]
IO27 &lt;--&gt; CRS_DV
IO0 &lt;--&gt; REF_CLK
IO19 &lt;--&gt; TXD[0]
IO21 &lt;--&gt; TX_EN
IO22 &lt;--&gt; TXD[1]
</pre></div>
</div>
<p>SMI GPIO pins (default option) are as following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>ESP32 GPIO PHY Chip GPIO
IO18 &lt;--&gt; MDIO
IO23 &lt;--&gt; MDC
</pre></div>
</div>
<p>Functional GPIO pins(default option) are as following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>ESP32 GPIO PHY Chip GPIO
IO5 &lt;--&gt; Reset_N
</pre></div>
</div>
<p>Espressif has an <a class="reference external" href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-ethernet-kit.html">official Ethernet development
board</a>.</p>
<p>This driver has been tested according to this board and ESP32 core
board + LAN8720 module. If users have some issue about using this driver,
please refer the upper official document, specially the issue that GPIO0
causes failing to bring the ESP32 chip up.</p>
</section>
<section id="pin-mapping">
<h2>Pin Mapping<a class="headerlink" href="#pin-mapping" title="Permalink to this heading"></a></h2>
<div class="admonition-todo admonition" id="id2">
<p class="admonition-title">Todo</p>
<p>To be updated</p>
</div>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Pin</p></th>
<th class="head"><p>Signal</p></th>
<th class="head"><p>Notes</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>?</p></td>
<td><p>?</p></td>
<td><p>?</p></td>
</tr>
</tbody>
</table>
</section>
<section id="configurations">
<h2>Configurations<a class="headerlink" href="#configurations" title="Permalink to this heading"></a></h2>
<section id="nsh">
<h3>nsh<a class="headerlink" href="#nsh" title="Permalink to this heading"></a></h3>
<p>Basic NuttShell configuration (console enabled in UART0, exposed via
USB connection by means of CP2102 converter, at 115200 bps).</p>
</section>
<section id="wapi">
<h3>wapi<a class="headerlink" href="#wapi" title="Permalink to this heading"></a></h3>
<p>Enables WiFi support. You can define your credentials this way:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ make menuconfig
-&gt; Application Configuration
-&gt; Network Utilities
-&gt; Network initialization (NETUTILS_NETINIT [=y])
-&gt; WAPI Configuration
</pre></div>
</div>
<p>Or if you don’t want to keep it saved in the firmware you can do it
at runtime:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; wapi psk wlan0 mypasswd 1
nsh&gt; wapi essid wlan0 myssid 1
nsh&gt; renew wlan0
</pre></div>
</div>
</section>
<section id="wifinsh">
<h3>wifinsh<a class="headerlink" href="#wifinsh" title="Permalink to this heading"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">wifinsh</span></code> is similar to the <code class="docutils literal notranslate"><span class="pre">wapi</span></code> board example, but it will connect
automatically to your Access Point (Wi-Fi Router) and will run telnet daemon
in the board. Then you can connect to your board from your computer using the
telnet program.</p>
<p>After configuring the <code class="docutils literal notranslate"><span class="pre">esp32-devkit:wifinsh</span></code> you need to define your creden-
tials in the menuconfig. You can define your credentials this way:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ make menuconfig
-&gt; Application Configuration
-&gt; Network Utilities
-&gt; Network initialization (NETUTILS_NETINIT [=y])
-&gt; WAPI Configuration
</pre></div>
</div>
<p>Find your board IP using <code class="docutils literal notranslate"><span class="pre">nsh&gt;</span> <span class="pre">ifconfig</span></code> and then from your computer:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ telnet 192.168.x.y
</pre></div>
</div>
<p>Where x and y are the last two numbers of the IP that your router gave to
your board.</p>
</section>
<section id="mqttc">
<h3>mqttc<a class="headerlink" href="#mqttc" title="Permalink to this heading"></a></h3>
<p>This configuration tests the MQTT-C publisher example.</p>
<p>From the host, start the broker and subscribe to the <code class="code docutils literal notranslate"><span class="pre">test</span></code> topic. Using
<cite>mosquitto</cite> this should be:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ mosquitto&amp;
$ mosquitto_sub -t test
</pre></div>
</div>
<p>From the NSH, connect to an access point:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; wapi psk wlan0 mypasswd 1
nsh&gt; wapi essid wlan0 myssid 1
nsh&gt; renew wlan0
</pre></div>
</div>
<p>Publish to the broker:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; mqttc_pub -h 192.168.1.11
</pre></div>
</div>
<p>The default behavior is to publish the message <code class="code docutils literal notranslate"><span class="pre">test</span></code>. The following should be
outputted:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; mqttc_pub -h 192.168.1.11
Success: Connected to broker!
Success: Published to broker!
Disconnecting from 192.168.1.11
</pre></div>
</div>
<p>From the host the message <code class="code docutils literal notranslate"><span class="pre">test</span></code> should be outputted.</p>
</section>
<section id="smp">
<h3>smp<a class="headerlink" href="#smp" title="Permalink to this heading"></a></h3>
<p>Another NSH configuration, similar to nsh, but also enables
SMP operation. It differs from the nsh configuration only in these
additional settings:</p>
<p>SMP is enabled:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>CONFIG_SMP=y
CONFIG_SMP_NCPUS=2
CONFIG_SPINLOCK=y
</pre></div>
</div>
<p>The apps/testing/smp test is included:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>CONFIG_TESTING_SMP=y
CONFIG_TESTING_SMP_NBARRIER_THREADS=8
CONFIG_TESTING_SMP_PRIORITY=100
CONFIG_TESTING_SMP_STACKSIZE=2048
</pre></div>
</div>
</section>
<section id="ostest">
<h3>ostest<a class="headerlink" href="#ostest" title="Permalink to this heading"></a></h3>
<p>This is the NuttX test at apps/testing/ostest that is run against all new
architecture ports to assure a correct implementation of the OS. The default
version is for a single CPU but can be modified for an SMP test by adding:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>CONFIG_SMP=y
CONFIG_SMP_NCPUS=2
CONFIG_SPINLOCK=y
</pre></div>
</div>
</section>
<section id="mcp2515">
<h3>mcp2515<a class="headerlink" href="#mcp2515" title="Permalink to this heading"></a></h3>
<p>This config is used to communicate with MCP2515 CAN over SPI chip.
SPI3 is used and kept with the default IOMUX pins, i.e.:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>CS --&gt; 5
SCK --&gt; 18
MOSI --&gt; 23
MISO --&gt; 19
</pre></div>
</div>
<p>The MCP2515 interrupt (INT) pin is connected to the pin 22 of the
ESP32-Devkit.</p>
</section>
<section id="mmcsdspi">
<h3>mmcsdspi<a class="headerlink" href="#mmcsdspi" title="Permalink to this heading"></a></h3>
<p>This config tests the SPI driver by connecting an SD Card reader over SPI.
SPI2 is used and kept with the default IOMUX pins, i.e.:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>CS --&gt; 15
SCK --&gt; 14
MOSI --&gt; 13
MISO --&gt; 12
</pre></div>
</div>
<p>Once booted the following command is used to mount a FAT file system:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; mount -t vfat /dev/mmcsd0 /mnt
</pre></div>
</div>
</section>
<section id="module">
<h3>module<a class="headerlink" href="#module" title="Permalink to this heading"></a></h3>
<p>This config is to run apps/examples/module.</p>
</section>
<section id="sotest">
<h3>sotest<a class="headerlink" href="#sotest" title="Permalink to this heading"></a></h3>
<p>This config is to run apps/examples/sotest.</p>
</section>
<section id="spiflash">
<h3>spiflash<a class="headerlink" href="#spiflash" title="Permalink to this heading"></a></h3>
<p>This config tests the external SPI that comes with an ESP32 module connected
through SPI1.</p>
<p>By default a SmartFS file system is selected.
Once booted you can use the following commands to mount the file system:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; mksmartfs /dev/smart0
nsh&gt; mount -t smartfs /dev/smart0 /mnt
</pre></div>
</div>
<p>Note that mksmartfs is only needed the first time.</p>
</section>
<section id="psram">
<h3>psram<a class="headerlink" href="#psram" title="Permalink to this heading"></a></h3>
<p>This config tests the PSRAM driver over SPIRAM interface.
You can use the ramtest command to test the PSRAM memory. We are testing
only 64KB on this example (64 * 1024), but you can change this number to
2MB or 4MB depending on PSRAM chip used on your board:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; ramtest -w 0x3F800000 65536
RAMTest: Marching ones: 3f800000 65536
RAMTest: Marching zeroes: 3f800000 65536
RAMTest: Pattern test: 3f800000 65536 55555555 aaaaaaaa
RAMTest: Pattern test: 3f800000 65536 66666666 99999999
RAMTest: Pattern test: 3f800000 65536 33333333 cccccccc
RAMTest: Address-in-address test: 3f800000 65536
</pre></div>
</div>
</section>
<section id="timer">
<h3>timer<a class="headerlink" href="#timer" title="Permalink to this heading"></a></h3>
<p>This config test the general use purpose timers. It includes the 4 timers,
adds driver support, registers the timers as devices and includes the timer
example.</p>
<p>To test it, just run the following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; timer -d /dev/timerx
</pre></div>
</div>
<p>Where x in the timer instance.</p>
</section>
<section id="watchdog">
<h3>watchdog<a class="headerlink" href="#watchdog" title="Permalink to this heading"></a></h3>
<p>This config test the watchdog timers. It includes the 2 MWDTS,
adds driver support, registers the WDTs as devices and includes the watchdog
example.</p>
<p>To test it, just run the following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nsh&gt; wdog -d /dev/watchdogx
</pre></div>
</div>
<p>Where x in the watchdog instance.</p>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../../index.html" class="btn btn-neutral float-left" title="Espressif ESP32" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../esp32-wrover-kit/index.html" class="btn btn-neutral float-right" title="ESP-WROVER-KIT" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2020, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>