ESP32数据处理与显示应用

部署运行你感兴趣的模型镜像

使用ESP32微控制器进行数据处理

摘要

— 本文探讨了ESP32微控制器应用程序开发的经验,并全面综述了在该平台上进行数据测量与处理类应用开发的可能性。微控制器通常与物联网模块及其他智能传感器连接,并向上位系统提供数据。本文还描述了基于配备OLED显示屏的版本以及带有集成显示屏的ESP32 Wrover开发板的应用程序实现。

关键词

ESP32,物联网,微控制器,测量,显示屏,开发板,环境

I. 引言

目前,物联网、智能家居自动化和嵌入式系统正在快速发展。这与可用的硬件模块和处理器的发展密切相关。开发板将通信接口和外设与主处理器芯片集成在一起进行生产。如今,ESP32芯片的受欢迎程度不断增长,该芯片的硬件变体及其软件开发的各个分支都在不断发展。广泛的开发者社区以及学术界都在致力于利用作为 ESP8266微控制器后续产品的新一代ESP32芯片。最新的科学论文证明了ESP32芯片在各个领域的广泛应用。

文章[1]描述了微控制器的一般应用可能性,并为电子项目提供了推荐。该论文对ESP32与一些市场竞争对手进行了对比分析,并介绍了微控制器规格、功能和编程细节。文献[2]描述了一种有趣的解决方案,即将ESP32芯片实现为可在实时工作的网络服务器,并可有效用于小型太阳能系统的监控。该微控制器可与各种环境监测传感器结合使用[3] ,无论是空气污染监测还是液化石油气泄漏的直接监测[4]。相比之下,文章[5]描述了该芯片在医疗领域作为物联网监控系统的应用。文献[6],描述了该芯片作为基于LoRa模块的安全通信系统以及加密标准的实现,涉及基于ESP32的AES加密远程微电网通信系统。ESP32作为控制系统还可支持无线网络,如文章[7]所述。ESP32芯片还可用于操作员工作站的技术设备报警监控[8],、振动监测[9] ,如今实际上已广泛应用於所有需要监控嵌入式系统的领域。

这些文章总结了ESP32芯片的主要优势,包括:广泛的部署能力、支持Wi-Fi标准和协议、低成本解决方案。然而,这些文章描述的是将微控制器部署为一个作为网络服务器提供数据,并与环境及上位系统进行通信的系统。在本文中,我们还将尝试描述在微控制器上直接通过不同类型的显示屏显示测量数据的可能性,以及显示当前数据状态或系统配置,以便即时检查系统状态。

II. ESP32微控制器

ESP32是一款功能强大的系统级芯片(SoC)微控制器,集成了 Wi-Fi 802.11 b/g/n、双模蓝牙4.2版本以及多种外设。它是 8266 芯片的先进后续产品,主要在实现上采用两个内核,不同版本的主频最高可达 240 MHz。与前代产品相比,除了这些特性外,它还将 GPIO引脚 数量从 17 个扩展到 36 个,PWM通道 增加了 16 个,并配备了 4MB 的闪存。

ESP32芯片由乐鑫科技公司开发,目前该公司提供了多种 ESP32系统级芯片版本,包括ESP32开发套件、ESP32 Wrover套件(还包含SD卡和3.2英寸LCD显示器),以及最后但同样重要的ESP32 Azure IoT套件(配备USB桥接器和其他内置传感器)。除了乐鑫科技之外,还有其他厂商专注于这些芯片——SparkFun推出了ESP32 Thing DB,WeMoS推出了TTGO、D1、Lolin32和Lolin D32,Adafruit推出了 Huzzah32,DFRobot推出了ESP32 FireBeetle,以及其他许多制造商,有时提供质量较好有时较差的克隆产品。

ESP32包含两个核心(采用40纳米技术制造的 Xtensa LX6处理器)。CPU核心可单独控制。芯片提供 520 KB的片上SRAM用于数据和指令存储。某些SoC模块,例如ESP32-Wrover,配备有4 MB的外部SPI闪存以及额外的8 MB SPI PSRAM(伪静态RAM)。根据板型的不同,我们可以使用多个SPI、I2S、I2C、CAN、UART、以太网MAC和IR接口。标准配置还包括霍尔效应传感器、温度传感器和触摸传感器,其他内置传感器则在Azure IoT和开发套件中实现。该SoC还提供加密硬件加速功能:AES、SHA-2、RSA、椭圆曲线加密(ECC)以及随机数生成器(RNG)。 示意图0

