簡體   English   中英

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

[英]Using Arduino C++ libraries on PC platform

Arduino有一些很好的C ++庫,我想在PC平台上使用。 另一個優點是可以在PC上測試和調試Arduino代碼。 在PC上進行調試要容易得多。

我特別熱衷的一個庫是String庫。 https://www.arduino.cc/en/Reference/String

假設Arduino庫是開源的,是否可以以某種方式將Arduino字符串庫導入到Visual Studio這樣的C ++ IDE中? 如何才能做到這一點?

在過去的三個月中,我一直在努力解決這個問題,並且花了幾百個小時盯着我的電腦屏幕,嘗試做一些事情,記錄結果,然后嘗試做其他事情(重復)。 我已經在互聯網上進行了大量的挖掘工作,卻發現很少有關於該主題的權威資源。 話雖如此,這就是我發現的工作原理。 請注意,這些指令基於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而非GPIO 5(向導中的默認值)上都具有內置LED。

到現在為止還挺好。 確認您可以使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" 

生成項目,您應該不會出錯。 請注意,在項目的“ MSVS解決方案資源管理器”窗口中的“外部依賴關系”下,您將看到復制到項目文件夾中的所有* .h文件的列表。 這不會立即發生,但是在MSVS應用程序的左下角,您會看到許多事情在后台進行,解析文件等,然后將顯示“外部依賴關系”。

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

    initArduino();
    Serial.begin(115200);

如果您重建項目,則在鏈接過程中會遇到一些錯誤,因為對* .cpp文件的所有文件引用都尚未包含在項目中。

  • 在解決方案資源管理器中,右鍵單擊“源文件”和“添加現有項”,然后將所有* .c和* .cpp文件添加到您的項目中(而不是* .h文件)
  • 重建您的項目。 您很可能會收到“(something).h:無此類文件或目錄”的錯誤。 這是因為在撰寫本文時,Espressif提供的Arduino核心尚未完成。 在“錯誤”列表中,記下該錯誤的文件位置,然后在“解決方案資源管理器”中從項目中刪除此文件。 例如,我遇到以下錯誤:“ vfs_api.h:沒有這樣的文件或目錄”,並且錯誤位於文件SD.cpp中 所以我從項目中刪除了SD.cpp。 一次一次遍歷一個文件,直到獲得沒有錯誤的構建。 刪除文件時記下筆記(不要刪除它們),以便在出錯時可以重新添加它們。 根據您添加到項目中的源文件,您可能需要在此處進行一些其他調試。 請耐心等待並檢查您在重建過程中生成的錯誤列表時會遇到一些試錯。 當您的項目編譯無誤時,可再喝一兩啤酒。

  • 在項目源代碼中,添加以下行:

     Serial.println("Hello World!"); 

我把它放在了眨眼任務功能的while(1)循環中。 每次LED閃爍時,此行代碼將寫入串行端口。 由於Serial.println是Arduino函數,因此可以確保至少 Arduino庫已啟動並正在運行。 我相信您應該能夠在項目中添加更多的#include(例如Wire.h),並以相同的方式進行操作(但請稍候)。

  • 重建並上傳到ESP32。 打開串行端口監視器(靠近MSVS窗口頂部的按鈕,在COM端口下拉菜單的最右邊),並驗證您是否在獲取“ Hello World!”。 LED閃爍時顯示消息。

現在,在給我關於將所有庫,標頭和源文件“轉儲”到我的項目文件夾中的任何悲痛之前, 我意識到這不是最佳實踐。 如果按照我的建議創建了一個“大量庫”文件夾,則應該能夠更好地組織項目。 對於讀者來說,這僅是簡單的一步。

由於此解決方案依賴於ESP32硬件和VisualGDB,因此它不適用於所有人。 但是,它使您能夠擺脫Arduino IDE幕后發生的“謎”,並為更好的源代碼控制和項目開發奠定基礎。 有關相關討論,請參見sysprogs.com上的此鏈接

String庫大多數沒有特定於平台的依賴項,因此您只需將WString.h和WString.cpp添加到源文件中即可。 您可能需要進行一些移植(我懷疑是清理了一些宏),但是沒有理由不應該最終構建它。

許多其他庫將很難移植到您的PC上。 碰到MCU外圍設備的任何東西都不能很好地移植。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM