物联网开发学习笔记——目录索引
参考官网:ESP-IDF 物联网开发框架 | 乐鑫科技
ESP-IDF 是乐鑫官方推出的物联网开发框架,支持 Windows、Linux 和 macOS 操作系统。适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C++ 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序。ESP-IDF 目前已服务支持数以亿计的物联网设备,并已开发构建了多种物联网产品,例如照明、消费电子大小家电、支付终端、工控等各类物联网设备。
一、ESP-IDF软件组件和功能
相关资源:
ESP-IDF 入门指南 | 乐鑫科技
ESP-IDF GitHub
ESP-IDF 组件管理工具
二、ESP-IDF开发环境配置
第一步:安装准备
编译 ESP-IDF 需要以下软件包
sudo apt-get install git wget flex bison gperf python3 python3-venv python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
备注:使用 ESP-IDF 需要 CMake 3.16 或以上版本
第二步:获取 ESP-IDF
获取 ESP-IDF ,使用 git clone
命令克隆远程仓库
mkdir -p ~/esp
cd ~/esp
git clone -b v5.1 --recursive https://github.com/espressif/esp-idf.git
ESP-IDF 将下载至 ~/esp/esp-idf
。
请前往 ESP-IDF 版本简介,查看 ESP-IDF 不同版本的具体适用场景。
第三步:设置工具
除了 ESP-IDF 本身,您还需要为支持 ESP32 的项目安装 ESP-IDF 使用的各种工具,比如编译器、调试器、Python 包等。
cd ~/esp/esp-idf
./install.sh esp32
上述命令仅仅为 ESP32 安装所需工具。如果需要为多个目标芯片开发项目,则可以一次性指定多个目标,如下所示:
cd ~/esp/esp-idf
./install.sh esp32,esp32s3
如果需要一次性为所有支持的目标芯片安装工具,可以运行如下命令:
cd ~/esp/esp-idf
./install.sh all
下载工具备选方案
ESP-IDF 工具安装器会下载 Github 发布版本中附带的一些工具,如果访问 Github 较为缓慢,可以设置一个环境变量,从而优先选择 Espressif 的下载服务器进行 Github 资源下载。
备注: 该设置只影响从 Github 发布版本中下载的单个工具,它并不会改变访问任何 Git 仓库的 URL。
要在安装工具时优先选择 Espressif 下载服务器,请在运行 install.sh
时使用以下命令:
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh
自定义工具安装路径
本步骤中介绍的脚本将 ESP-IDF 所需的编译工具默认安装在用户的根目录中,即 Linux 系统中的 $HOME/.espressif
目录。您可以选择将工具安装到其他目录中,但请在运行安装脚本前,重新设置环境变量 IDF_TOOLS_PATH
。注意,请确保您的用户账号已经具备了读写该路径的权限。
如果修改了 IDF_TOOLS_PATH
变量,请确保该变量在每次执行安装脚本 install.sh
和导出脚本 export.sh
均保持一致。
第四步:设置环境变量
在需要运行 ESP-IDF 的终端窗口运行以下命令:
. $HOME/esp/esp-idf/export.sh
注意,命令开始的 “.” 与路径之间应有一个空格!
或者使用如下命令
source $HOME/esp/esp-idf/export.sh
经常运行 ESP-IDF,您可以为执行 export.sh
创建一个别名,具体步骤如下:
-
复制并粘贴以下命令到 shell 配置文件中
.bashrc
alias get_idf='. $HOME/esp/esp-idf/export.sh'
-
通过重启电脑或运行
source ~/.bashrc
来刷新配置文件。
现在您可以在任何终端窗口中运行 get_idf
来设置或刷新 esp-idf 环境。
三、开始使用 ESP-IDF
现在您已经具备了使用 ESP-IDF 的所有条件,接下来将介绍如何开始您的第一个工程。
第一步:开始创建工程
复制一个ESP32 示例程序。您可以从 ESP-IDF 中 examples 目录下的 get-started/hello_world 工程开始。
注意:ESP-IDF 编译系统不支持 ESP-IDF 路径或其工程路径中带有空格。
将 get-started/hello_world 工程复制至您本地的 ~/esp
目录下:
cd ~/esp cp -r $IDF_PATH/examples/get-started/hello_world .
第二步:连接设备
现在,请将您的 ESP32 开发板连接到 PC,并查看开发板使用的串口。
假如您不知道如何查看开发板连接的端口号,请看备注【查看开发板端口号】
第三步:配置工程
请进入 hello_world
目录,设置 ESP32 为目标芯片,然后运行工程配置工具 menuconfig
。
cd ~/esp/hello_world idf.py set-target esp32 idf.py menuconfig
打开一个新工程后,应首先使用 idf.py set-target esp32
设置“目标”芯片。注意,此操作将清除并初始化项目之前的编译和配置(如有)。您也可以直接将“目标”配置为环境变量(此时可跳过该步骤)。更多信息,请见 Select the Target Chip: set-target。
正确操作上述步骤后,系统将显示以下菜单:
您可以通过此菜单设置项目的具体变量,包括 Wi-Fi 网络名称、密码和处理器速度等。hello_world
示例项目会以默认配置运行,因此在这一项目中,可以跳过使用 menuconfig
进行项目配置这一步骤。
第四步:编译工程
请使用以下命令,编译烧录工程:
idf.py build
运行以上命令可以编译应用程序和所有 ESP-IDF 组件,接着生成引导加载程序、分区表和应用程序二进制文件。
liuzhengliang@liuzhengliang-Y9000X:~/esp/hello_world$ idf.py build
/home/liuzhengliang/esp/esp-idf/tools/check_python_dependencies.py:12: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.htmlimport pkg_resources
Executing action: all (aliases: build)
Running ninja in directory /home/liuzhengliang/esp/hello_world/build
Executing "ninja all"...
[13/884] Generating ../../partition_table/partition-table.binPartition table binary ...Project build complete. To flash, run this command:
/home/liuzhengliang/.espressif/python_env/idf5.1_py3.8_env/bin/python ../esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size 2MB --flash_freq 40m 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/hello_world.bin
or run 'idf.py -p (PORT) flash'
如果一切正常,编译完成后将生成 .bin 文件。
第五步:烧录到开发板
运行以下命令,将刚刚生成的二进制文件烧录至您的 ESP32 开发板:
idf.py -p PORT flash
请将 PORT 替换为 ESP32 开发板的串口名称。如我的开发板是/dev/ttyUSB0,我使用如下命令:idf.py -p /dev/ttyUSB0 flash
烧录完成后,开发板将会复位,应用程序 “hello_world” 开始运行。
第七版:check串口监视log输出
您可以使用 idf.py -p PORT monitor
命令,监视 “hello_world” 工程的运行情况。注意,不要忘记将 PORT 替换为您的串口名称。
对照hello_world_main.c 代码,确认一下串口log打印
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"void app_main(void)
{printf("Hello world!\n");/* Print chip information */esp_chip_info_t chip_info;uint32_t flash_size;esp_chip_info(&chip_info);printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",CONFIG_IDF_TARGET,chip_info.cores,(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");unsigned major_rev = chip_info.revision / 100;unsigned minor_rev = chip_info.revision % 100;printf("silicon revision v%d.%d, ", major_rev, minor_rev);if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {printf("Get flash size failed");return;}printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());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();
}
看到打印的 “Hello world!” 了。
您可使用快捷键 Ctrl+]
,退出 IDF 串口监视器。
到此,恭喜,您已完成 ESP-IDF开发环境的搭建,并可以开始ESP32的入门学习了!
备注
查看开发板端口号
1. 首先电脑和开发板使用usb数据线相连
2. 查看开发板连接的端口号
Ubuntu 20.04 LTS系统默认自动usb转串口驱动程序,使用如下命令参考端口号
ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 10月 15 15:45 /dev/ttyUSB0
/dev/ttyUSB0权限问题
烧写开发板可能会出现 Failed to open port /dev/ttyUSB0
错误消息。
我烧写还遇到过如下错误:
此时可以将用户添加至 Linux Dialout 组。
当前登录用户应当可以通过 USB 对串口进行读写操作。在多数 Linux 版本中,您都可以通过以下命令,将用户添加到 dialout
组,从而获许读写权限:
sudo usermod -a -G dialout $USER
在 Arch Linux 中,需要通过以下命令将用户添加到 uucp
组中:
sudo usermod -a -G uucp $USER
请重新登录,确保串口读写权限生效。
临时解决方法,也可以简单给对应端口添加读写权限,但是这种方法每次插拔开发板之后,需要重新下发命令:
sudo chmod a+rw /dev/ttyUSB0
串口终端程序
PuTTY SSH Client是一款非常好用的串口终端程序,既可用于 Windows 也可用于 Linux。
可以快速直观的设置串口参数:波特率 = 115200(需要根据程序修改),数据位 = 8,停止位 = 1,奇偶校验 = N。
物联网开发学习笔记——目录索引_liuzl_2010的博客-CSDN博客