ESP32入門開發·VScode空白項目搭建·點亮一顆LED燈

目錄

1.? 環境搭建

2.? 創建項目

3.? 調試相關介紹

4.? 代碼編寫

4.1? 包含頭文件

4.2? 引腳配置

4.3? 設置輸出電平

4.4? 延時函數

4.5? 調試


1.? 環境搭建

? ? ? ? 默認已經搭建好環境,如果未搭建好可參考:

ESP32入門開發·Windows平臺下開發環境的搭建-CSDN博客

2.? 創建項目

? ? ? ? 當我們配好環境后,左邊會出現ESP-IDF的圖標,點擊圖標找到新項目向導,選擇框架,這里我只安裝了5.2.3所以就一個:

? ? ? ? 如果沒漢化就找到New Project Wizard(新項目向導):


? ? ? ? 當然除了上述方法,我們也可以按F1或者Shift+Ctrl+P喚醒上方搜索欄,搜索Nuw Project,效果是一樣的:


? ? ? ? 選擇完框架后進入如下界面,①位項目名稱,②是你所要保存的工程路徑(注意ESP-IDF 編譯系統不支持 ESP-IDF 路徑或其工程路徑中帶有空格):

? ? ? ? ③是一些esp32的芯片型號,根據自己芯片進行選擇,這里我使用的是esp32-s3的芯片:

? ? ? ? ④是一些目標芯片的選擇,根據板子的不同這里的東西也不同,根據自己需求選擇:

? ? ? ? ⑤是連接板子的COM口,看看哪個口和板子連接,這個后續可進行更改:

? ? ? ? 設定完后點擊“Choose Template”選擇模版:

? ? ? ? 選擇ESP-IDF:

? ? ? ? 下面都是一些官方示例模版,如果你想要新建一個空白的,直接如圖所示找到sample_project點擊,找到圖示Creat project using template sample_project點擊:

? ? ? ? 此時我們發現新建好了一個空白工程:

????????此時左側的相關文件功能分別為:

文件名功能描述
.devcontainer和Docker相關的配置文件(系統自動生成,不需要用戶修改)
.vscode和vscode相關的配置文件(系統自動生成,不需要用戶修改)
build編譯項目文件(編譯項目后會自動生成,不需要用戶修改)
main主程序目錄,系統自動生成的代碼
CMakeLists.txtCMake配合文件,用于構建項目編譯環境
README.md項目說明文檔
sdkconfigSDK配置,在這里可選擇enable/disable某一個模塊

? ? ? ? 隨便打一句話,編譯一下看看是否成功:

#include <stdio.h>void app_main(void)
{printf("Hellow esp32!!!\n");
}

? ? ? ? 點擊構建,燒錄和監視按鍵可以發現打印數據:

? ? ? ? 空白項目創建完成。

3.? 調試相關介紹

編號功能介紹
1當前項目
2當前版本
3選擇燒錄方式
4選擇燒錄口
5芯片設備
6SDK配置編輯器
7清理構建的項目
8構建項目
9燒錄
10監聽
11調試
12構建,燒錄,監聽
13打開ESP-IDF終端
14執行自定義任務
15問題提示

4.? 代碼編寫

? ? ? ? 在代碼開始編寫前,我們最好找到ESP32-IDF相關的編程指南,方便了解引腳功能,編寫代碼:

快速入門 - ESP32-S3 - — ESP-IDF 編程指南 v5.5 文檔

? ? ? ? 找打GPIO相關的章節:

? ? ? ? 代碼就用上面創建的工程在里面來添加把。

4.1? 包含頭文件

? ? ? ? 想要調用GPIO口相關API函數需要將其頭文件包含進來:

#include "driver/gpio.h"

4.2? 引腳配置

? ? ? ? 這里我們可以參考STM32的引腳配置方便理解一些,我們在使能STM32的引腳時需要將引腳掛載到對應總線上使能時鐘,然后對GPIO口其中的一些數據進行配置,將配置好的變量傳給相關參數:

	/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//開啟GPIOA的時鐘//使用各個外設前必須開啟時鐘,否則對外設的操作無效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引腳,賦值為第0號引腳GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//將賦值后的構體變量傳遞給GPIO_Init函數//函數內部會自動根據結構體的參數配置相應寄存器//實現GPIOA的初始化

? ? ? ? ESP32的GPIO口使能大同小異,不過需要注意一點的是,STM32 采用的是傳統的 ARM Cortex-M 系列架構,其外設(包括 GPIO)通常掛在不同的總線上,需要單獨使能對應總線的時鐘才能操作外設,這是為了降低功耗。但是ESP32 的外設時鐘管理機制不同,其 GPIO 等常用外設的時鐘在芯片上電后默認是使能的,不需要用戶手動開啟。

