新星杯-ESP32智能硬件开发--ESP32开发环境

本博文内容导读📕🎉🔥

1、ESP32系统的集成开发环境

2、ESP32官方开发环境、ESP-IDF的安装和运行

3、Visual Studio Code、Arduino、MicroPython开发环境在ESP32开发板上的开发方法、 MicroPython开发工具。

开发ESP32程序的软、硬件资源,ESP32开发板、USB数据线(A转Micro-B)、PC(Windows、Linux或Mac OS)

ESP-IDF目前已服务支持数以亿计的物联网设备,并已开发构建多种物联网产品,

例如:照明、消费电子大小家电、支付终端、工控等各类物联网设备。

具有如下特点:

•免费开源: ESP-IDF相关资源已在GitHub上免费开放。用户可在Apache2.0许可下以源代码形式获取ESP-IDF大多数组件,或通过兼容许可证获取第三方组件。

•专业稳定: ESP-IDF具有清晰、严格的发布流程和支持策略,确保用户选择使用稳定 的发布版本,并可持续获得适用于其应用的重要修复程序。每个稳定的发布版本均经过严格的测试流程,以确保版本稳定,客户可快速实现量产。

•功能重构: ESP-IDF集成了大量的软件组件,包括RTOS、外设驱动程序、网络栈、多种协议实现技术以及常见应用程序的使用助手。它提供了典型应用程序所需的大部分构建块,用户在开发应用时只需专注于业务逻辑即可。ESP-IDF不仅具有免费开源的开发工具,还支持Eclipse和VS Code等IDE,确保其易于开发人员使用。

•资源丰富: ESP-IDF 提供详尽的软件组件使用和设计文档,有助于开发人员充分理解ESP-IDF功能,并从中挑选最适合构建其应用程序的模块。ESP-IDF包含100 多个示例,详细说明了其组件及硬件外设的功能和用法。它们经过了严格的测试和维护,是用户开启应用开发的有效参考。

ESP-IDF开发环境的系统功能:

包括了底层硬件支撑、外设驱动、WiFi、蓝牙、TCP/IP、各类库文件、安全机制、工程示例以及第三方支持等。

ESP-IDF需要安装一些必备工具,才能围绕ESP32构建固件,包括Python、Git、交叉编译器、CMake和Ninja编译工具等。

复制代码
https://dl.espressif.cn/dl/esp-idf/?idf=4.4

https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/get-started/index.html

运行Hello world

在开发之前,通过micro-USB接口将ESP32开发板接入计算机,Windows系统开始识别硬件。

一般情况下,当ESP32开发板与PC连接时,对应驱动程序已经被打包在操作系统中,可以自动安装。

右击Windows系统桌面上的"此电脑",依次单击"属性"、"设备管理器"、"端口(COM和LPT)"。Silicon Labs CP210x USB to UART Bridge(COM3),即为ESP32开发板所在的端口。

如果不能正确识别ESP32开发板硬件,就会在PC端口出现带有感叹号的设备,这就需手动安装驱动程序。

首先,在乐鑫官方网站下载对应开发板的驱动程序,其次,在计算机上安装,重启即可。

通过命令行运行

通过Eclipse集成开发环境运行

ESP-IDF构建系统

1.基本概念

•项目:特指一个目录,其中包含了构建可执行应用程序所需的全部文件和配置,以及其他支持型文件,例如,分区表、数据/文件系统分区和引导程序。

•项目配置:保存在项目根目录下名为sdkconfig的文件中,可以通过idf.py menuconfig进行修改,且一个项目只能包含一个项目配置。

•应用程序:是由ESP-IDF构建得到的可执行文件。一个项目通常会构建两个应用程序:项目应用程序(可执行的主文件,即用户自定义的固件)和引导程序(启动并初始化项目应用程序)。

•组件:是模块化且独立的代码,会被编译成静态库(.a文件)并链接到应用程序。部分组件由ESP-IDF官方提供,其他组件则来源于相关开源项目。

•目标:特指运行构建后应用程序的硬件设备。ESP-IDF当前仅支持ESP32这一个硬件目标。 请注意,以下内容并不属于项目的组成部分:

•ESP-IDF并不是项目的一部分,它独立于项目,通过IDF_PATH环境变量(保存esp-idf目录的路径)链接到项目,从而将IDF框架与项目分离。

