问题标签 [esp-idf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
137 浏览

cmake - 是否可以强制 CMake 每次运行 add_compile_definitions() ?

我有一个嵌入式项目(使用 ESP-IDF,它使用 CMake 构建项目),其中我有一个 props.json 文件,其中包含多个设置(例如“设备类型”)。比如根据CMake的实际值通过调用and"deviceType"打开读取props.json ,然后定义C预处理宏,如:通过使用.execute_process()jqDEVICE_TYPE_Aadd_compile_definitions()

问题是,这只会在我修改 CMakeLists.txt 或清理整个项目时运行,但是当我只更改 props.json 时我不想重新编译每个组件我写的文件(所以,取决于设置)。我想让 CMake 每次构建项目时都读取文件而不清理它。

我做了我的研究,所以我知道有add_custom_target()这样的add_custom_command()行为,但是add_compile_definitions()不能在脚本中调用。有没有解决方案来实现这一点,或者我应该只使用由配置的头文件configure_file()而不add_compile_definitions()理会?

0 投票
1 回答
191 浏览

eclipse - eclipse CDT esp-idf 构建但不闪烁

Windows10 eclipse esp-idf 最新版本 2021-03


使用命令行 idf.py,我可以构建和刷新在 ESP32 上运行的 esp-idf\examples\get-started\blink 程序。

在 Eclipse 中,构建工作但运行命令显示在控制台中

谁能告诉我出了什么问题?

问候

0 投票
0 回答
55 浏览

cmake - 在 Windows 上的 CLion 中打开 ESP-IDF 项目作为普通 CMake 项目

我正在尝试使Windows 上的CLion达到可以像标准 CMake 项目一样打开/使用esp_idf项目的状态。我知道这是可能的,因为我在 Linux 上也有类似的设置。我将列出我是如何在 Linux 上工作的,以及我在尝试将相同的想法移植到 Windows 时遇到的问题。

在 Linux 上

通过从已经由本质上初始化的 shell 的上下文启动 CLion get_idf,可能会导致 CLion 继承 idf 的 CMake 文件所需的环境变量。因此,让它在 Linux 上运行就像执行脚本一样简单:

现在,可以在 CLion 中将 idf 项目作为普通 CMake 项目打开/编译。

在 Windows 上

但是,在 Windows 上,如果应用类似的想法,结果将不起作用。CLion 仍然继承调用进程 env-vars,但这并不能达到预期的效果。剧本:

所有相关的环境变量都是继承的(没有全部显示,因为有很多):

clion 继承的环境变量

然而,尽管 idf 嵌入的 python 是系统/路径或其他环境变量中唯一存在的 python 实例,它仍然抱怨遗留 python 解释器或无法找到要求:

clion cmake 配置打印输出

更令人困惑的是,idf 环境完全可以从 CLion 中的集成终端运行:

从 CLion 终端运行的 idf.py 构建

有谁知道这种差异的技术原因是什么,我该如何解决?

为什么不直接使用 PlatformIO?

在我看来,PlatformIO 使得利用 esp_idf 的某些功能过于复杂。此外,我也无法让它在 Windows 上与 CLion 一起使用。最后,我希望至少可以选择在 Windows 上使用普通的 idf 和 CLion。

0 投票
1 回答
1745 浏览

esp32 - 为 ESP32 实现 Wi-Fi Direct

首先,我指的是此处描述和指定Wi-Fi P2P 标准。我不是指创建 AP 和站点对的方法。

其次,如果 ESP32 的 Wi-Fi Direct 实现已经存在,请分享。我搜索了很多地方,但没有找到。

具体来说,我想为 ESP32-WROOM-32E 实现 Wi-Fi Direct。我的理解是,硬件理论上能够处理 Wi-Fi Direct 标准,但尚未编写软件来执行此操作。如果我在这一点上错了,请纠正我。

假设有可能,是否可以使用 Espressif 的 ESP-IDF 来实现 Wi-Fi Direct,使用诸如esp_wifi_80211_tx(描述here)之类的功能?还是需要在较低级别编写这样的实现?如果是这样,有多低?我需要开始学习 ESP32-WROOM-32E 中 Xtensa 处理器的指令集吗?或者在裸机和 ESP-IDF 之间是否存在中级 API?

0 投票
1 回答
155 浏览

c++ - 如何使用 Cmake 在 ac 项目中包含 c++ 库

我是 C、C++ 和 Cmake 的初学者。

我从一个项目开始,该项目允许我将数据发送到用 C 编写的 Google Cloud IoT Core:https ://github.com/espressif/esp-google-iot/blob/master/examples/smart_outlet/README .md

如您所见,我有一块带有 ESP32 芯片的电路板。

我买了一个我想使用的湿度传感器,并且库是用 C++ 编写的,所以将它们添加到 C 项目中非常困难。( https://github.com/adafruit/DHT-sensor-library ) ( https://github.com/adafruit/Adafruit_Sensor )

我在我的 CMakeLists.txt 中导入这样的库:

但是在编译 c++ 库时我收到一条错误消息。

我认为抛出错误是因为 c 不支持 c++ 类。

这是我向我抛出错误的 c++ .h 文件:

正如您在 github 存储库中看到的,这些文件具有 .cpp 和 .h 扩展名。

主项目依赖于一个用嵌入式 c 编写的谷歌库,并允许与谷歌云通信,到目前为止这还不是问题:https ://github.com/GoogleCloudPlatform/iot-device-sdk-嵌入式-c

任何人都可以启发我如何做到这一点?

非常感谢!

0 投票
2 回答
858 浏览

embedded - 即使在代码回滚后,ESP-IDF wifi 事件循环也会继续接收 SYSTEM_EVENT_STA_WPS_ER_PIN

我一直在使用带有 ESP-IDF 的 ESP32 进行一个项目,该项目将在启动网络堆栈之前检查其 NVS 内存中的 wifi 凭据。如果它有说凭据,它将以 STA 模式连接到 wifi 网络,如果它缺少它们,它将作为它自己的 AP 启动,以允许用户通过 HTTP 向它发送凭据。

在手动将我的测试凭据放入 NVS 后,我开始编写 AP 代码。完成所有 AP 代码和逻辑后,我使用 esptool 手动擦除闪存以强制开发板以该模式启动。这样做效果很好,我能够通过 HTTP 向它发送更新的凭据。

此时,板子在复位时尝试作为 STA 连接,但是,该SYSTEM_EVENT_STA_WPS_ER_PIN事件一直被 wifi 事件循环捕获。此后董事会仅经历过此事件,并且此后完全无法连接到wifi。更奇怪的是,即使使用 git 回滚到以前的版本,问题仍然存在。

主程序

wifi控制器.c

该代码本质上检查 NVS 的凭据,如果找到它们,它会返回一个包含它们的结构以及ESP_OK. 如果未找到其中之一,则该结构将包含ESP_ERR_NVS_NOT_FOUND. wifiController.c然后接收这个creds结构并调用beginWifi(),然后调用connectSTA()connectAP()基于status结构的。当凭证存在时,connectSTA()会调用,但由于未知原因,事件循环始终只接收SYSTEM_EVENT_STA_WPS_ER_PIN事件。正如我之前提到的,即使将我的代码回滚到没有该connectAP()功能的版本后,这种行为仍然存在。

因此,我有一种预感,这个问题可能与我手动擦除闪存时有关,而不是与代码有关。

头文件在其 typedef 中包含以下行来定义此事件。

我不知道这意味着什么,因为我没有故意在这个项目中包含任何关于 wps 的内容。

到目前为止,我的研究还没有返回任何非常有用的东西,所以如果有人知道什么SYSTEM_EVENT_STA_WPS_ER_PIN是或可能导致我的问题,我将非常感激。如果您认为更多细节对解决此问题有用,请告诉我,我将非常乐意提供。

0 投票
1 回答
354 浏览

visual-studio-code - 如何设置 Windows 10 + VSCode + pymakr 用于 Python 编程 + Micropython + ESP-IDF 用于 esp32?

我开始了几次尝试让这个复杂的工作。正如在许多其他讨论中提到的那样,无法识别 micropython 模块,例如机器。也找不到像 numpy 这样的 Python 模块。

我认为,python 环境工作不正常,模块在那里但没有找到。但是,没有真正解决这个问题的建议或教程。我该如何设置?

到目前为止我做了什么:

  1. 根据教程手动安装所有组件

  2. 另一种方式:安装包含很多东西的pything编码包。

  3. Windows 路径具有组件的正确文件夹路径。

  4. 我在 vscode 中设置了明显正确的 python 解释器

  5. 与板的连接/通信正在工作。我可以设置不包含 micropython 模块的代码。

  6. 在 thonny/mu 等其他 IDE 中,可以找到模块。

  7. 我还安装了一个 python venv:我可以在这个 venv 中安装 numpy,后来当我在 vscode 中使用 venv python 作为解释器时,它在 vscode 中找到了(以前没有找到)。但是我在 venv 中使用 micropython 并不成功。

PS:我可以使用机器或网络等micropython模块并将草图上传到esp32板。它正在板上工作。但我无法在 vscode 中运行任何草图。我认为 Vscode 使用 cpython 而不是 micropython,但是在我提到的安装之后这不应该工作吗?

0 投票
0 回答
702 浏览

c - 使用 ESP-IDF (ESP32) 和 ILI9341 显示适配器从 SPI 总线读取数据。没有得到有意义的数据

我无法从 SPI 总线读取数据,特别是 ILI9341 显示适配器(不过,我在其他设备上也遇到了同样的问题)。当我尝试阅读时,我得到的只是零。我可以写得很好。

我正在使用带有集成 ILI9341 显示器的 ESP-WROVER-KIT v4.1,所以我知道接线是正确的。根据文档,我配置的 MISO 行是正确的。再说一次,我写数据很好,所以 MOSI 也很好。

基本上,我设置地址窗口,启动内存读取 (0x2E) 并读取一个虚拟参数(对我来说始终为零),然后读取数据。这是作为单独的交易完成的。当我以这种方式编写时,我没有任何问题(除了写入时没有虚拟参数)。不幸的是,当我阅读时,我再次得到零。

重现此问题的完整代码尽可能短,但对于这个论坛来说太长了,所以我在此处发布了一个指向相关 .c 文件的链接,它将重现该问题。

https://github.com/codewitch-honey-crisis/ili9341_read_rep/blob/master/src/main.c

如果您需要运行它,该 repo 还包含一个完整的 platformio 项目。只需备份到主回购链接。

这是代码的摘录。

这是我设置读取的方式(retr() 函数)

这是数据表的链接以供参考 https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf 相关页面是 116 和 117。我认为数据表不会揭示核心问题,但我提供无论如何。我认为问题在于我调用 API 的方式,但我不能确定。ESP-IDF SDK 中没有很好的读取示例,除了使用完全不同的 SPI 配置(10 个命令位、地址位、HALF_DUPLEX 标志等)的 NVS 事物,因此它对我来说不是很有用。

我也尝试过查看 Arduino 代码来执行此操作,但 SPI API 太不同了,我无法将其正面或反面足以将其转换为 ESP-IDF

也许我上面的代码需要一些小的更正?我希望是这样。任何帮助将不胜感激。

0 投票
0 回答
22 浏览

c - 当前推荐在 ESP-IDF 项目中包含 AWS Embedded C SDK 的方法?

在 ESP-IDF 项目中包含 AWS Embedded C SDK 的最新方法是什么?这个 repo有示例和带有源文件的子模块,但是在检查示例后,我发现它们在 2 年内没有更新,并且使用了已弃用的 wifi 事件循环系统。这仍然是推荐使用的存储库还是已弃用?

此外,包含实际源文件的子模块也嵌入在这个 repo 中。是否建议只克隆这个子模块而不是整个esp-aws-iotrepo?

到目前为止,我一直在做的是将esp-aws-iotrepo 克隆到components我正在处理的任何项目的文件夹中,并将示例中已弃用的部分替换为最新的对应部分。

这仍然是正确的做事方式,还是有更当前的方法将这些 SDK 实施到 IDF 项目中?

0 投票
3 回答
2271 浏览

esp32 - 无法编译 ESP-IDF 示例项目

我正在尝试编译我的第一个 ESP32 示例项目。我使用所有最新工具设置 Visual Studio Code。(Python、工具链等)。我不确定我到底需要什么,因为我是这个环境的新手,所以也许我错过了一些东西。

我遵循了关于如何创建和编译第一个项目的用户指南,我使用了示例文件夹中的 Blink 项目。

这是我得到的。

我从 blink.c 中删除了所有内容以避免代码错误。

眨眼.c

另一个问题,有一个运行选项 idf.py menuconfig。有时它有效,有时它说:

任何帮助将不胜感激!