ESP32开发板以原型设计形式生产,可用于智能家居应用程序、自动化、可穿戴设备、音频应用、基于云的物联网应用程序等。可以选择特定的开发套件,也可以基于ESP32微控制器设计定制的嵌入式系统。

三。如何开发应用程序

在ESP32平台上进行开发为我们提供了多种使用方式。本节将介绍ESP32平台环境的一些基本设置和配置。

ESP32设备可以在Windows、Linux或MacOS任何一种操作系统上进行开发。本文将主要介绍在Windows平台上搭建和配置开发环境。我们可以选择使用Arduino的 ESP32附加环境、乐鑫IoT开发框架原生平台,以及基于 MicroPython引擎的Python环境来开展工作。

A. ESP32的Arduino核心

为ESP32平台编写代码最简单的方法是使用 Arduino平台。这是一个开源平台,旨在基于Atmel微控制器实现快速原型开发。微控制器的软件开发在用 Java编写的Arduino集成开发环境(IDE)中进行。该软件源自学习环境,并通过添加Wiring语言等特定功能进行了适当修改和增强。Wiring是一种编程语言,设计用于在无需特定硬件知识的情况下对微控制器进行编程,其语法与C语言框架相似。Wiring需要带有引导程序的微控制器。如今,Arduino IDE不仅支持Atmel微控制器,还可以安装其他类型的微控制器。因此, Espressif决定利用此功能创建一个名为“适用于 ESP32 Wi-Fi芯片的Arduino核心”的插件,以在 Arduino IDE环境中添加对ESP32微控制器开发的支持。

“适用于ESP32 Wi-Fi芯片的Arduino核心”扩展作为开源项目发布,其源代码位于[10]。

乐鑫公司于2018年中期发布了ESP32的Arduino核心 Wi-Fi芯片的首个稳定版本,并规范了如何在Arduino IDE中安装支持。ESP32的Arduino核心 Wi-Fi芯片提供了 FreeRTOS系统支持,以实现基于任务的处理,因为 ESP32芯片本身是双核的。同时,它还提供了在ESP32芯片的特定核心上优化特定任务处理的支持。标准的开始程序与Arduino平台一样,被分配给setup函数,该函数用于初始化微控制器的启动值,以及负责运行程序的 loop函数。在开发ESP32微控制器时,loop函数始终在第一个处理器核心上运行。然而,我们需要认识到ESP32的核心编号是从零索引开始的。

使用该环境的优势在于其简单的配置和良好的社区支持。通过使用此环境,您可以非常快速地开始对 ESP32微控制器进行原型开发。该环境适用于开发较为简单的项目,而对于复杂项目则会导致项目清晰度和可持续性的降低。同时,该平台非常适合用于积累ESP32 微控制器开发经验。

B. 乐鑫IoT开发框架

如果我们决定开发基于ESP32微控制器的更复杂且优化的嵌入式系统,建议选择乐鑫IoT开发框架,以便我们以原生方式开发应用程序。乐鑫IoT开发框架是一个开源项目,可在GitHub源代码页面[11]获取。该框架包含 ESP的基本配置选项、ESP32的源代码编译以及固件下载功能。应用程序使用C语言进行开发。该框架是多平台的,但原生在Linux操作系统下开发,可在该环境下最方便地进行配置。若要在Windows操作系统下使用该框架,需要安装类UNIX/POSIX环境模拟支持,或使用 Windows 10自带的Windows子系统Linux(WSL)选项。

乐鑫在其安装向导中通过MSYS2引擎提供对类 UNIX/POSIX环境的支持,该文件以zip格式分发。此 MSYS2文件包含了ESP32微控制器开发环境的全部配置。

基于乐鑫IoT开发框架的项目管理系统称为Make。目前, Make项目的管理正在迁移到支持CMake,因为CMake为开发环境提供了更多工具。当前框架版本为3.2,仍在持续使用MAKE项目构建,但计划中的版本4将作为过渡版本,实现项目管理完全迁移到CMake。与ESP32 Wi-Fi微控制器扩展到Arduino平台的ESP32的 Arduino核心类似,物联网开发框架也实现了对 FreeRTOS系统的支持。使用乐鑫IoT开发框架编程时必须遵循一些流程,否则最终项目将无法编译。每个项目必须包含一个sdkconfig文件,用于存储该项目的框架配置信息。项目配置界面通过执行make menuconfig命令调用。例如,该界面可配置设备所在的端口、各个总线的工作频率,或FreeRTOS程序是否在单核或双核ESP32配置下运行( 示意图1 )。这些数据非常重要,因为它们会根据所配置的项目生成构建过程的依赖关系。

