> For the complete documentation index, see [llms.txt](https://libooogo.gitbook.io/esplane/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://libooogo.gitbook.io/esplane/esp32-development-notes/01esp32-ying-jian-zhun-bei-esp32devkitc-v2-board.md).

# 01 ESP32-Hardware Preparation-ESP32-DevKitC V2 board

## 一、概念梳理

### 1. 芯片/模组/核心板/开发板区别？

开始之前,有必要先梳理一下芯片、模组、核心板、开发板这些名词的含义.因为我们一般会以ESP32为关键字在淘宝搜索商品,搜索的结果往往让人眼花缭乱,如果不清楚这些概念容易入坑,我在第一次购买ESP8266时,就是因为没搞清楚概念,买了一堆模组,需要走一些飞线才能下载程序,很不方便.

![ESP32 Core Board V2](https://img-blog.csdnimg.cn/20190717175211981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

* **开发板**:如上图,整个电路板叫做开发板,开发板内集成了USB接口、稳压芯片、USB转UART芯片、ESP-WROOM-32模组、按键和指示灯,只支持正常工作的基本功能,因此也可以叫核心板.更大一些的开发板还会集成LCD、SD卡槽等等.
* **模组**:ESP-WROOM-32是ESP32模组的其中一个型号,来自乐鑫原厂.里面集成了ESP32芯片、Flash、晶振、天线等,是实现通讯功能的基本组成.国内生产ESP32模组的厂家很多,除了原厂还有小米iot、安信可系列模组等.不同的型号模组,在flash容量,天线设计等会有所区别.
* **芯片**:模组和开发板千变万化,但芯片始终出自上海乐鑫,ESP32/ESP8266等芯片也有不同的型号,具体可以查芯片手册,不同型号在RAM等资源配置上有区别.
* **2. ESP32 硬件参考选型**
* [ESP32 H/W 硬件参考](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/hw-reference/index.html)
* [官方详细选型手册](https://www.espressif.com/sites/default/files/documentation/espressif_products_ordering_information_cn.pdf)

**我们在做项目时,优先选择开发板,其次是模组,当然如果有能力搞定天线射频等,也可以选择芯片,可以使产品有更小的尺寸,更高的集成度.**

## 二、ESP32 Core Board V2原理图

### 1. 原理图预览

![ESP32 Core Board V2原理图](https://img-blog.csdnimg.cn/20190717184837230.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

### 2. 关键器件介绍

* **供电单元**:这部分很简单,5v转3.3v,平时调试可以直接使用电脑USB供电.如果使用WiFi功能,需要注意供电问题,毕竟电脑USB输出功率有限,加上劣质线缆可能有损耗,使芯片工作不稳定,直接用5v电源供电最为可靠.另外如果直接使用3.3v电源到引脚上,注意不要反接,因为3.3v输入并没有反接保护.
* **按键**:两个按键分别是复位-EN,启动选择-BOOT,EN外接了上拉电阻,BOOT的外部上拉电阻没有焊接,应该是配置了内部上拉,两个端口低电平有效.启动选择只在芯片复位时被检测一次,复位以后BOOT按钮可以当普通按钮使用.
* **LED**:板载的LED在系统通电时常亮,因此无法控制闪烁,做点灯的程序只能再外接LED.
* **ESP32 Module**:V2引出了芯片所有剩余关键,有很大的灵活性,但是如果只是使用基本的GPIO功能,要注意避开一些特殊功能的管脚,除非迫不得已.

> 需要避开的管脚包括:Strapping Pins(GPIO12(MTDI)、 GPIO0、 GPIO2、 GPIO15(MTDO)、 GPIO5)+GPIO13？ *具体原因参考 esp32\_datasheet\_en\_3.0 page:10*

* **USB转UART单元**:由于大多数个人电脑已经取消标准的RS232通信接口,因此与芯片的串口通信需要一个桥接芯片,V2板载的CP2102就是其中之一,其他比较熟悉的还有CH340等芯片.这个芯片除了完成串口通信功能外,还能在串口刷程序时,自动触发芯片进入Download Boot模式,不再需要手动按Boot按钮十分方便.

### 3、如何实现启动模式的自动切换？

#### 3.1. 硬件设计方案

芯片一般在正常工作前,会检测某些特定管脚(boot,有些芯片有多个boot引脚)的电平,来决定运行于何种模式.ESP32在复位之前如果 GPIO0 / GPIO2 同时为低电平,会进入下载模式,等待串口通信信息.如果我们拿到的是模组,下载程序时需要在复位前把这两个引脚拉低,下载完成后,再将GPIO0恢复高电平.

如果拿到的像v2这种带有cp2102的开发板,这个工作可以省去,下载程序时,会自动切换到下载模式,非常方便.这一节我们先讨论一下这种机制的硬件实现.

![USB转串口电路](https://img-blog.csdnimg.cn/20190717193641112.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

CP2102大部分的管脚是无效端口,与ESP32直接相连的有RXD、TXD,分别对应串口收发,DTR和RTS为串口的流控位,做了一个逻辑处理,然后输入到ESP32管脚上.可以通过三极管的导通性分析,注意在两个三极管都截止时,EN和IO0因为有上拉电阻,所以都为1.

![启动模式触发电路](https://img-blog.csdnimg.cn/20190717193655476.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

> 效果就是当DTR有信号(=1),RTS无信号时(=0),硬件复位(EN=0).
>
> 当DTR无信号(=0),RTS有信号时(=1),相当于BOOT按键被按下(IO0=0).

[RTS、CTS、DSR和DTR为控制信号,其含义参考: EIA RS-232-C标准](http://www.21ic.com/jichuzhishi/datasheet/RS232/ziliao/187963.html)

#### 3.2. 软件设计方案

第1小节,我们在硬件原理图上发现cp2102可以通过设置DTR和RST来触发ESP32的boot和EN.那么DTR和RST如何被触发呢？我会在下一篇文章中会从软件方面继续探究.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://libooogo.gitbook.io/esplane/esp32-development-notes/01esp32-ying-jian-zhun-bei-esp32devkitc-v2-board.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
