鄭州網(wǎng)站建設(shè)老牌公司谷歌搜索引擎鏡像入口
ESP-IDF + Vscode ESP32 開發(fā)環(huán)境搭建以及開發(fā)入門
文章目錄
- ESP-IDF + Vscode ESP32 開發(fā)環(huán)境搭建以及開發(fā)入門
- 1. 前言
- 2. 下載開發(fā)工具
- 3. 配置工具
- 4. 創(chuàng)建工程
- 5. 解決vscode找不到頭文件,波浪線警告
- 6. 添加自己的組件
- 6.1 組件說明
- 6.2 添加項(xiàng)目組件
- 6.3 添加擴(kuò)展組件
- 7. 解決組件內(nèi)引用 ESP-IDF 內(nèi)函數(shù)、頭文件報(bào)錯(cuò)
創(chuàng)作不易,轉(zhuǎn)載請(qǐng)注明出處!
Tips: 雖然筆者采用的是Linux開發(fā)環(huán)境,但是Windows開發(fā)環(huán)境的亦可閱讀,所述內(nèi)容與系統(tǒng)關(guān)聯(lián)性不大,尤其是后文介紹的如何將自己的文件加入到工程,解決頭文件找不到等問題,無論哪種系統(tǒng)均會(huì)存在。
1. 前言
關(guān)于ESP32的開關(guān)環(huán)境搭建,其實(shí)有很多種,其中如果使用 Vscode 的話,通常大家會(huì)直接使用vscode里面的Espressif IDF插件,然后通過插件安裝對(duì)應(yīng)的配置工具搭建開發(fā)環(huán)境,使用此方法確實(shí)比較方便,操作也比較簡單,但是此方法存在一定的缺陷,使用此方法搭建的環(huán)境不方便維護(hù),ESP-IDF的版本升級(jí)切換不方便
使用 Espressif IDF
安裝環(huán)境,在 ESP-IDF
目錄下除了存放了 ESP-IDF 工具以外,編譯工具鏈也丟在了這個(gè)里面(在IDF目錄下使用git查看執(zhí)行 git status
即可發(fā)現(xiàn)),兩種文件混合在了一起,會(huì)導(dǎo)致無法單獨(dú)維護(hù),當(dāng)想要升級(jí)ESP-IDF版本的時(shí)候,就必須要把環(huán)境全部重新安裝一遍,而安裝的時(shí)候下載又特別慢,所以這個(gè)過程會(huì)變?yōu)橐粋€(gè)非常麻煩的事情
本文采用的方法稱之為:ESP-IDF + Vscode開發(fā)方法,此方法成功的將 ESP-IDF
工具與編譯工具分離,因此可以單獨(dú)維護(hù),關(guān)于ESP-IDF的版本切換可直接使用git切換即可,十分的方便,同時(shí)編輯器還是采用Vscode,編寫代碼還是很方便
此外,本文除了闡述如何搭建開發(fā)環(huán)境之外,還記載了博主關(guān)于ESP32開發(fā)過程中的相關(guān)筆記,主要介紹了如何采用ESP32的開發(fā)風(fēng)格開始搭建我們自己的工程進(jìn)行開發(fā)。
tips: 推薦使用最新發(fā)布版本的 ESP-IDF
,最新的修復(fù)了許多有關(guān)問題!!! 踩過的坑就不要踩了 T…T
2. 下載開發(fā)工具
- 下載 IDF 工具
mkdir -p ~/esp cd ~/esp git clone --recursive https://github.com/espressif/esp-idf.git
- 下載 Vscode 軟件
- 安裝Vscode插件
Espressif IDF
,注意這里下載好就行了,不要去配置
3. 配置工具
- 配置 IDF 工具,為所有ESP32設(shè)備環(huán)境
cd ~/esp/esp-idf ./install.sh
- 設(shè)置環(huán)境變量
cd ~/esp/esp-idf ./export.sh
- 但是每個(gè)terminator窗口都得像第2步一樣運(yùn)行下export.sh指令,對(duì)應(yīng)的命令窗口才有相應(yīng)的idf環(huán)境變量,非常麻煩,因此需要讓其智能一點(diǎn),在
~/.bashrc
里面加一個(gè)宏命令- 運(yùn)行
vi ~/.bashrc
,打開~/.bashrc
,在最后添加一行命令alias get_idf='. $HOME/esp/esp-idf/export.sh'
- 之后每次打開一個(gè)新terminator窗口,只需要輸入 get_idf 命令,即可給對(duì)應(yīng)的 terminator 添加 IDF 的環(huán)境變量
- 運(yùn)行
4. 創(chuàng)建工程
-
使用 idf 工具創(chuàng)建工程
-
進(jìn)入工程目錄,設(shè)置目標(biāo)設(shè)備,如開發(fā)esp32,則輸入
idf.py set-target esp32
-
使用vscode打開編輯
5. 解決vscode找不到頭文件,波浪線警告
問題描述:
默認(rèn)使用IDF創(chuàng)建工程之后,可使用 idf.py build
編譯工程,但是使用vscode打開工程,添加頭文件之后,vscode會(huì)提示找不到頭文件,以及相應(yīng)宏、函數(shù)無法跳轉(zhuǎn),這是由于vscode沒有配置導(dǎo)致
解決方案:
- 安裝
Espressif IDF
插件
- 進(jìn)入IDF目錄,重新運(yùn)行 install.sh 腳本,此腳本會(huì)配置 Espressif IDF 插件(建議這么操作,因?yàn)槲疫\(yùn)行
./install.sh
的時(shí)候插件是以及裝好了的)cd ~/esp/esp-idf ./install.sh
- 使用vscode打開相應(yīng)工程, 注意vscode打開的是對(duì)應(yīng)的工程路徑,而不是包含多個(gè)工程的路徑
- 按快捷鍵
Ctrl + Shift + P
打開命令行, 找到ESP-IDF:Add vscode configuration folder
,點(diǎn)擊一下即可自動(dòng)生成對(duì)應(yīng)的vscode配置文件
- 點(diǎn)擊之后可以看到工程目錄下多了一個(gè)
.vscode
目錄,并產(chǎn)生了相應(yīng)的文件,其中c_cpp_properties.json
內(nèi)描述的就是對(duì)應(yīng)的頭文件路徑
- 之后可以看到波浪線警告消失了,對(duì)應(yīng)的文件也可以通過
ctrl+鼠標(biāo)左鍵
打開
6. 添加自己的組件
說明:本博客ESP-IDF版本 V5.0
6.1 組件說明
當(dāng)我們開始真正使用ESP32進(jìn)行開發(fā)的時(shí)候,我們肯定期望將我們的程序按照各自的功能,分解成各自的 .c 文件,這樣方便編輯、管理和移植,如GPIO的驅(qū)動(dòng)在單獨(dú)編寫的 drv_gpio.c
內(nèi)實(shí)現(xiàn),那么針對(duì)ESP32如何實(shí)現(xiàn)類似的功能呢?
之前編寫 stm32 的時(shí)候有IDE的支持,IDE自動(dòng)幫我們完成,但是這里Vscode僅僅只是一個(gè)代碼編輯器,關(guān)于代碼的編譯,esp32采用的是Cmake工具來完成, 因此我們需要補(bǔ)充相關(guān)的cmake文件來實(shí)現(xiàn)。
ESP32的組件分為幾大類,均記錄在cmake的變量COMPONENT_DIRS
內(nèi):
- ESP-IDF內(nèi)部組件
IDF_PATH/components
- 擴(kuò)展組件
EXTRA_COMPONENT_DIRS
- 項(xiàng)目組件
PROJECT_DIR/components
ESP-IDF內(nèi)部組件:也就是官方提供的組件,在ESP-IDF目錄內(nèi)
擴(kuò)展組件:工程目錄一般長這樣
- myProject/- CMakeLists.txt- sdkconfig- components/ - component1/ - CMakeLists.txt- Kconfig- src1.c- component2/ - CMakeLists.txt- Kconfig- src1.c- include/ - component2.h- main/ - CMakeLists.txt- src1.c- src2.c- build/
官方文檔是這么解釋的:可選的 “components” 目錄中包含了項(xiàng)目的部分自定義組件,并不是每個(gè)項(xiàng)目都需要這種自定義組件,但它有助于構(gòu)建可復(fù)用的代碼或者導(dǎo)入第三方(不屬于 ESP-IDF)的組件?;蛘?#xff0c;您也可以在頂層 CMakeLists.txt 中設(shè)置 EXTRA_COMPONENT_DIRS 變量以查找其他指定位置處的組件。
因此擴(kuò)展組件是我們自行添加的目錄,之后通過在頂層CMakeLists.txt
中設(shè)置 EXTRA_COMPONENT_DIRS
變量指定對(duì)應(yīng)的位置;
項(xiàng)目組件是工程目錄下components
目錄下的組件,默認(rèn)沒有這個(gè)目錄,可自行創(chuàng)建
需要注意的是,各組件不同同名,否則會(huì)發(fā)生覆蓋,組件的編譯順序?yàn)?ESP-IDF內(nèi)部組件 -> 擴(kuò)展組件 -> 項(xiàng)目組件,后編譯的組件會(huì)覆蓋之前編譯的同名組件,(此特點(diǎn)也有優(yōu)點(diǎn):允許將組件復(fù)制到項(xiàng)目目錄中再修改以覆蓋ESP-IDF組件,如果使用這種方式,ESP-IDF 目錄本身可以保持不變)
6.2 添加項(xiàng)目組件
- 創(chuàng)建
components
目錄 - 創(chuàng)建組件
- 方法一:使用idf命令創(chuàng)建組件:
idf.py -C <組件集目錄地址> create-component <component name>
- 方法二:創(chuàng)建對(duì)應(yīng)的目錄并創(chuàng)建對(duì)應(yīng)的源文件,復(fù)制其他組件的CMakeLists.txt文件
- 方法一:使用idf命令創(chuàng)建組件:
- 在組件內(nèi)編寫對(duì)應(yīng)的程序即可
- 清除工程,之后重新編譯
idf.py clean
->idf.py build
6.3 添加擴(kuò)展組件
一定注意創(chuàng)建的組件名,不要和系統(tǒng)組件名相同,否則會(huì)覆蓋造成報(bào)錯(cuò),除非你主動(dòng)為之,可通過搜索 COMPONENT_DIRS 中的目錄列表以查找項(xiàng)目的組件(搜索方法:在CmakeList.txt中把這個(gè)變量打印出來)
- 創(chuàng)建自己存放組件集的組件目錄,之后在組件目錄下創(chuàng)建組件,不能直接創(chuàng)建組件目錄,如這里創(chuàng)建組件集目錄
user
,在user
目錄下創(chuàng)建gpio驅(qū)動(dòng)組件目錄gpio
- 復(fù)制其他組件的CMakeLists.txt
- 修改組件目錄內(nèi)的CMakeLists.txt
- 修改頂層CMakeLists.txt,添加
EXTRA_COMPONENT_DIRS
指定,注意此添加需要在project()
之前,因?yàn)閳?zhí)行project指令的時(shí)候已經(jīng)創(chuàng)建工程了
- 編寫對(duì)應(yīng)的
drv_gpio.c
drv_gpio.h
,并在main.c
中引用,之后編譯測試**(先清除工程,之后重新編譯idf.py clean
->idf.py build
)**
編譯測試成功
7. 解決組件內(nèi)引用 ESP-IDF 內(nèi)函數(shù)、頭文件報(bào)錯(cuò)
當(dāng)我們創(chuàng)建好單獨(dú)的組件后,將在單獨(dú)的組件內(nèi)編寫各自的應(yīng)用,如上,我們創(chuàng)建了 gpio 組件,那么相應(yīng)將會(huì)在gpio組件中編寫對(duì)應(yīng)的gpio驅(qū)動(dòng),驅(qū)動(dòng)中肯定會(huì)要應(yīng)用ESP-IDF內(nèi)的組件,但是當(dāng)我們編譯的時(shí)候會(huì)提示找不到相應(yīng)文件。
我們的驅(qū)動(dòng)程序如下:
編譯報(bào)錯(cuò):../user/gpio/drv_gpio.c:2:10: fatal error: driver/gpio.h: No such file or directory
這是由于依賴問題沒有解決導(dǎo)致,我們編寫的drv_gpio.c
文件沒有指定依賴,那么編譯器將不知道去哪里找這個(gè)driver/gpio.h
文件,因此報(bào)錯(cuò),所以我們需要給它加上依賴,修改對(duì)應(yīng)組件的CMakeLists.txt文件,增加 REQUIRES driver
指定依賴driver組件:
那么有人肯定會(huì)問,為什么在默認(rèn)的main組件內(nèi)這么寫不會(huì)報(bào)錯(cuò)呢?這是由于main組件是一個(gè)特殊組件,工程的$ENV{IDF_PATH}/tools/cmake/project.cmake 默認(rèn)為其添加了所有依賴
注意修改CMakeLists.txt后清除工程再重新編譯 idf.py clean
-> idf.py build
創(chuàng)作不易,轉(zhuǎn)載請(qǐng)注明出處!
關(guān)注、點(diǎn)贊+收藏,可快速查收博主有關(guān)分享!