ESP32开发之路(1)— 基于idf框架的HelloWorld工程
本次开发基于Ubuntu虚拟机
一、ESP32简介
首先,上图,看一下我手上的ESP32开发板
其中使用的是ESP32-WROOM-32模组,该模组内置 ESP32-D0WDQ6 芯片,是一款基础且常用的 ESP32 模组。ESP32-WROOM-32模组 集成了4 MB 的SPI flash。然后我们看一下官方技术手册对ESP32-D0WDQ6芯片 CPU 和片上存储的描述:
简单来说就是4MB的外部SPI Flash,448KB的内部ROM,520KB的内部SRAM
。
下图是ESP32的地址映射图:
详细信息可以参考官方编程指南
二、安装准备
首先,安装依赖:
sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial python-click python-cryptography python-future python-pyparsing python-pyelftools cmake ninja-build ccache libffi-dev libssl-dev
然后还有工具链的依赖
sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial
对于不同的Ubuntu版本可能会出现不一样的情况,不过按照提示进行安装应该就可以了
三、获取源码
用git命令来拉取下来,这就可以可以同步最新的框架版本!不能直接一个downLoad 下载,发现会有错误,切记!
不过,乐鑫的开放源码都放在GitHub,而GitHub又被微软收购了,这一年的访问下载速度慢得乌龟一样,所以,这里有位大佬提供了一个可供代替的方法https://blog.csdn.net/xh870189248/article/details/80208099
首先,拉取代码,不过不拉取子模块,注意,不要加sudo,加sudo后面编译时会出问题
sudo git clone https://gitee.com/xuhongv/esp-idf.git
然后打开.gitmodules
,我们看到下子模块源路径是不规范的,这里,我们再修改为码云上的:
1、进入esp-idf目录,打开.gitmodules
sudo vim .gitmodules
2、修改替换为下面的代码!
[submodule "components/esptool_py/esptool"]
path = components/esptool_py/esptool
url = https://gitee.com/xuhongv/esptool.git
[submodule "components/bt/controller/lib"]
path = components/bt/controller/lib
url = https://gitee.com/xuhongv/esp32-bt-lib.git
[submodule "components/bootloader/subproject/components/micro-ecc/micro-ecc"]
path = components/bootloader/subproject/components/micro-ecc/micro-ecc
url = https://gitee.com/xuhongv/micro-ecc.git
[submodule "components/coap/libcoap"]
path = components/coap/libcoap
url = https://gitee.com/xuhongv/libcoap.git
[submodule "components/nghttp/nghttp2"]
path = components/nghttp/nghttp2
url = https://gitee.com/xuhongv/nghttp2.git
[submodule "components/libsodium/libsodium"]
path = components/libsodium/libsodium
url = https://gitee.com/xuhongv/libsodium.git
[submodule "components/spiffs/spiffs"]
path = components/spiffs/spiffs
url = https://gitee.com/xuhongv/spiffs.git
[submodule "components/json/cJSON"]
path = components/json/cJSON
url = https://gitee.com/xuhongv/cJSON.git
[submodule "components/mbedtls/mbedtls"]
path = components/mbedtls/mbedtls
url = https://gitee.com/xuhongv/mbedtls.git
[submodule "components/asio/asio"]
path = components/asio/asio
url = https://gitee.com/xuhongv/asio.git
[submodule "components/expat/expat"]
path = components/expat/expat
url = https://gitee.com/xuhongv/libexpat.git
[submodule "components/lwip/lwip"]
path = components/lwip/lwip
url = https://gitee.com/xuhongv/esp-lwip.git
[submodule "components/mqtt/esp-mqtt"]
path = components/mqtt/esp-mqtt
url = https://gitee.com/xuhongv/esp-mqtt.git
[submodule "components/protobuf-c/protobuf-c"]
path = components/protobuf-c/protobuf-c
url = https://gitee.com/xuhongv/protobuf-c.git
[submodule "components/unity/unity"]
path = components/unity/unity
url = https://gitee.com/xuhongv/Unity.git
[submodule "examples/build_system/cmake/import_lib/main/lib/tinyxml2"]
path = examples/build_system/cmake/import_lib/main/lib/tinyxml2
url = https://gitee.com/xuhongv/tinyxml2.git
[submodule "components/bt/host/nimble/nimble"]
path = components/bt/host/nimble/nimble
url = https://gitee.com/xuhongv/esp-nimble.git
[submodule "components/cbor/tinycbor"]
path = components/cbor/tinycbor
url = https://gitee.com/xuhongv/tinycbor.git
[submodule "components/esp_wifi/lib"]
path = components/esp_wifi/lib
url = https://gitee.com/xuhongv/esp32-wifi-lib.git
[submodule "components/tinyusb/tinyusb"]
path = components/tinyusb/tinyusb
url = https://gitee.com/xuhongv/tinyusb.git
3、然后再更新子模块 , 你会发现快的一匹,
git submodule update --init --recursive
四、获取工具链
工具链下载地址https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2020r1-linux-amd64.tar.gz
然后使用命令解压:
tar -xzvf xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
五、设置 PATH 路径
先拿到上述的SDK路径即为IDF路径,以及工具链的路径, 比如我的路径即设置为:
export IDF_PATH=/home/william/esp/esp-idf
export PATH=$PATH:/home/william/esp/tools/xtensa-esp32-elf/bin
1、打开.bashrc
sudo vim ~/.bashrc
2、添加IDF_PATH和PATH环境变量:
3、使之生效
source ~/.bashrc
4、IDF_PATH 路径测试是否设置成功:
echo $IDF_PATH
5、测试工具链环境是否设置成功:
xtensa-esp32-elf-gcc -v
六、安装 Python 软件包
ESP-IDF 所需的 Python 软件包位于 IDF_PATH/requirements.txt
中,运行以下命令进行安装
python -m pip install --user -r $IDF_PATH/requirements.txt
七、开始编译工程
进入esp-idf/examples/get-started/hello_world
目录下,执行make menuconfig
可以保持默认配置,按【s】会Save,然后回车,按【Esc】或【q】退出即可,然后使用make all -j2
编译,编译成功如下
八、烧录下载
将当前用户增加至 dialout 组 :sudo usermod -aG dialout 用户名
sudo usermod -aG dialout william
然后重启系统
通过dmesg | grep ttyS*
命令查看串口
dmesg | grep ttyS*
然后烧录
make flash
或者指定端口
make flash ESPPORT=/dev/ttyUSB0
等到出现Connecting.......
按住开发板上的BOOT
按键
下载成功
然后使用make monitor
命令查看串口输出
make monitor
可以看到,Hello world!
已经打印出来了,大功告成