•交叉编译工具链并不是项目的组成部分,它应该安装在系统PATH环境变量中。

2.项目示例

一个ESP-IDF项目可以看作是多个不同组件的集合,ESP-IDF可以显式地指定和配置每个组件。在构建项目时,构建系统会前往ESP-IDF目录、项目目录和用户自定义目录(可选)中查找所有组件,允许用户通过文本菜单系统配置ESP-IDF项目中用到的每个组件。在所有组件配置结束后构建系统开始编译整个项目。

3.项目CMakeLists文件

每个项目都有一个顶层CMakeLists.txt文件,包含整个项目的构建设置。默认情况下,项目CMakeLists文件会非常小。

4.组件CMakeLists文件

每个项目都包含一个或多个组件,这些组件可以是ESP-IDF的一部分,也可以是项目自身组件目录的一部分,从自定义组件目录添加。组件是COMPONENT_DIRS列表中包含CMakeLists.txt文件的任何目录。

5.组件配置

每个组件都可以包含一个Kconfig文件,和CMakeLists.txt放在同一目录下。Kconfig文件中包含要添加到该组件配置菜单中的一些配置设置信息。运行menuconfig时,可以在 Component Settings 菜单栏下找到这些设置。

创建一个组件的Kconfig文件,最简单的方法就是使用ESP-IDF中现有的Kconfig文件作为模板,在此基础上进行修改。

6.使用idf.py命令构建系统

• idf.py命令行工具提供一个前端,可以轻松管理项目的构建过程,管理工具如下:

• CMake,配置待构建的系统。

• 命令行构建工具(Ninja或GNU Make)。

• esptool.py,烧录ESP32。

• idf.py应运行在ESP-IDF的项目目录下,即包含CMakeLists.txt文件的目录。仅包含Makefile的老式项目并不支持idf.py。运行idf.py --help可以查看完整的命令列表。

ESP-IDF插件安装

