0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Arduino IDE进行的ESP32编程方案

454398 来源:一板网 作者:风筝 2021-01-09 11:25 次阅读

ESP模块因其Wi-Fi功能(如ESP8266、ESP-12E等)而广受欢迎。这些都是具有Wi-Fi功能的强大微控制器模块。还有一个ESP模块,它比以前的ESP模块更强大,更通用 - 其名称为ESP32。它具有蓝牙和Wi-Fi连接,并在许多物联网项目中使用了ESP32。但是很少有人知道ESP32是双核微控制器

ESP32具有两个32位TensilicaXtensa LX6微处理器,这使其成为功能强大的双核(core0和core1)微控制器。有单核和双核两种版本。但是双核版本更受欢迎,因为它们之间没有明显的价格差异。

pIYBAF_5ISOAVMwOAALgMyZsttw569.png

可以使用Arduino IDE、Espressif IDF、Lua RTOS等对ESP32进行编程。使用Arduino IDE进行编程时,由于Core0已编程用于RF通信,因此代码仅在Core1上运行。但是在本篇文章中,我们将展示如何使用ESP32的两个内核同时执行两项操作。在这里,第一个任务是使板载LED闪烁,第二个任务是从DHT11传感器获取温度数据。

首先让我们看看多核处理器比单核的优势。

多核处理器的优势

1.当有两个以上的进程要同时工作时,多核处理器很有用。

2.由于工作分布在不同的内核之间,因此速度提高了,并且可以同时完成多个过程。

3.可以降低功耗,因为当任意内核处于空闲模式时,它可以用来关闭当时不使用的外围设备。

4.与单核处理器相比,双核处理器在不同线程之间切换的频率更低,因为它们可以一次处理两个,而不是一次处理一个线程。

ESP32和FreeRTOS

ESP32开发板已经安装了FreeRTOS固件。 FreeRTOS是开源的实时操作系统,在多任务处理中非常有用。 RTOS有助于管理资源并最大程度地提高系统性能。 FreeRTOS具有许多用于不同目的的API函数,使用这些API,我们可以创建任务并使它们运行在不同的内核上。

FreeRTOS API的完整文档可以在这里找到。我们将尝试在代码中使用一些API来构建在两个内核上运行的多任务应用程序。

查找ESP32内核ID

在这里,我们将使用Arduino IDE将代码上传到ESP32。要知道运行代码的Core ID,有一个API函数

xPortGetCoreID()

可以从void setup()和void loop()函数中调用此函数,以了解运行这些函数的内核ID。

您可以通过上传以下草图来测试此API:

void setup() {

Serial.begin(115200);

Serial.print("setup() function running on core: ");

Serial.println(xPortGetCoreID());

}

void loop() {

Serial.print("loop() function running on core: ");

Serial.println(xPortGetCoreID());

}

上传完上述草图后,打开串口监视器,您会发现这两个函数都在core1上运行,如下所示。

o4YBAF_5ITSAdTCAAAHdhCdBCqI066.png

从以上观察结果可以得出结论,默认的Arduino草图始终在core1上运行。

ESP32双核编程

Arduino IDE支持在ESP32运行FreeRTOS,而FreeRTOS API允许我们创建可以在两个内核上独立运行的任务。任务是一段在开发板上执行某些操作的代码,例如LED闪烁、发送温度等。

以下函数用于创建可以在两个内核上运行的任务。在此函数中,我们必须提供一些参数,例如优先级、内核ID等。

现在,按照以下步骤创建任务和任务函数。

1.首先,在void setup函数中创建任务。在这里,我们将创建两个任务,一个任务是每0.5秒闪烁一次LED,另一任务是每2秒获得温度读数。

xTaskCreatePinnedToCore()函数使用7个参数:

● 实现任务的函数名称(task1)

● 任务的任何名称(“ task1”等)

● 分配给任务的堆栈大小,以字为单位

● 任务输入参数(可以为NULL)

● 任务的优先级(0是最低优先级)

● 任务句柄(可以为NULL)

● 任务将运行的内核ID(0或1)

现在,通过在xTaskCreatePinnedToCore()函数中提供所有参数来创建Task1,以使指示灯闪烁。

xTaskCreatePinnedToCore(Task1code, "Task1", 10000, NULL, 1, NULL,0);

同样,为任务2创建Task2,并在第7个参数中将内核ID设置为1。

xTaskCreatePinnedToCore(Task2code, "Task2", 10000, NULL, 1, NULL,1);

您可以根据任务的复杂性更改优先级和堆栈大小。

2.现在,我们将实现Task1code和Task2code函数。这些函数包含所需任务的代码。在本例中,第一个任务将使LED闪烁,另一个任务将获取温度。因此,在void setup函数之外,为每个任务创建两个单独的函数。

Task1code函数实现了0.5秒后板上LED闪烁,如下所示:

Void Task1code( void * parameter) {

Serial.print("Task1 running on core ");

Serial.println(xPortGetCoreID());

for(;;) {//infinite loop

digitalWrite(led, HIGH);

delay(500);

digitalWrite(led, LOW);

​​delay(500);

}

}

同样,实现Task2code函数以获取温度。

void Task2code( void * pvParameters ){

Serial.print("Task2 running on core ");

Serial.println(xPortGetCoreID());

for(;;){

float t = dht.readTemperature();

Serial.print("Temperature: ");

Serial.print(t);

delay(2000);

}

}

3.此处的void loop函数将保持为空。 我们已经知道loop和setup函数在core1上运行,因此您也可以在void loop函数中实现core1任务。

