ESP32:ESP-IDF环境搭建troubleshooting

从2023年4月开始捣鼓ESP-IDF,中间踩过无数环境搭建中的坑。不得不吐槽乐鑫的环境真的对初学者非常不友好,经常一堆很迷的bug官方手册中也找不到。以下纯属个人记录,只是提供一种方法不一定适用于所有人。**首先先推荐一个其他博主些的帖子,据说按照他的方法搭建ESP32+VSCode开发环境能一遍成功,我看了一下确实很强(码龄十几年的大佬写的,膜拜~),如果实在解决不了搭建中的问题先按照他的方法试一下,很可能会成功。**帖子在这ESP32+VSCode开发环境搭建(全网最强最终解决方案)

1.ESP-IDF+VSCode环境搭建troubleshooting

1.1 UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 1-2: illegal multibyte sequence.

这里有一个用PlatformIO环境开发报错的例子https://blog.csdn.net/lsq179/article/details/121488813
博主的解决方法是找到esp-idf.py,修改idf的python源文件中读取API函数的参数,把读取文件编码方式从默认的gbk修改为utf-8。ESP-IDF估计也存在类似的问题。然而我找了半天没找到esp-idf.py(或许是idf.py,但是不知道改哪里。。。)。一般而言,gbk解码失败大概率是中文字符造成的,后来又想到软件开发中避坑的一大忠告:文件路径中不能有中文! 遂把源文件移动到没有中文的路径中,问题解决。

1.2 CMake Error: The source… does not match the soused to generate cache. Re-run cmake…在这里插入图片描述

本问题是因为复制别人已经编译过的工程所致。 参考这个帖子:https://blog.csdn.net/bingfeiqiji/article/details/86554365 ,直接把CMakeCache.txt所在的build文件夹里的内容全删了,重新编译即可。CMakeList.txt的问题可以无视。

1.3 ninja:error:failed recompaction:No such file or directory

在这里插入图片描述
重新编译一遍即可,原因未知。

1.4 VSCode中安装ESP-IDF插件时报错:ModuleNotFoundError: No module named ‘virtualenv’

在这里插入图片描述
参考乐鑫论坛帖子:https://www.esp32.com/viewtopic.php?t=12481
在这里插入图片描述
按照以上几步安装virtualenv包,手动创建虚拟python3环境,目前卡在第3步(找不到需要删除的文件夹),论坛中也有人提到这个问题,先搁着以后再研究。
【更新 · 已解决virtualenv模块报错问题,同时也是先安装ESP-IDF再安装ESP-IDF插件的方法】
请注意,以下路径均是我个人安装路径,实际操作要替换成你自己的路径。
我的ESP-IDF之前通过下文注解中的方案2已经装在了目录F:\mysoft\Espressif-IDE\Espressif之下,进入看看文件夹里有什么?
在这里插入图片描述
注意到python_env文件夹。安装插件的过程中会在python_env文件夹中通过F:\mysoft\Espressif-IDE\Espressif\tools\idf-python\3.11.2\Lib\site-packages下的virtualenv模块在python_env中创建一个Python虚拟环境。现在的问题是ESP-IDF插件无法找到这个virtualenv,肯定是路径出了问题。