? ? ? ? 因此這里我們只要定義結構體變量,并且賦值即可,這里我們需要調用 gpio_config_t 函數:

    // 配置GPIO引腳gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 設置要配置的引腳io_conf.mode = GPIO_MODE_OUTPUT;// 設置為輸出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉電阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉電阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中斷模式不使用式不使用

解釋:

? ? ? ? 第一行代碼結構體聲明沒少好說的,引腳配置,在 ESP32-IDF 的gpio_config_t結構體中,pin_bit_mask采用位掩碼(bitmask) 方式來指定需要配置的 GPIO 引腳,其中的位掩碼設計思路:

  • 每個 bit 代表一個 GPIO 引腳,bit 位置與 GPIO 編號對應
  • 當某個 bit 被設置為 1 時,表示需要配置對應的 GPIO 引腳
  • 例如:1ULL << GPIO_NUM_0 表示只配置 GPIO0
  • 若要同時配置多個引腳,可以這樣寫:(1ULL << GPIO_NUM_0) | (1ULL << GPIO_NUM_2) | (1ULL << GPIO_NUM_4)

ULL表示無符號長整型(64 位),確保在移位操作時不會發生溢出。

如果要同時配置 GPIO0、GPIO2 和 GPIO4,代碼可以寫成:

io_conf.pin_bit_mask = (1ULL << GPIO_NUM_0) | (1ULL << GPIO_NUM_2) | (1ULL << GPIO_NUM_4);

? ? ? ? 對于模式配置,根據需求,使能就是ENABLE,失能就是DISABLE,這里就配置一個輸出其他都不要,因此全是DISABLE,可以自己跳轉到定義查看:


? ? ? ? 配置完后將參數寫入,調用函數 gpio_config :

? ? ? ? 其實除了缺了個使能這里和STM32差不多:

#include <stdio.h>
#include "driver/gpio.h"void app_main(void)
{// 配置GPIO引腳gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 設置要配置的引腳io_conf.mode = GPIO_MODE_OUTPUT;// 設置為輸出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉電阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉電阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中斷模式不使用// 配置GPIOgpio_config(&io_conf);
}

4.3? 設置輸出電平

? ? ? ? 我們知道在STM32當中是通過 GPIO_ResetBits 和?GPIO_SetBits 來控制電平的高低的:

		GPIO_ResetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為低電平Delay_ms(500);										//延時500msGPIO_SetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為高電平Delay_ms(500);										//延時500ms

? ? ? ? 在ESP32-IDF當中,是通過?gpio_set_level 來控制的:

    gpio_set_level(GPIO_NUM_1, 1); // 設置GPIO0為高電平

? ? ? ? 此時的代碼:

#include <stdio.h>
#include "driver/gpio.h"void app_main(void)
{// 配置GPIO引腳gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 設置要配置的引腳io_conf.mode = GPIO_MODE_OUTPUT;// 設置為輸出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉電阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉電阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中斷模式不使用// 配置GPIOgpio_config(&io_conf);gpio_set_level(GPIO_NUM_1, 1); // 設置GPIO0為高電平
}

4.4? 延時函數

? ? ? ? 這里我使用FreeRTOS的延時函數,因此需要將FreeRTOS頭文件引入進來:

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

? ? ? ? 調用延時函數 vTaskDelay 延時500ms:

 vTaskDelay(500/portTICK_PERIOD_MS); // 延時500毫秒,portTICK_PERIOD_MS是FreeRTOS的時間基數(通常為1ms)

? ? ? ? 此時完整代碼:

#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"void app_main(void)
{// 配置GPIO引腳gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 設置要配置的引腳io_conf.mode = GPIO_MODE_OUTPUT;// 設置為輸出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉電阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉電阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中斷模式不使用// 配置GPIOgpio_config(&io_conf);while (1){gpio_set_level(GPIO_NUM_1, 1); // 設置GPIO0為高電平  printf("LED_ON!!!\r\n");     vTaskDelay(500/portTICK_PERIOD_MS); // 延時500毫秒,portTICK_PERIOD_MS是FreeRTOS的時間基數(通常為1ms)gpio_set_level(GPIO_NUM_1, 0); // 設置GPIO0為高電平       printf("LED_OFF!!!\r\n");  vTaskDelay(500/portTICK_PERIOD_MS); // 延時500毫秒,portTICK_PERIOD_MS是FreeRTOS的時間基數(通常為1ms)}
}

4.5? 調試

? ? ? ? 下載調試看一下:

