当前位置:   article > 正文

使用Ubuntu开发esp32-基于vscode IDF-V5.1_vscode idf esp32 ubuntu

vscode idf esp32 ubuntu

使用Ubuntu开发esp32-基于vscode IDF-v5.1

VMware 安装虚拟机

见STM32MP1嵌入式Linux驱动开发指南V1.1.pdf

修改终端名称

一文教你快速修改ubuntu终端显示的主机名和用户名 - 小麦大叔 - 博客园 (cnblogs.com)

在文件末尾添加PS1....

sudo vi ~/.bashrc

PS1='\[\e]0;#: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]#\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'

sudo source ~/.bashrc

vim  使用命令  :i  编辑  dd 删除当前页  :wq保存并退出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

安装vscode

如何在 Ubuntu 20.04 上安装 Visual Studio Code - 知乎 (zhihu.com)

sudo snap install --classic code
  • 1

配置esp32安装环境

【乐鑫教程】|使用 VS Code 快速搭建 ESP-IDF 开发环境 (Windows、Linux、MacOS)_哔哩哔哩_bilibili

[(8条消息) ESP32开发(三):搭建Linux开发环境–VSCode操作_esp32 linux vscode_何事误红尘的博客-CSDN博客](https://blog.csdn.net/u014448875/article/details/125162697?ops_request_misc=%7B%22request%5Fid%22%3A%22168853869316782427425573%22%2C%22scm%22%3A%2220140713.130102334…%22%7D&request_id=168853869316782427425573&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-125162697-null-null.142v88control_2,239v2insert_chatgpt&utm_term=esp32 vscode linux&spm=1018.2226.3001.4187)

安装依赖环境(官方文件)

sudo apt-get 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
  • 1

vscode 安装 ESPRESSIF

F1进入esp-idf extension

请添加图片描述

请添加图片描述

安装pip 与 python3-venv

sudo apt install python3-pip
sudo apt install python3-venv

出现WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) 问题需要切换pip镜像源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.index-url https://pypi.douban.com/simple/
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

安装完成
请添加图片描述

使用vscode创建例程

ESP-IDF:Show Examples Projects
选择例程,Create project using example hello_world
设置COM口 
linux 查看设备管理dev
cd /dev 
ls ttyS*   --ttyS0  
ttyS0是计算机串行接口 
ttyACM0是USB通信设备CDC   
ttyACM0就是COM1  ttyACM0就是COM2以此类推
下载提示“Pression denied”属于权限问题,原因是用户无dev权限。
    
提示权限不够,是因为用户没有/dev/tty 的访问权限,只需将用户添加到dialout组就可以解决权限不够的问题。
解决方法如下:
1.由于tty属于“dialout”组,比如用户名是qilin,
   用命令查看用户所属于的组别
   groups qilin
2.如果没有隶属“dialout”,则把该用户加入进去
   sudo gpasswd --add qinlin dialout
3.重新启动后,再登录系统就可以了。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

VSCode 解决头文件红色波浪线

VSCode解决头文件有红色波浪线_vscode头文件红色波浪线_泠山的博客-CSDN博客

F1 —>>> ESP-IDF:Add vscode configuration folder

安装VMware Tools

虚拟机->重新安装vmtools

tar -zxvf VMwareTools-10.3.22-15902021.tar.gz 
sudo ./vmware-install.pl 
安装时注意查看提示信息,否则可能安装失败,安装成功会提示,Enjoy.
完成后就可以对文件进行复制粘贴

创建共享文件夹
查看虚拟文件夹
vmware-hgfsclient

如果出现vmware打开异常,重新删除安装文件,然后安装vmware tools
cd /usr/lib
sudo rm -r vmware-tools
cd /etc
sudo rm -r vmware-tools
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

开发乐鑫芯片

乐鑫开源 - Gitee.com

官方文档

Get Started — ADF 音频应用开发框架 文档 (espressif.com)

esp-skainet: ESP-Skainet 是乐鑫推出的智能语音助手,目前支持唤醒词识别和命令词识别。 (gitee.com)

vscode   sdk configuration editor    //SDK 配置

idf.py menuconfig                    //菜单配置
  • 1
  • 2
  • 3

ESP-IDF介绍

工程结构介绍

(16条消息) ESP32 之 ESP-IDF 教学(五)——IDF工程项结构_esp idf_Augtons正(单片机)的博客-CSDN博客

