esp32 linux 下 環(huán)境配置 編譯與燒寫
esp32 環(huán)境配置 編譯與燒寫
本文針對(duì)esp32初學(xué)者進(jìn)行Linux 下的編譯環(huán)境配置的分享
一 官方資料
ESP-IDF 編程指南[1] 
在ESP-IDF 編程指南中可以選擇不同的版本對(duì)不同版本的查看與入門,環(huán)境搭建不同版本之間并無(wú)過(guò)多差別。無(wú)版本要求 建議使用master分支(lstest),是當(dāng)時(shí)最為穩(wěn)定的版本。
二 環(huán)境配置
第一步:安裝準(zhǔn)備
如果是首次使用Ubuntu,需要使用下列命令將 所需要工具升級(jí)到最新并查看版本
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
python3 -V
Python 3.8.10
cat /proc/version
Linux version 5.11.0-27-generic (buildd@lcy01-amd64-019) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #29~20.04.1-Ubuntu SMP Wed Aug 11 15:58:17 UTC 2021

?根據(jù)手冊(cè)我們需要使用Python 3.6以上版本與ubuntu 20.04 ,所以建議保持一致。
第二步 獲取 esp-idf
使用下列命令將esp-idf及其子模塊克隆下來(lái)。
git clone --recursive https://github.com/espressif/esp-idf.git
如果克隆速度慢可使用github加速插件;
使用下面命令進(jìn)行克隆速度極快
git clone --recursive https://github.com.cnpmjs.org/espressif/esp-idf.git
第三步 配置 esp-idf編譯工具
3.1使用腳本下載相應(yīng)的編譯工具工具鏈 進(jìn)入esp-idf 運(yùn)行 install.sh 與 export.sh
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh esp32
根據(jù)上圖提示. ./export.sh 表示 已經(jīng)下載完畢,如果中途有中斷 繼續(xù)運(yùn)行./install.sh esp32 即可 直至出現(xiàn)提示。
(注意,命令開(kāi)始的“.”與export.sh腳本之間,有一個(gè)空格)
然后我們運(yùn)行 以下命令
. ./export.sh

查看path
/home/rsd/workspace/esp32test/esp-idf/components/esptool_py/esptool:/home/rsd/workspace/esp32test/esp-idf/components/espcoredump:/home/rsd/workspace/esp32test/esp-idf/components/partition_table:/home/rsd/workspace/esp32test/esp-idf/components/app_update:/home/rsd/.espressif/tools/xtensa-esp32-elf/esp-2021r1-8.4.0/xtensa-esp32-elf/bin:/home/rsd/.espressif/tools/esp32ulp-elf/2.28.51-esp-20191205/esp32ulp-elf-binutils/bin:/home/rsd/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210721/openocd-esp32/bin:/home/rsd/.espressif/python_env/idf4.4_py3.8_env/bin:/home/rsd/workspace/esp32test/esp-idf/tools:/home/rsd/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
到這里臨時(shí)的環(huán)境變量已經(jīng)配置完畢。
三 hello world
cp examples/get-started/hello_world/ ../ -a
cd ..
ls
cd hello_world/
ls

?我們通過(guò)上面的命令就可以看到hello_world 的 工程
在hello_world下運(yùn)行
idf.py all
看到我們多了一個(gè)build 目錄 并且里面有一個(gè)最耀眼的hello-world.elf 這就是hello固件
將開(kāi)發(fā)板的IO0與end相連 拉低IO0 在使用下列命令開(kāi)始下載
idf.py flash -p /dev/ttyUSB0
查看運(yùn)行情況
idf.py monitor -p /dev/ttyUSB0

