当前位置: 首页 > article >正文

新星杯-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)

启用中断请求,stateTrue(默认)则启用,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访问的真实物理设备/传感器,可能需要使用信号。

3. UART类

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

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

5.I2C类

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

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

6. RTC类

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

7. 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_LOWesp32.WAKEUP_ANY_HIGH

esp32.wake_on_ext1(pins, level)

配置EXT1如何将设备从睡眠中唤醒。pin可以为None或有效的引脚对象的元组/列表,level应为esp32.WAKEUP_ALL_LOWesp32.WAKEUP_ANY_HIGH

esp32.raw_temperature()

读取内部温度传感器的原始值,返回一个整数

esp32.hall_sensor()

读取内部霍尔传感器的原始值,返回一个整数

esp32.idf_heap_info(capabilities)

返回有关ESP-IDF堆内存区域的信息


http://www.kler.cn/a/509735.html

相关文章:

  • Typora + PowerShell 在终端打开文件
  • 【Unity3D】利用Hinge Joint 2D组件制作绳索效果
  • AUTOSAR从入门到精通-无人驾驶网约车(Robotaxi)
  • java使用poi-tl自定义word模板导出
  • SpringMVC 实战指南:打造高效 Web 应用的秘籍
  • Vue项目搭建教程超详细
  • R语言的并发编程
  • 【华为OD-E卷 - 字符串加密 100分(python、java、c++、js、c)】
  • python初学者需要注意的几个基础点
  • 弱口令漏洞+文件上传漏洞
  • 【深度学习】1.深度学习解决问题与应用领域
  • MuJoCo仿真中的两轮平衡小车项目【问题集合】
  • 安卓java端service如何在native进程进行访问-跨进程通讯高端知识
  • 数据结构(初阶)(一)----算法复杂度
  • 《leetcode-runner》【图解】【源码】如何手搓一个debug调试器——架构
  • Web自动化:Cypress 测试框架概述
  • 自己造轮子-基于Ceres的GNSS-INS松耦合组合导航算法
  • 为AI聊天工具添加一个知识系统 之51 从形态学简约到纯粹的思维再映射到AI操作系统 之2
  • liunx进程函数汇总(包含管道、共享内存、消息队列、信号)
  • 浅谈计算机网络03 | 现代网络组成
  • 【tailscale 和 ssh】当服务器建立好节点,但通过客户端无法通过 ssh 连接
  • PostgreSQL-WAL日志介绍(一)
  • 蓝桥杯训练—矩形面积交
  • 服务器怎样防范网络蠕虫病毒?
  • Ubuntu 手动安装 Open WebUI 完整指南
  • 《CPython Internals》阅读笔记:p221-p231