ESP32 Ubuntu開發環境搭建

在Ubuntu下搭建ESP32開發環境

在 CSDN 上面查找ESP8266 系列的博文已經非常多了,但是查找ESP32的文章還是有點缺少,ESP32已經出來很長時間了,使用方法和ES8266非常類似,開發也非常簡單。下面就對ESP32的做一些總結。

本篇文章先描述一下開發環境搭建過程。

說明

  1. 本片文章中的部分圖片引用自安信可官方Wiki
  2. 樂鑫官方也提供了ESP32的SDK的編程指南,參見ESP-IDF編程指南

開發環境

該開發環境搭建是在 Ubuntu-14.04 (64-bit) 完成的。

硬件準備

ESP32(NodeMCU-32S)

嵌入式平臺使用的是安信可科技提供的NodeMCU-32S。
nodemcu-32s

NodeMCU-32S 引腳圖

nodemcu-32s-pinmaps

搭建步驟

在Ubuntu-14.04 上搭建ESP32開發環境的步驟可以分爲以下六步:

  1. 安裝編譯依賴工具
  2. 下載並安裝交叉編譯工具鏈
  3. 配置環境變量
  4. 下載ESP-IDF源碼
  5. 配置工程-開始編譯
  6. 燒寫測試

安裝編譯依賴工具

ESP32 的編譯開發主要依賴兩大核心工具,一個是樂鑫官方提供的ESP32交叉編譯工具鏈,另外一個是python2.7,注意是python2.7。

ESP32 交叉編譯工具鏈能夠正常運行,依賴於 make gcc libncurses5-dev flex bison gperf 等工具,此外還需要使用git 下載源碼,使用python-serial 進行燒寫。

  sudo apt-get update
  sudo apt-get upgrade
  sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial

下載並安裝交叉編譯工具鏈

在下載交叉編譯工具鏈之前,首先創建一下ESP32專用的開發目錄。

  sudo mkdir /esp32
  cd /esp32
  mkdir crossTools demos sources

然後進入 crossTools 目錄,下載官方交叉編譯工具鏈。

cd crossTools
wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
tar xzvf xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz

配置環境變量

export PATH=$PATH:/esp32/crossTools/xtensa-esp32-elf/bin

環境變量配置完成後,需要檢查一下系統是否能找到交叉編譯工具鏈所在的路徑。

xtensa-esp32-elf-gcc -v

如果能夠看到版本信息,那說明已經正確安裝了。

root@qiao-virtual-machine:/esp32/crosstools# xtensa-esp32-elf-gcc -v
Using built-in specs.
COLLECT_GCC=xtensa-esp32-elf-gcc
COLLECT_LTO_WRAPPER=/esp32/crosstools/xtensa-esp32-elf/bin/../libexec/gcc/xtensa-esp32-elf/5.2.0/lto-wrapper
Target: xtensa-esp32-elf
Configured with: /builds/idf/crosstool-NG/.build/src/gcc-5.2.0/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=xtensa-esp32-elf --prefix=/builds/idf/crosstool-NG/builds/xtensa-esp32-elf --with-local-prefix=/builds/idf/crosstool-NG/builds/xtensa-esp32-elf/xtensa-esp32-elf/sysroot --with-sysroot=/builds/idf/crosstool-NG/builds/xtensa-esp32-elf/xtensa-esp32-elf/sysroot --with-newlib --enable-threads=no --disable-shared --with-pkgversion='crosstool-NG crosstool-ng-1.22.0-80-g6c4433a' --disable-__cxa_atexit --enable-cxx-flags='-fno-rtti -ffunction-sections' --with-gmp=/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-mpfr=/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-mpc=/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-isl=/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-cloog=/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-libelf=/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/buildtools --enable-lto --enable-target-optspace --without-long-double-128 --disable-libgomp --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-nls --enable-languages=c,c++ --disable-libstdcxx-verbose --enable-threads=posix --enable-gcov-custom-rtio
Thread model: posix
gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a) 

下載ESP-IDF源碼

ESP32的SDK由樂鑫官方提供,官方命名爲ESP-IDF,該SDK可以從樂鑫官方網站下載,也可以通過github下載。

將ESP-IDF 下載到 sources 目錄下。

cd /esp32/sources
git clone --recursive https://github.com/espressif/esp-idf.git

源碼目錄說明

ESP-IDF的目錄結構如下所示。

  root@qiao-virtual-machine:/esp32/sources/esp-idf# ls
add_path.sh  CMakeLists.txt  components  CONTRIBUTING.rst  docs  examples  Kconfig  LICENSE  make  README.md  requirements.txt  tools

主要目錄說明

components:ESP-IDF的核心組件

examples:ESP-IDF提供的實例程序

make:ESP-IDF工程管理目錄

tools:ESP-IDF提供的工具集

docs:ESP-IDF相關文檔

這裏,筆者着重說明一下 examples目錄,其目錄結構如下所示。

root@qiao-virtual-machine:/esp32/sources/esp-idf/examples# ls -alh
total 56K
drwxr-xr-x 13 root root 4.0K 12月  4 12:46 .
drwxr-xr-x  8 root root 4.0K 12月  4 12:46 ..
drwxr-xr-x 26 root root 4.0K 12月  4 12:46 bluetooth
drwxr-xr-x  3 root root 4.0K 12月  4 12:46 build_system
drwxr-xr-x  4 root root 4.0K 12月  4 12:46 ethernet
drwxr-xr-x  4 root root 4.0K 12月  4 12:46 get-started
drwxr-xr-x  4 root root 4.0K 12月  4 12:46 mesh
drwxr-xr-x 26 root root 4.0K 12月  4 12:46 peripherals
drwxr-xr-x 21 root root 4.0K 12月  4 12:46 protocols
drwxr-xr-x  6 root root 4.0K 12月  4 12:46 provisioning
-rw-r--r--  1 root root 2.4K 12月  4 12:46 README.md
drwxr-xr-x  9 root root 4.0K 12月  4 12:46 storage
drwxr-xr-x 19 root root 4.0K 12月  4 12:46 system
drwxr-xr-x 11 root root 4.0K 12月  4 12:46 wifi

從這裏面可以看出來,ESP-IDF 已經爲開發者提供了多種SDK實例,在編譯環境搭建完成之後,這些實例就可以直接編譯然後下載到ESP32上面看效果了。可以看到樂鑫官方已經爲每一個目錄下面編寫了markdown文件,對這些工程文件進行詳細的說明,因此注意查看每一個目錄下的 markdown 文件非常重要。

其中,最簡單的實例在 gat-started 目錄下。

  root@qiao-virtual-machine:/esp32/sources/esp-idf/examples/get-started# ls -alh