下一步是构建程序本身,这通过 make build 命令调用。如果构建成功,就可以将编译好的程序上传到 ESP32微控制器。这是由内置的固件烧录工具完成的,通过使用 make flash 命令来调用该工具。

命令。要监控应用程序,可以使用内置的监视器,该监视器通过 make monitor 命令运行。

C. MicroPython

一些生产基于ESP32芯片的开发板的制造商现在使用 MicroPython环境作为默认固件。最常见的是 ESP32-Wrover芯片,通常配备PSRAM。MicroPython是 Python 3编程语言的一个轻量级实现,包含Python标准库的一个子集,并针对在微控制器上运行进行了优化。

Python作为一种编程语言的优势在于可以很快学会。如果 ESP32微控制器未包含MicroPython固件,可以将该固件上传到指定的微控制器中。这可以通过使用用Python编写的esp tools工具来完成,该工具通过Python环境中原生的 pip包系统进行分发。随后,您需要下载可在[12]上获取的 MicroPython固件。

使用以下命令上传MicroPython固件:esp tool.py–chip esp32 -p write_flash -z 0x1000

其中,通过添加一个COM端口使ESP32微控制器与开发计算机进行通信,并将其连接到 ;同时,在 中添加文件名和MicroPython固件的路径位置。现在,在完成ESP32微控制器上的 MicroPython环境准备后,我们将学习一些基本的编程规则。每个解决方案应至少包含两个文件:boot.py和main.py,这对应于Arduino平台中使用的概念。boot.py文件定义了微控制器启动时需要设置的变量的初始化,而main.py则包含在boot.py文件中变量初始化完成后立即执行的微控制器程序。

如果我们需要使用基础MicroPython固件中未实现的其他库函数,则这些库函数也必须烧录到设备中。通常,这些库提供了特定硬件元件(如显示屏、传感器和物联网模块等)的通信和行为支持。

使用 Python工具 ampy 可以通过串行线路与微控制器通信,从而将程序和库函数上传到微控制器。借助该工具,可以对微控制器上的文件进行任意操作。将 main.py 文件上传到微控制器的命令如下:

ampy -p put main.py

可以使用终端连接来调试微控制器上的Python,例如使用 PuTTY程序。您可以使用任何可用的文本编辑器来编写 Python程序。我们使用Visual Studio Code来完成这些任务。

这种开发方法有利于基于MicroPython固件的嵌入式系统进行原型设计和开发新的算法解决方案。由于缺乏简单的界面,其开发难度相较于Arduino平台略高,但可通过一组命令行工具来保障开发过程。

D. 其他开发可能性

还有其他方法可以为ESP32微控制器开发应用程序,例如使用带有相应固件的Lua编程语言,或使用 JavaScript编程语言。另一种选择是使用一些商业项目,例如也支持ESP32微控制器的Zerynth [13] 。然而,我们尚未测试这些平台。本节的目标是描述在Windows平台上针对ESP32微控制器进行嵌入式系统开发时最常用的开源方法,并比较使用这些方法的经验。

IV. ESP32 应用

在Windows平台上使用独立开发环境所获得的经验,已被应用于基于ESP32微控制器的物联网传感器测量数据采集与处理领域的各种应用程序的实际实现中。嵌入式系统的框图如图3所示。

示意图2

本文重点介绍了在嵌入式系统中的显示屏上对测量数据的可视化。通信总线根据显示屏的类型和尺寸而有所不同,而显示屏的尺寸取决于我们要显示的信息类型。

对于低分辨率的显示屏,我们决定仅显示状态信息,并将测量数据发送至上位系统进行评估。我们在特定显示屏上显示的信息例如微控制器是否具有网络连接、当前正在处理的任务、实际的测量周期等。对于尺寸和分辨率较高的显示屏,除了状态信息外,我们还显示测量值的图形流程。当我们同时测量多个变量时,仅显示一个量的图表,但可以在不同测量量的图表之间进行切换。

我们的嵌入式系统使用了多种类型的显示屏。

