ESP32-C3开发环境搭建(基于ESP-IDF插件)和解决串口占用导致程序下载失败的问题

部署运行你感兴趣的模型镜像

前言

ESP32-C3软件开发环境的搭建一言难尽………………折腾了足足2天之久,好在最终不负有心人。
(NOTE:作者的硬件环境是带USB转串口芯片的合宙ESP32-C3经典款,不是简约款。)
在这里插入图片描述
经典款和简约款的区别,请参考合宙esp32-c3的wiki:https://wiki.luatos.com/chips/esp32c3/index.html,说明如下图所示,
在这里插入图片描述

作者结合以上esp32-c3 wiki的“特别注意”、以及经典款和简约款的原理图,作了如下更细的理解,
经典款带有USB转UART的CH343P芯片,其Type-C口先通过CH343P芯片,再连接到ESP32-C3的UART0_TXD和UART0_RXD引脚。通过CH343P芯片实现【下载程序和监视串口】的功能,对应的硬件实现原理图如下:
在这里插入图片描述

而简约款没有CH343P芯片,其Type-C口直接连接到ESP32-C3的USB_D -(GPIO18)和USB_D +(GPIO19)引脚。通过ESP32-C3内置USB_CDC虚拟出的串口实现【下载程序和监视串口】的功能,对应的硬件实现原理图如下:
在这里插入图片描述

)

首先先说ESP32-C3环境下载遇到的问题,一开始使用VSCode在线下载ESP-IDF资源包,卡在了最后的Python虚拟环境安装,安装卸载了好几次还是失败!!!第二个问题就是通过串口load程序失败的问题!!!。
如果你出现了跟我一样的问题,那就跟随我下面的步骤来解决:

一、网络连接选择

我在自己笔记本电脑连接2.4G/5G-WiFi一步就安装成功了,但是台式电脑用的网线连接的网络方式下载,怎么样都不成功,所以我就禁止了台式电脑的网线连接,方法是:依次右键打开电脑桌面的网络的“属性”——>出现“网络共享中心”的窗口——>点击“更改适配器设置”——>找到“以太网”,右键禁用(后面还可以右键启用,这个不用担心)。之后让台式电脑连接2.4G/5G-WiFi,果不其然可以正常下载。

二、卸载ESP-IDF插件

下面就开始删除,并重新安装ESP-IDF。参考这位优快云博主的方法即可https://blog.youkuaiyun.com/RMDYBW/article/details/134427681

2.1 卸载vscode的espressif插件在这里插入图片描述

在这里插入图片描述

2.2 删除之前通过espressif插件下载的esp-idf资源包

这2个文件是我们之前指定在某个路径下安装过的esp-idf资源包,直接删除即可。
在这里插入图片描述

三、重新安装ESP-IDF插件和配置ESP-IDF环境

3.1 配置扩展资源包

在这里插入图片描述

3.2 设置扩展包安装选项

按照如下图的选项安装,然后点击Install,
在这里插入图片描述
安装ESP-IDF Tools中……………………
在这里插入图片描述
安装ESP-IDF Python virtual environment中……………………
在这里插入图片描述
一路下来,顺利的话就能看到安装成功。

四、使用demo工程测试环境是否成功部署

4.1 生成demo工程

点击下图中的任意一处都可以选择乐鑫官方提供的demo,我们选择blink工程即可。
在这里插入图片描述
在这里插入图片描述

4.2 选择设备目标

先点击左下角的ESP32-C3,再选择弹出来的ESP32-C3 chip(via ESP-PROG)选项,其他2个选项是不一样的下载方式(可自行研究)。
在这里插入图片描述

4.3 串口选择及其被占用问题解决

在这个串口选择的地方我这里就出现问题了!!!注意:你的VSCode这里要显示为ESP32-C3(QFN32)(revision v0.3)标签。
在这里插入图片描述
如果红方框的标签和上图一样是显示wch.cn,那你后面可能显示下载失败,因为这是ESP-IDF Tools在调用底层 Python 一直在监视串口日志的UART状态,ESP32-C3(QFN32)(revision v0.3)才是可以下载程序的UART状态。
或许有人疑惑笔者是怎么发现这个wch.cn是监视串口日志的UART状态呢?因为以前可以正常使用ESP32-C3的时候,笔者曾用 IDF-监视器 观察过串口日志,如下图所示,idf.pyidf_monitor.py 这两个核心工具脚本,前者负责烧录和调试,后者负责监控。
在这里插入图片描述

当串口日志正在输出的时候,察看COM口状态为wch.cn
在这里插入图片描述
综上所述:

COM口状态对应的VSCode COM标签
能下载程序ESP32-C3(QFN32)(revision v0.3)
在监视串口wch.cn

解决方案
我用串口调试助手尝试打开COM9,发现提示COM9正在使用,但是我还没有开始监视ESP32-C3的串口日志,也并没有插上任何其他设备。
苦思良久,去问了一下AI智能,发现了这篇博客https://www.cnblogs.com/ckrgd/p/17012109.html,根据其操作,最终找到占用串口的进程并将其结束,便能释放掉COM9了,我这里是被python.exe占用了( 这不知道是不是ESP-IDF环境调用底层python监视串口的bug,还是代码中哪里使能了USB_CDC_BOOT,占用了Python后端进程,导致UART0串口无法与Python.exe链接去下载程序。目前笔者还没找到原因,待深究 )
在这里插入图片描述
再去到VSCode,就能成功看到VSCode的COM9端口的选项显示为ESP32-C3(QFN32)(revision v0.3),此时便能解决串口无法下载程序的问题了。
在这里插入图片描述