? ? ? ? 可以看到燈閃爍,數據也交替打印:

? ? ? ? 這里放不了視頻,就只能通過Printf打印來看了,等之后研究研究,更多使用可以參考下方鏈接。

ESP32入門開發·Windows平臺下開發環境的搭建-CSDN博客

ESP32學習筆記_時光の塵的博客-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92911.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ONLYOFFICE AI 智能體上線!與編輯器、新的 AI 提供商等進行智能交互

ONLYOFFICE AI 插件?迎來重要更新&#xff0c;帶來了新功能和更智能的交互體驗。隨著 AI 智能體&#xff08;現為測試版&#xff09;的上線、帶來更多 AI 提供商支持以及其他新功能&#xff0c;AI 插件已經成為功能強大的文檔智能助理。 關于 ONLYOFFICE ONLYOFFICE 文檔是多…

【C++進階學習】第十一彈——C++11(上)——右值引用和移動語義

前言&#xff1a; 前面我們已經將C的重點語法講的大差不差了&#xff0c;但是在C11版本之后&#xff0c;又出來了很多新的語法&#xff0c;其中有一些作用還是非常大的&#xff0c;今天我們就先來學習其中一個很重要的點——右值引用以及它所擴展的移動定義 目錄 一、左值引用和…

【IoTDB】363萬點/秒寫入!IoTDB憑何領跑工業時序數據庫賽道?

【作者主頁】Francek Chen 【專欄介紹】???大數據與數據庫應用??? 大數據是規模龐大、類型多樣且增長迅速的數據集合&#xff0c;需特殊技術處理分析以挖掘價值。數據庫作為數據管理的關鍵工具&#xff0c;具備高效存儲、精準查詢與安全維護能力。二者緊密結合&#xff0…

IEEE 2025 | 重磅開源!SLAM框架用“法向量+LRU緩存”,將三維重建效率飆升72%!

一、前言 當前研究領域在基于擴散模型的文本到圖像生成技術方面取得了顯著進展&#xff0c;尤其在視覺條件控制方面。然而&#xff0c;現有方法&#xff08;如ControlNet&#xff09;在組合多個視覺條件時存在明顯不足&#xff0c;主要表現為獨立控制分支在去噪過程中容易引入…

無人機遙控器教練模式技術要點

一、技術要點1.控制權仲裁機制&#xff1a;核心功能&#xff1a;清晰定義主控權歸屬邏輯&#xff08;默認為學員&#xff0c;但教練隨時可接管&#xff09;。切換方式&#xff1a;通常通過教練遙控器上的物理開關&#xff08;瞬時或鎖定型&#xff09;或軟件按鈕觸發。切換邏輯…

【跨服務器的數據自動化下載--安裝公鑰,免密下載】

跨服務器的數據自動化下載功能介紹&#xff1a;上代碼&#xff1a;發現好久沒寫csdn了&#xff0c;說多了都是淚~~ 以后會更新一些自動化工作的腳本or 小tricks&#xff0c;歡迎交流。分享一個最近在業務上寫的較為實用的自動化腳本&#xff0c;可以批量從遠端服務器下載指定數…

C++-->stl: list的使用

前言list的認識list是可以在固定時間&#xff08;O&#xff08;1&#xff09;&#xff09;內在任意位置進行插入和刪除的序列式容器&#xff0c;并且該容器可以前后雙向迭代。 2. list的底層是雙向鏈表結構&#xff0c;雙向鏈表中每個元素存儲在互不相關的獨立節點中&#xff0…

本地WSL部署接入 whisper + ollama qwen3:14b 總結字幕

1. 實現功能 M4-1 接入 whisper ollama qwen3:14b 總結字幕 自動下載視頻元數據如果有字幕&#xff0c;只下載字幕使用 ollama 的 qwen3:14b 對字幕內容進行總結 2.運行效果 source /root/anaconda3/bin/activate ytdlp &#x1f50d; 正在提取視頻元數據… &#x1f4dd; 正在…

《Linux運維總結:Shell腳本高級特性之變量間接調用》

總結&#xff1a;整理不易&#xff0c;如果對你有幫助&#xff0c;可否點贊關注一下&#xff1f; 更多詳細內容請參考&#xff1a;Linux運維實戰總結 一、變量間接調用 在Shell腳本中&#xff0c;變量間接調用是一種高級特性&#xff0c;它允許你通過另一個變量的值來動態地訪問…

ABP VNext + Akka.NET:高并發處理與分布式計算