现在代码部分已经结束,因此只需在“Tool”菜单中选择ESP32板,即可使用Arduino IDE上传代码。 确保已将DHT11传感器连接到ESP32的D13引脚。

pIYBAF_5IU-ASylTAAIvxSDU1fQ758.png

现在,可以在串口监视器上监视结果,如下所示:

pIYBAF_5IWqAaA8jAAKeuSuX-p0896.png

可以通过使用ESP32的双核同时运行多个任务来构建诸如实时系统之类的复杂应用程序。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6812

    浏览量

    147651
收藏 人收藏

    评论

    相关推荐

    使用Arduino IDE 2.0开发ESP32摄像头模块

    .cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing)。 安装ESP32扩展包 1. 运行
    发表于 02-07 17:06

    如何从ESP32中删除OTA?

    通过 Arduino IDE 和示例等对 ESP32 Dev 32 模块进行了一些 OTA 测试,一切正常。 现在我们想恢复到正常的串行/USB
    发表于 01-31 07:37

    用了ESP32后,我的Arduino都积灰了,专为零基础新手准备的ESP32入门指南,为什么我不再使用Arduino

    Arduino 或许你已经熟悉Arduino,这是许多零基础者接触的首个开发板。然而,随着ESP32的崭露头角,它
    的头像 发表于 12-12 15:48 1875次阅读
    用了<b class='flag-5'>ESP32</b>后,我的<b class='flag-5'>Arduino</b>都积灰了,专为零基础新手准备的<b class='flag-5'>ESP32</b>入门指南,为什么我不再使用<b class='flag-5'>Arduino</b>

    用了ESP32后,我的Arduino都积灰了,专为零基础新手准备的ESP32入门指南,为什么我不再使用Arduino

    Arduino 或许你已经熟悉Arduino,这是许多零基础者接触的首个开发板。然而,随着ESP32的崭露头角,它
    的头像 发表于 11-20 11:20 7832次阅读
    用了<b class='flag-5'>ESP32</b>后,我的<b class='flag-5'>Arduino</b>都积灰了,专为零基础新手准备的<b class='flag-5'>ESP32</b>入门指南,为什么我不再使用<b class='flag-5'>Arduino</b>

    【FireBeetle 2 ESP32-S3开发板体验】在Arduino中充分利用FireBeetle 2 ESP32-S3的16MB Flash做SPIFFS

    IDE2.0尚不支持插件,不能使用 ESP32 Filesystem Uploader 。 一、Arduino IDE中现有的分区方案
    发表于 08-02 09:55

    【FireBeetle 2 ESP32-S3开发板测评】Arduino IDE快速开发体验

    【FireBeetle 2 ESP32-S3开发板测评】Arduino IDE快速开发体验
    的头像 发表于 07-23 09:03 1640次阅读
    【FireBeetle 2  <b class='flag-5'>ESP32</b>-S3开发板测评】<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b>快速开发体验

    ESP32学习笔记:双核

    今天我们来说说ESP32 for Arduino 的双核。
    的头像 发表于 07-15 16:16 3043次阅读
    <b class='flag-5'>ESP32</b>学习笔记:双核

    如何在Arduino IDE中安装ESP32开发环境

    要在Arduino IDE中使用ESP32开发板,您需要先安装相应的开发环境。以下是在Arduino IDE中安装
    的头像 发表于 07-13 16:48 1.3w次阅读
    如何在<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b>中安装<b class='flag-5'>ESP32</b>开发环境

    如何使用Arduino IDE编程ESP8266-12E

    电子发烧友网站提供《如何使用Arduino IDE编程ESP8266-12E.zip》资料免费下载
    发表于 06-27 11:39 0次下载
    如何使用<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b><b class='flag-5'>编程</b><b class='flag-5'>ESP</b>8266-12E

    ESP32ESP32通过Internet进行通信

    电子发烧友网站提供《ESP32ESP32通过Internet进行通信.zip》资料免费下载
    发表于 06-15 09:58 2次下载
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b>通过Internet<b class='flag-5'>进行</b>通信

    带有ESP32Arduino物联网云

    电子发烧友网站提供《带有ESP32Arduino物联网云.zip》资料免费下载
    发表于 06-15 09:16 3次下载
    带有<b class='flag-5'>ESP32</b>的<b class='flag-5'>Arduino</b>物联网云

    可以在不使用Arduino IDE的情况下使用它来为ESP8266/ESP32编码?

    不是 ESP 东西,但我曾经真正接触过 C++ 的计算机。话虽这么说,顺便说一句,我说的是魁北克语,使用 DEV C++ 有点不错,所以如果有任何方法可以在不使用 Arduino IDE 的情况下
    发表于 06-08 08:15

    如何用传感器、显示器等装备ESP,并使用Arduino IDE或MicroPython对它们进行编程

    电子专家,我知道如何用传感器、显示器等装备我的 ESP,并使用 Arduino IDE 或 MicroPython 对它们进行编程。但是这种
    发表于 06-01 08:07

    如何在Arduino IDE中使用ESP-100进行开发?

    上没有任何规范或驱动程序(请参阅 )。此外,搜索 ESP-100 并没有让我了解如何在 Arduino IDE 中使用这个东西进行开发的重要事实。 到目前为止,我已经使用
    发表于 05-12 08:06

    ESP8266和arduino IDE问题如何解决?

    最后安装 IDE (18.1.3) 和 ESP8266 开发板软件。可以对 Arduino Nano 进行编程,但
    发表于 05-06 06:16