ESP8266 系統環境搭建

2022-06-10 21:01:03

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 檔案:

https://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 https://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

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:命令未找到

3. 開發過程

專案設定

將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做開發環境

終端和編譯

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)。接著燒錄執行即可。現在看起來不算麻煩,但過程中真折磨人。

參考