在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino IDE進(jìn)行ESP32雙核編程

科技觀察員 ? 來源:circuitdigest ? 作者:Rishabh Jain ? 2022-08-18 17:20 ? 次閱讀

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

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

poYBAGL-BAGAFpCuAAKatiyngPU771.png

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

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

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

當(dāng)有兩個(gè)以上的進(jìn)程同時(shí)工作時(shí),多核處理器很有用。

由于工作分布在不同的內(nèi)核之間,它的速度會(huì)提高,并且可以同時(shí)完成多個(gè)進(jìn)程。

可以降低功耗,因?yàn)楫?dāng)任何內(nèi)核處于空閑模式時(shí),它都可以用來關(guān)閉當(dāng)時(shí)未使用的外圍設(shè)備。

雙核處理器必須比單核處理器更少地在不同線程之間切換,因?yàn)樗鼈兛梢砸淮翁幚韮蓚€(gè)而不是一次處理一個(gè)。

ESP32 和 FreeRTOS

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

可以在此處找到 FreeRTOS API 的完整文檔。我們將嘗試在代碼中使用一些 API 來構(gòu)建將在兩個(gè)內(nèi)核上運(yùn)行的多任務(wù)應(yīng)用程序。

查找 ESP32 內(nèi)核 ID

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

xPortGetCoreID()

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

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

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

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

pYYBAGL-A_yABBkPAAJ154y7KcI484.png

從以上觀察可以得出結(jié)論,默認(rèn)的 Arduino 草圖始終在 core1 上運(yùn)行。

ESP32 雙核編程

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

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

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

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

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

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

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

以字為單位分配給任務(wù)的堆棧大小(1 個(gè)字=2 字節(jié))

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

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

任務(wù)句柄(可以為 NULL)

任務(wù)將運(yùn)行的核心 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個(gè)參數(shù)中設(shè)置 core id 1。

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

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

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

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

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

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

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

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

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

poYBAGL-A_aATqrmAAIIzDXrRW0533.png

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

poYBAGL-A_KACR4cAANFKpPKSiE091.png

通過使用 ESP32 的雙核同時(shí)運(yùn)行多個(gè)任務(wù),可以構(gòu)建像實(shí)時(shí)系統(tǒng)這樣的復(fù)雜應(yīng)用。

#include "DHT.h"

#define DHTPIN 13

#define DHTTYPE DHT11

const int led = 2;

DHT dht(DHTPIN, DHTTYPE);

無效設(shè)置() {

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 在核心上運(yùn)行");

Serial.println(xPortGetCoreID());

for(;;){

digitalWrite(led, HIGH);

延遲(300);

數(shù)字寫入(領(lǐng)導(dǎo),低);

延遲(300);

}

}

void Task2code( void * pvParameters ){

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

Serial.println(xPortGetCoreID());

for(;;){

浮動(dòng) h = dht.readHumidity();

浮動(dòng) t = dht.readTemperature();

浮動(dòng) 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)() {

}

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

    關(guān)注

    48

    文章

    7659

    瀏覽量

    152184
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3640

    瀏覽量

    94031
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6477

    瀏覽量

    187954
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    980

    瀏覽量

    17565
收藏 人收藏

    評論

    相關(guān)推薦

    基于Arduino IDE進(jìn)行ESP32編程方案

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

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

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

    如何用來實(shí)現(xiàn)ESP32的藍(lán)牙打印機(jī)打印

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

    如何使用Arduino IDEESP8266進(jìn)行編程

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

    arduino ide中安裝esp32arduino框架時(shí)的問題求解

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

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

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

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

    ,考慮到ESP32具有兩個(gè),實(shí)際上我們用Arduino進(jìn)行編程時(shí)只使用到了第一個(gè),第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實(shí)現(xiàn)藍(lán)牙打印機(jī)打印,<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進(jìn)行無線編程

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

    使用Arduino通過USB串行對ESP32S3進(jìn)行編程和調(diào)試

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

    使用Arduino IDE和Visuino對ESP32 M5Stack StickC進(jìn)行編程

    電子發(fā)燒友網(wǎng)站提供《使用Arduino IDE和Visuino對ESP32 M5Stack StickC進(jìn)行編程.zip》資料免費(fèi)下載
    發(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'>進(jìn)行</b><b class='flag-5'>編程</b>

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

    電子發(fā)燒友網(wǎng)站提供《如何使用Arduino IDE編程ESP8266-12E.zip》資料免費(fèi)下載
    發(fā)表于 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

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

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

    ESP32學(xué)習(xí)筆記:

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

    esp32用什么軟件編程

    。 概述 ESP32具有豐富的外設(shè)接口和靈活的編程方式,支持多種編程語言和開發(fā)環(huán)境。本文將詳細(xì)介紹ESP32編程軟件,包括開發(fā)環(huán)境、
    的頭像 發(fā)表于 08-19 17:24 ?4417次閱讀
    主站蜘蛛池模板: 国产好深好硬好爽我还要视频 | 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片男 | 欧美三级精品 | a级毛片毛片免费很很综合 a级男女性高爱潮高清试 | 奇米777狠狠 | 免费视频网站在线看视频 | 久久夜夜视频 | 欧美肥胖女人bbwbbw视频 | 亚洲综合色婷婷中文字幕 | 最新黄色大片 | 爱爱视频天天看 | 亚洲黄色色图 | 99热网址| 国产精品伦理久久久久 | 欧美三级网站 | 日韩欧美理论 | 久综合色 | 国产午夜久久影院 | 97理论三级九七午夜在线观看 | av网址在线看 | 天天都色 | 免费任我爽橹视频在线观看 | 欧美一级欧美三级在线 | 把小嫩嫩曰出白浆 | 日韩在线视频www色 日韩在线视频免费观看 | 色手机在线 | 五月婷婷丁香综合网 | 午夜福利毛片 | 99久久久免费精品免费 | 久久这里只有精品任你色 | 手机看片国产免费永久 | 很黄很黄的网站免费的 | 久久综合偷偷噜噜噜色 | 成人欧美精品一区二区不卡 | 狠狠一区 | 欧美军同video69视频 | 午夜片在线 | 有一婷婷色 | 日本不卡在线观看 | 美女视频很黄很a免费国产 美女视频很黄很暴黄是免费的 | 亚洲啪啪网站 |