当前位置: 首页 > news >正文

ubuntu22.04 桌面系统怎么搭建一个esp-idf的项目,搭建开发环境

详细介绍如何在 Ubuntu 22.04 桌面系统上搭建 ESP-IDF 的开发环境,并创建一个 ESP-IDF 项目。以下内容将涵盖从环境准备到项目创建和编译的所有步骤。


目录

  1. 环境准备
    • 1.1 更新系统
    • 1.2 安装必要的工具和依赖项
  2. 安装 ESP-IDF
    • 2.1 克隆 ESP-IDF 仓库
    • 2.2 运行安装脚本
  3. 设置环境变量
    • 3.1 临时设置环境变量
    • 3.2 永久添加到 .bashrc
  4. 创建 ESP-IDF 项目
    • 4.1 使用示例项目
    • 4.2 创建新项目
  5. 编译、烧录和监视项目
    • 5.1 编译项目
    • 5.2 烧录固件
    • 5.3 监视串口输出
  6. 使用 VSCode 进行开发(可选)
    • 6.1 安装 VSCode
    • 6.2 安装 ESP-IDF 扩展
  7. 常见问题与故障排除
  8. 总结

1. 环境准备

在开始之前,确保您的 Ubuntu 系统已更新,并安装了必要的工具。

1.1 更新系统

打开终端,运行以下命令更新系统软件包:

sudo apt update
sudo apt upgrade -y

1.2 安装必要的工具和依赖项

ESP-IDF 需要一些依赖库和工具,请按以下步骤安装:

sudo apt install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 -y
  • git:用于克隆 ESP-IDF 仓库。
  • python3:ESP-IDF 使用 Python 3。
  • cmakeninja-build:用于构建项目。
  • libusb-1.0-0dfu-util:用于与 ESP32 设备通信。

2. 安装 ESP-IDF

ESP-IDF 是 Espressif 提供的官方开发框架,支持 ESP32 系列芯片。

2.1 克隆 ESP-IDF 仓库

首先,选择一个目录用于存放 ESP-IDF,例如 ~/esp

mkdir -p ~/esp
cd ~/esp

然后,克隆 ESP-IDF 仓库(以 release/v5.0 分支为例,您也可以选择其他版本):

git clone -b release/v5.0 --recursive https://github.com/espressif/esp-idf.git

注意--recursive 参数用于克隆子模块。

2.2 运行安装脚本

ESP-IDF 提供了安装脚本,可自动安装所需的工具链和 Python 包。

cd ~/esp/esp-idf
./install.sh all
  • all 参数表示安装所有支持的工具链,包括 ESP32、ESP32-S2、ESP32-S3、ESP32-C3 等。

安装过程可能需要一段时间,取决于网络速度。


3. 设置环境变量

在每次使用 ESP-IDF 前,需要设置环境变量,确保系统能够找到 ESP-IDF 工具。

3.1 临时设置环境变量

您可以运行以下命令,临时设置环境变量:

. $HOME/esp/esp-idf/export.sh

或者:

source $HOME/esp/esp-idf/export.sh

这将在当前终端会话中生效。

3.2 永久添加到 .bashrc

为了避免每次都手动设置,可以将上述命令添加到 ~/.bashrc 文件中:

echo '. $HOME/esp/esp-idf/export.sh' >> ~/.bashrc

然后,重新加载 ~/.bashrc

source ~/.bashrc

这样,每次打开新的终端时,环境变量都会自动设置。


4. 创建 ESP-IDF 项目

您可以使用 ESP-IDF 提供的示例项目,或者创建一个新的项目。

4.1 使用示例项目

ESP-IDF 包含丰富的示例,可以直接使用。

cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .
cd hello_world
  • $IDF_PATH:环境变量,指向 ESP-IDF 的安装目录。

4.2 创建新项目

您也可以从头创建一个新的项目:

cd ~/esp
idf.py create-project my_project
cd my_project