全部退出重新打开VSCode,选中ESP-IDF插件的标志(没有插件先搜索并安装插件),此时在下方OUTPUT里会显示此时使用的Python的路径,发现与实际使用的ESP-IDF路径不同(原因很可能是以前安装过ESP-IDF和ESP-IDF插件而路径痕迹没有删除干净),导致ESP-IDF插件找不到实际使用的Python环境,自然找不到F:\mysoft\Espressif-IDE\Espressif\tools\idf-python\3.11.2\Lib\site-packages下的virtualenv模块。下图OUTPUT中没有Python路径的提示,是因为我已经装好了,不报ModuleNotFoundError: No module named 'virtualenv’的错了所以不显示了,没安装配置好插件前OUTPUT会显示相关路径。
在这里插入图片描述
配置ESP-IDF:
在这里插入图片描述
选择USE EXISTING SETUP
在这里插入图片描述
进去之后的页面右边会有一个蓝色的清除已有设置的按钮(叫Clearxxx? 具体的图当时没截图,应该很好找),点击后清除以前记录的路径。然后回到ESP-IDF配置页面(还是上图),选择第二个ADVANCED。
在这里插入图片描述在这里选择IDF_PATH和IDF_TOOL_PATH(以你安装实际位置为准),注意IDF_TOOL_PATH只要选到安装ESP-IDF的文件夹即可,而不是选到它下面的tools文件夹。在我的路径中,应该选F:\mysoft\Espressif-IDE\Espressif而不是F:\mysoft\Espressif-IDE\Espressif\tools。然后点击install。
安装一段时间后出现这个页面,选择Use existing ESP-IDF Tools,再继续安装。如果这个页面下的Tools后有的不是√而是×,则应选择Download ESP-IDF Tools更新这些Tools。
在这里插入图片描述
继续安装有可能会出现这这类requirements不符合的情况。直接到对应的requirements.txt把对应的语句给注释掉几即可。在这里插入图片描述
打开F:\mysoft\Espressif-IDE\Espressif\frameworks\esp-idf-v4.4.4\requirements.txt。
在这里插入图片描述
把相应的requirement注释掉。比如,找到pyparsing那句加#号注释。
然后继续安装,成功!!
在这里插入图片描述
**【注解:在VSCode中编译esp32程序常见的有3种方案——】
** 方案1.VSCode+ESP-IDF插件: 简单搭建方案参考:https://zhuanlan.zhihu.com/p/630698425 在这个帖子更全:https://blog.csdn.net/felix_tao/article/details/122913575本方案是先安装VSCode,再通过VSCode中的ESP-IDF插件(VSCode中搜索Espressif)安装ESP-IDF。目前就我自己使用来看本方案bug最多,但是在VSCode中显示esp32代码又似乎必须采用ESP-IDF插件,否则出现.h文件名红色波浪线报错的问题,看着十分糟心。在此提醒,ESP-IDF插件装好了就不要轻易删掉,因为你不一定装的回来!!
方案2.VSCode+Windows版ESP-IDF 本方案是先安装VSCode,再到乐鑫科技官网下载ESP-IDF的安装包,直接安装,暂时先不安装VSCode中的ESP-IDF插件。即用VSCode查看代码,同时在Windows命令行中输入idf.py build命令编译程序。这里可以借助VSCode的Terminal功能,将Win桌面下的ESP-IDF命令行快捷方式的路径复制到VSCode Terminal中使用idf的命令。如下所示,找到ESP-IDF CMD,右键属性,将目标(T):中的内容复制到VSCodeTerminal中回车,即可配置好编译环境。**这样做不失为一个装不上ESP-IDF插件的替代方案。但是没有VSCode中的ESP-IDF插件打开工程后.h文件名和许多函数出现红色波浪线报错的问题。**安装完后可以到VSCode中补装ESP-IDF插件,但是要费点劲。 在这里插入图片描述
复制路径到VSCode Terminal:
在这里插入图片描述
在这里插入图片描述
缺点:仍然存在.h文件名红色波浪线报错问题,可以参考1.5中的方法减少红色波浪线的数量
方案3.VSCode+Linux版本ESP-IDF,远程登录服务器或虚拟机进行编译
测试了一下Linux版本的IDF还是比较顺畅的,习惯Linux操作的小伙伴可以试一下。
方案4.其他方案
其实ESP-IDF还支持Eclipse,此外esp32系列也可用Arduino或PlatformIO进行开发,可作为补充。

1.5 (基本解决)VSCode+ESP-IDF头文件红色波浪线问题

这是使用esp-idf的老问题,目前我本人没有特别好的解决方案。如果你顺利装上了VSCode和ESP-IDF插件,或者在VSCode命令行中配置好了ESP-IDF环境,那么可以参考这几个帖子:
1.https://blog.csdn.net/Tristan_csg/article/details/126791530#comments_27553379
2.https://blog.csdn.net/qq_43862401/article/details/132237124
3.https://www.cnblogs.com/HEHEtk2442/p/15521114.html
它们基本都在说一件事情:更新.vscode配置文件(把.vscode配置文件下的文件都删了,然后在VSCode中按Ctrl+Shift+P,搜索ESP-IDF,选择ESP-IDF:添加vscode配置文件夹)。更新完后效果不好可以关掉VSCode再重新进入试试,这个时候红色波浪会少很多。然鹅我在能用ESP-IDF插件的时候测试的结果是不能从根本上解决问题,更新完后红波浪线只是变少了但仍然存在,而且原来没有红线的头文件变得有红线了。。。

