使用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.重新启动后,再登录系统就可以了。
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
开发乐鑫芯片
官方文档
Get Started — ADF 音频应用开发框架 文档 (espressif.com)
esp-skainet: ESP-Skainet 是乐鑫推出的智能语音助手,目前支持唤醒词识别和命令词识别。 (gitee.com)
vscode sdk configuration editor //SDK 配置
idf.py menuconfig //菜单配置
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
主要包括两步:
- 编译:确定编译目标所需要的源文件
- 链接:确定链接的时候需要依赖的额外的库
下面以开源项目(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.
项目的构建任务为:
- 将math目录编译成静态库,命名为math
- 编译main.c为可执行文件demo,依赖math静态库
- 编译test目录下的测试程序,可以通过命令执行所有的测试
- 支持通过命令将编译产物安装及打包
工程使用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 "")
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)
*** 如果需要添加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
)
IDF使用C++组件开发
ESP32 IDF支持C与C++同时编译。
1.新建.cpp文件
2.修改CMakeLists.txt
file(GLOB_RECURSE SOURCES ./*.cpp
)
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 语言的函数,并保持链接规范的一致性。
生成Demo-----------*** hello_world_cxx ***