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

news2024/11/20 2:44:35

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插件:
在这里插入图片描述
然后会跳转到配置界面,如果没有跳转,在vscode的命令行中输入 ESP-IDF: Configure ESP-IDF extension即可进入配置界面,进入express即可配置:
在这里插入图片描述
download server可以选择github(需要网络环境),也可以选择Espressif(乐鑫国内下载地址),如果事先有安装官方ide和python,则version可以选择从本地查找,如果未安装,则可以选择一个release version,然后在下方选择一个安装地址,点击install即可在线安装(建议有良好的网络环境)。
在这里插入图片描述
在这里插入图片描述

二、示例工程

  安装完成后,在vscode命令行中输入ESP-IDF:New Project,即可新建工程:
在这里插入图片描述
在这里插入图片描述
选择如下选项即可加载示例的hello_world工程:
在这里插入图片描述
在这里插入图片描述
编译之前需要在menuconfig中选择芯片flash大小,打开图形化工具,搜索flash设置即可编译和烧录。示例工程的功能为启动后打印一次hello world,然后十秒后重启板子。
在这里插入图片描述
在这里插入图片描述

三、自定义工程

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

四、点灯

笔者的板子上有两颗LED灯,就从简单的led闪烁开始。
在这里插入图片描述
main.c

#include <stdio.h>
#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的驱动方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神秘字符(acm模式)

#include<iostream> #include<cctype> #include<string> using namespace std; int main() {int n;cin >> n;getchar();while (n--){string str, str1, str2"";//cin >> str >> str1;getline(cin, str);//遇到换行符就忽略&…

GB28181学习(五)——实时视音频点播(信令传输部分)

要求 实时视音频点播的SIP消息应通过本域或其他域的SIP服务器进行路由、转发&#xff0c;目标设备的实时视音频流宜通过本域的媒体服务器进行转发&#xff1b;采用INVITE方法实现会话连接&#xff0c;采用RTP/RTCP协议实现媒体传输&#xff1b;信令流程分为客户端主动发起和第…

CCC数字钥匙设计【BLE】--PE进入流程建立BLE加密连接

1、PE进入流程 PE进入的流程大体可以拆解为如下步骤&#xff1a; 1、手机与车端建立BLE加密连接&#xff1b; 2、创建URSK流程&#xff1b; 3、时间同步流程&#xff1b; 4、UWB测距流程&#xff1b; 5、根据各锚点BLE的RSSI及UWB的距离值&#xff0c;通过定位算法进行手…

Android 图片加载框架Glide源码详解

我们看Glide的源码从Glide类入手&#xff0c;使用的时候我们先调用的with方法&#xff0c;源码中with有3个多载的方法&#xff1a;下图翻译过来就是activity用FragmentActivity Applicationcontext用 with&#xff08;Context&#xff09;还有一个with&#xff08;View)的 殊途…

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章 支持向量机 6.1 间隔与支持向量6.1.1 什么是支持向量机6.1.2 支持向量与间隔6.1.3 支持向量机的求解过程 6.2 对偶问题&#xff08;dual problem&#xff09;6.2.1 什么是对偶问题6.2.2 如何求解支持向量机的对偶问题 6.3 核函数&#xff08;kernel function&#xff09…

基于Xml方式的Bean的配置-Bean的作用范围scope配置

SpringBean的配置详解 Bean的配置范围 默认情况下&#xff08;基本的Spring环境&#xff09;&#xff0c;单纯Spring环境Bean的作用范围有两个&#xff1a;Singleton和prototypesingleton:单例&#xff0c;默认值&#xff0c;Spring容器创建的时候&#xff0c;就会进行Bean的实…

【VS Code】根据时间和文件名查看增删改的历史记录

我的 VS Code 已设置为自动保存。 左下角这个 TIMELINE 里面记录着我们使用 VS Code 操作各文件的历史记录。 打开 Local History 可以根据时间和文件名查看增删改的历史记录&#xff0c;比如&#xff1a; 然后我们根据时间和文件名&#xff0c;打开一个文件&#xff1a; 即可…

讲座1:影像重建_脑疾病_大脑解码

视频来源&#xff1a;https://www.bilibili.com/video/BV11K4y1979o/?spm_id_from333.999.0.0&vd_source897075bbdd61e45006d749612d05a2ab 文章目录 Image Reconstruction and SegmentationMR Image ReconstructionBrain ROI Segmentation Brain Disease --- Alzheimers…