total 20K
drwxr-xr-x  4 root root 4.0K 12月  4 12:46 .
drwxr-xr-x 13 root root 4.0K 12月  4 12:46 ..
drwxr-xr-x  3 root root 4.0K 12月  4 12:46 blink
drwxr-xr-x  3 root root 4.0K 12月  4 12:46 hello_world
-rw-r--r--  1 root root  197 12月  4 12:46 README.md

配置工程-開始編譯

下面就從一個最簡單的 hello_world 工程開始進行編譯。

將 /esp32/sources/esp-idf/examples/get-started/ 目錄下的 hello_world 實例拷貝到 /esp32/demos/ 下。

root@qiao-virtual-machine:/esp32/sources/esp-idf/examples/get-started# cp -fr hello_world /esp32/demos/

配置 IDF_PATH 環境變量。該環境變量是用來指向 ESP-IDF 的實際路徑的,用於make編譯使用。

export IDF_PATH=/esp32/sources/esp-idf

進入 /esp32/demos/hello_world 目錄,開始配置工程。

cd /esp32/demos/hello_world/
make menuconfig

使用 make menuconfig 命令可以進入到工程配置頁面,如下。
ESP32工程配置

進入 SDK tool configuration 中,配置 python版本爲python2

進入 Bootloader config 中,配置bootloader的打印日誌顯示信息等級爲warning

進入 Secure boot configuration,開發階段建議關閉secure boot功能

進入 Serial flasher config,指定用於燒寫程序的串口設備,一般使用USB轉串口的選擇/dev/ttyUSB0即可,設置默認的波特率爲115200,Flash的SPI模式爲DIO,SPI速率爲40MHz,Flash的大小爲2MB

進入 Partition Table設置分區表,爲了更好的管理SPI Flash,ESP-IDF引入了分區表的概念,默認使用Single factory app,no OTA製作分區BIN

進入 Component config ,該配置選項是對ESP-IDF的內核進行的更加詳細的配置

配置完成後,保存並退出,將會在工程根目錄下新生成一個build文件夾和sdkconfig文件。

在工程根目錄下輸入make all將會編譯所有的BIN文件,默認會編譯bootloader、partition_table、app文件,並且還會提示如何進行燒寫。下面貼出來一個基本配置工程的完整編譯日誌,僅供參考。

筆者的的編譯日誌之所以這麼多,是因爲在 配置工程 時 Component config 採用了默認配置。

