ESP32,使用gitee搭建 ESP-IDF 开发框架

ESP32便宜,开发方便,非常适合初学者用来学习,之前我自己写的开发环境可能不再适合,推荐下面这篇文章。

=====

关于如何搭建ESP32的开发环境,乐鑫官方给出了很详细的教程和文档,基本上跟着官方教程来操作,都可以顺利把ESP-IDF的开发环境搭建好,并且运行一个helloworld程序。

乐鑫官方提供的ESP-IDF框架搭建文档,参考以下链接:

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html

网上也有很多关于ESP32开发环境搭建的文章,我个人觉得写得比较好的是以下这两篇,文章已经包括了windows和Linux下的开发环境搭建。

https://blog.csdn.net/qq_36347513/article/details/115619605

https://hellobug.blog.csdn.net/article/details/108405073

乐鑫官方提供的文档,以及网上大部分ESP32环境搭建的文章,在搭建开发环境获取源码的时候,由于使用了国外知名的程序员交友平台github,往往会导致源码获取中断或失败,github访问失败是一些特别的原因导致的。

正因为这样,很多开发者在搭建开发环境上浪费了很多时间,甚至还没开始就想放弃。为了解决国内开发者从github上获取ESP相关仓库缓慢的问题,乐鑫提供了在gitee上获取ESP-IDF源码的方法。

在windows上搭建ESP-IDF开发环境的时候,可以使用乐鑫提供的ESP-IDF工具安装器,指定优先选择Espressif的下载服务器,上面提供的博客文章,已经有提及,本文主要是使用Linux命令行的方式搭建开发环境。

为什么使用Linux命令行搭建开发环境,主要是因为自由度高,虽然操作略复杂,但乐鑫官方很多资料和文档,都是基于Linux或windows命令行的方式开发的,因此,建议开发者学习一下如何使用命令行搭建ESP32的开发环境。

阅读本文需要有一定的Linux或windows命令行操作基础,需要掌握一定的git命令使用,以及具备一些脚本使用的基础知识。ESP32的开发环境搭建,均使用了git命令,Linux命令行,以及可执行脚本。

建议先阅读 ESP-IDF 编程指南快速入门 的相关章节,对开发环境搭建有一个基本的了解,并且已经完成第一步的安装准备工作,再执行本文的相关操作。

本文使用的操作系统是ubuntu18.04,操作目录是/opt/esp32,使用root用户进行操作,如果没有特别说明,操作路径均是相对路径,在执行命令的时候,重点注意命令的执行路径是相对路径还是绝对路径。

1、执行以下命令,在/opt目录下创建esp32文件夹,并修改文件夹的权限为可读可写,命令如下图所示。

cd /opt/

mkdir esp32

chmod 666 esp32/

ls -al

2、进入esp32目录,执行git clone 命令,获取ESP-IDF在gitee上托管的源码和工具,注意,这次的git clone仅仅是获取ESP-IDF的源码,还没有包含ESP-IDF的子模块,ESP-IDF的源码需要结合子模块才能使用,子模块在后面的步骤进行获取。

cd esp32/

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

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

3、在esp-gitee-tools工具包里面,提供了一个submodule-update.sh脚本,用来更新ESP-IDF框架的子模块,这个脚本主要是使用了gitee作为镜像源,更新ESP-IDF框架必要的子模块,避免了在github下载缓慢或出错的情况。

cd esp-gitee-tools/

export EGT_PATH=$(pwd)

cd ../esp-idf/

$EGT_PATH/submodule-update.sh

耐心等待一段时间后,如果网络没有问题的话,子模块一般都会更新完成,至此,整个ESP-IDF的源码及子模块已经下载完毕,如下图所示。

4、下载完ESP-IDF源码后,还需要下载和设置ESP相关的工具,比如编译器,调试器,Python包,等等。由于github下载缓慢,可以优先选用乐鑫的下载服务器进行github资源下载。

export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"

./install.sh

编译器、调试器和Python包这些工具,默认下载在/root/.espressif目录下,也可以通过修改环境变量来改变这个下载目录,但为了方便起见,不建议修改,如下图所示。

下载完成后,如下图所示。

