因為ESP8266/ESP32這個開發環境沒少折騰,是真沒見過這麼難搞又不清晰的環境。
簡單開發可以使用Arduino IDE ,這個平臺還是挺好的。開發使用Arduino的函數庫,很高效。
不過我還是不習慣,比如範例中binker demo的LED_BUILTIN,都不能跳轉到定義,不喜歡。現在來正經搭建一個8266的環境。其實挺簡單的,只是一直沒找對地方。
在其他博主那發現官方檔案: ESP8266_RTOS_SDK Programming Guide ,我是個對知識的檢索有強迫症的人,不知道從哪找到的這個連結就渾身不舒服,最後找到在官網檔案下 esp8266分類下的入門指南連結。
搭建開發環境的具體步驟是:工具鏈、獲取SDK、設定(如果想用IDE的話還應有IDE的設定)。
開發過程的四個步驟是:
2.1 工具鏈獲取
Windows 一體化工具鏈和 MSYS2 zip 檔案:
https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip
本來打算用git bash 自帶的mingw呢,結果make階段提醒要使用 mingw32下的msys。結果治好乖乖用官網提供的一體化工具了。
之後的命令都是在 MINGW32.exe 下執行的。
git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK.git
一定要加上 recursive 迴圈下載子模組,我沒有加,結果後面會在make的時候才下載其他庫,還下載不下來。
我加上這個引數後,發現下載的是特別慢,掛了工具都慢,等了好久終於下載完成。另一個選擇是用gitee下載SDK(不用recursive下載子模組),再用一個工具下載子模組,參考:用樂鑫國內映象構建ESP8266_RTOS_SDK開發環境
實在想不通樂鑫看重海外市場,把國內生態怎麼做得不咋好。
注:工具鏈使用環境變數 IDF_PATH 存取SDK目錄,在 ~/.bash_profile 末尾新增
export IDF_PATH="G:/IOT/ESP8266/ESP8266_RTOS_SDK"
使用source命令使之生效
source ~/.bash_profile
下載其他工具
ESP8266編譯和燒錄基於Python實現,需要安裝python的庫。
$ python -m pip install -r $IDF_PATH/requirements.txt
到這裡,環境設定就完成了。不不不
ESP8266專有工具鏈設定
一體化環境是為了ESP32設定的,ESP8266還需要下載特定的工具鏈,這個官網檔案或者RTOS說明中也有連結:
v8.4.0
https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-win32.zip
如果您還在使用舊版本 SDK(< 3.0),請使用工具鏈 v4.8.5,如下:
https://dl.espressif.com/dl/xtensa-lx106-elf-win32-1.22.0-88-gde0bdc1-4.8.5.tar.gz
下載第一個之後,解壓。然後.bash_profile中新增環境變數:
export PATH="$PATH:/G/IOT/ESP8266/xtensa-lx106-elf/bin"
如果這裡沒設定ESP8266專有工具鏈,make設定後會出現提醒:
GENCONFIG
make:xtensa-lx106-elf-gcc:命令未找到
專案設定
將sdk中的examples/git-startd/hello_world複製出去,用mingw32執行到該目錄下,執行
make menuconfig
會看到下面介面:做一些設定(串列埠,波特率等)
燒錄
只設定了埠號和flash(本來是4M,燒錄時候報錯,設定為2M成功了)之後,再使用編譯和燒錄命令
make flash
報錯:
子模組 'components/json/cJSON'(https://github.com/DaveGamble/cJSON.git)未對路徑 'components/json/cJSON' 註冊
正克隆到 '/g/IOT/ESP8266/ESP8266_RTOS_SDK/components/json/cJSON'...
fatal: unable to access 'https://github.com/DaveGamble/cJSON.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
fatal: 無法克隆 'https://github.com/DaveGamble/cJSON.git' 到子模組路徑 '/g/IOT/ESP8266/ESP8266_RTOS_SDK/components/json/cJSON'
克隆 'components/json/cJSON' 失敗。按計劃重試
正克隆到 '/g/IOT/ESP8266/ESP8266_RTOS_SDK/components/json/cJSON'...
這是因為從github下載一些模組沒有成功,網上有兩種解決方案。一是手動下載並放到對應目錄,二是調大http.postBuffer的值。我用了第一種,解決編譯時又報另外一個錯,遂用第二種。發現還是不行,去查為什麼會卻庫,發現克隆SDK 時沒有加 recursive引數迴圈下載子模組。
燒錄成功後。
可以用make monitor
監視串列埠:
hello_world,就列印出了CPU核數,外部Flash大小2M。
用make monitor 看資料是正常的,用其他串列埠工具看到的是亂碼,原來這裡預設的波特率不是115200,是74800。修改波特率方法:
到這裡環境就搭建完成了。明天再去公司搭一套,整理&記錄一下問題。
終端和編譯
vscode右鍵工作區→在整合終端開啟替換為mingw32。需要更改使用者設定,或者當前工作區的設定(在.vscode/settings.json)
"terminal.integrated.shell.windows":"D:\\Software\\esp32_win32_msys2_environment_and_toolchain-20181001\\msys32\\msys2_shell.cmd",
"terminal.integrated.shellArgs.windows": ["-defterm", "-mingw32", "-no-start", "-here"]
make menuconfig時亂碼:
檔案\msys32\etc\profile.d\esp32_toolchain.sh
新增語言設定:(zh_Cn)也行的
export LANG="en_Us"
之後就可以在終端下流暢地使用make了。
庫設定
現在vscode下看程式碼,是沒有關聯庫的,所以函數和標頭檔案都跳不了
標頭檔案分為兩類,如圖所示,一類是系統庫stdio.h
等,一類就是 RTOS中的庫。
首先增加組態檔,
在 incluPath中新增這兩類庫:我的設定如下,第一個是RTOS庫,後面三個是系統gcc使用的庫(兩個星號表示目錄遞迴查詢)
"includePath": [
"E:/labs/esp8266/ESP8266_RTOS_SDK/components/**",
"E:/labs/esp8266/xtensa-lx106-elf/xtensa-lx106-elf/include/c++/8.4.0/**",
"E:/labs/esp8266/xtensa-lx106-elf/xtensa-lx106-elf/sys-include" ,
"E:/labs/esp8266/xtensa-lx106-elf/xtensa-lx106-elf/include",
"${workspaceFolder}/**"
],
想要檢視gcc包含的檔案,通過命令gcc -v -E -x c++ -
,因為make時發現gcc使用的是Toolchain path: /E/labs/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc
,所以應該使用/E/labs/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -v -E -x c++ -
檢視引入庫位置,所需的是下面紅框所示庫目錄
這樣就可以跳轉了。
環境搭建折騰了好久。得總結一下,給迷茫的其他人一些指引。
需要的軟體和庫:msys2工具鏈(也可以自己安裝,但還是建議用官方提供的)、8266特有工具鏈、RTOS的庫(克隆很麻煩,其實需要的幾個元件可以一一下載並放到指定目錄即可)。設定就是把8266和RTOS庫的路徑設定到環境變數中(.bash_profile)。接著燒錄執行即可。現在看起來不算麻煩,但過程中真折磨人。
參考