在PC平台上使用Arduino C++库

use*_*486 0 c++ string arduino visual-studio

Arduino 有一些很好的 C++ 库,我想在 PC 平台上使用它们。另一个优点是可以在 PC 上测试和调试 Arduino 代码。在PC上进行调试要容易得多。

我特别喜欢的一个库是 String 库。https://www.arduino.cc/en/Reference/String

鉴于 Arduino 库是开源的,是否可以以某种方式将 Arduino String 库导入到 Visual Studio 等 C++ IDE 中?如何才能做到这一点?

小智 5

在过去的三个月里,我一直在断断续续地解决这个问题,我花了几百个小时盯着我的电脑屏幕,尝试一些东西,记录结果,尝试其他东西(重复)。我在互联网上进行了大量的挖掘,但发现很少有关于这个主题的权威资源。话虽如此,这就是我发现的有效方法。需要注意的是,这些指令基于 ESP32 硬件。请注意,这仍然是一个正在进行的工作,因为还有一些清理工作要做。另请注意,这避免了必须执行手动/命令行任务,例如“makefile”。如果您以前使用过 Arduino IDE 环境,您可能会喜欢这一点。

首先介绍一下开发环境的一些细节:

  • 安装 MS Visual Studio 社区版(免费)。我安装了“使用 C++ 选项进行桌面开发” (Visual Studio 链接)
  • 请注意,我正在为 ESP32 模块开发代码。有许多不同的模块可供选择,它们成本低廉(分线板上约 7 美元),功能非常强大(与 Arduino 硬件相比),并且嵌入了蓝牙和 WiFi。如果您使用其他一些硬件,那么其余的一些步骤可能不适用/需要更改。
  • 安装驱动程序(使用这些驱动程序是为了让 ESP32 自动分配一个 COM 端口)(Silabs 链接)
  • 按照此链接中所述为 MSVS安装 VisualGDB (下载链接) :( VisualGDB 教程) 请注意,按照链接中所述下载 ESP32 工具链需要很长时间(一个小时?),请耐心等待。
  • 请注意文件夹 \SysGCC\esp32 位于计算机上的位置(很可能位于 C 驱动器的根目录中)。这是您在上一步中安装的 ESP32 工具链。
  • 作为 VisualGDB 教程中描述的 VisualGDB 安装步骤的一部分,您必须更改“路径映射”。此时安装提示我从 VisualGDB 下载 CMake.exe。在“绝对路径(以 / 开头)”字段中,您需要输入我上面描述的 SysGCC 的路径(我的是 C:\SysGCC\esp32)
  • 此时,您应该能够将 ESP32 模块连接到计算机,并使用 VisualGDB 中的“新建嵌入式项目”向导来创建一个简单的项目。我一般选择“LEDBlink”。请注意,我使用的大多数 ESP32 板在 GPIO 2 上都有内置 LED,而不是 GPIO 5(这是向导中的默认设置)。

到目前为止,一切都很好。确认 LED 可以闪烁。拍手、高兴地大喊、喝杯啤酒,或者做任何你想庆祝的事情。此时,我们还没有真正做太多事情来帮助导入 Arduino 代码,所以这里才是真正的乐趣开始的地方。

  • 记下 LEDBlink 项目文件夹在硬盘上的位置。
  • 从Github 上的 Espressif下载适用于 ESP32 的 Arduino 内核。
  • 将下载的 Arduino Core 中的所有 *.h、*.c 和 *.cpp 文件复制到 Blink 项目文件夹中,“variants”文件夹中的文件除外。我最终复制了 77 个文件。事实上,我所做的是首先创建一个名为“批量库”的新文件夹,将所有源文件和头文件复制到其中,以便更轻松地为每个项目执行此步骤。
  • “variants”文件夹包含一系列子文件夹,每个子文件夹都包含一个名为“pins_arduino.h”的文件。您必须找到特定 ESP32 模块的文件夹,并将该特定的“pins_arduino.h”文件放入项目文件夹中。
  • 在您的项目源代码中,添加以下行:

    #include "Arduino.h"
    
    Run Code Online (Sandbox Code Playgroud)

构建项目,您应该不会出现任何错误。请注意,在项目的 MSVS 解决方案资源管理器窗口中的“外部依赖项”下,您将看到复制到项目文件夹中的所有 *.h 文件的列表。这不会立即发生,但在 MSVS 应用程序的左下角,您会看到后台发生的一堆事情,解析文件等,然后会出现外部依赖项。

现在在 app_main() 中添加以下行:

    initArduino();
    Serial.begin(115200);
Run Code Online (Sandbox Code Playgroud)

如果您重建项目,您将在链接过程中遇到一些错误,因为对 *.cpp 文件的所有文件引用尚未包含在您的项目中。

  • 在解决方案资源管理器中,右键单击“源文件”和“添加现有项”,然后将所有 *.c 和 *.cpp 文件添加到您的项目中(不是 *.h 文件)
  • 重建您的项目。您很可能会收到一些错误“(something).h:没有这样的文件或目录”。这是因为在撰写本文时,乐鑫提供的 Arduino 核心还不完整。在错误列表中,记下错误的文件位置,然后从解决方案资源管理器的项目中删除该文件。例如,我遇到以下错误:“vfs_api.h:没有这样的文件或目录”,并且错误位于文件SD.cpp中。所以我从项目中删除了SD.cpp。继续迭代此步骤,每次一个文件,直到获得没有错误的构建。删除文件时记下笔记(不要删除它们),以便在出现错误时可以将它们添加回来。您可能需要在此处进行一些额外的调试,具体取决于您添加到项目中的源文件。当您查看重建期间生成的错误列表时,请保持耐心并期待一些尝试和错误。当您的项目编译没有错误时,再喝一杯(或两杯)啤酒庆祝一下。

  • 在您的项目源代码中,添加以下行:

    Serial.println("Hello World!");
    
    Run Code Online (Sandbox Code Playgroud)

我将其放入眨眼任务函数的 while(1) 循环中。LED 每次闪烁时,这行代码都会写入串行端口一次。由于 Serial.println 是一个 Arduino 函数,因此您可以放心,至少这个Arduino 库已启动并运行。我相信您应该能够向您的项目添加更多#includes(例如Wire.h)并以相同的方式继续(但现在请等待)。

  • 重建并上传到 ESP32。打开串行端口监视器(MSVS 窗口顶部附近的按钮,COM 端口下拉菜单的右侧)并验证您是否收到“Hello World!” LED 闪烁时显示消息。

现在,在您对将所有库、头文件和源文件“转储”到我的项目文件夹中感到悲伤之前,我意识到这不是最佳实践。如果您按照我的建议创建了“批量库”文件夹,您应该能够更好地组织您的项目。这为读者留下了一个简单的步骤。

由于该解决方案依赖于 ESP32 硬件和 VisualGDB,因此并不适合所有人。然而,它可以让您摆脱 Arduino IDE 幕后发生的“神秘”,并让您为更好的源代码控制和项目开发奠定基础。有关相关讨论,请参阅sysprogs.com 上的此链接