博主其他文章写得也不错。

路径包含介绍-Cmake-list管理文件(基础应用)可参考lvgl官方库CM编写方法

ESP32-IDF中cmake文件管理(添加头文件 C文件 组件的方法)_哔哩哔哩_bilibili

CMake应用:CMakeLists.txt完全指南 - 知乎 (zhihu.com)

一般来说,编译目标(target)的类型一般有静态库、动态库和可执行文件。 这时编写CMakeLists.txt主要包括两步:

  1. 编译:确定编译目标所需要的源文件
  2. 链接:确定链接的时候需要依赖的额外的库

下面以开源项目(cmake-template)来演示。项目的目录结构如下:

./cmake-template
├── CMakeLists.txt
├── src
│   └── c
│       ├── cmake_template_version.h
│       ├── cmake_template_version.h.in
│       ├── main.c
│       └── math
│           ├── add.c
│           ├── add.h
│           ├── minus.c
│           └── minus.h
└── test
    └── c
        ├── test_add.c
        └── test_minus.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

项目的构建任务为:

  1. 将math目录编译成静态库,命名为math
  2. 编译main.c为可执行文件demo,依赖math静态库
  3. 编译test目录下的测试程序,可以通过命令执行所有的测试
  4. 支持通过命令将编译产物安装及打包

工程使用idf hello word 模板

目录如下:

CMakeLists.txt (1)

main(FILE)

​ ----------CMakeList.txt (2)

​ ----------hello_world_main.c

pytest_hello_world.py

README.md

sdkconfig.ci


CMakeLists.txt (1)

idf_component_register(SRCS "hello_world_main.c"
               				 INCLUDE_DIRS "")
  • 1
  • 2

CMakeLists.txt (2)

# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)     //添加了IDF环境路径下当前工程全部CMakeList.txt文件
project(hello_world)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*** 如果需要添加compoents ***

需要再目录中添加组件的CMakeList.txt

compoents

​ ----------CMakeList.txt

​ ----------component.mk

​ ----------test1.c

​ ----------test1.h

​ ----------filename(file)

CMakeList.txt 写法与解释

(16条消息) ESP32-添加多目录的自定义组件_idf_component_register_NULL_1969的博客-CSDN博客

