91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Arduino IDE進行ESP32雙核編程

科技觀察員 ? 來源:circuitdigest ? 作者:Rishabh Jain ? 2022-08-18 17:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ESP 模塊因其 Wi-Fi 功能而廣受歡迎,例如ESP8266、ESP-12E等。這些都是具有 Wi-Fi 功能的強大微控制器模塊。還有一個 ESP 模塊,它比以前的 ESP 模塊更強大、更通用——它的名字是ESP32。它具有藍牙和 Wi-Fi 連接,我們已經解釋了 ESP32 的 BLE 功能,并在許多物聯(lián)網(wǎng)項目中使用了 ESP32 。但很少有人知道ESP32 是雙核微控制器

ESP32具有兩個 32 位 Tensilica Xtensa LX6 微處理器,這使其成為功能強大的雙核(core0 和 core1)微控制器。它有單核和雙核兩種變體。但雙核版本更受歡迎,因為沒有明顯的價格差異。

poYBAGL-BAGAFpCuAAKatiyngPU771.png

ESP32 可以使用 Arduino IDE、Espressif IDF、Lua RTOS 等進行編程。使用 Arduino IDE 進行編程時,代碼只能在 Core1 上運行,因為 Core0 已經針對射頻通信進行了編程。但這是本教程,我們將展示如何使用 ESP32的兩個內核同時執(zhí)行兩個操作。這里的第一個任務是閃爍板載 LED,第二個任務是從 DHT11 傳感器獲取溫度數(shù)據(jù)。

讓我們首先看看多核處理器相對于單核的優(yōu)勢。

多核處理器的優(yōu)勢

當有兩個以上的進程同時工作時,多核處理器很有用。

由于工作分布在不同的內核之間,它的速度會提高,并且可以同時完成多個進程。

可以降低功耗,因為當任何內核處于空閑模式時,它都可以用來關閉當時未使用的外圍設備。

雙核處理器必須比單核處理器更少地在不同線程之間切換,因為它們可以一次處理兩個而不是一次處理一個。

ESP32 和 FreeRTOS

ESP32 板上已經安裝了 FreeRTOS 固件。FreeRTOS 是一個開源實時操作系統(tǒng),在多任務處理中非常有用。RTOS 有助于管理資源和最大化系統(tǒng)性能。FreeRTOS 有許多用于不同目的的 API 函數(shù),使用這些 API,我們可以創(chuàng)建任務并使它們在不同的內核上運行。

可以在此處找到 FreeRTOS API 的完整文檔。我們將嘗試在代碼中使用一些 API 來構建將在兩個內核上運行的多任務應用程序。

查找 ESP32 內核 ID

在這里,我們將使用Arduino IDE 將代碼上傳到 ESP32中。要知道運行代碼的Core ID,有一個API函數(shù)

xPortGetCoreID()

可以從void setup()和void loop()函數(shù)調用此函數(shù),以了解運行這些函數(shù)的核心 ID。

您可以通過上傳以下草圖來測試此 API:

無效設置() { 
  Serial.begin(115200);
  Serial.print("setup() 函數(shù)在核心上運行:"); 
  Serial.println(xPortGetCoreID()); 
} 
void loop() { 
  Serial.print("loop() 函數(shù)在核心上運行:"); 
  Serial.println(xPortGetCoreID()); 
}

上傳上面的草圖后,打開串口監(jiān)視器,你會發(fā)現(xiàn)這兩個功能都在 core1 上運行,如下圖所示。

pYYBAGL-A_yABBkPAAJ154y7KcI484.png

從以上觀察可以得出結論,默認的 Arduino 草圖始終在 core1 上運行。

ESP32 雙核編程

Arduino IDE 支持 ESP32 的 FreeRTOS,F(xiàn)reeRTOS API 允許我們創(chuàng)建可以在兩個內核上獨立運行的任務。任務是在板上執(zhí)行一些操作的代碼,例如閃爍的 LED、發(fā)送溫度等。

以下函數(shù)用于創(chuàng)建可以在兩個內核上運行的任務。在這個函數(shù)中,我們必須給出一些參數(shù),比如優(yōu)先級、核心 ID 等。

現(xiàn)在,按照以下步驟創(chuàng)建任務和任務功能。

1.首先在void setup函數(shù)中創(chuàng)建任務。在這里,我們將創(chuàng)建兩個任務,一個用于每 0.5 秒后閃爍 LED,另一個任務是每 2 秒后獲取溫度讀數(shù)。

xTaskCreatePinnedToCore() 函數(shù)有 7 個參數(shù):

實現(xiàn)任務的函數(shù)名(task1)

任務的任何名稱(“task1”等)

以字為單位分配給任務的堆棧大?。? 個字=2 字節(jié))

任務輸入?yún)?shù)(可以為NULL)

任務的優(yōu)先級(0為最低優(yōu)先級)

任務句柄(可以為 NULL)