这将创建一个名为 my_project 的新项目,包含基本的项目结构。


5. 编译、烧录和监视项目

接下来,我们将编译项目、烧录到设备,并监视串口输出。

5.1 编译项目

确保已经设置了环境变量,进入项目目录,运行:

idf.py build

这将编译项目,生成固件。

可能的错误与解决方法
  • 缺少环境变量:如果收到 idf.py: command not found,请确保已正确设置环境变量,或者重新运行 source ~/esp/esp-idf/export.sh

5.2 烧录固件

将 ESP32 开发板通过 USB 连接到电脑,运行以下命令烧录固件:

idf.py -p /dev/ttyUSB0 flash
  • -p 参数指定串口设备,请将 /dev/ttyUSB0 替换为实际的设备名称,可以使用 ls /dev/ttyUSB* 查看。

识别串口设备

如果不确定设备名称,可以运行:

ls /dev/ttyUSB*

或者:

dmesg | grep ttyUSB

5.3 监视串口输出

您可以使用以下命令监视串口输出,查看设备的日志信息:

idf.py -p /dev/ttyUSB0 monitor

提示:您也可以将 flashmonitor 命令合并:

idf.py -p /dev/ttyUSB0 flash monitor

Ctrl+] 可以退出监视器。


6. 使用 VSCode 进行开发(可选)

为了提高开发效率,您可以在 Visual Studio Code(VSCode)中进行开发。

6.1 安装 VSCode

如果尚未安装 VSCode,可以使用以下命令安装:

sudo snap install --classic code

或者从 VSCode 官网下载并安装。

6.2 安装 ESP-IDF 扩展

  1. 打开 VSCode,点击左侧的扩展(Extensions)图标。
  2. 搜索 ESP-IDF,安装由 Espressif Systems 提供的官方扩展。
  3. 安装完成后,按照扩展的指引,配置 ESP-IDF 的路径和 Python 环境。
  4. 在 VSCode 中打开您的项目,即可进行开发、编译、烧录和监视。

7. 常见问题与故障排除

问题 1:无法连接到开发板

  • 症状:运行 idf.py flash 时,出现连接错误。
  • 解决方法
    • 检查串口设备名称是否正确。
    • 确保开发板已正确连接,并未被其他程序占用。
    • 尝试按下开发板的 BOOTEN 按钮,再次尝试烧录。

问题 2:idf.py 命令找不到

  • 症状:终端提示 idf.py: command not found
  • 解决方法
    • 确保已运行 source ~/esp/esp-idf/export.sh
    • 检查 ~/.bashrc 中是否正确添加了环境变量。

问题 3:Python 包版本冲突

  • 症状:编译时出现 Python 包版本错误。
  • 解决方法
    • 使用 ESP-IDF 提供的 Python 虚拟环境,确保依赖包的版本正确。
    • 不要在系统的 Python 环境中安装或升级与 ESP-IDF 相关的包。

8. 总结

通过以上步骤,您已经在 Ubuntu 22.04 桌面系统上成功搭建了 ESP-IDF 的开发环境,并学会了如何创建、编译和烧录 ESP-IDF 项目。

关键点

  • 环境准备:安装必要的工具和依赖项。
  • 安装 ESP-IDF:克隆仓库并运行安装脚本。
  • 设置环境变量:确保 ESP-IDF 工具可用。
  • 项目创建与编译:使用 idf.py 命令进行项目管理。

建议

  • 熟悉 ESP-IDF 文档:ESP-IDF 官方文档提供了丰富的资源和示例,可以帮助您深入了解。
  • 使用版本控制:建议使用 Git 管理您的项目代码,方便协作和版本管理。
  • 定期更新 ESP-IDF:Espressif 会定期发布更新,包含新功能和修复。

参考资源

  • ESP-IDF 编程指南
  • ESP-IDF 示例项目

相关文章:

ubuntu22.04 桌面系统怎么搭建一个esp-idf的项目,搭建开发环境