(未完待续)

vscode esp idf debug模式。[Build] Project build complete. To flash, run: ESP-IDF: Flash your project in the ESP-IDF Visual Studio Code Extension or in a ESP-IDF Terminal: idf.py flash or idf.py -p PORT flash or python -m esptool --chip esp32 -b 460800 --before default_reset --after hard_reset --port /dev/ttyUSB0 write_flash --flash_mode dio --flash_size 2MB --flash_freq 40m 0x1000 bootloader/bootloader.bin 0x10000 pca9685_test.bin 0x8000 partition_table/partition-table.bin or from the "/home/cm/9_Robot/SpotMicroAI/esp/0_test/pca9685_test/build" directory python -m esptool --chip esp32 -b 460800 --before default_reset --after hard_reset write_flash "@flash_args" /home/cm/.espressif/tools/openocd-esp32/v0.12.0-esp32-20241016/openocd-esp32/bin/openocd Open On-Chip Debugger v0.12.0-esp32-20241016 (2024-10-16-14:17) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html /home/cm/.espressif/tools/openocd-esp32/v0.12.0-esp32-20241016/openocd-esp32/bin/openocd [/Build] [OpenOCD] Open On-Chip Debugger v0.12.0-esp32-20241016 (2024-10-16-14:17) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_level: 2 Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections ❌ Error: unable to open ftdi device with description '*', serial '*' at bus location '*' ❌ /home/cm/.espressif/tools/openocd-esp32/v0.12.0-esp32-20241016/openocd-esp32/share/openocd/scripts/target/esp_common.cfg:9: Error: at file "/home/cm/.espressif/tools/openocd-esp32/v0.12.0-esp32-20241016/openocd-esp32/share/openocd/scripts/target/esp_common.cfg", line 9 For assistance with OpenOCD errors, please refer to our Troubleshooting FAQ: https://github.com/espressif/openocd-esp32/wiki/Troubleshooting-FAQ OpenOCD Exit with non-zero error code 1 [Stopped] : OpenOCD Server [/OpenOCD] [Flash] Can't perform JTag flash, because OpenOCD server is not running!
03-12
### ESP32 IDF WiFi Configuration and Troubleshooting For configuring Wi-Fi on the ESP32 using ESP-IDF, one must first ensure that all necessary development tools are installed as part of setting up the environment. This includes not only installing ESP-IDF but also ensuring various required utilities such as compilers, debuggers, Python packages among others are present within your system by executing commands like `cd ~/esp/esp-idf` followed by running `./install.sh esp32` to set everything up properly[^1]. Once this setup phase is complete, attention turns towards actually establishing a connection with an access point (AP). The process involves initializing both TCP/IP stack alongside Wi-Fi driver through calls made from application code written specifically for these purposes. #### Initializing Wi-Fi Connection Code Example To establish connectivity between device and AP: ```c #include "esp_wifi.h" #include "nvs_flash.h" void wifi_init_sta(void){ // Initialize NVS. esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } static wifi_config_t cfg = { .sta = { .ssid = CONFIG_ESP_WIFI_SSID, .password = CONFIG_ESP_WIFI_PASSWORD, }, }; // Start Wi-Fi in station mode. ESP_ERROR_CHECK( esp_wifi_start() ); ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &cfg) ); printf("Connecting...\n"); } // Call function during initialization or at appropriate place in user's program logic wifi_init_sta(); ``` In cases where issues arise while attempting connections—such as failure messages indicating inability to connect—it becomes important to verify several factors including SSID/password correctness, signal strength near router/access-point location, interference levels caused possibly due nearby electronic devices operating similar frequencies bands used here etcetera. Additionally, checking whether JTAG debugging has been enabled via sdkconfig can sometimes help diagnose problems more effectively since certain configurations might interfere unintentionally when trying achieve stable wireless network links[^2]. --related questions-- 1. What steps should be taken after encountering persistent Wi-Fi connection failures? 2. How does enabling/disabling specific features in sdkconfig impact overall performance? 3. Can you provide examples demonstrating how environmental variables influence successful establishment of Wi-Fi sessions? 4. Are there any particular settings related to power management which could affect Wi-Fi stability?
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值