任務將運行的核心 ID(0 或 1)

現(xiàn)在,通過在 xTaskCreatePinnedToCore() 函數(shù)中提供所有參數(shù)來創(chuàng)建用于閃爍 LED 的 Task1 。

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

同樣,為 Task2創(chuàng)建 Task2并在第 7個參數(shù)中設置 core id 1。

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

您可以根據(jù)任務的復雜性更改優(yōu)先級和堆棧大小。

2. 現(xiàn)在,我們將實現(xiàn)Task1code和Task2code函數(shù)。這些函數(shù)包含所需任務的代碼。在我們的例子中,第一個任務將閃爍 LED,另一個任務將獲取溫度。因此,在 void setup 函數(shù)之外為每個任務創(chuàng)建兩個單獨的函數(shù)。

Task1code功能實現(xiàn)了 0.5 秒后閃爍板載 LED,如下所示。

void Task1code( void * parameter) { 
Serial.print("Task1 在核心上運行"); 
Serial.println(xPortGetCoreID()); 
for(;;) {//無限循環(huán)
digitalWrite(led, HIGH); 
延遲(500);
digitalWrite(led, LOW);
延遲(500); 
} 
}

同樣,實現(xiàn)獲取溫度的Task2code函數(shù)。

void Task2code( void * pvParameters ){ 
  Serial.print("Task2 在核心上運行"); 
  Serial.println(xPortGetCoreID()); 
  for(;;){
    浮動 t = dht.readTemperature(); 
     Serial.print("溫度:"); 
     序列號.print(t); 
   延遲(2000);
  } 
}

3. 這里的void 循環(huán)函數(shù)將保持為空。我們已經知道循環(huán)和設置函數(shù)在 core1 上運行,因此您也可以在void 循環(huán)函數(shù)中實現(xiàn) core1 任務。

現(xiàn)在編碼部分已經結束,所以只需在工具菜單中選擇 ESP32 板,使用 Arduino IDE 上傳代碼。確保您已將 DHT11 傳感器連接到 ESP32 的引腳 D13。

poYBAGL-A_aATqrmAAIIzDXrRW0533.png

現(xiàn)在可以在 Serial Monitor 或 Arduino IDE 上監(jiān)控結果,如下所示:

poYBAGL-A_KACR4cAANFKpPKSiE091.png

通過使用 ESP32 的雙核同時運行多個任務,可以構建像實時系統(tǒng)這樣的復雜應用。

#include "DHT.h"

#define DHTPIN 13

#define DHTTYPE DHT11

const int led = 2;

DHT dht(DHTPIN, DHTTYPE);

無效設置() {

Serial.begin(115200);

pinMode(LED,輸出);

dht.begin();

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

延遲(500);

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

延遲(500);

}

void Task1code( void * pvParameters ){

Serial.print("Task1 在核心上運行");

Serial.println(xPortGetCoreID());

for(;;){

digitalWrite(led, HIGH);

延遲(300);

數(shù)字寫入(領導,低);

延遲(300);

}

}

void Task2code( void * pvParameters ){

Serial.print("Task2 在核心上運行");

Serial.println(xPortGetCoreID());

for(;;){

浮動 h = dht.readHumidity();

浮動 t = dht.readTemperature();

浮動 f = dht.readTemperature(true);

Serial.print("溫度:");

序列號.print(t);

Serial.print(" *C \n ");

if (isnan(h) || isnan(t) || isnan(f)) {

Serial.println("讀取 DHT 傳感器失??!");

返回;

}

延遲(2000);

}

}

