【ESP32】Ubuntu2004搭建espressif

文章目录

  • 环境
  • 流程概述
  • 一、安装依赖
  • 二、下载SDK、管理工具
    • 1. 管理工具下载
    • 2. 下载SDK
  • 三、安装toolchain、更新子库、配置SDK环境
    • 1. 替换下载源,安装虚拟环境等等
    • 2. 更新子库
    • 3. 配置SDK环境
  • 四、复制例程验证环境
  • 问题汇总
    • 1. CMake 版本低
    • 2. 编译cmake源码时提示无g++编译器
  • 附录

环境

ubuntu2004
SDK目录:~/SDK/esp/esp-idf

官方参考给的文档是 ~/esp/esp-idf

流程概述

  1. 安装依赖
  2. 下载SDK
  3. 下载管理工具
    2.1 修改下载源
    2.2 下载、管理toolchain
    2.3 下载、管理子库
    2.4 etc
  4. 复制工程验证环境

一、安装依赖

二、下载SDK、管理工具

1. 管理工具下载

repo:https://gitee.com/EspressifSystems/esp-gitee-tools.git

mkdir -p ~/SDK/esp
cd ~/SDK
git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git

2. 下载SDK

repo:https://gitee.com/EspressifSystems/esp-idf.git

cd ~/SDK
git clone https://gitee.com/EspressifSystems/esp-idf.git、
mv esp-idf/ esp/

要特定分支就切一下版本

三、安装toolchain、更新子库、配置SDK环境

1. 替换下载源,安装虚拟环境等等

cd ~/SDK/esp-gitee-tools
export EGT_PATH=$(pwd)
echo $EGT_PATHcd ~/SDK/esp/esp-idf
$EGT_PATH/install.sh

参考log如下:

Detecting Python interpreter
Checking "python3" ...
Checking "python3.8" ...
Python 3.8.0
"python3.8" has been detected
Installing ESP-IDF tools
Updating /home/liam/.espressif/idf-env.json
Selected targets are: esp32c3, esp32c5, esp32s3, esp32, esp32h2, esp32c2, esp32s2, esp32p4, esp32c6
Current system platform: linux-amd64
Installing tools: xtensa-esp-elf-gdb, riscv32-esp-elf-gdb, xtensa-esp-elf, riscv32-esp-elf, esp32ulp-elf, openocd-esp32, esp-rom-elfs
Installing xtensa-esp-elf-gdb@12.1_20231023
Downloading https://dl.espressif.com/github_assets/espressif/binutils-gdb/releases/download/esp-gdb-v12.1_20231023/xtensa-esp-elf-gdb-12.1_20231023-x86_64-linux-gnu.tar.gz
Destination: /home/liam/.espressif/dist/xtensa-esp-elf-gdb-12.1_20231023-x86_64-linux-gnu.tar.gz.tmp
Done
Extracting /home/liam/.espressif/dist/xtensa-esp-elf-gdb-12.1_20231023-x86_64-linux-gnu.tar.gz to /home/liam/.espressif/tools/xtensa-esp-elf-gdb/12.1_20231023
Installing riscv32-esp-elf-gdb@12.1_20231023
Downloading https://dl.espressif.com/github_assets/espressif/binutils-gdb/releases/download/esp-gdb-v12.1_20231023/riscv32-esp-elf-gdb-12.1_20231023-x86_64-linux-gnu.tar.gz
Destination: /home/liam/.espressif/dist/riscv32-esp-elf-gdb-12.1_20231023-x86_64-linux-gnu.tar.gz.tmp
74%
...
Creating a new Python environment in /home/liam/.espressif/python_env/idf5.3_py3.8_env
Upgrading pip and setuptools...
Collecting pipDownloading https://files.pythonhosted.org/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl (2.1MB)32% |██████████▎                     | 675kB 7.4kB/s eta 0:03:13
...

等待一会儿,让他自己下自己装


2. 更新子库

$EGT_PATH/submodule-update.sh

参考log:

Submodule 'components/bt/controller/lib_esp32c3_family' (https://gitee.com/espressif/esp32c3-bt-lib.git) registered for path 'components/bt/controller/lib_esp32c3_family'
Submodule 'components/bt/controller/lib_esp32c6/esp32c6-bt-lib' (https://gitee.com/espressif/esp32c6-bt-lib.git) registered for path 'components/bt/controller/lib_esp32c6/esp32c6-bt-lib'
Submodule 'components/bt/controller/lib_esp32h2/esp32h2-bt-lib' (https://gitee.com/espressif/esp32h2-bt-lib.git) registered for path 'components/bt/controller/lib_esp32h2/esp32h2-bt-lib'
Submodule 'components/bt/esp_ble_mesh/lib/lib' (https://gitee.com/espressif/esp-ble-mesh-lib.git) registered for path 'components/bt/esp_ble_mesh/lib/lib'
Submodule 'components/bt/host/nimble/nimble' (https://gitee.com/espressif/esp-nimble.git) registered for path 'components/bt/host/nimble/nimble'
Submodule 'components/cmock/CMock' (https://gitee.com/ThrowTheSwitch/CMock.git) registered for path 'components/cmock/CMock'
...
Cloning into '/home/liam/SDK/esp/esp-idf/components/bt/controller/lib_esp32h2/esp32h2-bt-lib'...
remote: Enumerating objects: 100, done.
remote: Counting objects: 100% (63/63), done.
remote: Compressing objects: 100% (63/63), done.
remote: Total 100 (delta 38), reused 0 (delta 0), pack-reused 37
Receiving objects: 100% (100/100), 6.37 MiB | 502.00 KiB/s, done.
Resolving deltas: 100% (47/47), done.
Cloning into '/home/liam/SDK/esp/esp-idf/components/bt/esp_ble_mesh/lib/lib'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 24 (delta 2), reused 24 (delta 2), pack-reused 0
...

3. 配置SDK环境

每次新shell中更新环境变量:在shell rc中价格别称,添加esp-ief/export.sh环境

vi ~/.bashrc
# Add : 
alias get_idf='. $HOME/SDK/esp/esp-idf/export.sh'

更新shell环境,验证esp环境配置

source ~/.bashrc
get_idf

参考log:

Setting IDF_PATH to 'xxxxxxx/SDK/esp/esp-idf'
Detecting the Python interpreter
Checking "python3" ...
Checking "python3.8" ...
Python 3.8.0
"python3.8" has been detected
Checking Python compatibility
Checking other ESP-IDF version.
Adding ESP-IDF tools to PATH...
Checking if Python packages are up to date...
...
Added the following directories to PATH:
...
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:idf.py build

四、复制例程验证环境

例程:~/SDK/esp/esp-idf/examples/get-started/hello_world

创个文件夹,把例程复制过来,更新下SDK环境,开始编译

mkdir -p ~/tmp/esp
cp -rf ~/SDK/esp/esp-idf/examples/get-started/hello_world  ~/tmp/esp/
cd ~/tmp/esp/hello_world/get_idf
idf.py build
//idf.py set-target esp32s3   // 看个人需求

编译不报错即可。

参考log:

...
[100%] Built target hello_world.elf
[100%] Generating binary image from built executable
esptool.py v4.7.0
Creating esp32 image...
Merged 2 ELF sections
Successfully created esp32 image.
Generated /xxxxx/tmp/hello_world/build/hello_world.bin
[100%] Built target gen_project_binary
hello_world.bin binary size 0x2aa40 bytes. Smallest app partition is 0x100000 bytes. 0xd55c0 bytes (83%) free.
[100%] Built target app_check_size
[100%] Built target appProject build complete. To flash, run this command:
/xxx/.espressif/python_env/idf5.1_py3.8_env/bin/python ../../SDK/esp/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'
xxx@ubuntu:~/tmp/hello_world$

问题汇总

1. CMake 版本低

设置编译目标时,提示cmake版本低
Make 3.16 or higher is required. You are running version 3.10.2

fix:更新cmake 版本

下载源码、编译、安装、替换链接、校验
URL: https://cmake.org/files/
下载文件:https://cmake.org/files/v3.28/cmake-3.28.1.tar.gz
解压、编译、安装

cd ~/tmp/
wget https://cmake.org/files/v3.22/cmake-3.28.1.tar.gz  // 看个人需求变更版本
tar -zxvf cmake-3.28.1.tar.gz
cd cmake-3.28.1/
# chmod 777 configure
./configure			// 需要g++编译器,注意安装
make
sudo make install
# 更新链接
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force

校验版本

cmake --version

2. 编译cmake源码时提示无g++编译器

如题
fix:安装g++
sudo apt install g++

附录

  1. 参考:https://gitee.com/EspressifSystems/esp-gitee-tools
  2. 参考:https://gitee.com/EspressifSystems/esp-idf

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

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

相关文章

day25 回溯part2

216. 组合总和 III 中等 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 class Solution {List&…

学习JavaEE的日子 Day19 常用类

Day19 1.包装类的使用 理解:8种基本数据类型对应类 出现原因: ​ Java为纯面向对象语言(万物皆对象),8种基本数据类型不能new对象, ​ 就破坏Java为纯面向对应语言的特征,Java又为8种基本数据类型分别 ​ 匹配了对应的…

ubuntu 增加 swap 空间大小

之前装系统的时候,使用了默认的分区方案,结果只有 2GB 的 swap 分区,机器只有这么点内存,平时使用经常出现内存不够用,又没有分配足够的交换空间,市场感觉到拮据,有必要增加一些 swap 空间大小。…

python算法与数据结构---滑动窗口双指针

学习目标 了解滑动窗口的基本原理;学会用使用python语言解答滑动窗口经典题目;了解双指针的基本原理;学会使用python语言解答双指针经典题目; 滑动窗口 209. 长度最小的子数组 https://leetcode.cn/problems/minimum-size-sub…

Unity 中介者模式 (实例详解)

文章目录 简介实例1:玩家与UI交互实例2:战斗模块中的攻击事件协调实例3:游戏场景中的事件广播实例4:模块间通信 - 地图导航与角色移动实例5:UI模块间同步 - 菜单切换与选项状态 简介 在Unity游戏开发中,中…

初识K8S(Kubernetes )

一、概述 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。(官网) Kuberne…

服务器自启动服务总结

使用实验室的服务器会有一些需要自动启动和挂载的设置 1、磁盘开机自动挂载 挂载方法 2、自动开/关机设置 sudo vim /etc/crontab 添加如下内容,表示每天05:55开始 等待120分钟后关机: 55 05 * * * root /sbin/shutdown -r 120 执行如下指令&…

Go语言基础之接口

接口类型 一个接口类型就是一组方法的集合,它规定了需要实现的所有方法。 接口的定义 每个接口类型由任意个方法签名组成,接口的定义格式如下: type 接口类型名 interface{方法名1( 参数列表1 ) 返回值列表1方法名2( 参数列表2 ) 返回值列…

【开源】基于JAVA+Vue+SpringBoot的智慧家政系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统&#xff0…

Qt项目文件以及对象树

"在哪里走散,你都会找到我~" 前篇,我们仅仅对Qt创建了第一个简单的项目。相比于使用其他IDE创建工程项目,Qt会为自动创建诸如:.pro、.h\.cpp、.iu等文件,这些文件到底是什么?我们在使用Qt时 应该…

聊聊Git合并和变基

一、 Git Merge 合并策略 1.1 Fast-Forward Merge&#xff08;快进式合并&#xff09; //在分支1下操作&#xff0c;会将分支1合并到分支2中 git merge <分支2>最简单的合并算法&#xff0c;它是在一条不分叉的两个分支之间进行合并。快进式合并是默认的合并行为&#…

mysql注入联合查询

环境搭建 下载复现漏洞的包 下载小皮面板 将下载好的文件解压在小皮面板的phpstudy_pro\WWW路径下 将这个文件phpstudy_pro\WWW\sqli-labs-php7-master\sql-connections\db-creds.inc 中的密码更改为小皮面板中的密码 选择php版本 在小皮中启动nginx和数据库 使用环回地址访…

JavaScript 学习笔记(JS进阶 Day4)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. JavaScript 学习笔记&#xff08;Day1&#xff09; 2. JavaSc…

Qt应用软件【数据篇】数据校验crc8、crc16、crc32

文章目录 1.数据校验的重要性2.为什么数据校验如此重要3.CRC校验的基本原理4.多项式介绍5.数据校验长度6.crc8 crc16 crc32校验码的使用场景和特点7.crc计算方式函数封装8.crc 查表方式 1.数据校验的重要性 在Qt上位机开发中&#xff0c;数据校验是一个核心环节&#xff0c;尤其…

NodeJs环境安装与配置

最近电脑重装了系统&#xff0c;开发环境啥的都得重装&#xff0c;顺便记录下 nodeJs 的安装与配置&#xff0c;方便需要的同学查看&#xff0c;也方便自己以后查找。 安装 下载地址&#xff1a;https://nodejs.cn/download/ 根据需要选择自己环境需要的下载即可&#xff0c;…

【cdh】hive执行SQL提示缺少3.0.0-cdh6.3.2-mr-framework.tar.gz文件

问题&#xff1a;执行SQL报错提示缺少文件 异常信息如下 在hdfs上查看的时候连文件夹都没有&#xff0c;所以这个异常会抛出&#xff0c;但是我是基于CDH搭建的&#xff0c;可以直接基于下面操作 执行完成之后查看HDFS文件 重新执行SQL发现可以正常执行了

web前端项目-实现录音功能【附源码】

录音功能 运行效果&#xff1a;本项目可实现录音软件的录音、存储、播放等功能 HTML源码&#xff1a; &#xff08;1&#xff09;index.html&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/h…

【BUG】联想Y7000电池电量为0且无法充电解决方案汇总

因为最近火灾很多&#xff0c;所以昨天夜晚睡觉的时候把插线板电源关掉了&#xff0c;电脑也关机了。 各位一定要注意用电安全&#xff0c;网上的那些事情看着真的很难受qvq。 第二天早上起床的时候一看发现电脑直接没电了&#xff0c;插上电源后也是显示 你一定要冲进去啊(ू˃…

springboot外出务工人员信息管理系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合&#xff0c;利用java技术建设疫情防控期间某村外出务工人员信息管理系统&#xff0c;实现疫情防控期间某村外出务工人员信息的信息化。则对于进一步提高疫情防控期间某村外…

学习Vue3的defineProps方法

学习Vue3的defineProps方法 在Vue 3中&#xff0c;defineProps方法是一个重要的API&#xff0c;用于定义组件的Props属性。通过defineProps&#xff0c;我们能够更加灵活地声明和使用组件的属性&#xff0c;同时享受到类型检查和智能提示的好处。 1. 基本用法 defineProps方…