5、工具包下载完成后,还需要设置环境变量,让操作终端知道当前的工具包位置,根据下载完成的提示,需要在esp-idf目录下,执行export.sh脚本,来完成环境变量的配置,如下图所示。

. ./export.sh

(注意,命令开始的“.”与export.sh脚本之间,有一个空格)

为了方便在任何终端使用配置好的环境变量,不用每次重新打开终端窗口都敲一堆指令去,可以为该脚本创建一个别名,在/root/.bashrc添加以下指令,重启终端后,就可以用get_idf指令来刷新环境变量了。

alias get_idf='. /opt/esp32/esp-idf/export.sh'

6、在ESP-IDF的目录下面,examples文件夹包含了一系列例程,我们可以使用examples文件夹里面的 get-started/helloworld工程,来验证开发环境是否搭建成功。复制helloworld工程到esp32目录,复制完成后,如下图所示。

cp examples/get-started/hello_world/ ../ -a

7、进入helloworld工程目录,设置目标芯片,使用menuconfig配置工程,对于helloworld示例,由于我使用的ESP32芯片是ESP32-S0WD,这是一款单核芯片,需要把ESP32芯片配置为单核模式,工程配置窗口如下图所示。

cd /opt/esp32/hello_world

idf.py set-target esp32

idf.py menuconfig

8、执行idf.py build构建和编译工程,这个命令可以编译helloworld应用程序和ESP-IDF所有组件,并且会生成bootloader、分区表和应用程序的二进制文件,编译成功后,如下图所示。

idf.py build

9、编译完成后,可以使用以下命令,将刚刚生成的二进制文件,烧录到开发板上,/dev/ttyUSB0是开发板在ubuntu18.04的串口端口号,需要根据实际情况进行设置,软件烧录成功后,可以在终端窗口观察到程序运行,打印输出helloworld。

idf.py -p /dev/ttyUSB0 flash monitor

10、至此,ESP-IDF开发环境已经搭建完成,在Linux环境下,可以使用vscode作为代码编辑工具,关于vscode的配置,网上已经有不少文章可以参考,这里不再重复描述。

-- END --

转自,如果有这方面开发要求,可以关注下面公众号,说是发哥朋友


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

嵌入式Linux

微信扫描二维码,关注我的公众号

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

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

相关文章

jQuery的ajax技术

编辑本博客 ajax异步的JavaScript和html load() 从服务器加载数据,并把返回的数据放入备选元素中。这里加载回来的数据可以只有一个p标签,无需head元素等 $("selector").load(url,data,callback) url:必选,规定加载的ur…

Python3——FTP(文件传输协议)

Python3——FTP(文件传输协议) 工作流程: 客户端连接远程主机的FTP服务器;客户端输入用户名密码;客户端进行各种文件传输和信息查询;客户端从FTP服务器退出。ftplib.FTP常用方法 login(user,passwd)登录 …

Linux设备树的传递以及kernel中对设备树的解析

当U-Boot将设备树加载到内存指定位置后,ARM内核的SoC以通用寄存器r2来传递dtb在内存中的地址。kernel获取到该地址后对dtb文件做进一步的处理。#设备树的传递当使用bootm加载kernel镜像时(bootz是对bootm的一种封装以及功能扩展,实质一样&…

切片基础slice

定义:slice表示一个拥有相同类型元素的可变长度的序列 slice有三个属性:指针,长度,容量 指针指向第一个可以从slice中访问的元素,这个元素并不一定是数组的第一个元素 注意: 1.一个底层数组可以对应多个sli…

常用shell命令

要复制整个目录,请使用 cp 命令的 -r 选项。例如,如果有一个名为 mydir 的目录,其中包含 myfile 和 newfile,则可以将该目录复制到一个名为 mydir2 的新目录。mydir2 还将包含 myfile 和 newfile 的副本。请使用以下命令&#xff…

Linux kernel之SMP初始化

01—SMP数据结构SMP的数据结构如下图所示,主要由2部分构成,通过两个宏定义CONFIG_SMP和CONFIG_HOT_PLUG来控制。当设置kernel支持SMP模式时,那么CONFIG_SMP选项是一定会打开的,因此第一部分是必须实现的内容。而第二部分是否需要实…