详细介绍如何在 Ubuntu 22.04 桌面系统上搭建 ESP-IDF 的开发环境,并创建一个 ESP-IDF 项目。以下内容将涵盖从环境准备到项目创建和编译的所有步骤。 目录 环境准备 1.1 更新系统1.2 安装必要的工具和依赖项 安装 ESP-IDF 2.1 克隆 ESP-IDF 仓库2.2 运行安装脚本 …...

iOS Swift逆向——deMangle过程中的偏移计算

碰到好多函数最开始都会调用这个函数&#xff0c;xref了一下&#xff0c;发现有上万个xref。 __int64 __fastcall sub_1000B6ED0(__int64 *a1) {__int64 result; // x0result *a1;if ( result < 0 ){result swift_getTypeByMangledNameInContext((char *)a1 (int)result…...

国产大模型基础能力大比拼 - 计数:通义千文 vs 文心一言 vs 智谱 vs 讯飞-正经应用场景的 LLM 逻辑测试

在大语言模型&#xff08;LLM&#xff09;不断涌现的时代&#xff0c;如何评估这些国产大模型的逻辑推理能力&#xff0c;尤其是在处理基础计数问题上的表现&#xff0c;成为了一个备受关注的话题。随着越来越多的国产大模型进入市场&#xff0c;比较它们在不同任务中的表现尤为…...

YOLO11改进 | 注意力机制 | 正确的 Self-Attention 与 CNN 融合范式,性能速度全面提升【独家创新】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 卷积和自注意力是两种强大的表征学习技术…...

0基础学java之Day11

二维数组 静态二位数组 理解&#xff1a;二维数组中包含了多个一维数组 声明&#xff1a; 数据类型 变量名;--推荐 数据类型 变量名; //静态初始化1//String[][] names new String[][]{{"小红","小绿","小蓝"},{"小黄","小紫…...

python主流框架Django:ORM框架关联查询与管理器

目录 注意 使用前要调用之前的模型类 F对象 Q对象 聚合函数 排序 关联查询(连表查询) 修改 删除 查询集 QuerySet 注意 使用前要调用之前的模型类 F对象 之前的查询都是对象的属性与常量值比较&#xff0c;两个属性怎么比较呢&#xff1f; 答&#xff1a;使用 "F对象&quo…...

如何有效维护您的WordPress在线商店内容:提高客户参与度与转化率的实用技巧

在电子商务领域&#xff0c;内容为王。新鲜、相关且有吸引力的内容能显著提升客户参与度和转化率。本文将探讨如何有效更新和维护您的在线商店内容&#xff0c;确保客户始终获得最佳体验。 定期更新产品信息 产品描述 产品描述是吸引客户和促成销售的关键。定期检查并更新产…...

【Java】认识异常

1.异常概念与体系结构 1.1异常的概念 在我们日常开发中&#xff0c;代码都是尽可能完善&#xff0c;但是难免会出现一些奇奇怪怪的问题。而这些奇奇怪怪的问题可能很难通过代码去控制&#xff0c;比如格式不对会报错&#xff0c;网络不好也会报错等。 在Java中&#xff0c;将…...

20 Shell Script输入与输出

标出输入、标准输出、错误输出 一、程序的基本三个IO流 一&#xff09;文件描述符 ​ 任何程序在Linux系统中都有3个基本的文件描述符 ​ 比如: ​ cd/proc/$$/fd ​ 进入当前shell程序对于内核在文件系统的映射目录中: [rootlocalhost ~]# cd /proc/$$/fd [rootlocalhos…...

HCIP-HarmonyOS Application Developer 习题(十六)

&#xff08;判断&#xff09;1、HiLink通过分布式软总线的方式连接所有设备&#xff0c;强能力设备可对弱能力设备进行设备虚拟化&#xff0c;将弱设备当做本机设备直接调用。 答案&#xff1a;错误 分析&#xff1a;HiLink 主要针对的是应用开发者与第三方设备开发者&#xf…...