四 自定義環(huán)境配置
首先我們要明白為什么我們還要自定義環(huán)境配置
?就個(gè)人而言 使用麻煩
我們會(huì)發(fā)現(xiàn)上述的環(huán)境配置后今天可以使用,明天就無(wú)法運(yùn)行了;上午還能用,一頓飯后下午就不能使用了,必須重新運(yùn)行 export.sh才可以,相當(dāng)麻煩。
?就項(xiàng)目版本管理而言 版本管理不完善,缺少編譯工具的管理。
我們會(huì)發(fā)現(xiàn),項(xiàng)目的編譯工具在哪里,我們不知道,當(dāng)我們的計(jì)算機(jī)出現(xiàn)問(wèn)題,虛擬機(jī)無(wú)法運(yùn)行時(shí),豈不是丟失了環(huán)境。應(yīng)該將環(huán)境納入版本管理中。
?就團(tuán)隊(duì)而言,不利于團(tuán)隊(duì)開(kāi)發(fā)
團(tuán)隊(duì)中每個(gè)人都需要配置一遍環(huán)境,當(dāng)環(huán)境配置混亂時(shí)豈不是災(zāi)難。
環(huán)境配置 細(xì)心的讀者會(huì)發(fā)現(xiàn) 環(huán)境被隱藏在.espressif里
?dist?idf-env.json? python_env? tools
我們可以使用腳本進(jìn)行環(huán)境管理與聲明 使用下列命令在hello_world 下 創(chuàng)建 shell腳本 go.sh。
vim go.sh
esp_idf="/home/rsd/workspace/esp32project/esp-idf" #esp-idf的位置
esp_tools="/home/rsd/.espressif" #環(huán)境的位置,后期可以使用cp命令 移動(dòng)到你想要的位置,便于工程管理
export PATH="${esp_idf}/components/esptool_py/esptool:$PATH"
export PATH="${esp_idf}/components/espcoredump:$PATH"
export PATH="${esp_idf}/components/partition_table:$PATH"
export PATH="${esp_idf}/components/app_update:$PATH"
export PATH="${esp_idf}/tools:$PATH"
export PATH="${esp_tools}/tools/xtensa-esp32-elf/esp-2021r1-8.4.0/xtensa-esp32-elf/bin:$PATH"
export PATH="${esp_tools}/tools/esp32ulp-elf/2.28.51-esp-20191205/esp32ulp-elf-binutils/bin:$PATH"
export PATH="${esp_tools}/tools/openocd-esp32/v0.10.0-esp32-20210721/openocd-esp32/bin:$PATH"
export PATH="${esp_tools}/python_env/idf4.4_py3.8_env/bin:$PATH"
export IDF_PATH=/home/rsd/workspace/esp32project/esp-idf #makefile需要的變量
#make all
echo -e "*******************************************************************************\n $PATH \n *******************************************************************************"
if [ "$1" = "build" ]; then
echo -e " \n idf.py build \n"
#make all
idf.py build
elif [ "$1" = "flash" ]; then
echo -e "\n idf.py flash\n"
#make flash
idf.py flash -p /dev/ttyUSB0
elif [ "$1" = "clean" ]; then
echo -e "\n idf.py clean\n"
#make clean
idf.py clean
elif [ "$1" = "monitor" ]; then
echo "make monitor"
make monitor
elif [ "$1" = "menuconfig" ]; then
echo -e "\n idf.py menuconfig\n"
#make menuconfig
idf.py menuconig
elif [ "$1" = "erase_flash" ]; then
echo "idf.py erase_flash"
idf.py erase_flash
else
echo "idf.py clean"
#make clean
#make all
idf.py clean
echo "idf.py bulid"
idf.py build
fi
修改shell文件的權(quán)就可以使用了。
sudo chmod 777 go.sh
從編寫的可以看出 1-2行是定義的位置變量 方便后面的修改;
緊接著就是環(huán)境配置,此環(huán)境只在 運(yùn)行g(shù)o.sh 有效 ,方便使用;
后面就是makefile需要的一個(gè)變量
export IDF_PATH=/home/rsd/workspace/esp32project/esp-idf因?yàn)榫幾g鏈接時(shí)依靠工程下的makefile文件。有興趣的讀者可以了自行了解一下。
再后面就是if -else 通過(guò)運(yùn)行參數(shù)決定編譯還是下載等等。
使用方法
編譯:./go.sh build 清除 : ./go.sh clean
下載:./go.sh flash 監(jiān)視器:./go.sh monitor
注意 在下載與調(diào)用監(jiān)視器時(shí)如果不是root用戶 需要將 /dev/ttyUSB0 修改權(quán)限
sudo chmod 777 /dev/ttyUSB0


?當(dāng)我們將./espressif里的 idf-env.json python_env tools 移動(dòng)到 工程文件下,再使用git進(jìn)行版本管理,團(tuán)隊(duì)其他人就可以不需要配置環(huán)境 ,只需要修改esp_tools="/home/rsd/.espressif"就可以 。真正實(shí)現(xiàn)了環(huán)境與虛擬機(jī)分離。個(gè)人的環(huán)境也非常方便 不因?yàn)槠渌?xiàng)目的環(huán)境沖突。
五 參考
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#get-started-set-up-env
六 聲明
個(gè)人的水平有限,僅供參考或舉一反三 ,如有錯(cuò)誤或其他敬請(qǐng)諒解。
References
[1] ESP-IDF 編程指南: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html