4.4 构建&下载程序

依照下图的标号顺序点击,即可构建和下载程序。
在这里插入图片描述
在第3步构建,第一次需要耐心等待几分钟时间。
如果在该步Building project时,出现了转圈圈不动的情况,很有可能是开启了VSCode兼容模式,那么怎么关闭兼容模式呢?
解决方法:先关闭VSCode软件,右键打开桌面的VSCode图标,找到属性—>兼容模式,去掉下图红色箭头处的勾选(是去掉勾选!!不是打勾),再点击确定,打开VSCode重新构建工程即可。
在这里插入图片描述

4.5 终端监视串口日志

在VSCode内置终端的右上角处选择ESP-IDF窗口,从下图中可以看到下载程序已经成功。
在这里插入图片描述
按下图指示点击,便可以在VSCode内置终端监视blink程序实例的串口日志。
在这里插入图片描述

OK,到这里就可以使用VSCode + ESP-IDF插件愉快地开发ESP32-C3了。

五、环境变量设置

5.1 设置IDF_PATH环境变量

为什么要设置IDF_PATH环境变量呢?
因为建立好上述的demo工程并构建完成后,工程中的.vscode\c_cpp_properties.json文件会提示下图的2个错误:无法找到: “${env:IDF_PATH}/components/”,虽然不影响构建工程,但是作者还是想将其解决掉。
在这里插入图片描述
解决方法:按下Win键/开始菜单键→输入env→进入环境变量设置→按照下图点击→新建环境变量名:IDF_PATH;再填写其对应的索引路径(变量值):找到components文件夹所在的目录,笔者的components文件在上面安装esp文件夹的v5.3.3/esp-idf内,各位可以参考笔者的D:\Software\EmbeddedDevTools\ESP-IDF\esp\v5.3.3\esp-idf路径找到components文件夹所在的目录。找到填入后,然后一直点击确定,完成环境变量的设置。以上的操作步骤如下图所示:
在这里插入图片描述
最后重启任务管理器的Windows资源管理器,再重启VSCode即可,这时候我们便能看到错误已经消失了,如下图所示:
在这里插入图片描述

六、总结

6.1 总结点Ⅰ

如果VSCode下载ESP-IDF插件出现失败,卸载ESP-IDF插件和ESP-IDF曾经下载的资源包,然后电脑断开网线,连接WIFI重新下载即可。

6.2 总结点Ⅱ

如果出现串口无法下载程序的情况,先查看串口是否被python.exe或其他进程占用,将占用进程结束后,再次选择COM口时,出现ESP32-C3(QFN32)(revision v0.3)就可以正常下载程序了。
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 合宙 ESP32-C3 使用 IDF 进行 ADC 操作 #### 配置环境与工具链 为了在合宙 ESP32-C3 上使用 ESP-IDF 开发框架进行 ADC (模拟数字转换器) 的操作,需先安装并配置好开发环境。这包括设置交叉编译器、下载 ESP-IDF SDK 及其依赖项,并初始化所需的硬件连接[^1]。 #### 创建 CMakeLists 文件 创建一个新的项目目录,在其中编写 `CMakeLists.txt` 来描述项目的结构构建规则。对于涉及 ADC 功能的应用程序来说,应该确保包含了必要的库支持文件: ```cmake # CMakeLists.txt cmake_minimum_required(VERSION 3.16) project(adc_example) set(EXTRA_COMPONENT_DIRS ${PROJECT_PATH}/components) idf_component_register(SRCS "main.c" INCLUDE_DIRS ".") ``` 这里假设有一个名为 `main.c` 的源文件用于实现具体的逻辑功能。 #### 编写主函数代码 接下来是在 `main.c` 中完成实际的 ADC 数据采集工作。下面给出了一段简单的例子来展示如何读取 GPIO 引脚上的电压值并通过 UART 打印出来: ```c // main.c #include <stdio.h> #include "driver/adc.h" #include "esp_log.h" static const char *TAG = "ADC Example"; void setup_adc(void){ adc1_config_width(ADC_WIDTH_BIT_12); // 设置分辨率为12位 adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_0); // 对应GPIO34通道 } float read_voltage(int channel){ int raw_value; float voltage; if(channel >= 0 && channel <=7){ // 确认有效的输入范围 raw_value = adc1_get_raw((adc1_channel_t)channel); voltage = ((raw_value / 4095.0f)*3.3f); // 将原始数据转化为对应的实际电压值 return voltage; }else{ printf("Invalid Channel Number\n"); return -1; } } void app_main(){ setup_adc(); while(true){ float v = read_voltage(0); ESP_LOGI(TAG,"Voltage on pin is %.2fmV",v*1000); vTaskDelay(pdMS_TO_TICKS(1000)); // 延迟一秒再继续下一次测量 } } ``` 这段代码实现了基本的功能:初始化 ADC 设备参数;周期性的从指定引脚获取采样结果并将它们打印到控制台显示。注意这里的延时是为了防止过快的数据流造成终端输出混乱。 #### 用户组件管理 如果希望进一步扩展此应用或将某些特定模块独立封装成可重用的形式,则可以参照标准做法建立相应的用户组件文件夹及其内部布局[^3]。例如针对上述示例中的 ADC 处理部分单独设立一个叫做 `adc_module` 的子工程,这样不仅有助于保持整体架构清晰明了而且方便后续维护升级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值