[ESP32学习笔记(01)]认识正点原子DNESP32S3单片机、IDE与PIO配置
学习单片机只是兴趣而已,而且不知道什么时候就会用上。在这一系列笔记中使用的单片机是正点原子DNESP32S3,单片机是在学长的推荐下买的,看起来算是比较新的型号。学习的资料为正点原子官方的手册,在这里记录一下学习的过程,也是将重点提炼出来方便后来查阅。
文章目录
认识正点原子DNESP32S3
首先,对于这一部分,我目前弄的还不是很懂。我对于单片机的初始认识来自一个选修课,老师是车辆专业的,使用的也是车辆上常用的Freescale MC9S12XS128单片机。这个“MC9S12XS128”是一块芯片,有112个引脚,我们上课时使用的开发板是老师和他的学生们在很久之前自己设计的,在实际使用的过程中是可以直接用使用手册里的引脚图与开发板上引出的引脚对应的。我在使用这款开发板时用的是芯片的手册,也就是说并没有一个现成的库供我使用,我所需要做的是直接对我想要使用的功能的寄存器写数据,至于某个位应该写0还是写1,都得查阅手册才知道。这是我对单片机的一个初步认知。
然而拿到正点原子DNESP32S3这一块开发板时,我还是有一点懵的:因为我没有看到芯片。同时,关于Arduino、ESP之类的名词之间的关系也让我眼花缭乱,一时之间不是很明白这些东西。所以接下来的这一部分大多数是东拼西凑。
认识Arduino
Arduino是一个开源的电子平台,内容包括:硬件(各种开发板等)、软件(IDE、库),以及一个生机勃勃的生态。
现今,Arduino 开发板有很多,正点原子ESP32-S3开发板也是属于Arduino开发板。
简单来说,只要是搭载Arduino支持芯片的开发板都可以称为Arduino 开发板。目前支持Arduino 开发的芯片有很多,比如Mega 系列芯片、STM32 系列芯片、ESP 系列芯片以及树莓派系列芯片等。这里的实质就是有每个系列芯片对应要有一个Arduino库,比如乐鑫官方的arduino-esp32 库,ST 的stm32duino 库,只要在Arduino安装这种芯片库便可以使用Arduino的语法在Arduino IDE 上对芯片进行开发。
以上是正点原子手册里的介绍,说实话有一些狗屁不通的地方,但是也就凑合着看看。总之,看到这里我是大概了解到这个开发板与Arduino有关系。
认识乐鑫(Espressif)
乐鑫(Espressif)是美国的一家半导体公司,这个开发板上的芯片就是它制造的,属于ESP32-S系列。
“ESP”即“Espressif System Processor(或者是Espressif Smart Platform)”,这个词组指乐鑫生产的、用于某些芯片的品牌。在开发板名称中带有这个词组的大多是使用了乐鑫生产的ESP芯片,如我在这里使用的正点原子DNESP32S3、Arduino ESP等,在上图中也可以看到乐鑫官方推出的一些开发板。
这个芯片是支持Arduino的;在这一点上我有点不知道怎么表述,总之就是可以用Arduino的IDE和语法来开发这个芯片相关的项目。在实际使用中使用的库是“arduino-esp32”,这个是Espressif官方编写的库,使用Arduino的核心来开发这个开发板。
这是这个库在Arduino IDE中的显示:
这是这个库的Github仓库:
认识ESP32S3芯片
ESP32-S3 是一款由乐鑫公司开发的物联网芯片,它具有一些非常独特的功能和特点。以下是对ESP32-S3 的初步介绍:
- 架构和性能:ESP32-S3 采用Xtensa® LX7 CPU,这是一个哈佛结构的双核系统。它具有独立的指令总线和数据总线,所有的内部存储器、外部存储器以及外设都分布在这两条总线上。这种架构使得CPU 可以同时读取指令和数据,从而提高了处理速度。
- 存储:ESP32-S3 具有丰富的存储空间。它内部有384 KB 的内部ROM,512 KB 的内部SRAM,以及8 KB 的RTC 快速存储器和8 KB 的RTC 慢速存储器。此外,它还支持最大1 GB的片外FLASH 和最大1 GB 的片外RAM。
- 外设:ESP32-S3 具有许多外设,总计有45 个模块/外设。其中11 个具有GDMA(Generic DMA)功能,可以用来进行数据块的传输,减轻CPU 的负担,提高整体性能。
- 通信:ESP32-S3 同时支持WIFI 和蓝牙功能,应用领域贯穿移动设备、可穿戴电子设备、智能家居等。在2.4GHz 频带支持20MHz 和40MHz 频宽。
- 向量指令:ESP32-S3 增加了用于加速神经网络计算和信号处理等工作的向量指令。这些向量指令可以大大提高芯片在AI 方面的计算速度和效率。
ESP32-S3 是一款功能强大、性能丰富的物联网芯片,适用于各种物联网应用场景。以上信
息仅供参考,如需了解更多信息,请访问乐鑫公司官网查询相关资料。
认识正点原子与DNESP32S3
正点原子就是这个开发板的制造商。对于这个芯片而言,它确实可以支持许多功能,诸如蓝牙、WiFi等等,但是还需要配套相关的设备。在开发板上就集成了一系列的相关设备用以支持ESP32S3的强大功能。
这个开发板并不是直接使用这个芯片,而是使用了包含这个芯片的模组。除了S3 系列的芯片之外,乐鑫还推出了S3 系列的模组,它是S3 系列芯片的简易系统。乐鑫S3 系列模组是基于S3 系列芯片的子系统,它已经设计好了外围电路,简化了开发过程,让开发者可以更快速地使用S3 系列芯片进行开发。通过使用S3 系列模组,开发者可以更容易地实现特定功能,缩短开发周期,提高开发效率。
乐鑫推出了ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U 两款通用型Wi-Fi+低功耗蓝牙MCU 模组,如下图所示,它们搭载ESP32-S3 系列芯片。除具有丰富的外设接口外,模组还拥有强大的神经网络运算能力和信号处理能力,适用于AIoT 领域的多种应用场景,例如唤醒词检测和语音命令识别、人脸检测和识别、智能家居、智能家电、智能控制面板、智能扬声器等。
从上图可知,ESP32-S3-WROOM-1 采用PCB 板载天线,而ESP32-S3-WROOM-1U 采用连接器连接外部天线。两款模组均有多种芯片型号可供选择,具体见下表所示:
正点原子DNESP32S3开发板使用的即是以上图中的ESP32-S3-WROOM-1-N16R8 模组作为主控,它可以提供稳定的控制系统和高效的数据处理能力,同时引出的IO 可以满足各种应用需求。
对于该模组的命名,解释如下:
以上是一些基础知识。更多的知识应当在后面的学习中会逐渐深入。
开发环境搭建
这一部分应该是最难的一部分,至少我在这里遇到了很多困难。首先是对于前面部分的相关概念认识不清晰,导致我有时连解决问题的办法应该如何寻找都不知道。
现在我写这篇笔记的时候其实距离我搭建开发环境已经过了很久了,因为我一开始并没有想写关于这一方面的笔记。所以以下这一部分内容不全是我的经历的复现,如果遇到了与我相似困难的人卡在了我没有写出来的问题上,可能就是我在现在尝试复现当时的经历时没有复现完全罢了。
Arduino IDE开发环境
首先,去Arduino官网下载最新的Arduino IDE。然后安装。
接下来我们要安装支持这个开发板的库。进入主界面,点击“工具”-“开发板管理器”,如下图所示:
进入之后,搜索“Espressif”,就会跳出来我们要安装的库,这个库在前文已经有展示。
这个安装其实就是先把Github上的那个仓库给克隆下来,然后配置相关的文件。但是,我用Github GUI都可以克隆的东西,Arduino IDE总是给我报错说连接不上。当时的报错是类似这样的:
不管我有没有使用魔法,都无法直接安装。后来只好参考了正点原子在B站上的视频,它提供了这个下载的文件,我们只需要将这些文件放到指定的路径下在安装就可以跳过直接下载文件这个步骤从而避免了连接不上Github的问题。如果想自己从Github上克隆的话,仓库路径应该是“C:\Users[Username]\Documents\Arduino\hardware\espressif\esp32\arduino-esp32”;如果不会这个操作的话,可以直接使用正点原子提供的文件,这一部分在B站上的视频里详细的教程,资源在正点原子的官网上有,我就不赘述了。
这一切都安装好了之后,我们就可以将开发板连接上我们的电脑了。在“工具”-“端口”处选择我们开发板连接到电脑的端口;同时,在库安装成功之后,点击“工具”-“开发板”应当会出现如下界面:
可以看到Espressif的这个库支持的芯片还挺多的。对于这个开发版,我们选择ESP32S3 Dev Module,也就是上图第一个。
也可以在“选择开发板”处点击对应端口后搜索“ESP32S3 Dev Module”,点击选择。
接下来我们来写一个简单的串口程序来测试功能。代码如下:
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Hello World!");
delay(1000);
}
编写完成之后点击“验证”,即左边的按钮:
若程序没有错误则在控制台上输出以下信息:
接下来可以上传,点击中间的按钮;注意在开发板上有两个可以查Type-C的地方,我们在连接的时候应当连接“UART”那个接口。
上传之后单片机就会运行这个程序。在界面右上角打开串口监视器,即可看到我们预期的输出:
注意这里的波特率要设置成与程序中设置的一致。
Platform IO开发环境
我本人相对于Arduino IDE更喜欢Vs Code一点,后者的速度更快,界面功能等也更多。在Vs Code中使用Platform IO拓展,可以进行对该开发板的开发使用。
首先就是下载安装Vs Code等等,打开Vs Code后安装Platform IO拓展。进入这个拓展的首页:
点击“New Project”,即可创建新项目。在创建新项目的wizard界面可以为项目命名、选择开发板、选择项目路径。但是正点原子的这个开发板并不在PIO支持的开发板之中。最接近的应该是“Espressif ESP32-S3-DevKitC-1”,这个开发板使用的模组与正点原子的这个开发板使用的模组最为接近,都是ESP32-S3-WROOM-1。在PIO的支持列表里看过之后发现其实没有能完全支持当前正点原子现在所使用的模组的开发板;另一些较为接近的是Adafruit生产的开发板,但是没有一个的Flash和PSRAM能达到这么大的。我的看法是这个东西在初学应该没有太大的影响,只要在一些小的细节上注意一下不要直接用适配于其他板子的宏应该就可以度过新手期。
新建文件的过程可能会有一点漫长,创建完成之后进入界面,我们的代码应当放在项目文件夹下的“src”文件夹里的“main.cpp”文件里。打开“main.cpp”文件,首先与Arduino IDE不同的是第一行多了一个#include <Arduino.h>
,这个就是Arduino框架相关的头文件。使用Vs Code有一个好处就是在使用宏的时候可以直接Ctrl+点击来查看宏定义。我们还是像之前那样写一个串口测试程序:
#include <Arduino.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Hello World!!");
delay(1000);
}
为了与刚才的那个程序区分开,我们将输出的内容改成“Hello World!!”,完成之后可以点击Upload上传到开发板,之后再在下面点击串口监视器即可在监视器界面看到输出的内容了。但是要注意这时候我们的波特率是115200,为了同步波特率我们要在项目文件夹下的“platformio.ini”这个初始化配置文件中加上一句monitor_speed = 115200
,像这样:
不然这个读取的时候的默认波特率设置应该不是115200而是9600,读取到的数据是乱码。
作者:Epsilon_bm