Python3——多线程之threading模块

Python3——多线程之threading模块 目录 Python3——多线程之threading模块 Threading模块的对象 Threading模块的Thread类 queue模块(线程间通信) Python 提供了多个模块来支持多线程编程,包括 thread、 threading 和 Queue 模块等。程…

BZOJ2216 [Poi2011]Lightning Conductor 【决策单调性dp】

题目链接 BZOJ2216 题解 学过高中数学都应知道,我们要求\(p\)的极值,参变分离为\[h_j sqrt{|i - j|} - h_i \le p\] 实际上就是求\(h_j sqrt{|i - j|} - h_i\)的最大值 就可以设\(f[i]\)表示对\(i\)最大的该式的值 绝对值通常要去掉,一般可…

笔记本 cpu 参数

选本必看--笔记本主流cpu参数大全现在本本的处理器种类真的太多了,绝对足够让人眼花缭乱的,各式各样的CPU核心、外频、缓存、接口、电压、制作工艺等等,多到让人疯狂,很少认能够对此了如执掌的。这次我们归纳了所有主流的本本处理…

MTK笔试1题~

这个题目是前几天一个好友分享给我的,但是因为时间原因没有及时写成文章。这是他参加MTK笔试的题目题目如下:网友提供的代码如下:#include "stdio.h"typedef struct n{int data;struct n* next;struct n* pre; }*pnode;int main(){…

console和windows子系统

https://blog.csdn.net/ilvu999/article/details/8050292 转载于:https://www.cnblogs.com/132818Creator/p/9210791.html

Python3 —— 逗号分隔值CSV

Python3 —— 逗号分隔值CSV 目录 Python3 —— 逗号分隔值CSV CSV 读写CSV文件 CSV 逗号分隔值( Comma-Separated Value, CSV)。与专有的二进制文件格式截然不同, CSV 通常用于在电子表格软件和纯文本之间交互数据。CSV 文件…

教你如何防止电脑插入u盘后自动运行

今天重装了系统,安装了驱动和各种软件,然后打完了补丁。在使用的过程中,当我插入U盘的时候发现是自动打开的,那么怎样防止这一个现象呢?思考片刻我想到了本地组策略,于是找了一下,结果还真有一个…

从单片机步入Linux之运行地址与加载地址

大家好,我是情报小哥!本文为【单片机步入嵌入式Linux】系列文章的第二篇,主要是跟大家讲解一下链接过程中几个地址的区分与理解~01单片机存储分配

VC++常见错误

1、fatal error C1010: unexpected end of file while looking for precompiled header directive。寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h") 2、fatal error C1083: Cannot open include file: R………

iview插件

1.图表居中 columns1: [{title: 序号,key: number,align: center, //水平居中}, } 转载于:https://www.cnblogs.com/SunShineM/p/9217335.html

Python3——JSON

Python3——JSON 目录 Python3——JSON Python和JSON数据类型对比 dumps()/loads() JSON是JavaScript的子集,专门用于指定结构化的数据。JSON 是轻量级的数据交换方式,易于阅读和编写。 Python和JSON数据类型对比 dict object list,tuple array …

不要错过秋招

标题就是重点~这是今天跟一个同学聊天说到的问题,之前我不是直播了嘛,我在直播里面说,如果大家有求职面试相关的事情,可以私下找我,这位同学还是很积极,今天就找我聊了。他的简历整体上问题不大&#xff0c…

VMware HA与VMotion的部署与搭建

VMware HA与VMotion的部署与搭建一.VMware HA 由于公司虚拟化的不断使用,不允许出现ESX Server的单点故障,因此考虑用VMware 自己的解决方案,及VMware的群集,对于群集的相关介绍,这里就不再叙述了&#…

suse glibcxx版本过高问题

实际开发中发现,suse11虽然glibc版本很低,只有2.11.3,但是glibcxx版本很高,达到了3.4.19。这里我需要降低glibcxx版本。所谓glibcxx版本,即libstdc.so.6的版本问题。 我找了centos版的libstdc.so.6.0.13,替…