ESP8266 系統環境搭建
1. 前言
因為ESP8266/ESP32這個開發環境沒少折騰,是真沒見過這麼難搞又不清晰的環境。
簡單開發可以使用Arduino IDE ,這個平台還是挺好的。開發使用Arduino的函數庫,很高效。
不過我還是不習慣,比如示例中binker demo的LED_BUILTIN,都不能跳轉到定義,不喜歡。現在來正經搭建一個8266的環境。其實挺簡單的,只是一直沒找對地方。
在其他部落客那發現官方文檔: ESP8266_RTOS_SDK Programming Guide ,我是個對知識的檢索有強迫症的人,不知道從哪找到的這個鏈接就渾身不舒服,最後找到在官網文檔下 esp8266分類下的入門指南鏈接。
搭建開發環境的具體步驟是:工具鏈、獲取SDK、配置(如果想用IDE的話還應有IDE的配置)。
開發過程的四個步驟是:
- 配置項目並編寫程式碼
- 編譯項目並鏈接,以構建應用程式
- 燒錄到ESP8266
- 調試和監控
2. 開發環境的搭建
2.1 工具鏈獲取
Windows 一體化工具鏈和 MSYS2 zip 文件:
//dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip
本來打算用git bash 自帶的mingw呢,結果make階段提醒要使用 mingw32下的msys。結果治好乖乖用官網提供的一體化工具了。
之後的命令都是在 MINGW32.exe 下執行的。
2.2 SDK克隆
git clone --recursive //github.com/espressif/ESP8266_RTOS_SDK.git
一定要加上 recursive 循環下載子模組,我沒有加,結果後面會在make的時候才下載其他庫,還下載不下來。
我加上這個參數後,發現下載的是特別慢,掛了工具都慢,等了好久終於下載完成。另一個選擇是用gitee下載SDK(不用recursive下載子模組),再用一個工具下載子模組,參考:用樂鑫中國鏡像構建ESP8266_RTOS_SDK開發環境
實在想不通樂鑫看重海外市場,把中國生態怎麼做得不咋好。
2.3 配置
註:工具鏈使用環境變數 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
//dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-win32.zip
如果您還在使用舊版本 SDK(< 3.0),請使用工具鏈 v4.8.5,如下:
//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:命令未找到
3. 開發過程
項目配置
將sdk中的examples/git-startd/hello_world複製出去,用mingw32執行到該目錄下,運行
make menuconfig
會看到下面介面:做一些配置(串口,波特率等)
燒錄
只設置了埠號和flash(本來是4M,燒錄時候報錯,設置為2M成功了)之後,再使用編譯和燒錄命令
make flash
報錯:
子模組 'components/json/cJSON'(//github.com/DaveGamble/cJSON.git)未對路徑 'components/json/cJSON' 註冊
正克隆到 '/g/IOT/ESP8266/ESP8266_RTOS_SDK/components/json/cJSON'...
fatal: unable to access '//github.com/DaveGamble/cJSON.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
fatal: 無法克隆 '//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做開發環境
終端和編譯
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)。接著燒錄運行即可。現在看起來不算麻煩,但過程中真折磨人。
參考
- 搭建 ESP8266 開發環境(windows)
- 用樂鑫中國鏡像構建ESP8266_RTOS_SDK開發環境
- 億佰特E103-W01 ESP8266EX UART串口轉WiFi模組
- ESP32開發 解決VS Code 中 make menuconfig 亂碼問題
- 2 個步驟為 VSCode 配置工程頭文件路徑!
- [解決]VSCode在Linux下導入c語言頭文件警告