示意图3

A. 使用0.91英寸OLED显示屏的应用

该显示屏的分辨率为128x32像素,其通信接口为 I2C。由于该显示屏分辨率较小,只能显示应用程序的状态信息。对于此OLED显示屏,使用的是SSD1306库。该库可从[14]下载用于Arduino平台,从[15]下载用于ESP-IDF框架,以及从[16]下载用于MicroPython的库。这些OLED显示屏的工作原理是仅让激活的点发光。

在源代码中使用该库并不复杂。通过通信初始化(I2C或 SPI)来创建一个显示对象,然后调用各个方法来设计显示屏的图形外观。每个平台都有不同的调用方法将信息上传到显示缓冲区。图5显示了无线网络连接状态信息(显示在裁剪部分)以及包含测量数据数量和输出文件的状态信息示例。

示意图4

使用SSD1306可能因编程环境(Arduino、ESP-IDF、MicroPython)的不同而有所差异。

B. 带0.96英寸OLED显示屏的应用

该显示屏的分辨率为128x64像素,有I2C或SPI版本。在我们的应用中使用了I2C通信接口,以降低解决方案的硬件复杂度。该显示屏的编程方式与0.91英寸OLED显示屏变体相同,唯一的区别在于显示屏的像素和行数。尽管此显示屏比前一款大两倍,但仍然不适合绘制测量图表。因此,在此分辨率下,我们在这块显示屏上显示比之前更详细的状态信息。图4展示了0.96英寸显示屏的使用情况。ESP32微控制器有不同的版本,其中一种变体是在开发板上直接集成了0.96英寸显示屏。如果这满足我们应用的需求,就可以使用这种开发板。图6显示了 ESP32开发板上的集成显示屏及其状态信息。我们再次显示无线连接状态,这次包括IP地址、测量样本数量和输出文件。

示意图5

C. 带2.4英寸集成显示屏的应用

乐鑫公司推出了新的ESP32 Wrover芯片,同时发布了一款采用该微控制器的新型开发套件。

示意图6

最大的优势是该开发套件上已经原生集成了一个 320x240彩色LCD显示屏,该显示屏通过4线串行外设接口(SPI)进行通信。乐鑫的GitHub [17]包含一个用于 Wrover开发套件上LCD显示的免费库。从编程角度来看,访问方式与之前的显示屏类似。由于该显示屏具有更高的分辨率,因此可以在其上显示测量值的图形波形。由于该库仅提供应用程序编程接口(API),因此需要自行编程实现图表绘制。与仅在显示屏上显示状态信息相比,这一部分在调试和测试时相对困难。因此,必须认真考虑是否要在我们的嵌入式系统中使用此功能。如果我们确定需要图表功能,那么创建一个图形组件将有助于我们更方便地处理图表。图7显示了直接在集成显示屏上的测量数据。由于我们同时测量了多个量,因此我们编程实现了在一定时间间隔内循环切换各量的显示。图8显示了其他测量变量。加速度传感器数值和温度测量数值的显示会周期性地切换。

示意图7

V. 结论

本文总结了ESP32微控制器最常用的几种应用开发平台。针对每个平台,我们描述了其优势、推荐适用的应用类型,同时比较了开发者在软件技能和经验方面所需具备的前提条件。我们建议初学者在ESP32平台上使用Arduino ESP32 Core扩展平台,也适用于快速验证应用设计;但对于产品开发以及更充分地利用硬件特性(如双RTOS内核编程),我们建议使用ESP IDF平台,该平台通过C语言进行开发,并配有原生固件下载器。

我们经常会遇到带有ESP32 Wrover芯片的新开发板上使用MicroPython,它具备Python语言的特性优势,支持过程化编程以及面向对象设计的应用开发。

在开发嵌入式系统时,我们经常会遇到测量数据的可视化和系统诊断的问题。一些带有ESP32微控制器的开发板已经集成了不同尺寸的显示屏。在本文中,我们描述了使用不同类型显示屏进行应用设计的经验。根据我们的应用开发经验,建议将状态信息显示在小型显示屏上,而较大的显示屏则还可以显示实时数据。我们希望在显示屏上展示的图形信息越多,应用程序的复杂度就越高,对开发者的要求也越高。因此,如果我们决定实时显示图形,最好创建一个负责图表绘制的图形组件,并使其独立于显示屏硬件实现的工作。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值