前言
ESP32 是一套 Wi-Fi (2.4 GHz) 和蓝牙 (4.2) 双模解决方案。
sdk版本:v3.3.2
此次实验是在 Windows 10 系统下利用虚拟机安装 Ubuntu 16.04系统,并在此系统中进行开发编译和下载固件。
一、准备工作
此实验需要准备以下软件
1.Ubuntu 16.04系统:
系统搭建方法可以看我的另一篇文章 https://blog.csdn.net/m_pfly_fish/article/details/104872286
2.工具链(用于编译 ESP32 应用程序):
-
64-bit Linux:
https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
-
32-bit Linux:
https://dl.espressif.com/dl/xtensa-esp32-elf-linux32-1.22.0-80-g6c4433a-5.2.0.tar.gz
3.ESP-IDF:
包含 ESP32 API 和用于操作工具链的脚本。从git上克隆下来时间比较长,我这边备份了一份下载好的V3.3.2版本idf:
https://download.csdn.net/download/m_pfly_fish/12739713
4.代码编辑器,我使用的是 Source Insight 4.0。
二、设置工具链
2.1 安装软件包
设置工具链需要提前安装以下软件包
sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing libffi-dev libssl-dev
我因为已经安装完成了,所以显示如下:
2.2 设置工具链
下载64位的 esp32 工具链
下载完成后,将它解压到 ~/esp 目录:
mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
2.3 设置环境变量
工具链将会被解压到 ~/esp/xtensa-esp32-elf/
目录。
要使用工具链,你还需要在 ~/.profile
文件中更新环境变量 PATH
。要使 xtensa-esp32-elf
在所有的终端会话中都有效,需要将下面这一行代码添加到你的 ~/.profile
文件中:
export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"
退出并重新登录以使 .profile
更改生效。 运行以下命令来检查 PATH
设置是否正确:
printenv PATH
设置成功应该能够找到工具链的安装路径
三、设置 ESP-IDF
3.1 获取 ESP-IDF
工具链(包括用于编译和构建应用程序的程序)安装完后,你还需要 ESP32 相关的 API/库。API/库在 ESP-IDF仓库 中。获取本地副本:打开终端,切换到你要存放 ESP-IDF 的工作目录,使用 git clone
命令克隆远程仓库:
cd ~/esp
git clone -b v3.3.2 --recursive https://github.com/espressif/esp-idf.git
ESP-IDF 将会被下载到 ~/esp/esp-idf
目录下。
3.2 设置 ESP-IDF 路径
在 ~/.profile
文件中加入以下指令,创建 IDF_PATH
:
export IDF_PATH=~/esp/esp-idf
运行以下命令以确保 IDF_PATH
已经设置好:
printenv IDF_PATH
此前在 ~/.profile
文件中输入(或者手动设置)的路径应该被打印出来。如果不想永久设置 IDF_PATH
,每次重启或者注销时在终端窗口中手动输入:
export IDF_PATH=~/esp/esp-idf
3.3 安装依赖的 Python 软件包
ESP-IDF 所依赖的 Python 软件包位于 $IDF_PATH/requirements.txt
文件中,您可以通过运行以下命令来安装它们:
python2.7 -m pip install --user -r $IDF_PATH/requirements.txt
四、编译和烧写 hello_world 工程
4.1 创建 hello_world 工程
现在可以开始创建 ESP32 应用程序了。为了快速开始,我们这里以 IDF 的 examples 目录下的 get-started/hello_world 工程为例进行说明。
将 get-started/hello_world 拷贝到 ~/esp
目录:
cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world
4.2 连接usb
用 USB 线将 ESP32 开发板连接到 PC,要查看 ESP32 开发板的串口设备名称,运行以下命令两次:
ls /dev/tty*
第一次先拔下开发板或适配器,第二次插入开发板或适配器之后再运行命令,第二次运行指令后出现的端口即是 ESP32 对应的串口
将自己的用户加入到dialout组获取usb权限
sudo usermod -aG dialout teashaw
teashaw改成自己的用户名,然后logout一下,就永久生效了。
4.3 工程配置
在终端窗口中,输入 cd ~/esp/hello_world
进入 hello_world
所在目录,然后启动工程配置工具 menuconfig
:
cd ~/esp/hello_world
make menuconfig
如果之前的步骤都正确,则会显示下面的菜单:
在菜单中,进入 Serial flasher config
> Default serial port
配置串口(工程将会加载到该串口上)。输入回车确认选择,选择 < Save >
保存配置,然后选择 < Exit >
退出应用程序。
4.4 编译和烧写
执行指令:
make flash
这条命令会编译应用程序和所有的 ESP-IDF 组件,生成 bootloader、分区表和应用程序 bin 文件,并将这些 bin 文件烧写到 ESP32 板子上。
esptool.py v2.0-beta2
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)...
esptool.py v2.0-beta2
Connecting........___
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Attaching SPI flash...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 11616 bytes to 6695...
Wrote 11616 bytes (6695 compressed) at 0x00001000 in 0.1 seconds (effective 920.5 kbit/s)...
Hash of data verified.
Compressed 408096 bytes to 171625...
Wrote 408096 bytes (171625 compressed) at 0x00010000 in 3.9 seconds (effective 847.3 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 82...
Wrote 3072 bytes (82 compressed) at 0x00008000 in 0.0 seconds (effective 8297.4 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting...
如果没有任何问题,在编译过程结束后将能看到类似上面的消息。最后,板子将会复位,应用程序 “hello_world” 开始启动。
4.5 监视器
如果要查看 “hello_world” 程序是否真的在运行,输入命令 make monitor
。这个命令会启动 IDF Monitor 程序:
$ make monitor
MONITOR
--- idf_monitor on /dev/ttyUSB0 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun 8 2016 00:22:57
...
在启动消息和诊断消息后,你就能看到 “Hello world!” 程序所打印的消息:
...
Hello world!
Restarting in 10 seconds...
I (211) cpu_start: Starting scheduler on APP CPU.
Restarting in 9 seconds...
Restarting in 8 seconds...
Restarting in 7 seconds...
要退出监视器,请使用快捷键 Ctrl+]
。
如果串口打印的不是上面显示的消息而是类似下面的乱码:
e���)(Xn@�y.!��(�PW+)��Hn9a/9�!�t5��P�~�k��e�ea�5�jA
~zY��Y(1�,1�� e���)(Xn@�y.!Dr�zY(�jpi�|�+z5Ymvp
或者监视器程序启动失败,那么可能你的开发板用的是 26 MHz 晶振,而 ESP-IDF 默认的是 40 MHz 晶振。请退出监视器,回到配置,将 CONFIG_ESP32_XTAL_FREQ_SEL 改为 26 MHz,然后再次编译和烧写。请在 make menuconfig
的 Component config –> ESP32-specific –> Main XTAL frequency 中配置。
要一次性执行 make flash
和 make monitor
,输入 make flash monitor
。参考文档 IDF Monitor 里的快捷键和更多内容。
文档链接:https://docs.espressif.com/projects/esp-idf/zh_CN/v3.3.2/get-started/idf-monitor.html
4.6 更新 ESP-IDF
使用 ESP-IDF 一段时间后,你可能想要进行升级来获得新的性能或者对 bug 进行修复。最简单的更新方式是删除已有的 esp-idf
文件夹然后再克隆一个,即重复 获取ESP-IDF 里的操作。
然后在用户配置文件中添加 IDF_PATH,这样工具链脚本就能够知道这一版本的 ESP-IDF 的具体位置。