file(GLOB_RECURSE SOURCES 		./*.c      			#包含当前文件夹路径下的C文件 ./*.cpp亦可 如同时包含.c和.cpp需要都包含入
								./*.cpp
								./filename/*.c		#包含当前文件夹路径下filename下的C文件,如没有此文件可以不需要此包含路径
								) 
#ChatGPT解释:								
# file(GLOB_RECURSE SOURCES ./*.c) 是一个 CMake 命令,用于获取指定目录下所有以 .c结尾的文件,并将它们保存在 SOURCES 变量中。
# idf_component_register 函数中的 SRCS 参数,以便注册这些源文件为组件的一部分。

idf_component_register(SRCS	${SOURCES}
                   INCLUDE_DIRS 
								.     				#找到当前文件夹(上述)路径的头文件
								./filename 			#找到当前文件夹路径下filename下的头文件,如没有此文件可以不包含此路径
                    REQUIRES    filename			#组件之间相关的调用关系,如有依赖关系填写需要包含的文件名,没有则为空。否则报错“未找到头文件”
					REQUIRES    filename1		                       
                    			)				

可自定义文件名(不建议,官方推荐默认COMPONENTS文件夹)
在(1)CMakeList.txt中添加:
set(EXTRA_COMPONENT_DIRS
./filename
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

IDF使用C++组件开发

ESP32 IDF支持C与C++同时编译。

1.新建.cpp文件

2.修改CMakeLists.txt

file(GLOB_RECURSE SOURCES 		./*.cpp		
                        ) 
  • 1
  • 2

3.在有使用C++函数的文件中使用以下函数可以使C语言与C++语言无缝兼容

#ifdef __cplusplus
extern "C" {
#endif

// 在此处放置 C 语言的函数声明和其他代码

#ifdef __cplusplus
}  // 注意此处只有一个 '}'
#endif


或者 extern "C" xxxfunc(void){};

#ChartGPT解释:
在 C++ 代码中使用 #ifdef __cplusplus 和 extern "C" 的作用是为了支持 C 与 C++ 之间的交互和兼容性。
    
当你在 C++ 环境中使用 C 语言的代码时,通常需要考虑 C++ 的名称修饰(name mangling)规则以及函数的链接规范。这是因为 C++ 使用了名称修饰来支持函数重载和命名空间等特性,并且 C++ 和 C 语言有不同的链接规范。
    
#ifdef __cplusplus 是一个预处理指令,用于检查是否处于 C++ 编译环境中。如果是,就会执行指令块内的代码。

extern "C" 是一个语言链接规范的指令,用于指定包含在其中的代码应使用 C 链接规范,而不是 C++ 的名称修饰规范。这样可以确保 C++ 编译器按照 C 的链接规范处理函数名称,以便正确链接 C 语言的函数。

通过将 C 语言的函数声明和其他相关代码放置在 #ifdef __cplusplus 和 extern "C" 块中,你可以在 C++ 代码中使用 C 语言的函数,并保持链接规范的一致性。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

生成Demo-----------*** hello_world_cxx ***

移植lvgl

ESP32-IDF从helloword工程移植lvgl(第一节)_哔哩哔哩_bilibilis 这是idf 4.4版本 lvgl-8.3版本不适合本次移植

本次移植成功主要参考一下两个视频

esp-idf V5.0移植lvgl v8.3详细完整过程bilibili 这是idf 5.0版本 lvgl-8.3可以作为主要参考

基于espidf移植和使用lvgl_哔哩哔哩_bilibili

本次以及基于ESP-IDF v5.1-dirty,lvgl-8.3版本移植
新建一个idf hello world工程
新建文件夹 components
下载lvgl源码
git clone https://github.com/lvgl/lvgl.git
下载适配esp32的lvgl驱动
git clone https://github.com/lvgl/lvgl_esp32_drivers.git

将lvgl -->>  
	lv_conf_template.h复制到 ../components/lvgl/src/lv_conf.h   //注意需要重命名去掉template,进入使能文件,if 0 -->> if 1
将lvgl -->>
	example -->>
		porting -->> 文件复制到lvgl同级目录,新建文件porting。本次例程仅使用lv_port_disp.c/h,进入使能文件,if 0 -->> if 1
完成后目录为
components -->>
	lvgl
	lvgl_esp32_drivers
	porting -->>
		lv_conf.h
		lv_port_disp.c
		lv_port_disp.h

/* clang-format off */
#if 1 /*Set it to "1" to enable content*/ 将0设置为1
    
在lvgl_helpers.h 中添加屏幕尺寸
本次移植未报错SPI_HOST_MAX问题,idf v4.4可能会出问题
// #ifndef SPI_HOST_MAX
// #define SPI_HOST_MAX 3
// #endif // !SPI_HOST_MAX
    
#define LV_VER_RES_MAX 240
#define LV_HOR_RES_MAX 240

如果报错无法找到 portTICK_PERIOD_MS
打开sdk configuration editor -->> 
    	FAT filesystem support -->>
    		FreeRTOS			 -->>
    			勾选 configENABLE_BACKWARD_COMPATIBILITY    			

需要在lvgl_esp32_drivers -->> CMakeLists.txt中修改编译路径如下:
idf_component_register(SRCS ${SOURCES}
                       INCLUDE_DIRS ${LVGL_INCLUDE_DIRS}
                       REQUIRES lvgl
                       REQUIRES driver
                       REQUIRES esp_rom)
如果报错头文件包含问题需要添加头文件路径:里面包含了#define SIG_GPIO_OUT_IDX256
在esp_lcd_backlight.c	中添加头文件    #include "soc/gpio_sig_map.h"   

gpio_matrix_out         -->>		esp_rom_gpio_connect_out_signal    
gpio_pad_select_gpio    -->>  	    esp_rom_gpio_pad_select_gpio

file main
    CMakeLists.txt 
    	修改为:
file(GLOB MUSIC_ASSETS_FILES "../components/lvgl/demos/music/assets/*.c")  //意思是查找文件中的全部文件并且包含进来。也可以使用下面的方式包含编译文件

idf_component_register(SRCS "hello_world_main.c"
                    "../components/lvgl/demos/music/lv_demo_music.c"
                    "../components/lvgl/demos/music/lv_demo_music_list.c"
                    "../components/lvgl/demos/music/lv_demo_music_main.c"
                    ${MUSIC_ASSETS_FILES}
                    INCLUDE_DIRS "")

然后打开sdk configuration editor ,vscode下方齿轮 或者 idf.py menuconfig
设置controller model   当前使用ST7789
修改控制引脚,查看原理图
component config 取消 Uncheck this to use custom lv_conf.h

打开Font
勾选√  Enable Montserrat 10
勾选√	 Enable Montserrat 12
勾选√  Enable Montserrat 14
勾选√  Enable Montserrat 16
勾选√  Enable Montserrat 18

搜索swap
勾选√  Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI).

