ESP-IDF学习——1.环境安装与hello-world

ESP-IDF学习——1.环境安装与hello-world

  • 0.前言
  • 一、环境搭建
    • 1.官方IDE工具
    • 2.vscode图形化配置
  • 二、示例工程
  • 三、自定义工程
  • 四、点灯
  • 五、总结


0.前言

  最近在学习freertos,但由于买的书还没到,所以先捣鼓捣鼓ESP-IDF,因为这个比Arduino更接近底层,并且也是基于FreeRTOS实现的,所以先熟悉一些相关基础功能。

一、环境搭建

  ESP-IDF支持windows、linux、MacOS,但总体比较起来,windows下安装似乎更加方便,所以笔者就以windows作为开发环境。Linux和MacOS用户可以参考官方安装教程。
  windows下的安装也可以分为官方IDE和vscode开发环境两种:

1.官方IDE工具

  可以直接进入官方的下载链接进行下载和安装。除此之外,还需要安装python3,安装完成后即可通过桌面installer快捷方式中的命令行进行一系列的配置和编译。

2.vscode图形化配置

  官方ide是基于eclipse界面做的,并且编译和下载还需要执行idf.py命令,比较繁琐,所以笔者更喜欢使用vscode图形化界面进行开发,还可以使用ai代码工具辅助开发,更加方便。
  在vscode中安装Espressif IDF插件:
ESP-IDF学习——1.环境安装与hello-world_第1张图片
然后会跳转到配置界面,如果没有跳转,在vscode的命令行中输入 ESP-IDF: Configure ESP-IDF extension即可进入配置界面,进入express即可配置:
ESP-IDF学习——1.环境安装与hello-world_第2张图片
download server可以选择github(需要网络环境),也可以选择Espressif(乐鑫国内下载地址),如果事先有安装官方ide和python,则version可以选择从本地查找,如果未安装,则可以选择一个release version,然后在下方选择一个安装地址,点击install即可在线安装(建议有良好的网络环境)。
ESP-IDF学习——1.环境安装与hello-world_第3张图片
ESP-IDF学习——1.环境安装与hello-world_第4张图片

二、示例工程

  安装完成后,在vscode命令行中输入ESP-IDF:New Project,即可新建工程:
ESP-IDF学习——1.环境安装与hello-world_第5张图片
ESP-IDF学习——1.环境安装与hello-world_第6张图片
选择如下选项即可加载示例的hello_world工程:
ESP-IDF学习——1.环境安装与hello-world_第7张图片
ESP-IDF学习——1.环境安装与hello-world_第8张图片
编译之前需要在menuconfig中选择芯片flash大小,打开图形化工具,搜索flash设置即可编译和烧录。示例工程的功能为启动后打印一次hello world,然后十秒后重启板子。
ESP-IDF学习——1.环境安装与hello-world_第9张图片
ESP-IDF学习——1.环境安装与hello-world_第10张图片

三、自定义工程

在创建工程时选择sample project即可创建空白项目:
ESP-IDF学习——1.环境安装与hello-world_第11张图片
ESP-IDF学习——1.环境安装与hello-world_第12张图片
将FreeRTOS的头文件包含进来,即可使用相关api。这里有两个地方需要注意,如果使用printf时未添加换行符,则需要使用fflush(stdout)将缓冲区中的数据打印出来。另外vTaskDelay(1000)函数的延时为1000个时钟tick,所以想要延时1s,需要除以当前的时间周期,在menuconfig中查找tick即可配置相关参数。
ESP-IDF学习——1.环境安装与hello-world_第13张图片
程序的结果即为每隔一秒打印一次hello world。
ESP-IDF学习——1.环境安装与hello-world_第14张图片

四、点灯

笔者的板子上有两颗LED灯,就从简单的led闪烁开始。
ESP-IDF学习——1.环境安装与hello-world_第15张图片
main.c

#include 
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

uint32_t led_staus = 0;

void app_main(void)
{
    //GPIO初始化
    gpio_reset_pin(GPIO_NUM_12);
    gpio_set_direction(GPIO_NUM_12, GPIO_MODE_OUTPUT);
    gpio_reset_pin(GPIO_NUM_13);
    gpio_set_direction(GPIO_NUM_13, GPIO_MODE_OUTPUT);

    for(;;)
    {
        //设置引脚输出电平
        gpio_set_level(GPIO_NUM_12, led_staus);
        gpio_set_level(GPIO_NUM_13, !led_staus);
        led_staus = !led_staus;
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

编译烧写后即可看见LED闪烁。

五、总结

  ESP-IDF对于熟悉FreeRTOS的人来说应该是比较简单的,除了底层驱动的API需要查询官方手册进行配置,上层的FreeRTOS API基本都可以通用。不过之前如果学习的是STM32CubeIDE中的FreeRTOS CMSIS封装层的话,可能还需要适应一下。笔者目前也刚学习玩FreeRTOS的内核组件,后续在STM32上学习了一些外设开发之后,也会同步学习使用ESP-IDF的驱动方式。

你可能感兴趣的:(ESP-IDF,ESP32,ESP-IDF,FreeRTOS)