嵌入式开源组件——LwRB(RingBuffer)的移植和应用

说明&#xff1a;记录自己学习的过程&#xff0c;如有理解上的错误或者不恰当的地方请原谅。 一、简介 LwRB 是一个针对嵌入式系统优化的通用FIFO&#xff08;先进先出&#xff09;缓冲区库&#xff0c;之前的名称叫做RingBuffe &#xff0c;不知道作者在V2.0.0版本时&…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的&#xff0c;比如windows和linux都有一套自己的接口&#xff0c;这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在编程时不再依赖第三方库&#xff0c;而且原子操作中还引入了原子类的概念…

消息队列(六):服务器设计

紧接着上一章没说完的进行服务器的补充。 推送给消费者消息的基本实现思路 让 brokerServer 把哪些消费者管理好收到对应的消息&#xff0c;把消息推送给消费者 消费者是以队列为维度来订阅消息的&#xff0c;一个队列可以有多个消费者&#xff08;此处我们约定按照轮询的方…

HTTP协议(超级详细)

HTTP协议介绍 基本介绍&#xff1a; HTTP&#xff1a;超文本传输协议&#xff0c;是从万维网服务器传输超文本到本地浏览器的传送协议HTTP是一种应用层协议&#xff0c;是基于TCP/IP通信协议来传送数据的&#xff0c;其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现&#xff0…

激光焊接汽车PP塑料配件透光率测试仪

随着汽车主机厂对车辆轻量化的需求越来越强烈&#xff0c;汽车零部件轻量化设计、制造也成为汽车零部件生产厂商的重要技术指标。零部件企业要实现产品的轻量化&#xff0c;在材料指定的情况下&#xff0c;要通过产品设计优化、产品壁厚减小和装配方式的优化来解决。使用PP材料…

React 把useState变成响应式 ,今天又可以早点下班了

Ⅰ、前言 我们知道 React 中 , 要想修改 「状态」 > 必须要「state &#xff0c; setState」 useState() 中「setState」 去修改 > 「state」那么如果用 Proxy > 去改造 useState&#xff0c;那么 「摸鱼的时间」又增加啦 &#xff1f; Ⅱ、proxy 改造 useState 首…

数据结构与算法之Floyd算法-最短路径问题

Floyd算法-最短路径问题 Floyd算法-最短路径问题算法结束算法思想算法效率分析 Floyd算法-最短路径问题 算法结束 Floyd算法&#xff1a;求出每一对顶点之间的最短路径 核心&#xff1a;使用动态规划思想&#xff0c;将问题的求解分为多个阶段&#xff1a; 对于n个顶点的图…

数据结构---绪论

&#x1f31e;欢迎来到数据结构的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2023年9月17日&…

HTTP代理反爬虫技术详解

HTTP代理是一种网络技术&#xff0c;它可以将客户端的请求转发到目标服务器&#xff0c;并将服务器的响应返回给客户端。在网络安全领域中&#xff0c;HTTP代理经常被用来反爬虫&#xff0c;以保护网站的正常运营。 HTTP代理反爬虫的原理是通过限制访问者的IP地址、访问频率、U…

typeScript 类型推论

什么是类型推论&#xff1f; 类型推论是 TypeScript 中的一个特性&#xff0c;它允许开发人员不必显式地指定变量的类型。相反&#xff0c;开发人员可以根据变量的使用情况让 TypeScript 编译器自动推断出类型。例如&#xff0c;如果开发人员将一个字符串赋值给一个变量&#…

【自然语言处理】【大模型】RWKV:基于RNN的LLM

相关博客 【自然语言处理】【大模型】RWKV&#xff1a;基于RNN的LLM 【自然语言处理】【大模型】CodeGen&#xff1a;一个用于多轮程序合成的代码大语言模型 【自然语言处理】【大模型】CodeGeeX&#xff1a;用于代码生成的多语言预训练模型 【自然语言处理】【大模型】LaMDA&a…

MySQL数据库详解 三:索引、事务和存储引擎

文章目录 1. 索引1.1 索引的概念1.2 索引的作用1.3 如何实现索引1.4 索引的缺点1.5 建立索引的原则依据1.6 索引的分类和创建1.6.1 普通索引1.6.2 唯一索引1.6.3 主键索引1.6.4 组合索引1.6.5 全文索引 1.7 查看索引1.8 删除索引 2. 事务2.1 事务的概念2.2 事务的ACID特性2.2.1…