勾选√  Invert colors in display

如果找不到定时器启动和err返回值,需要在mian.c中添加头文件
#include "esp_err.h"
#include "esp_timer.h"

lvgl_esp32_drivers -->>
	lvgl_helpers.c
报错DMA channel 错误只能使用AUTO DMA channel
修改为:esp_err_t ret = spi_bus_initialize(host, &buscfg, (spi_dma_chan_t)SPI_DMA_CH_AUTO);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

请添加图片描述

 移植完成,生成工程hello_lvgl_demo
  • 1

测试WiFi连接速率使用iperf例程

F1新建demo工程WIFI -->> "iperf"
需要安装iperf
sudo apt-get install iperf  //默认Version2
查找电脑IP
ip a   //   ip addr show
运行iperf
iperf -s -i -3

windows 下运行
当前目录下进入cmd,同linux系统。 

终端
sta WIFI账号 密码
iperf -c IP -i 3 -t 60
################################################
iperf> sta TP-JDSW-2.4G jdsw0407
I (16498) cmd_wifi: sta connecting to 'TP-JDSW-2.4G'
I (19958) esp_netif_handlers: sta ip: 192.168.3.108, mask: 255.255.255.0, gw: 192.168.3.1
iperf> iperf -c 192.168.3.95/192.168.3.203 -i 3 -t 60
I (44505) cmd_wifi: mode=tcp-client sip=192.168.3.108:5001,             dip=192.168.3.95:5001,             interval=3, time=60
I (44519) iperf: Successfully connected

        Interval Bandwidth
iperf>    0-   3 sec       6.17 Mbits/sec
   3-   6 sec       7.62 Mbits/sec
   6-   9 sec       3.54 Mbits/sec
   9-  12 sec       4.12 Mbits/sec
  12-  15 sec       2.67 Mbits/sec
  15-  18 sec       5.21 Mbits/sec
  18-  21 sec       5.42 Mbits/sec
  21-  24 sec       5.54 Mbits/sec
  24-  27 sec       9.67 Mbits/sec
  27-  30 sec       7.21 Mbits/sec
  30-  33 sec       6.29 Mbits/sec
  33-  36 sec       10.04 Mbits/sec
  36-  39 sec       11.04 Mbits/sec
  39-  42 sec       6.62 Mbits/sec
  42-  45 sec       4.54 Mbits/sec
  45-  48 sec       5.67 Mbits/sec
  48-  51 sec       5.17 Mbits/sec
  51-  54 sec       10.42 Mbits/sec
  54-  57 sec       11.42 Mbits/sec
  57-  60 sec       11.29 Mbits/sec
   0-  60 sec       6.98 Mbits/sec
###################################################
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

ESP32S3 蓝牙基于GATT

这个博主内容比较详细。

ESP32-C3 学习测试 蓝牙 篇(一、认识 ESP-IDF 的蓝牙框架、简单的了解蓝牙协议栈)_esp32蓝牙协议_矜辰所致的博客-CSDN博客

编译指令

printf(" Firmware compile time:%s %s\n", __DATE__, __TIME__);  //打印编译时间
  • 1

10.42 Mbits/sec
54- 57 sec 11.42 Mbits/sec
57- 60 sec 11.29 Mbits/sec
0- 60 sec 6.98 Mbits/sec
###################################################


## ESP32S3 蓝牙基于GATT

这个博主内容比较详细。

[ESP32-C3 学习测试 蓝牙 篇(一、认识 ESP-IDF 的蓝牙框架、简单的了解蓝牙协议栈)_esp32蓝牙协议_矜辰所致的博客-CSDN博客](https://blog.csdn.net/weixin_42328389/article/details/123427950?spm=1001.2014.3001.5502)





## 编译指令

```c
printf(" Firmware compile time:%s %s\n", __DATE__, __TIME__);  //打印编译时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/98876
推荐阅读
相关标签
  

闽ICP备14008679号