没有什么可以抵达乌托邦,包括AI

本文为《智人之上:从石器时代到AI时代的信息网络简史》书评 可以说,尤瓦尔赫拉利又一次让我们获得了理解人类文明的新视角。 这是他一直以来都在做的:构建理解人类文明史的新知识框架。从此前的《人类简史》《未来简史》《今日简史》,到今天的新书《智人之上》,他一直保…...

家庭事务管理系统|基于java和vue的家庭事务管理系统设计与实现(源码+数据库+文档)

家庭事务管理系统 目录 基于java和vue的家庭事务管理系统 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云…...

doris创建异步物化视图(加速数据低频变更的复杂实时计算)

异步物化视图&#xff0c;可以把那些每次实时计算非常耗时的&#xff0c;而需要计算的数据变更比较低频的这些计算创建对应的异步物化视图&#xff0c;当相关数据变化的时候触发异步任务去更新计算结果&#xff0c;或者定时计算也可以。例如该处示范为计算订单的订单标识&#…...

PhpSpreadsheet创建带复杂表头的excel数据

目录 一:背景 二&#xff1a;excel表头数据实现 三&#xff1a;excel渲染数据实现&#xff1a; 四&#xff1a;最终效果如下&#xff1a; 一:背景 最近需要统计一些数据&#xff0c;导出到excel&#xff0c;主要是一些区域的人员销售统计数据&#xff0c;涉及到复杂的表头和…...

BurpSuite渗透工具的简单使用

BurpSuite渗透工具 用Burp Suite修改请求 step1&#xff1a; 安装Burp Suite。官网链接&#xff1a;Burp Suite官网 step2&#xff1a; 设置代理 step3&#xff1a; 如果要拦截https请求&#xff0c;还需要在客户端安装证书 step4&#xff1a; 拦截到请求可以在Proxy ->…...

洞察云上风险,主机安全尽在掌握

在实战攻防演练中&#xff0c;主机一直是攻击方的最终目标。作为网络架构中的重要组成部分&#xff0c;主机包含了大量的敏感数据、关键服务和系统资源。同时主机拥有网络资源的访问权限&#xff0c;攻击者通过入侵主机获得权限&#xff0c;进而控制整个网络或系统。因此做好主…...

使用kimi编辑助手,开始搭建一个微信小程序!第一天

为什么开源&#xff1f;因为不开源&#xff0c;一个人开发小程序&#xff0c;一点突如其来的变故就会导致自己整体处于一个不舒服的状态&#xff0c;同时自己从0开始1开始搭建小程序&#xff0c;也是自己个体之间能力的验证&#xff01; 目前小程序版本&#xff1a;2.5.2 目前…...

【已解决】libev not found

学习韦东山老师的Linux应用开发实验班的JSON部分&#xff0c;在编译JSON包的过程中 报错命令&#xff1a; ./configure --hostarm-buildroot-linux-gnueabihf -prefix$PWD/tmp 错误信息&#xff1a; checking for libev support... checking for arm-buildroot-linux-gnue…...

qt QVariant详解

QVariant是Qt框架中一个功能强大的变体类&#xff0c;它提供了一种通用的方式来存储Qt对象及其他类的值&#xff0c;能够以类似于指针的方式存储任意类型的值。 一、 主要特性 通用性&#xff1a;QVariant可以存储几乎所有数据类型&#xff0c;包括基本数据类型&#xff08;如…...

再获殊荣!通付盾当选信息技术应用创新工作委员会技术活动单位称号

近日&#xff0c;通付盾凭借其在信息技术应用创新领域的卓越贡献和突出表现&#xff0c;荣获“信息技术应用创新工作委员会技术活动单位”称号。这一荣誉不仅是对通付盾在技术创新和信息安全领域努力的肯定&#xff0c;更是对其在推动国家信息技术应用创新发展中发挥重要作用的…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…...