無效循環(huán)() {

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    8372

    瀏覽量

    164519
  • 編程
    +關注

    關注

    90

    文章

    3716

    瀏覽量

    97171
  • Arduino
    +關注

    關注

    190

    文章

    6526

    瀏覽量

    196894
  • ESP32
    +關注

    關注

    26

    文章

    1193

    瀏覽量

    21659
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    ESP8266開發(fā)教程-Arduino IDE安裝、配置與使用以及Arduino編程

    本篇介紹了Arduino IDE的安裝、ESP8266開發(fā)包的安裝以及Arduino編程的快速入門來測試
    的頭像 發(fā)表于 06-06 09:24 ?3.7w次閱讀
    <b class='flag-5'>ESP</b>8266開發(fā)教程-<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b>安裝、配置與使用以及<b class='flag-5'>Arduino</b><b class='flag-5'>編程</b>

    基于Arduino IDE進行ESP32編程方案

    稱為ESP32。它具有藍牙和Wi-Fi連接,并在許多物聯(lián)網(wǎng)項目中使用了ESP32。但是很少有人知道ESP32微控制器。
    的頭像 發(fā)表于 01-09 11:25 ?1.8w次閱讀
    基于<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b><b class='flag-5'>進行</b>的<b class='flag-5'>ESP32</b><b class='flag-5'>編程</b>方案

    【FireBeetle 2 ESP32-S3開發(fā)板測評】Arduino IDE快速開發(fā)體驗

    【FireBeetle 2 ESP32-S3開發(fā)板測評】Arduino IDE快速開發(fā)體驗
    的頭像 發(fā)表于 07-23 09:03 ?4631次閱讀
    【FireBeetle 2  <b class='flag-5'>ESP32</b>-S3開發(fā)板測評】<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b>快速開發(fā)體驗

    如何用來實現(xiàn)ESP32的藍牙打印機打印

    ,考慮到ESP32具有兩個,實際上我們用Arduino進行編程時只使用到了第一個,第0
    發(fā)表于 01-25 08:05

    如何使用Arduino IDEESP8266進行編程

    您好,我正在使用 Arduino IDEESP8266 進行編程。我現(xiàn)在需要開始使用 RTOS 為
    發(fā)表于 02-23 07:48

    arduino ide中安裝esp32arduino框架時的問題求解

    arduino ide中安裝esp32arduino框架時的問題在arduino ide中安
    發(fā)表于 03-06 08:22

    esp32arduino的區(qū)別,esp32能否替代arduino

    很多創(chuàng)客愛好者甚至有些技術工程師在理解esp32arduino的時候總是問一句這兩塊板子哪個更好用?他們可能潛意識中就覺得arduinoesp32是競品的關系,但實際是這樣嗎?今天
    發(fā)表于 06-24 17:11 ?3w次閱讀

    ESP32CPU,利用0實現(xiàn)藍牙打印機打印,1完成常規(guī)控制

    ,考慮到ESP32具有兩個,實際上我們用Arduino進行編程時只使用到了第一個,第0
    發(fā)表于 11-30 17:51 ?14次下載
    <b class='flag-5'>ESP32</b><b class='flag-5'>雙</b><b class='flag-5'>核</b>CPU,利用<b class='flag-5'>核</b>0實現(xiàn)藍牙打印機打印,<b class='flag-5'>核</b>1完成常規(guī)控制

    Arduino-IDE配置ESP32-CAM開發(fā)環(huán)境踩過的那些坑

    Arduino-IDE配置ESP32-CAM開發(fā)環(huán)境踩過的那些坑
    發(fā)表于 11-30 18:36 ?24次下載
    <b class='flag-5'>Arduino-IDE</b>配置<b class='flag-5'>ESP32</b>-CAM開發(fā)環(huán)境踩過的那些坑

    如何使用Arduino IDEESP32進行無線編程

    在本教程中,我們將使用Arduino IDE 中的 OTA Web Updater對 ESP32 進行無線 (OTA) 編程。
    發(fā)表于 08-11 15:42 ?8680次閱讀
    如何使用<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b>對<b class='flag-5'>ESP32</b><b class='flag-5'>進行</b>無線<b class='flag-5'>編程</b>

    使用Arduino通過USB串行對ESP32S3進行編程和調試

    電子發(fā)燒友網(wǎng)站提供《使用Arduino通過USB串行對ESP32S3進行編程和調試.zip》資料免費下載
    發(fā)表于 10-19 14:50 ?5次下載
    使用<b class='flag-5'>Arduino</b>通過USB串行對<b class='flag-5'>ESP32</b>S3<b class='flag-5'>進行</b><b class='flag-5'>編程</b>和調試

    使用Arduino IDE和Visuino對ESP32 M5Stack StickC進行編程

    電子發(fā)燒友網(wǎng)站提供《使用Arduino IDE和Visuino對ESP32 M5Stack StickC進行編程.zip》資料免費下載
    發(fā)表于 11-21 09:49 ?0次下載
    使用<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b>和Visuino對<b class='flag-5'>ESP32</b> M5Stack StickC<b class='flag-5'>進行</b><b class='flag-5'>編程</b>

    如何在Arduino IDE中安裝ESP32開發(fā)環(huán)境

    要在Arduino IDE中使用ESP32開發(fā)板,您需要先安裝相應的開發(fā)環(huán)境。以下是在Arduino IDE中安裝
    的頭像 發(fā)表于 07-13 16:48 ?2.4w次閱讀
    如何在<b class='flag-5'>Arduino</b> <b class='flag-5'>IDE</b>中安裝<b class='flag-5'>ESP32</b>開發(fā)環(huán)境

    ESP32學習筆記:

    今天我們來說說ESP32 for Arduino。
    的頭像 發(fā)表于 07-15 16:16 ?7742次閱讀
    <b class='flag-5'>ESP32</b>學習筆記:<b class='flag-5'>雙</b><b class='flag-5'>核</b>

    esp32用什么軟件編程

    。 概述 ESP32具有豐富的外設接口和靈活的編程方式,支持多種編程語言和開發(fā)環(huán)境。本文將詳細介紹ESP32編程軟件,包括開發(fā)環(huán)境、
    的頭像 發(fā)表于 08-19 17:24 ?1.1w次閱讀