Visual Studio Code(VS Code)是Microsoft运行于Windows、Mac OS X和Linux之上的跨平台源代码编辑器。具有对JavaScript、TypeScript和Node.js的内置支持,并具有丰富的其他语言(C++、C#、Java、Python、PHP、Go)和运行时扩展的生态系统。

默认上一节ESP-IDF开发环境已经安装成功。下面针对ESP-IDF在VS Code中的安装步骤,要求已经安装Python、Git和ESP--IDF目录。

(1)打开VS Code界面。

(2)单击左侧上部最下面的扩展图标,在文本框中输入"Chinese Simplified",安装简体中文插件,重启VS Code即可。

(3)单击扩展图标,在搜索文本框中输入"Espressif IDF"。

(4)单击安装 Visual Studio Code(VS Code)是Microsoft运行于Windows、Mac OS X和Linux之上的跨平台源代码编辑器。具有对JavaScript、TypeScript和Node.js的内置支持,并具有丰富的其他语言(C++、C#、Java、Python、PHP、Go)和运行时扩展的生态系统。 要求已经安装Python、Git和ESP--IDF目录。

(5)打开菜单栏,单击查看,命令面板...,输入configure ESP...。

(6)单击EXPRESS,由于上一节已经安装了所有的工具,每个工具选择已经安装的目录即可。 (7)安装完成后,左下角的几个重要图标,分别是连接串口、构建工程、烧录程序和监视运行结果。

运行第一个程序

(1)打开文件夹。单击界面的菜单栏,打开已经安装的hello_world文件夹,文件夹中的文件出现在左侧的导航栏中,结构十分清晰。单击hello_world_main.c文件,右侧出现相关内容,工程中所有的文件在这里可以进行编辑。

(2)单击左下角的连接串口图标,在窗口上方会出现串口选择,单击ESP32开发板所有的串口,本开发板使用的是COM3,单击选择。

(3)构建工程,单击左下角的构建图标,在右侧下面的窗口出现编译信息。

(4)单击左下角的烧录图标,窗口上方出现烧录方式,选择UART,在右侧下面的窗口出现烧录信息。

(5)单击监控器,观看程序运行结果,在右侧下方的窗口,出现运行结果。 至此,使用VS Code进行ESP32项目开发,已经成功完成,所有的项目都可以通过VS Code进行开发。可以看到,由于使用图形界面,开发效率有很大的提升。

Arduino开发环境

Arduino IDE是高效实用的Arduino程序开源电子原型平台代码编程辅助工具,ESP32支持使用Arduino进行项目开发,本节包括ESP32插件在Arduino平台的安装以及运行一个程序的具体步骤。

运行第一个程序

成功为Arduino IDE安装了ESP32插件,同时ESP32开发板也已经通过端口选择成功。下面运行一个具体程序。

(1)打开菜单栏的"文件、示例"。

(2)本程序的功能是打印芯片的信息到串口。

(3)单击上传按钮,开始编译和烧录。

(4)单击右上角监视器按钮,打开监视器,查看程序运行结果。

MicroPython开发环境

MicroPython是Python 3语言的精简高效实现,包括Python标准库的一小部分,经过优化可在微控制器和受限环境中运行。MicroPython包含了诸如交互式提示、任意精度整数、关闭、列表解析、生成器、异常处理等高级功能。

MicroPython旨在尽可能与普通Python兼容,将代码从桌面传输到微控制器或嵌入式系统。MicroPython运行完整的Python编译器和运行时,可以获得交互式提示(REPL),以便立即执行命令,以及从内置文件系统运行和导入脚本的功能。REPL具有历史记录,选项卡完成,自动缩进和粘贴模式,以获得良好的用户体验。

开发的准备工作

MicroPython可以在多种嵌入式硬件平台上运行,目前已经支持ESP8266/ESP32、STM32,CC3200、dsPIC33、MK20DX256、nRF51/nRF52、MSP432、XMC4700等多个平台。

其中,ESP8266/ESP32硬件是目前最完善的功能平台之一。要在ESP32开发板上使用Python进行开发,下载ESP32开发板的固件。

固件分为两种,分别是ESP-IDF v3.x和ESP-IDF v4.x,后者的支持功能较多,建议选择。根据开发板是否支持SPIRAM,选择GENERIC或GENERIC-SPIRAM。

下载地址:

http://www.micropython.org/

http://download3.dfrobot.com.cn/uPyCraft/

https://thonny.org/

uPyCraft开发工具

uPyCraft是一款专门为MicroPython设计的IDE。为了用户使用便捷,uPyCraft在所有系统上都采用绿色免安装的形式发布。uPyCraft界面简洁,容易入门,可以直接在ESP32开发板上烧录MicroPython固件,不需要使用esptool进行烧录,大大提高操作的简便性。本书选择版本V1.1进行下载和使用。

该软件为绿色开发工具,不需要安装,直接运行即可,界面如图3-29所示,左侧是导航栏,右侧是经常用到的主要功能按钮。单击菜单栏的"Tools、Serial",选择开发板所在的串口,本书用COM3,读者选择自己计算机安装时的开发板串口。

单击菜单栏的"Tools、BurnFirmware",出现烧录固件的界面,board选择esp32,burn_addr选择0x1000,erase_flash选择yes。Firmware Choose点选Users,选择已经下载好的固件文件,单击OK,等待完成固件烧录。

该开发环境自带一些案例,下面打开一个示例analogRead.py。

打开示例后,重新通过菜单栏"Tools,Serial",选择串口,然后单击右侧工具栏中的运行按钮。由于引脚是空的,下方的信息栏不断变化是随机的模拟值。

如果在开发环境的workSpace下运行程序,离开开发环境后,程序不能在ESP32开发板运行,这适合开发程序时使用,不必每次重烧固件。

如果离开开发环境仍然可以在开发板执行程序,那么文件的名字应为main.py,并将文件存储在设备上,这样每次ESP32开发板加电,默认执行main.py中的代码。但是main.py文件存储在开发板上,每次关闭开发环境,重新将ESP32开发板接入到计算机,都要重新烧录固件。

Thonny开发工具

Thonny是一款Python编辑器,基于Python内置图形库Tkinter开发出来的,支持Windows、Mac、Linux多平台,支持语法着色、代码自动补全、调试等功能,软件非常容易入门,在官网上选择下载自己系统的版本。

(1)打开开发环境,单击菜单栏的"工具、设置、解释器",解释器和端口的选择。

(2)单击"Install or update firmware",选择端口和固件位置,单击"安装",等待完成。

(3)连接LED正极到开发板14引脚,负极连接到ESP32开发板的GND。

(4)打开菜单栏"文件、新文件"、输入代码并保存,选择"此电脑或者MicroPython设备"都可以,单击下载运行按钮,即可运行。

(5)如果上一步选择了"此电脑",则程序只能在开发环境下运行。如果上一步选择了"MicroPython设备",则离开Thonny开发环境,重新加电,程序仍然可以正常运行,也就是MicroPython设备是从main.py开始执行的。

如果在开发环境的"此电脑"下运行程序,离开开发环境后,程序不能在ESP32开发板运行,这适合开发程序时使用,不必每次重烧固件。

如果离开开发环境仍然要在开发板上执行程序,那么文件的名字应为main.py,并将文件存储在"MicroPython设备"上,这样每次ESP32开发板加电,默认执行main.py中的代码。但是,main.py文件存储在开发板上,每次关闭开发环境,重新将ESP32开发板接入到计算机,都要重新烧录固件。

MicroPython主要模块

本节针对ESP32常用的MicroPython模块进行简单介绍,以便读者快速学习。主要的模块有通用硬件控制machine以及子模块、网络network、延时和时间time,下面分别总结其用法。

1.machine模块

|---------------------------|------------------------------------|
| 函数名称 | 功能描述 |
| machine.reset() | 重置设备,与按下外部RESET按钮类似 |
| machine.reset_cause() | 获取重置的原因,可能的返回值为常量 |
| machine.disable_irq() | 禁用中断请求,返回IRQ状态:False/True分别对应禁用/启用 |
| machine.enable_irq(state) | 启用中断请求,state为True(默认)则启用,False则禁用 |
| machine.idle() | 把时钟拨到中央处理器上,在一定时间内减少能量消耗 |
| machine.sleep() | 终止cpu并禁用除WLAN外的所有外围设备 |
| machine.deepsleep() | 终止cpu和所有外围设备(包括网络接口) |
| machine.unique_id() | 返回一个具有开发板/SoC唯一标识符的字节字符串 |
| 常量 | |

此外,machine模块包括常量和重要的类。

IRQ唤醒值常量包括machine.IDLE、machine.SLEEP、machine.DEEPSLEEP。

重置原因常量包括machine.DEEPSLEEP_RESET、machine.PWRON_RESET、machine.HARD_RESET、machine.WDT_RESET、machine.SOFT_RESET;唤醒原因常量,包括machine.WLAN_WAKE、machine.PIN_WAKE、machine.RTC_WAKE。

重要的类:Pin类,控制I/O引脚。Signal类,控制和感应外部I/O设备。UART类,双工串行通信总线。SPI类,串行外设接口总线协议(主机)。I2C类,双线串行协议。RTC类,实时时钟。定时器类,控制硬件定时器。WDT类,看门狗定时器。

1.Pin类

Pin类主要用于控制I/O引脚,引脚对象用于控制I/O引脚。Pin对象通常与一个可驱动输出电压和读取输入电压的引脚相关联。引脚类有设置引脚模式(IN、OUT等)以及设置数字逻辑的方法。对引脚的模拟控制,例如,ADC。

引脚对象通过使用明确指定某个I/O引脚的标识符来构建。每一个标识符都对应到一个引脚,标识符可能是整数、字符串或者一个带有端口和引脚编号的元组。

2.Signal类

Signal类用于控制和感应外部I/O设备,信号类是引脚类的简单延伸。信号类增加了对引脚功能的逻辑反转支持。虽然只是简单的补充,但主要为了支持不同开发板移植,是MicroPython的主要目标之一。根据MicroPython给出的定义,以下为信号和引脚的使用指南:

使用信号:要控制一个类似LED、多段指示器、继电器、蜂鸣器等简单开/关(包括软件PWM)设备,或读取类似常开或常闭按钮、拉高或拉低、磁簧开关、水分/火焰检测器等简单的二进制传感器。总之,需要GPIO访问的真实物理设备/传感器,可能需要使用信号。

  1. UART类

UART类实现的标准UART/USART双向串行通信协议。其物理层包括两条线:RX和TX,通信单元是一个可为8位或9位宽的字符。

  1. SPI类 串行外设的接口总线协议SPI,由主机驱动的同步串行协议。总线的物理层包括3条线:SCK、MOSI、MISO。多个设备可共享同一总线。每台设备应有一个单独的SS信号(从属选择),在总线上选择一台特定设备以进行通信。SS信号的处理应在用户编码(通过machine.Pin类)中进行。

5.I2C类

I2C是一个设备间通信的双线串行协议。其物理层包含两条线:SCL和SDA,分别为时钟和数据线。I2C对象在特定总线上创建,可在创建时或创建后初始化。

硬件和软件I2C实现都通过machine.I2C和machine.SoftI2C类。硬件I2C使用系统的底层硬件支持来执行读/写操作,通常高效且快速,但可能会限制使用哪些引脚。软件I2C可以在任何引脚上使用,但效率不高。二者具有可用的相同方法,区别在于它们的构造方式。

  1. RTC类

实时时钟RTC是一个独立的时钟,可追踪日期和时间。

  1. Timer类

Timer类是硬件定时器处理周期和事件的时间。在MCUs和SoCs中,定时器可能是最为灵活和异构的硬件,其根据模型不同而大有不同。MicroPython的Timer类使用一个给定周期定义执行回调的基线操作,并允许特定板来定义更多非标准行为。

8.WDT类

看门狗定时器WDT类,用于在应用程序崩溃且最终进入不可恢复状态时重启系统。一旦开始,就不可停止或重新配置。启用后,应用需定期"喂养"看门狗,以防止其终止并重置系统。

ESP/ESP32模块 特定函数方法

|---------------------------------------|----------------------------------------------------------------------------------------------|
| 方法 | 功能描述 |
| esp.flash_size() | 读取Flash存储器的大小 |
| esp.flash_user_start() | 读取用户闪存空间开始的内存偏移量 |
| esp32.wake_on_touch(wake) | 配置触摸引脚是否会将设备从睡眠状态唤醒,wake是一个布尔值 |
| esp32.wake_on_ext0(pin, level) | 配置EXT0如何将设备从睡眠中唤醒。pin可以为None或有效的引脚对象。level应为esp32.WAKEUP_ALL_LOW或esp32.WAKEUP_ANY_HIGH |
| esp32.wake_on_ext1(pins, level) | 配置EXT1如何将设备从睡眠中唤醒。pin可以为None或有效的引脚对象的元组/列表,level应为esp32.WAKEUP_ALL_LOW或esp32.WAKEUP_ANY_HIGH |
| esp32.raw_temperature() | 读取内部温度传感器的原始值,返回一个整数 |
| esp32.hall_sensor() | 读取内部霍尔传感器的原始值,返回一个整数 |
| esp32.idf_heap_info(capabilities) | 返回有关ESP-IDF堆内存区域的信息 |

相关推荐
AiNightVision11 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
mk0152 天前
单片机同步降压稳压器输出最低1V,关断时损耗3uA
单片机·嵌入式硬件·硬件工程·智能硬件·pcb工艺
领麦微红外3 天前
红外测温传感器 赋能充电桩热安全与运维智能化
运维·安全·产品经理·智能硬件
聆思科技AI芯片5 天前
【AI硬件开发上手教程】怎么使用AI编程实现小聆AI语音控制舵机
人工智能·嵌入式硬件·开源·ai编程·智能硬件
AiNightVision7 天前
星光级 是什么?——星光级摄像机是什么?0.001Lux 照度门槛与选型真相
人工智能·算法·车载系统·自动驾驶·无人机·视频·智能硬件
美摄科技8 天前
智能硬件如何增加一键成片剪辑功能?
数码相机·智能手机·智能硬件
光子物联单片机8 天前
ESP32传感器模块编程实践(一)DIY智能WIFI视频控制小车
嵌入式硬件·esp32·智能硬件·硬件
蒲公英内测分发9 天前
智能家居厂商有多个产品线,包装上的 App 下载入口该共用还是分开?
android·人工智能·数码相机·机器人·智能家居·智能硬件
老孟说禅11 天前
测试中的安全规范
智能硬件
Industio_触觉智能12 天前
把NPU检测直接嵌进采集终端|RK3576 AI采集终端全链路拆解教程-上
人工智能·嵌入式硬件·硬件架构·硬件工程·智能硬件·npu·rk3576