ABP VNext Akka.NET&#xff1a;高并發處理與分布式計算 &#x1f680; 用 Actor 模型把高并發寫入“分片→串行化”&#xff0c;把鎖與競態壓力轉回到代碼層面的可控順序處理&#xff1b;依托 Cluster.Sharding 橫向擴容&#xff0c;Persistence 宕機可恢復&#xff0c;Strea…

[激光原理與應用-250]:理論 - 幾何光學 - 透鏡成像的優缺點,以及如克服缺點

透鏡成像是光學系統中應用最廣泛的技術&#xff0c;其通過折射原理將物體信息轉換為圖像&#xff0c;但存在像差、環境敏感等固有缺陷。以下是透鏡成像的優缺點及針對性改進方案&#xff1a;一、透鏡成像的核心優點高效集光能力透鏡通過曲面設計將分散光線聚焦到一點&#xff0…

測試匠談 | AI語音合成之大模型性能優化實踐

「測試匠談」是優測云服務平臺傾心打造的內容專欄&#xff0c;匯集騰訊各大產品的頂尖技術大咖&#xff0c;為大家傾囊相授開發測試領域的知識技能與實踐&#xff0c;讓測試工作變得更加輕松高效。 本期嘉賓介紹 Soren&#xff0c;騰訊TEG技術事業群質量工程師&#xff0c;負責…

用天氣預測理解分類算法-從出門看天氣到邏輯回歸

一、生活中的決策難題&#xff1a;周末郊游的「天氣判斷」 周末計劃郊游時&#xff0c;你是不是總會打開天氣預報反復確認&#xff1f;看到 "25℃、微風、無雨" 就興奮收拾行李&#xff0c;看到 "35℃、暴雨" 就果斷取消計劃。這個判斷過程&#xff0c;其…

HTTPS服務

HTTPS服務 一、常見的端口 http ------ 80 明文 https ------ 443 數據加密 dns ------ 53 ssh ------ 22 telent ------ 23 HTTPS http ssl或者tls &#xff08;安全模式&#xff09; 二、原理&#xff1a; c&#xff08;客戶端…

【Android筆記】Android 自定義 TextView 實現垂直漸變字體顏色(支持 XML 配置)

Android 自定義 TextView 實現垂直漸變字體顏色&#xff08;支持 XML 配置&#xff09; 在 Android UI 設計中&#xff0c;字體顏色的漸變效果能讓界面看起來更加精致與現代。常見的漸變有從左到右、從上到下等方向&#xff0c;但 Android 的 TextView 默認并不支持垂直漸變。…

CANopen Magic調試軟件使用

一、軟件安裝與硬件連接1.1 系統要求操作系統&#xff1a;Windows 7/10/11 (64位)硬件接口&#xff1a;支持Vector/PEAK/IXXAT等主流CAN卡推薦配置&#xff1a;4GB內存&#xff0c;2GHz以上CPU1.2 安裝步驟運行安裝包CANopen_Magic_Setup.exe選擇安裝組件&#xff08;默認全選&…

前端css學習筆記3:偽類選擇器與偽元素選擇器

本文為個人學習總結&#xff0c;如有謬誤歡迎指正。前端知識眾多&#xff0c;后續將繼續記錄其他知識點&#xff01; 目錄 前言 一、偽類選擇器 1.概念 2.動態選擇器&#xff08;用戶交互&#xff09; 3.結構偽類 &#xff1a;first-child&#xff1a;選擇所有兄弟元素的…

深入探索 PDF 數據提取:PyMuPDF 與 pdfplumber 的對比與實戰

在數據處理和分析領域&#xff0c;PDF 文件常常包含豐富的文本、表格和圖形信息。然而&#xff0c;從 PDF 中提取這些數據并非易事&#xff0c;尤其是當需要保留格式和顏色信息時。幸運的是&#xff0c;Python 社區提供了多個強大的庫來幫助我們完成這項任務&#xff0c;其中最…

Springboot注冊過濾器的三種方式(Order 排序)

一、使用 Component Order&#xff08;簡單但不夠靈活&#xff09; 適用于全局過濾器&#xff0c;無需手動注冊&#xff0c;Spring Boot 會自動掃描并注冊。 Component Order(1) // 數字越小&#xff0c;優先級越高 public class AuthFilter implements Filter {Autowired /…

電腦硬件詳解

前幾天我的風扇轉的很快&#xff0c;而且cpu占用率很高&#xff0c;然后我在想怎么回事&#xff0c;然后就淺淺研究了一下電腦的硬件。 筆記本主板&#xff1a; 臺式機主板&#xff1a; 圖1&#xff1a; 圖2&#xff1a; 電腦硬件詳解 電腦的硬件是組成計算機系統的物理設…