root@qiao-virtual-machine:/esp32/demos/hello_world# make all
Toolchain path: /esp32/crosstools/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Toolchain version: crosstool-ng-1.22.0-80-g6c4433a
Compiler version: 5.2.0
Python requirements from /esp32/sources/esp-idf/requirements.txt are satisfied.
Building partitions from /esp32/sources/esp-idf/components/partition_table/partitions_singleapp.csv...
/bin/sh: 1: [: !=: unexpected operator
/bin/sh: 1: [: !=: unexpected operator
CC build/bootloader/bootloader_support/src/bootloader_clock.o
CC build/bootloader/bootloader_support/src/bootloader_common.o
CC build/bootloader/bootloader_support/src/bootloader_flash.o
CC build/bootloader/bootloader_support/src/bootloader_init.o
CC build/bootloader/bootloader_support/src/bootloader_random.o
CC build/bootloader/bootloader_support/src/bootloader_sha.o
CC build/bootloader/bootloader_support/src/bootloader_utility.o
CC build/bootloader/bootloader_support/src/efuse.o
CC build/bootloader/bootloader_support/src/esp_image_format.o
CC build/bootloader/bootloader_support/src/flash_encrypt.o
CC build/bootloader/bootloader_support/src/flash_partitions.o
CC build/bootloader/bootloader_support/src/flash_qio_mode.o
CC build/bootloader/bootloader_support/src/secure_boot.o
CC build/bootloader/bootloader_support/src/secure_boot_signatures.o
AR build/bootloader/bootloader_support/libbootloader_support.a
CC build/bootloader/log/log.o
AR build/bootloader/log/liblog.a
CC build/bootloader/spi_flash/spi_flash_rom_patch.o
AR build/bootloader/spi_flash/libspi_flash.a
CC build/bootloader/micro-ecc/micro-ecc/uECC.o
AR build/bootloader/micro-ecc/libmicro-ecc.a
CC build/bootloader/soc/esp32/cpu_util.o
CC build/bootloader/soc/esp32/gpio_periph.o
CC build/bootloader/soc/esp32/rtc_clk.o
CC build/bootloader/soc/esp32/rtc_clk_init.o
CC build/bootloader/soc/esp32/rtc_init.o
CC build/bootloader/soc/esp32/rtc_periph.o
CC build/bootloader/soc/esp32/rtc_pm.o
CC build/bootloader/soc/esp32/rtc_sleep.o
CC build/bootloader/soc/esp32/rtc_time.o
CC build/bootloader/soc/esp32/rtc_wdt.o
CC build/bootloader/soc/esp32/sdio_slave_periph.o
CC build/bootloader/soc/esp32/sdmmc_periph.o
CC build/bootloader/soc/esp32/soc_memory_layout.o
CC build/bootloader/soc/esp32/spi_periph.o
CC build/bootloader/soc/src//memory_layout_utils.o
AR build/bootloader/soc/libsoc.a
CC build/bootloader/main/bootloader_start.o
AR build/bootloader/main/libmain.a
LD build/bootloader/bootloader.elf
esptool.py v2.6-beta1
CC build/app_trace/app_trace.o
CC build/app_trace/app_trace_util.o
CC build/app_trace/host_file_io.o
CC build/app_trace/gcov/gcov_rtio.o
AR build/app_trace/libapp_trace.a
CC build/app_update/esp_ota_ops.o
AR build/app_update/libapp_update.a
CXX build/asio/asio/asio/src/asio.o
AR build/asio/libasio.a
AR build/aws_iot/libaws_iot.a
CC build/bootloader_support/src/bootloader_clock.o
CC build/bootloader_support/src/bootloader_common.o
CC build/bootloader_support/src/bootloader_flash.o
CC build/bootloader_support/src/bootloader_random.o
CC build/bootloader_support/src/bootloader_sha.o
CC build/bootloader_support/src/bootloader_utility.o
CC build/bootloader_support/src/efuse.o
CC build/bootloader_support/src/esp_image_format.o
CC build/bootloader_support/src/flash_encrypt.o
CC build/bootloader_support/src/flash_partitions.o
CC build/bootloader_support/src/flash_qio_mode.o
CC build/bootloader_support/src/secure_boot.o
CC build/bootloader_support/src/secure_boot_signatures.o
AR build/bootloader_support/libbootloader_support.a
CC build/bt/bt.o
AR build/bt/libbt.a
CC build/coap/libcoap/src/address.o
CC build/coap/libcoap/src/async.o
CC build/coap/libcoap/src/block.o
CC build/coap/libcoap/src/coap_time.o
CC build/coap/libcoap/src/debug.o
CC build/coap/libcoap/src/encode.o
CC build/coap/libcoap/src/hashkey.o
CC build/coap/libcoap/src/mem.o
CC build/coap/libcoap/src/net.o
CC build/coap/libcoap/src/option.o
CC build/coap/libcoap/src/pdu.o
CC build/coap/libcoap/src/resource.o
CC build/coap/libcoap/src/str.o
CC build/coap/libcoap/src/subscribe.o
CC build/coap/libcoap/src/uri.o
CC build/coap/port/coap_io_socket.o
AR build/coap/libcoap.a
CC build/console/linenoise/linenoise.o
CC build/console/argtable3/argtable3.o
CC build/console/commands.o
CC build/console/split_argv.o
AR build/console/libconsole.a
CXX build/cxx/cxx_exception_stubs.o
CXX build/cxx/cxx_guards.o
AR build/cxx/libcxx.a
CC build/driver/can.o
CC build/driver/gpio.o
CC build/driver/i2c.o
CC build/driver/i2s.o
CC build/driver/ledc.o
CC build/driver/mcpwm.o
CC build/driver/pcnt.o
CC build/driver/periph_ctrl.o
CC build/driver/rmt.o
CC build/driver/rtc_module.o
CC build/driver/sdio_slave.o
CC build/driver/sdmmc_host.o
CC build/driver/sdmmc_transaction.o
CC build/driver/sdspi_crc.o
CC build/driver/sdspi_host.o
CC build/driver/sdspi_transaction.o
CC build/driver/sigmadelta.o
CC build/driver/spi_common.o
CC build/driver/spi_master.o
CC build/driver/spi_slave.o
CC build/driver/timer.o
CC build/driver/uart.o
AR build/driver/libdriver.a
CC build/esp-tls/esp_tls.o
AR build/esp-tls/libesp-tls.a
CC build/esp32/brownout.o
CC build/esp32/cache_err_int.o
CC build/esp32/cache_sram_mmu.o
CC build/esp32/clk.o
CC build/esp32/coexist.o
CC build/esp32/core_dump.o
CC build/esp32/cpu_start.o
CC build/esp32/crosscore_int.o
CC build/esp32/dbg_stubs.o
CC build/esp32/dport_access.o
CC build/esp32/esp_err_to_name.o
CC build/esp32/esp_himem.o
CC build/esp32/esp_timer.o
CC build/esp32/esp_timer_esp32.o
CC build/esp32/ets_timer_legacy.o
CC build/esp32/event_default_handlers.o
CC build/esp32/event_loop.o
CC build/esp32/fast_crypto_ops.o
CC build/esp32/freertos_hooks.o
CC build/esp32/gdbstub.o
CC build/esp32/hw_random.o
CC build/esp32/intr_alloc.o
CC build/esp32/int_wdt.o
CC build/esp32/ipc.o
CC build/esp32/lib_printf.o
CC build/esp32/panic.o
CC build/esp32/phy_init.o
CC build/esp32/pm_esp32.o
CC build/esp32/pm_locks.o
CC build/esp32/pm_trace.o
CC build/esp32/reset_reason.o
CC build/esp32/restore.o
CC build/esp32/sleep_modes.o
CC build/esp32/spiram.o
CC build/esp32/spiram_psram.o
CC build/esp32/stack_check.o
CC build/esp32/system_api.o
CC build/esp32/task_wdt.o
CC build/esp32/wifi_init.o
CC build/esp32/wifi_os_adapter.o
CC build/esp32/hwcrypto/aes.o
CC build/esp32/hwcrypto/sha.o
AS build/esp32/dport_panic_highint_hdl.o
AR build/esp32/libesp32.a
CC build/esp_adc_cal/esp_adc_cal.o
AR build/esp_adc_cal/libesp_adc_cal.a
CC build/esp_event/default_event_loop.o
CC build/esp_event/esp_event.o
CC build/esp_event/esp_event_private.o
AR build/esp_event/libesp_event.a
CC build/esp_http_client/esp_http_client.o
CC build/esp_http_client/lib/http_auth.o
CC build/esp_http_client/lib/http_header.o
CC build/esp_http_client/lib/http_utils.o
AR build/esp_http_client/libesp_http_client.a
CC build/esp_http_server/src/httpd_main.o
CC build/esp_http_server/src/httpd_parse.o
CC build/esp_http_server/src/httpd_sess.o
CC build/esp_http_server/src/httpd_txrx.o
CC build/esp_http_server/src/httpd_uri.o
CC build/esp_http_server/src/util/ctrl_sock.o
AR build/esp_http_server/libesp_http_server.a
CC build/esp_https_ota/src/esp_https_ota.o
AR build/esp_https_ota/libesp_https_ota.a
CC build/esp_https_server/src/https_server.o
AR build/esp_https_server/libesp_https_server.a
CC build/esp_ringbuf/ringbuf.o
AR build/esp_ringbuf/libesp_ringbuf.a
CC build/ethernet/emac_dev.o
CC build/ethernet/emac_main.o
CC build/ethernet/eth_phy/phy_common.o
CC build/ethernet/eth_phy/phy_lan8720.o
CC build/ethernet/eth_phy/phy_tlk110.o
AR build/ethernet/libethernet.a
CC build/expat/expat/expat/lib/loadlibrary.o
CC build/expat/expat/expat/lib/xmlparse.o
CC build/expat/expat/expat/lib/xmlrole.o
CC build/expat/expat/expat/lib/xmltok.o
CC build/expat/expat/expat/lib/xmltok_impl.o
CC build/expat/expat/expat/lib/xmltok_ns.o
AR build/expat/libexpat.a
CC build/fatfs/src/diskio.o
CC build/fatfs/src/diskio_rawflash.o
CC build/fatfs/src/diskio_sdmmc.o
CC build/fatfs/src/diskio_wl.o
CC build/fatfs/src/ff.o
CC build/fatfs/src/ffsystem.o
CC build/fatfs/src/ffunicode.o
CC build/fatfs/src/vfs_fat.o
CC build/fatfs/src/vfs_fat_sdmmc.o
CC build/fatfs/src/vfs_fat_spiflash.o
AR build/fatfs/libfatfs.a
CC build/freemodbus/modbus/mb.o
CC build/freemodbus/port/portevent.o
CC build/freemodbus/port/portother.o
CC build/freemodbus/port/portserial.o
CC build/freemodbus/port/porttimer.o
CC build/freemodbus/modbus/ascii/mbascii.o
CC build/freemodbus/modbus/functions/mbfunccoils.o
CC build/freemodbus/modbus/functions/mbfuncdiag.o
CC build/freemodbus/modbus/functions/mbfuncdisc.o
CC build/freemodbus/modbus/functions/mbfuncholding.o
CC build/freemodbus/modbus/functions/mbfuncinput.o
CC build/freemodbus/modbus/functions/mbfuncother.o
CC build/freemodbus/modbus/functions/mbutils.o
CC build/freemodbus/modbus/rtu/mbcrc.o
CC build/freemodbus/modbus/rtu/mbrtu.o
CC build/freemodbus/modbus_controller/mbcontroller.o
AR build/freemodbus/libfreemodbus.a
CC build/freertos/croutine.o
CC build/freertos/event_groups.o
CC build/freertos/FreeRTOS-openocd.o
CC build/freertos/list.o
CC build/freertos/port.o
CC build/freertos/queue.o
CC build/freertos/tasks.o
CC build/freertos/timers.o
CC build/freertos/xtensa_init.o
CC build/freertos/xtensa_intr.o
CC build/freertos/xtensa_overlay_os_hook.o
AS build/freertos/portasm.o
AS build/freertos/xtensa_context.o
AS build/freertos/xtensa_intr_asm.o
AS build/freertos/xtensa_vector_defaults.o
AS build/freertos/xtensa_vectors.o
AR build/freertos/libfreertos.a
CC build/heap/heap_caps_init.o
CC build/heap/heap_caps.o
CC build/heap/multi_heap.o
CC build/heap/heap_trace.o
AR build/heap/libheap.a
AR build/idf_test/libidf_test.a
CC build/jsmn/src//jsmn.o
AR build/jsmn/libjsmn.a
CC build/json/cJSON/cJSON.o
CC build/json/cJSON/cJSON_Utils.o
AR build/json/libjson.a
CC build/libsodium/port/randombytes_esp32.o
CC build/libsodium/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.o
CC build/libsodium/libsodium/src/libsodium/crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.o
CC build/libsodium/libsodium/src/libsodium/crypto_auth/crypto_auth.o
CC build/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.o
CC build/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.o
CC build/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.o
CC build/libsodium/libsodium/src/libsodium/crypto_box/crypto_box.o
CC build/libsodium/libsodium/src/libsodium/crypto_box/crypto_box_easy.o
CC build/libsodium/libsodium/src/libsodium/crypto_box/crypto_box_seal.o
CC build/libsodium/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.o
CC build/libsodium/libsodium/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.o
CC build/libsodium/libsodium/src/libsodium/crypto_core/hchacha20/core_hchacha20.o
CC build/libsodium/libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.o
CC build/libsodium/libsodium/src/libsodium/crypto_core/hsalsa20/core_hsalsa20.o
CC build/libsodium/libsodium/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/crypto_generichash.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/generichash_blake2.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.o
CC build/libsodium/libsodium/src/libsodium/crypto_hash/crypto_hash.o
CC build/libsodium/libsodium/src/libsodium/crypto_hash/sha256/hash_sha256.o
CC build/libsodium/libsodium/src/libsodium/crypto_hash/sha512/hash_sha512.o
CC build/libsodium/libsodium/src/libsodium/crypto_kdf/blake2b/kdf_blake2b.o
CC build/libsodium/libsodium/src/libsodium/crypto_kdf/crypto_kdf.o
CC build/libsodium/libsodium/src/libsodium/crypto_kx/crypto_kx.o
CC build/libsodium/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.o
CC build/libsodium/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.o
CC build/libsodium/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-encoding.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/blake2b-long.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/crypto_pwhash.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.o
CC build/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.o
CC build/libsodium/libsodium/src/libsodium/crypto_scalarmult/crypto_scalarmult.o
CC build/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.o
CC build/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.o
CC build/libsodium/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox.o
CC build/libsodium/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.o
CC build/libsodium/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.o
CC build/libsodium/libsodium/src/libsodium/crypto_shorthash/crypto_shorthash.o
CC build/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.o
CC build/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphashx24.o
CC build/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphashx24_ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_sign/crypto_sign.o
CC build/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519.o
CC build/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.o
CC build/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/obsolete.o
CC build/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.o
CC build/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.o
CC build/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.o
CC build/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_stream/crypto_stream.o
CC build/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.o
CC build/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.o
CC build/libsodium/libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.o
CC build/libsodium/libsodium/src/libsodium/crypto_verify/sodium/verify.o
CC build/libsodium/libsodium/src/libsodium/randombytes/randombytes.o
CC build/libsodium/libsodium/src/libsodium/sodium/core.o
CC build/libsodium/libsodium/src/libsodium/sodium/runtime.o
CC build/libsodium/libsodium/src/libsodium/sodium/utils.o
CC build/libsodium/libsodium/src/libsodium/sodium/version.o
CC build/libsodium/port/crypto_hash_mbedtls/crypto_hash_sha256_mbedtls.o
CC build/libsodium/port/crypto_hash_mbedtls/crypto_hash_sha512_mbedtls.o
AR build/libsodium/liblibsodium.a
CC build/log/log.o
AR build/log/liblog.a
CC build/lwip/apps/dhcpserver/dhcpserver.o
CC build/lwip/apps/ping/esp_ping.o
CC build/lwip/apps/ping/ping.o
CC build/lwip/lwip/src/api/api_lib.o
CC build/lwip/lwip/src/api/api_msg.o
CC build/lwip/lwip/src/api/err.o
CC build/lwip/lwip/src/api/netbuf.o
CC build/lwip/lwip/src/api/netdb.o
CC build/lwip/lwip/src/api/netifapi.o
CC build/lwip/lwip/src/api/sockets.o
CC build/lwip/lwip/src/api/tcpip.o
CC build/lwip/lwip/src/apps/sntp/sntp.o
CC build/lwip/lwip/src/core/def.o
CC build/lwip/lwip/src/core/dns.o
CC build/lwip/lwip/src/core/inet_chksum.o
CC build/lwip/lwip/src/core/init.o
CC build/lwip/lwip/src/core/ip.o
CC build/lwip/lwip/src/core/mem.o
CC build/lwip/lwip/src/core/memp.o
CC build/lwip/lwip/src/core/netif.o
CC build/lwip/lwip/src/core/pbuf.o
CC build/lwip/lwip/src/core/raw.o
CC build/lwip/lwip/src/core/stats.o
CC build/lwip/lwip/src/core/sys.o
CC build/lwip/lwip/src/core/tcp.o
CC build/lwip/lwip/src/core/tcp_in.o
CC build/lwip/lwip/src/core/tcp_out.o
CC build/lwip/lwip/src/core/timeouts.o
CC build/lwip/lwip/src/core/udp.o
CC build/lwip/lwip/src/core/ipv4/autoip.o
CC build/lwip/lwip/src/core/ipv4/dhcp.o
CC build/lwip/lwip/src/core/ipv4/etharp.o
CC build/lwip/lwip/src/core/ipv4/icmp.o
CC build/lwip/lwip/src/core/ipv4/igmp.o
CC build/lwip/lwip/src/core/ipv4/ip4_addr.o
CC build/lwip/lwip/src/core/ipv4/ip4.o
CC build/lwip/lwip/src/core/ipv4/ip4_frag.o
CC build/lwip/lwip/src/core/ipv6/dhcp6.o
CC build/lwip/lwip/src/core/ipv6/ethip6.o
CC build/lwip/lwip/src/core/ipv6/icmp6.o
CC build/lwip/lwip/src/core/ipv6/inet6.o
CC build/lwip/lwip/src/core/ipv6/ip6_addr.o
CC build/lwip/lwip/src/core/ipv6/ip6.o
CC build/lwip/lwip/src/core/ipv6/ip6_frag.o
CC build/lwip/lwip/src/core/ipv6/mld6.o
CC build/lwip/lwip/src/core/ipv6/nd6.o
CC build/lwip/lwip/src/netif/ethernet.o
CC build/lwip/lwip/src/netif/ethernetif.o
CC build/lwip/lwip/src/netif/lowpan6.o
CC build/lwip/lwip/src/netif/slipif.o
CC build/lwip/port/esp32/vfs_lwip.o
CC build/lwip/port/esp32/freertos/sys_arch.o
CC build/lwip/port/esp32/netif/dhcp_state.o
CC build/lwip/port/esp32/netif/ethernetif.o
CC build/lwip/port/esp32/netif/wlanif.o
CC build/lwip/port/esp32/debug/lwip_debug.o
AR build/lwip/liblwip.a
CC build/main/hello_world_main.o
AR build/main/libmain.a
CC build/mbedtls/mbedtls/library/aes.o
CC build/mbedtls/mbedtls/library/aesni.o
CC build/mbedtls/mbedtls/library/arc4.o
CC build/mbedtls/mbedtls/library/aria.o
CC build/mbedtls/mbedtls/library/asn1parse.o
CC build/mbedtls/mbedtls/library/asn1write.o
CC build/mbedtls/mbedtls/library/base64.o
CC build/mbedtls/mbedtls/library/bignum.o
CC build/mbedtls/mbedtls/library/blowfish.o
CC build/mbedtls/mbedtls/library/camellia.o
CC build/mbedtls/mbedtls/library/ccm.o
CC build/mbedtls/mbedtls/library/certs.o
CC build/mbedtls/mbedtls/library/chacha20.o
CC build/mbedtls/mbedtls/library/chachapoly.o
CC build/mbedtls/mbedtls/library/cipher.o
CC build/mbedtls/mbedtls/library/cipher_wrap.o
CC build/mbedtls/mbedtls/library/cmac.o
CC build/mbedtls/mbedtls/library/ctr_drbg.o
CC build/mbedtls/mbedtls/library/debug.o
CC build/mbedtls/mbedtls/library/des.o
CC build/mbedtls/mbedtls/library/dhm.o
CC build/mbedtls/mbedtls/library/ecdh.o
CC build/mbedtls/mbedtls/library/ecdsa.o
CC build/mbedtls/mbedtls/library/ecjpake.o
CC build/mbedtls/mbedtls/library/ecp.o
CC build/mbedtls/mbedtls/library/ecp_curves.o
CC build/mbedtls/mbedtls/library/entropy.o
CC build/mbedtls/mbedtls/library/entropy_poll.o
CC build/mbedtls/mbedtls/library/error.o
CC build/mbedtls/mbedtls/library/gcm.o
CC build/mbedtls/mbedtls/library/havege.o
CC build/mbedtls/mbedtls/library/hkdf.o
CC build/mbedtls/mbedtls/library/hmac_drbg.o
CC build/mbedtls/mbedtls/library/md2.o
CC build/mbedtls/mbedtls/library/md4.o
CC build/mbedtls/mbedtls/library/md5.o
CC build/mbedtls/mbedtls/library/md.o
CC build/mbedtls/mbedtls/library/md_wrap.o
CC build/mbedtls/mbedtls/library/memory_buffer_alloc.o
CC build/mbedtls/mbedtls/library/nist_kw.o
CC build/mbedtls/mbedtls/library/oid.o
CC build/mbedtls/mbedtls/library/padlock.o
CC build/mbedtls/mbedtls/library/pem.o
CC build/mbedtls/mbedtls/library/pk.o
CC build/mbedtls/mbedtls/library/pkcs11.o
CC build/mbedtls/mbedtls/library/pkcs12.o
CC build/mbedtls/mbedtls/library/pkcs5.o
CC build/mbedtls/mbedtls/library/pkparse.o
CC build/mbedtls/mbedtls/library/pk_wrap.o
CC build/mbedtls/mbedtls/library/pkwrite.o
CC build/mbedtls/mbedtls/library/platform.o
CC build/mbedtls/mbedtls/library/platform_util.o
CC build/mbedtls/mbedtls/library/poly1305.o
CC build/mbedtls/mbedtls/library/ripemd160.o
CC build/mbedtls/mbedtls/library/rsa.o
CC build/mbedtls/mbedtls/library/rsa_internal.o
CC build/mbedtls/mbedtls/library/sha1.o
CC build/mbedtls/mbedtls/library/sha256.o
CC build/mbedtls/mbedtls/library/sha512.o
CC build/mbedtls/mbedtls/library/ssl_cache.o
CC build/mbedtls/mbedtls/library/ssl_ciphersuites.o
CC build/mbedtls/mbedtls/library/ssl_cli.o
CC build/mbedtls/mbedtls/library/ssl_cookie.o
CC build/mbedtls/mbedtls/library/ssl_srv.o
CC build/mbedtls/mbedtls/library/ssl_ticket.o
CC build/mbedtls/mbedtls/library/ssl_tls.o
CC build/mbedtls/mbedtls/library/threading.o
CC build/mbedtls/mbedtls/library/timing.o
CC build/mbedtls/mbedtls/library/version.o
CC build/mbedtls/mbedtls/library/version_features.o
CC build/mbedtls/mbedtls/library/x509.o
CC build/mbedtls/mbedtls/library/x509_create.o
CC build/mbedtls/mbedtls/library/x509_crl.o
CC build/mbedtls/mbedtls/library/x509_crt.o
CC build/mbedtls/mbedtls/library/x509_csr.o
CC build/mbedtls/mbedtls/library/x509write_crt.o
CC build/mbedtls/mbedtls/library/x509write_csr.o
CC build/mbedtls/mbedtls/library/xtea.o
CC build/mbedtls/port/esp_bignum.o
CC build/mbedtls/port/esp_hardware.o
CC build/mbedtls/port/esp_mem.o
CC build/mbedtls/port/esp_sha1.o
CC build/mbedtls/port/esp_sha256.o
CC build/mbedtls/port/esp_sha512.o
CC build/mbedtls/port/mbedtls_debug.o
CC build/mbedtls/port/net_sockets.o
AR build/mbedtls/libmbedtls.a
CC build/mdns/mdns.o
CC build/mdns/mdns_console.o
CC build/mdns/mdns_networking.o
AR build/mdns/libmdns.a
CC build/micro-ecc/micro-ecc/uECC.o
AR build/micro-ecc/libmicro-ecc.a
CC build/mqtt/esp-mqtt/mqtt_client.o
CC build/mqtt/esp-mqtt/lib/mqtt_msg.o
CC build/mqtt/esp-mqtt/lib/mqtt_outbox.o
CC build/mqtt/esp-mqtt/lib/platform_esp32_idf.o
AR build/mqtt/libmqtt.a
CC build/newlib/locks.o
CC build/newlib/pthread.o
CC build/newlib/random.o
CC build/newlib/reent_init.o
CC build/newlib/select.o
CC build/newlib/syscalls.o
CC build/newlib/syscall_table.o
CC build/newlib/termios.o
CC build/newlib/time.o
CC build/newlib/utime.o
AR build/newlib/libnewlib.a
CC build/nghttp/nghttp2/lib/nghttp2_buf.o
CC build/nghttp/nghttp2/lib/nghttp2_callbacks.o
CC build/nghttp/nghttp2/lib/nghttp2_debug.o
CC build/nghttp/nghttp2/lib/nghttp2_frame.o
CC build/nghttp/nghttp2/lib/nghttp2_hd.o
CC build/nghttp/nghttp2/lib/nghttp2_hd_huffman.o
CC build/nghttp/nghttp2/lib/nghttp2_hd_huffman_data.o
CC build/nghttp/nghttp2/lib/nghttp2_helper.o
CC build/nghttp/nghttp2/lib/nghttp2_http.o
CC build/nghttp/nghttp2/lib/nghttp2_map.o
CC build/nghttp/nghttp2/lib/nghttp2_mem.o
CC build/nghttp/nghttp2/lib/nghttp2_npn.o
CC build/nghttp/nghttp2/lib/nghttp2_option.o
CC build/nghttp/nghttp2/lib/nghttp2_outbound_item.o
CC build/nghttp/nghttp2/lib/nghttp2_pq.o
CC build/nghttp/nghttp2/lib/nghttp2_priority_spec.o
CC build/nghttp/nghttp2/lib/nghttp2_queue.o
CC build/nghttp/nghttp2/lib/nghttp2_rcbuf.o
CC build/nghttp/nghttp2/lib/nghttp2_session.o
CC build/nghttp/nghttp2/lib/nghttp2_stream.o
CC build/nghttp/nghttp2/lib/nghttp2_submit.o
CC build/nghttp/nghttp2/lib/nghttp2_version.o
CC build/nghttp/port/http_parser.o
AR build/nghttp/libnghttp.a
CXX build/nvs_flash/src/nvs_api.o
CXX build/nvs_flash/src/nvs_encr.o
CXX build/nvs_flash/src/nvs_item_hash_list.o
CXX build/nvs_flash/src/nvs_ops.o
CXX build/nvs_flash/src/nvs_page.o
CXX build/nvs_flash/src/nvs_pagemanager.o
CXX build/nvs_flash/src/nvs_storage.o
CXX build/nvs_flash/src/nvs_types.o
AR build/nvs_flash/libnvs_flash.a
CC build/openssl/library/ssl_cert.o
CC build/openssl/library/ssl_lib.o
CC build/openssl/library/ssl_methods.o
CC build/openssl/library/ssl_pkey.o
CC build/openssl/library/ssl_stack.o
CC build/openssl/library/ssl_x509.o
CC build/openssl/platform/ssl_pm.o
CC build/openssl/platform/ssl_port.o
AR build/openssl/libopenssl.a
CC build/protobuf-c/protobuf-c/protobuf-c/protobuf-c.o
AR build/protobuf-c/libprotobuf-c.a
CC build/protocomm/src/common/protocomm.o
CC build/protocomm/src/security/security0.o
CC build/protocomm/src/security/security1.o
CC build/protocomm/proto-c/constants.pb-c.o
CC build/protocomm/proto-c/sec0.pb-c.o
CC build/protocomm/proto-c/sec1.pb-c.o
CC build/protocomm/proto-c/session.pb-c.o
CC build/protocomm/src/transports/protocomm_console.o
CC build/protocomm/src/transports/protocomm_httpd.o
AR build/protocomm/libprotocomm.a
CC build/pthread/pthread.o
CC build/pthread/pthread_cond_var.o
CC build/pthread/pthread_local_storage.o
AR build/pthread/libpthread.a
CC build/sdmmc/sdmmc_cmd.o
CC build/sdmmc/sdmmc_common.o
CC build/sdmmc/sdmmc_init.o
CC build/sdmmc/sdmmc_io.o
CC build/sdmmc/sdmmc_mmc.o
CC build/sdmmc/sdmmc_sd.o
AR build/sdmmc/libsdmmc.a
CC build/smartconfig_ack/smartconfig_ack.o
AR build/smartconfig_ack/libsmartconfig_ack.a
CC build/soc/esp32/cpu_util.o
CC build/soc/esp32/gpio_periph.o
CC build/soc/esp32/rtc_clk.o
CC build/soc/esp32/rtc_clk_init.o
CC build/soc/esp32/rtc_init.o
CC build/soc/esp32/rtc_periph.o
CC build/soc/esp32/rtc_pm.o
CC build/soc/esp32/rtc_sleep.o
CC build/soc/esp32/rtc_time.o
CC build/soc/esp32/rtc_wdt.o
CC build/soc/esp32/sdio_slave_periph.o
CC build/soc/esp32/sdmmc_periph.o
CC build/soc/esp32/soc_memory_layout.o
CC build/soc/esp32/spi_periph.o
CC build/soc/src//memory_layout_utils.o
AR build/soc/libsoc.a
CC build/spi_flash/cache_utils.o
CC build/spi_flash/flash_mmap.o
CC build/spi_flash/flash_ops.o
CC build/spi_flash/partition.o
CC build/spi_flash/spi_flash_rom_patch.o
AR build/spi_flash/libspi_flash.a
CC build/spiffs/esp_spiffs.o
CC build/spiffs/spiffs_api.o
CC build/spiffs/spiffs/src/spiffs_cache.o
CC build/spiffs/spiffs/src/spiffs_check.o
CC build/spiffs/spiffs/src/spiffs_gc.o
CC build/spiffs/spiffs/src/spiffs_hydrogen.o
CC build/spiffs/spiffs/src/spiffs_nucleus.o
AR build/spiffs/libspiffs.a
CC build/tcp_transport/transport.o
CC build/tcp_transport/transport_ssl.o
CC build/tcp_transport/transport_tcp.o
CC build/tcp_transport/transport_utils.o
CC build/tcp_transport/transport_ws.o
AR build/tcp_transport/libtcp_transport.a
CC build/tcpip_adapter/tcpip_adapter_lwip.o
AR build/tcpip_adapter/libtcpip_adapter.a
CC build/ulp/ulp.o
CC build/ulp/ulp_macro.o
AR build/ulp/libulp.a
CC build/unity/unity/src/unity.o
CC build/unity/unity_port_esp32.o
CC build/unity/unity_runner.o
AR build/unity/libunity.a
CC build/vfs/vfs.o
CC build/vfs/vfs_uart.o
AR build/vfs/libvfs.a
CXX build/wear_levelling/crc32.o
CXX build/wear_levelling/Partition.o
CXX build/wear_levelling/SPI_Flash.o
CXX build/wear_levelling/wear_levelling.o
CXX build/wear_levelling/WL_Ext_Perf.o
CXX build/wear_levelling/WL_Ext_Safe.o
CXX build/wear_levelling/WL_Flash.o
AR build/wear_levelling/libwear_levelling.a
CC build/wifi_provisioning/src/wifi_config.o
CC build/wifi_provisioning/proto-c/wifi_config.pb-c.o
CC build/wifi_provisioning/proto-c/wifi_constants.pb-c.o
AR build/wifi_provisioning/libwifi_provisioning.a
CC build/wpa_supplicant/src/crypto/aes-cbc.o
CC build/wpa_supplicant/src/crypto/aes-internal.o
CC build/wpa_supplicant/src/crypto/aes-internal-dec.o
CC build/wpa_supplicant/src/crypto/aes-internal-enc.o
CC build/wpa_supplicant/src/crypto/aes-unwrap.o
CC build/wpa_supplicant/src/crypto/aes-wrap.o
CC build/wpa_supplicant/src/crypto/bignum.o
CC build/wpa_supplicant/src/crypto/crypto_internal.o
CC build/wpa_supplicant/src/crypto/crypto_internal-cipher.o
CC build/wpa_supplicant/src/crypto/crypto_internal-modexp.o
CC build/wpa_supplicant/src/crypto/crypto_internal-rsa.o
CC build/wpa_supplicant/src/crypto/crypto_mbedtls.o
CC build/wpa_supplicant/src/crypto/des-internal.o
CC build/wpa_supplicant/src/crypto/dh_group5.o
CC build/wpa_supplicant/src/crypto/dh_groups.o
CC build/wpa_supplicant/src/crypto/md4-internal.o
CC build/wpa_supplicant/src/crypto/md5.o
CC build/wpa_supplicant/src/crypto/md5-internal.o
CC build/wpa_supplicant/src/crypto/ms_funcs.o
CC build/wpa_supplicant/src/crypto/rc4.o
CC build/wpa_supplicant/src/crypto/sha1.o
CC build/wpa_supplicant/src/crypto/sha1-internal.o
CC build/wpa_supplicant/src/crypto/sha1-pbkdf2.o
CC build/wpa_supplicant/src/crypto/sha256.o
CC build/wpa_supplicant/src/crypto/sha256-internal.o
CC build/wpa_supplicant/port/os_xtensa.o
CC build/wpa_supplicant/src/fast_crypto/fast_aes-cbc.o
CC build/wpa_supplicant/src/fast_crypto/fast_aes-unwrap.o
CC build/wpa_supplicant/src/fast_crypto/fast_aes-wrap.o
CC build/wpa_supplicant/src/fast_crypto/fast_crypto_internal.o
CC build/wpa_supplicant/src/fast_crypto/fast_crypto_internal-cipher.o
CC build/wpa_supplicant/src/fast_crypto/fast_crypto_internal-modexp.o
CC build/wpa_supplicant/src/fast_crypto/fast_sha256.o
CC build/wpa_supplicant/src/fast_crypto/fast_sha256-internal.o
CC build/wpa_supplicant/src/wpa2/eap_peer/chap.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap_common.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap_mschapv2.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap_peap.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap_peap_common.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap_tls.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap_tls_common.o
CC build/wpa_supplicant/src/wpa2/eap_peer/eap_ttls.o
CC build/wpa_supplicant/src/wpa2/eap_peer/mschapv2.o
CC build/wpa_supplicant/src/wpa2/tls/asn1.o
CC build/wpa_supplicant/src/wpa2/tls/bignum.o
CC build/wpa_supplicant/src/wpa2/tls/pkcs1.o
CC build/wpa_supplicant/src/wpa2/tls/pkcs5.o
CC build/wpa_supplicant/src/wpa2/tls/pkcs8.o
CC build/wpa_supplicant/src/wpa2/tls/rsa.o
CC build/wpa_supplicant/src/wpa2/tls/tls_internal.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_client.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_client_read.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_client_write.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_common.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_cred.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_record.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_server.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_server_read.o
CC build/wpa_supplicant/src/wpa2/tls/tlsv1_server_write.o
CC build/wpa_supplicant/src/wpa2/tls/x509v3.o
CC build/wpa_supplicant/src/wpa2/utils/base64.o
CC build/wpa_supplicant/src/wpa2/utils/ext_password.o
CC build/wpa_supplicant/src/wps/eap_common.o
CC build/wpa_supplicant/src/wps/uuid.o
CC build/wpa_supplicant/src/wps/wps_attr_build.o
CC build/wpa_supplicant/src/wps/wps_attr_parse.o
CC build/wpa_supplicant/src/wps/wps_attr_process.o
CC build/wpa_supplicant/src/wps/wps.o
CC build/wpa_supplicant/src/wps/wps_common.o
CC build/wpa_supplicant/src/wps/wps_dev_attr.o
CC build/wpa_supplicant/src/wps/wps_enrollee.o
CC build/wpa_supplicant/src/wps/wps_registrar.o
CC build/wpa_supplicant/src/wps/wps_validate.o
AR build/wpa_supplicant/libwpa_supplicant.a
CC build/xtensa-debug-module/eri.o
CC build/xtensa-debug-module/trax.o
AR build/xtensa-debug-module/libxtensa-debug-module.a
Generating libapp_trace.a.sections_info
Generating libapp_update.a.sections_info
Generating libasio.a.sections_info
Generating libaws_iot.a.sections_info
Generating libbootloader_support.a.sections_info
Generating libbt.a.sections_info
Generating libcoap.a.sections_info
Generating libconsole.a.sections_info
Generating libcxx.a.sections_info
Generating libdriver.a.sections_info
Generating libesp-tls.a.sections_info
Generating libesp32.a.sections_info
Generating libesp_adc_cal.a.sections_info
Generating libesp_event.a.sections_info
Generating libesp_http_client.a.sections_info
Generating libesp_http_server.a.sections_info
Generating libesp_https_ota.a.sections_info
Generating libesp_https_server.a.sections_info
Generating libesp_ringbuf.a.sections_info
Generating libethernet.a.sections_info
Generating libexpat.a.sections_info
Generating libfatfs.a.sections_info
Generating libfreemodbus.a.sections_info
Generating libfreertos.a.sections_info
Generating libheap.a.sections_info
Generating libidf_test.a.sections_info
Generating libjsmn.a.sections_info
Generating libjson.a.sections_info
Generating liblibsodium.a.sections_info
Generating liblog.a.sections_info
Generating liblwip.a.sections_info
Generating libmain.a.sections_info
Generating libmbedtls.a.sections_info
Generating libmdns.a.sections_info
Generating libmicro-ecc.a.sections_info
Generating libmqtt.a.sections_info
Generating libnewlib.a.sections_info
Generating libnghttp.a.sections_info
Generating libnvs_flash.a.sections_info
Generating libopenssl.a.sections_info
Generating libprotobuf-c.a.sections_info
Generating libprotocomm.a.sections_info
Generating libpthread.a.sections_info
Generating libsdmmc.a.sections_info
Generating libsmartconfig_ack.a.sections_info
Generating libsoc.a.sections_info
Generating libspi_flash.a.sections_info
Generating libspiffs.a.sections_info
Generating libtcp_transport.a.sections_info
Generating libtcpip_adapter.a.sections_info
Generating libulp.a.sections_info
Generating libunity.a.sections_info
Generating libvfs.a.sections_info
Generating libwear_levelling.a.sections_info
Generating libwifi_provisioning.a.sections_info
Generating libwpa_supplicant.a.sections_info
Generating libxtensa-debug-module.a.sections_info
Generating esp32.common.ld
LD build/hello-world.elf
esptool.py v2.6-beta1
To flash all build output, run 'make flash' or:
python /esp32/sources/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 /esp32/demos/hello_world/build/bootloader/bootloader.bin 0x10000 /esp32/demos/hello_world/build/hello-world.bin 0x8000 /esp32/demos/hello_world/build/partitions_singleapp.bin

編譯完成後,就會在 /esp32/demos/hello_world/build 目錄下生成 partitions_singleapp.bin 燒寫文件,下面就可以將該燒寫文件燒錄到ESP32中了。

燒寫測試

將 NodeMCU-32S接入到電腦上。如果在 /dev/ 目錄識別到 ttyUSB0 則代表已經識別出 NodeMCU-32S的串口了。

root@qiao-virtual-machine:/dev# ls ttyUSB*
ttyUSB0

開始燒寫

首先長按Boot鍵,同時按 reset鍵,系統將會進入下載模式,然後 make flash.

root@qiao-virtual-machine:/esp32/demos/hello_world# make flash
Toolchain path: /esp32/crosstools/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Toolchain version: crosstool-ng-1.22.0-80-g6c4433a
Compiler version: 5.2.0
Python requirements from /esp32/sources/esp-idf/requirements.txt are satisfied.
/bin/sh: 1: [: !=: unexpected operator
/bin/sh: 1: [: !=: unexpected operator
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)...
esptool.py v2.6-beta1
Serial port /dev/ttyUSB0
Connecting........___
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, Coding Scheme None
MAC: 24:0a:c4:12:2f:4c
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 21104 bytes to 12616...
Wrote 21104 bytes (12616 compressed) at 0x00001000 in 1.1 seconds (effective 151.5 kbit/s)...
Hash of data verified.
Compressed 151008 bytes to 73625...
Wrote 151008 bytes (73625 compressed) at 0x00010000 in 6.5 seconds (effective 185.7 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 1698.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
測試驗證

燒寫完成後,使用 minicom 工具打開 /dev/ttyUSB0 串口,就能看到打印信息了 :)。

Restarting in 6 seconds...
Restarting in 5 seconds...
Restarting in 4 seconds...
Restarting in 3 seconds...
Restarting in 2 seconds...
Restarting in 1 seconds...
Restarting in 0 seconds...
Restarting now.
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:5060
load:0x40078000,len:9768
load:0x40080400,len:6180
entry 0x4008070c
I (91) cpu_start: Pro cpu up.
I (92) cpu_start: Starting app cpu, entry point is 0x40080e90
I (77) cpu_start: App cpu up.
I (94) heap_init: Initializing. RAM available for dynamic allocation:
I (101) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (107) heap_init: At 3FFB2ED0 len 0002D130 (180 KiB): DRAM
I (113) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (120) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (126) heap_init: At 4008944C len 00016BB4 (90 KiB): IRAM
I (132) cpu_start: Pro cpu start user code
I (150) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Hello world!
This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 4MB external flash
Restarting in 10 seconds...
Restarting in 9 seconds...
Restarting in 8 seconds...

因爲 hello_world 工程中最後會對esp32進行重啓,因此查看的打印日誌也會不斷的看到 ESP32在重啓。

  /* Hello World Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"


void app_main()
{
printf("Hello world!\n");

/* Print chip information */
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
printf("This is ESP32 chip with %d CPU cores, WiFi%s%s, ",
chip_info.cores,
(chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

printf("silicon revision %d, ", chip_info.revision);

printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
fflush(stdout);
esp_restart();
}

環境搭建過程中遇到的問題記錄

安裝 pip 和 python庫

pip 安裝

由於我搭建的 ESP32 開發環境是在新裝的ubuntu上面搭建的,系統中缺少一些 python 必備的庫,需要使用 pip 安裝。因此需要在ubuntu上安裝python-2.7 的 pip。

安裝方法

wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate
sudo python get-pip.py

python 庫依賴

# This is a list of python packages needed for ESP-IDF. This file is used with pip.
# Please see the Get Started section of the ESP-IDF Programming Guide for further information.
#
setuptools
# The setuptools package is required to install source distributions and on some systems is not installed by default.
# Please keep it as the first item of this list.
#
pyserial>=3.0
future>=0.15.2
cryptography>=2.1.4

結尾

ESP32 的開發環境搭建完成了,下面就就開始正式的ESP32開發了。同樣的,筆記教程會不斷更新中…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章