วิธีการจัดระเบียบโครงสร้างโครงการ Arduino ของฉันสำหรับการควบคุมแหล่งที่ง่าย?


75

นานมาแล้วที่ฉันกำลังมองหาคำตอบที่ดีสำหรับคำถามนี้

โดยทั่วไปแล้วโครงการ Arduino ใด ๆ แต่โครงการที่ง่ายที่สุดจะรวมถึง:

  • ไฟล์ซอร์สโค้ดหลัก MyProject.ino
  • ห้องสมุดเฉพาะสำหรับโครงการ ( MyProjectLibrary1.h, MyProjectLibrary1.cpp... )
  • ห้องสมุดบุคคลที่สาม (โดยทั่วไปเป็นโอเพนซอร์สฟรีเพิ่มด้วยตนเองไปยังไดเรกทอรีห้องสมุด Arduino)
  • แผนผัง, PCB ไดอะแกรม
  • เอกสาร
  • ...

ทั้งหมดนี้ทำให้เป็นการยากที่จะเก็บรหัสและเอกสารทั้งหมดของโครงการหนึ่งภายใต้การจัดการรหัสที่มา (เช่น Subversion, Git หรือ GitHub)

การจัดการการควบคุมแหล่งที่มาของโครงการของคุณหมายถึงการจัดการเวอร์ชันของไฟล์ทั้งหมดที่ใช้โดยโครงการรวมถึงห้องสมุดบุคคลที่สาม

ตอนนี้สำหรับโครงการเดียวฉันต้องกำหนดโครงสร้างไดเรกทอรีที่:

  • รวมไฟล์โครงการทั้งหมดตามที่อธิบายไว้ข้างต้น
  • ฉันสามารถส่งมอบเครื่องมือการจัดการรหัสที่มา (รวมถึงบุคคลที่สาม)
  • ฉันสามารถเช็คเอาต์ที่ใดก็ได้ในฮาร์ดไดรฟ์ของฉันและสร้างโครงการจากที่นั่น (ต้องเป็นสถานที่เดียวตามที่กำหนดโดย Arduino IDE)
  • ฉันสามารถ zip ลงในไฟล์เก็บถาวรในตัวที่ฉันสามารถส่งให้เพื่อนเพื่อให้เขาสร้างได้ง่ายที่สุด (ไม่ต้องดาวน์โหลดด้วยตนเองเพิ่มเติม)

สิ่งที่ฉันพบว่าเป็นเรื่องยากสำหรับโครงการ Arduino คือการจัดการการพึ่งพาไลบรารีภายนอก ผู้พัฒนาโปรเจ็กต์ Java มีที่เก็บmavenสำหรับสิ่งนั้นและช่วยในการจัดการคลังข้อมูลภายนอกทั้งหมด แต่เราไม่มีระบบที่เทียบเท่าสำหรับห้องสมุด Arduino

ฉันสนใจที่จะรู้ว่าผู้สร้างโปรเจ็กต์ Arduino คนอื่น ๆ จัดการกับเรื่องเหล่านี้ในโครงการของตัวเองอย่างไร

นอกจากนี้โปรดทราบว่าฉันเปิดให้เปลี่ยนกระบวนการพัฒนาของฉันรวมถึง IDE ของฉัน (ปัจจุบันฉันใช้ Eclipse กับปลั๊กอิน Arduino ส่วนใหญ่แล้วฉันมั่นใจได้ว่าโครงการของฉันสามารถทำงานกับ Arduino IDE ได้โดยตรง)


ฉันยังดิ้นรนกับสิ่งนี้ ฉันมีสองโปรเจ็กต์ที่ต้องการไลบรารี่ภายนอกที่แตกต่างกันและในปัจจุบันพวกเขาอยู่นอกการควบคุมเวอร์ชัน
Cybergibbons

1
โปรดทราบสำหรับการวิจัยต่อไปว่าผู้ที่มีแพคเกจผู้จัดการ JavaScript ได้รับ Node.js / npm และ bower, PHP ได้รับลูกแพร์และนักแต่งเพลง ฯลฯ
kaiser

คำตอบ:


30

วิธีการจัดการโครงการ arduino ของฉันค่อนข้างง่ายโครงการของฉันทั้งหมดเป็นที่เก็บคอมไพล์ดังนั้นอย่างน้อยก็มีดังต่อไปนี้:

  • โครงการ/

ฉันมีความพึงพอใจกับการใช้โปรแกรมแก้ไขที่ชื่นชอบและMakefileที่ฉันได้สร้างขึ้นเพื่อทำงานกับกรณีการใช้งานส่วนใหญ่ (และฉันได้ปรับปรุงให้ดีขึ้นในสิ่งที่ฉันจะแบ่งปันในไม่ช้า)

สำหรับห้องสมุดฉันชอบที่จะเก็บมันไว้เป็นที่เก็บของตัวเองและใช้ git submodule เพื่อรวมพวกมันเข้ากับโครงการ เนื่องจากห้องสมุดจำนวนมากที่เขียนโดยชุมชนนั้นถูกแชร์เป็นที่เก็บข้อมูลคอมไพล์ซึ่งเป็นคำตอบทั่วไปที่ดี จากนั้นใน Makefile ฉันแค่ต้องเพิ่มเส้นทางของไลบรารีที่ฉันต้องการรวมไว้ในตัวแปรLOCALLIBS

ถึงแม้ว่าสำหรับบางโครงการมันก็สมเหตุสมผลแล้วที่จะห่อหุ้มไลบรารีลงในไลบรารีเลเยอร์นามธรรมฮาร์ดแวร์ที่สร้างขึ้นสำหรับโครงการจากนั้นฉันชอบที่จะใช้พา ธ เช่น:

  • project
    • project.ino
    • Makefile
    • project_hal_lib
      • library1
      • library2
      • library3
      • ...

แม้ว่าด้วย arduino 1.5.xa มีวิธีการใหม่ในการระบุไลบรารีที่จะนำเสนอวิธีการสร้างและสร้างโครงการ arduino ในแบบเดียวกับที่เราทำกับ pipy และ virtualenv ใน python เช่นคุณกำหนดชุดของห้องสมุดที่คุณต้องการและพวกมัน รับดาวน์โหลด


ฉันทำงานกับคำตอบที่คล้ายกัน คุณเอาชนะฉันมัน!
asheeshr

+1 ขอบคุณ! วิธีนี้ดูน่าสนใจทีเดียว ฉันจะลองดูในสัปดาห์นี้ (ฉันต้องตรวจสอบวิธีตั้งค่าไฟล์ Makefile ก่อน)
jfpoilpret

@SheeshR หากคำตอบของคุณคล้ายกันนั่นหมายความว่ามันยังคงมีความแตกต่างใช่ไหม? ฉันสนใจที่จะรู้เกี่ยวกับสิ่งเหล่านี้!
jfpoilpret

อันที่จริงแล้วการเปลี่ยนแปลงที่สำคัญที่มาพร้อมกับเวอร์ชันต่อไปของ Makefile ของฉันคือความสามารถในการflashใช้โปรแกรมเมอร์หรือuploadใช้ bootloader รวมถึงการจัดการการรวม bootloader กับเฟิร์มแวร์ ฉันยังเขียนฟิวส์ set-infile
zmo

@zmo สมควรได้รับรางวัลถึงแม้ว่า Makefile โซลูชันของคุณจะไม่สามารถทำงานได้ในสถานการณ์ของฉัน (ใช้ Windows แต่ฉันไม่ได้ระบุจุดนั้น) แต่ฉันเชื่อว่าการใช้หนึ่งในโซลูชัน makefile ที่มีอยู่เป็นวิธีที่จะไป เมื่อฉันได้พบ tworks หนึ่งท่าสำหรับฉันฉันจะโพสต์คำตอบของฉันที่นี่
jfpoilpret

23

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการคัดลอกไฟล์ส่วนหัวและรหัสของไลบรารีลงในไดเรกทอรีต้นทางของคุณและรวมไว้ด้วย

myproject/
    myproject.ino
    somelib.h
    somelib.cpp

ในรหัสของคุณคุณสามารถทำได้ include "somelib.h"

ข้อเสียคือห้องสมุดต้องอยู่ในโฟลเดอร์เดียวกันไม่ใช่โฟลเดอร์ย่อยดังนั้นจึงทำให้ไดเรกทอรีของคุณดูยุ่งเหยิง


เกี่ยวกับโครงสร้างไดเรกทอรีของโครงการทั้งหมดของฉันรวมถึงแผนงานและเอกสารประกอบเหมืองมักจะมีลักษณะเช่นนี้:

myproject/
  schematics/ - eagle files or whatever you may have
  docs/       - include relevant datasheets here
  test/       - any test cases or other code to test parts of the system.
  myproject/  - since Arduino code must be in a directory of the same name
    myproject.ino
    ...

ข้อเสียอีกอย่างคือฉันจะต้องคัดลอกไลบรารีเดียวกันในหลายโครงการ นอกจากนี้ยังไม่ชัดเจนสำหรับฉันหากคุณใส่เฉพาะห้องสมุดของคุณในที่นั่นหรือในห้องสมุดบุคคลที่สาม?
jfpoilpret

จุดแรก: นั่นไม่ใช่ข้อเสียจริง ๆ นั่นเป็นเพียงผลข้างเคียงของการรักษาไลบรารีและแหล่งที่มาของโครงการไว้ด้วยกันตามที่คุณต้องการด้วยการควบคุมเวอร์ชัน เกิดอะไรขึ้นถ้าโครงการอื่นต้องการไลบรารีเวอร์ชันที่อัพเดต? ถ้าคุณดัดแปลงมัน จุดที่สอง: ทั้งสองจะทำงาน
sachleen

1
ฉันไม่. Arduino IDE ค่อนข้าง จำกัด ในหลาย ๆ ด้าน คุณอาจต้องการตรวจสอบสภาพแวดล้อมที่ดีกว่าในการทำงานที่ได้รับการสนับสนุนที่ดีกว่านี้ ผู้คนสร้างไฟล์ที่กำหนดเองซึ่งอนุญาตให้คุณนำเข้าห้องสมุดจากแหล่งอื่นเช่นกัน
sachleen

1
นี่ไม่ใช่วิธีที่ดีในการจัดระเบียบโครงการจากมุมมองของใบอนุญาตซอฟต์แวร์ หากคุณรวมถึงห้องสมุดบุคคลที่สามในโครงการของคุณซึ่งอาจมีใบอนุญาตที่แตกต่างกันคุณอาจละเมิดพวกเขาทันทีที่คุณเริ่มแบ่งปันไฟล์โครงการ ใบอนุญาตโอเพ่นซอร์สที่แตกต่างกันโดยทั่วไปจะไม่สามารถทำงานร่วมกัน
asheeshr

3
@AsheeshR มีไฟล์ทั้งหมดของคุณในไดเรกทอรีเดียวดังนั้น arduino IDE ไม่ได้บ่นไม่ได้เป็นวิธีที่ดีในการจัดระเบียบโครงการทั้งหมด มันเป็นเพียงวิธี อย่าลังเลที่จะเสนอทางออกที่ดีกว่า ฉันไม่รู้จักที่ยังให้คุณใช้ซอฟต์แวร์ Arduino
sachleen

20

Git submodulesนั้นทรงพลังอย่างยิ่งเมื่อพูดถึงการจัดระเบียบ repository ต่างๆหลายระดับ การจัดการหลายไลบรารีจากแหล่งต่าง ๆ และแม้แต่การจัดการบางส่วนของโครงการของคุณเองซึ่งอาจถูกจัดเก็บในแหล่งต่าง ๆ กลายเป็นเรื่องง่ายด้วย submodules คอมไพล์

โครงสร้างสารบบ

วิธีจัดระเบียบโครงการของคุณคือ:

  • projectA - ไดเรกทอรีหลัก

    • projectA - ไดเรกทอรีซอร์สโค้ดที่มีรหัส Arduino

      1. projectA.ino
      2. header.h
      3. implementation.cpp
    • เอกสาร - ไดเรกทอรีเอกสารหลักของคุณ

    • แผนงาน - สิ่งเหล่านี้อาจได้รับการดูแลแยกต่างหากใน repo Git แยกต่างหากหรือเป็นส่วนหนึ่งของ repo เดียวกัน

    • libs - สิ่งนี้จะมีห้องสมุดบุคคลที่สามของคุณ

      1. libA - สิ่งเหล่านี้อาจถูกเก็บรักษาไว้เป็นที่เก็บของบุคคลที่สาม
      2. libC - ...
    • อนุญาต

    • README

    • Makefile - จำเป็นในการจัดการการอ้างอิงข้ามไดเรกทอรี

ขั้นตอนการทำงาน

คุณจะทำตามรอบปกติของการเปลี่ยนแปลงเพิ่มและกระทำเท่าที่เกี่ยวข้องกับพื้นที่เก็บข้อมูลหลัก สิ่งที่น่าสนใจกับที่เก็บย่อย

คุณมีตัวเลือกในการเพิ่มที่เก็บลงในไดเรกทอรีหลักของที่เก็บหลักของคุณ ซึ่งหมายความว่าส่วนใดส่วนหนึ่งของโครงสร้างไดเรกทอรีของคุณเช่นเอกสารแผนงาน ฯลฯ สามารถเก็บรักษาไว้เป็นที่เก็บแยกต่างหากและอัปเดตอย่างต่อเนื่องจาก

คุณสามารถทำได้โดยใช้git submodule add <repo.git>คำสั่ง git submodule update <path>เพื่อให้มันถึงวันที่คุณสามารถใช้

เมื่อมันมาถึงการบำรุงรักษาห้องสมุดบุคคลที่สามหลายแห่งในพื้นที่เก็บข้อมูลของคุณเช่นนั้นแต่ละรุ่นสามารถควบคุมได้ด้วยตัวเองหรือแต่ละคนสามารถได้รับการปรับปรุงให้ทันสมัยถ้าจำเป็น Git submodule จะช่วยคุณประหยัดทั้งวัน!

หากต้องการเพิ่ม repo บุคคลที่สามเพื่อlibsgit submodule add <lib1.git> libs/lib1ใช้คำสั่ง จากนั้นหากต้องการบำรุงรักษาไลบรารีที่จุดคงที่ในรอบการเผยแพร่ให้ทำเครื่องหมายที่ไลบรารีและทำการคอมมิชชัน git submodule update <path>เพื่อให้ห้องสมุดให้ทันสมัยใช้คำสั่ง

ตอนนี้คุณสามารถบำรุงรักษาที่เก็บข้อมูลหลายแห่งภายในที่เก็บหลักและไลบรารีของบุคคลที่สามหลายแห่งในระยะอิสระของพวกเขา

วิธีเปรียบเทียบกับไดเรกทอรีเดียว

ในขณะที่วิธีการไดเรกทอรีเดียวที่ง่ายที่สุดมันเป็นไปไม่ได้ที่จะควบคุมส่วนของไดเรกทอรีรุ่นโดยไม่ต้องเจ็บปวดมาก ดังนั้นวิธีการที่ง่ายล้มเหลวในการรองรับที่เก็บที่แตกต่างกันกับรัฐที่แตกต่างกันในโครงการ

วิธีนี้ช่วยให้สามารถดูแลหลาย ๆ ที่เก็บ แต่ต้องใช้ Makefile เพื่อจัดการกระบวนการรวบรวมและเชื่อมโยง

ขึ้นอยู่กับความซับซ้อนของโครงการของคุณสามารถเลือกวิธีการที่เหมาะสมที่สุด


1
+1 แต่ในฐานะ sidenote: Git Submodules นั้นค่อนข้างไม่แน่นอนและมีแนวโน้มที่จะหลุด มันทำให้ไม่แตกต่างกันถ้าคุณใช้ไดเรกทอรีเดียวหรือหลาย (เช่นvendor, node_modulesฯลฯ ) Git อ้างอิงและติดตามมัน
kaiser

"ไม่สร้างความแตกต่างหากคุณใช้ไดเรกทอรีเดียวหรือหลายรายการ (เช่นผู้ขาย node_modules ฯลฯ )" ฉันไม่เข้าใจส่วนนี้ คุณสามารถทำอย่างละเอียด?
asheeshr

17

นี่คือวิธีที่ฉันตัดสินใจที่จะติดตามโครงการของฉันในที่สุด

Arduino-CMake

การตัดสินใจที่สำคัญครั้งแรกที่ฉันทำคือการเลือกเครื่องมือสร้างที่สามารถทำงานได้กับสภาพแวดล้อมของฉัน (Windows) แต่ไม่ จำกัด เฉพาะมัน (ฉันต้องการให้โครงการของฉันสามารถนำมาใช้ใหม่ได้ง่ายโดยผู้อื่น)

ฉันได้ทดสอบเครื่องมือโอเพนซอร์ส Arduino หลายแหล่ง:

  • Guyzmo Makefile (แนะนำโดย @zmo คำตอบ): นี่เป็นเพียงมาตรฐาน Makefile handcrafted สำหรับ Arduino builds; นี่คือ Unix Makefile แต่มีพอร์ตที่ดีของ Unix make สำหรับ Windows ; ยังโชคไม่ดีที่ Makefile นี้ใช้งานได้กับ Unix เท่านั้นแน่นอนว่ามันสามารถปรับใช้กับ Windows ได้ แต่ฉันต้องการเครื่องมือที่ใช้งานได้ "นอกกรอบ"
  • Arduino-Makefile (แนะนำโดย @adnues answer): นี่เป็นโครงการขั้นสูงมากขึ้นจาก Unix Makefile ที่มุ่งหวังที่จะสามารถนำมาใช้ซ้ำได้อย่างง่ายดายโดยโครงการ Arduino ทั้งหมด มันได้รับการบันทึกไว้ว่าทำงานบน Mac, Linux และ Windows แต่การสนับสนุนของ Windows พิสูจน์ได้ว่าผิดในการทดลองครั้งแรกของฉัน (การพึ่งพาเชลล์ Unix จำนวนมาก)
  • Graduino (ไม่แนะนำโดยคำตอบใด ๆ ): เครื่องมือสร้างนี้ตั้งอยู่บนพื้นฐานของเครื่องมือสร้าง gradle ที่รู้จักกันดีจากโลก Groovy ; เครื่องมือดูเหมือนจะทำได้ค่อนข้างดี แต่ต้องมีความรู้ (groovy / gradle) แบบ groovy / gradle และมีเอกสารเพียงเล็กน้อยเท่านั้น ฉันตัดสินใจที่จะไม่ไปกับมันเนื่องจากภาระในการติดตั้ง groovy และ gradle สำหรับมัน (ฉันต้องการหลีกเลี่ยงสิ่งที่ต้องมีก่อนมากเกินไปสำหรับผู้ที่ต้องการสร้างโครงการของฉันในสภาพแวดล้อมของพวกเขา)
  • Arduino-CMake (ไม่แนะนำโดยคำตอบใด ๆ ): นี่เป็นสิ่งที่ดีที่สุด แต่ก็มีประวัติอันยาวนานมีผู้สนับสนุนและผู้ดูแลหลายคนมีเอกสารที่ดีมากมาพร้อมกับตัวอย่างที่ง่ายและมีโพสต์บล็อกการสอนที่ดี เว็บเช่นที่นี่และมี มันขึ้นอยู่กับ CMake , "Make ข้ามแพลตฟอร์ม"

ฉันได้พบArduinoDevelซึ่งเป็นเครื่องมือสร้าง Arduino ตัวอื่นซึ่งฉันยังไม่ได้ทดลอง - ที่สามารถสร้างUnix Makefilesหรือไฟล์ant build.xml ; ดูเหมือนว่าจะน่าสนใจ แต่มีข้อ จำกัด ในแง่ของการใช้งาน

ในที่สุดฉันตัดสินใจไปกับArduino-CMake :

  • มันง่ายในการติดตั้ง: เพียงแค่ติดตั้งCMakeบนเครื่องของคุณและคัดลอก Arduino-CMake ในไดเรกทอรีที่เข้าถึงได้ง่าย (ผ่านเส้นทางสัมพัทธ์) จากไดเรกทอรีโครงการของคุณ
  • ตัวอย่างทำงานนอกกรอบให้ฉัน (เพียงแค่แสดงความคิดเห็นในCMakeLists.txtไฟล์การกำหนดค่าเพื่อปรับคุณสมบัติที่จำเป็นสำหรับสภาพแวดล้อมของฉันเช่นประเภท Arduino พอร์ตอนุกรม)
  • คุณสามารถจัดระเบียบโครงการของคุณในแบบที่คุณต้องการ
  • มันสามารถสร้างไฟล์การกำหนดค่าสำหรับเครื่องมือบิลด์ต่างๆได้ (ฉันเพิ่งทดสอบUnix Makefilesเท่านั้น) รวมถึงโครงการEclipse
  • ใน make ที่สร้างขึ้นเป้าหมายจำนวนมากถูกสร้างเพื่อสนับสนุน:

    • สร้างห้องสมุด
    • สร้างโปรแกรม
    • โปรแกรมอัพโหลดไปยังบอร์ด
    • การเปิดตัวจอภาพแบบอนุกรม
    • และอีกสองสามฉันยังไม่ได้ทดสอบ

โครงสร้างโครงการ

เนื่องจาก Arduono-CMake ไม่ได้กำหนดโครงสร้างไดเรกทอรีสำหรับโครงการของคุณคุณสามารถเลือกโครงสร้างที่เหมาะกับคุณที่สุด

นี่คือสิ่งที่ฉันทำ personnaly (ที่ยังคงต้องการการปรับแต่งเพิ่มเติม แต่ตอนนี้ฉันมีความสุขกับมัน):

ป้อนคำอธิบายรูปภาพที่นี่

ฉันตัดสินใจที่จะวางโครงการทั้งหมดของฉันไว้ในarduino-stuffสารบบทั่วไป(ซึ่งฉันตั้งใจจะใช้ gitub โดยรวมฉันรู้ว่าฉันสามารถใช้submodules gitสำหรับองค์กรที่ดีขึ้นใน gitub แต่ก็ยังไม่มีเวลาตรวจสอบ)

arduino-stuff มีเนื้อหาดังต่อไปนี้:

  • build: นั่นคือไดเรกทอรีที่ cmake และ make จะสร้างข้อมูลทั้งหมด (makefiles, แคช, ไฟล์ออบเจ็กต์ ... ); อันนี้ไม่ได้รับการมุ่งมั่นที่จะ GitHub
  • cmake: ที่หนึ่งเป็นเพียงสำเนา (แปร) ของCMake Arduino-CMakeไดเรกทอรี อันนี้ได้รับบน GitHub เพื่อให้ง่ายขึ้นสำหรับคนที่ต้องการสร้างโครงการของฉัน
  • CMakeLists.txt: นั่นคือการกำหนดค่า CMake "ทั่วโลก" ที่ประกาศค่าเริ่มต้นทั้งหมดสำหรับสภาพแวดล้อมของฉัน (บอร์ด, พอร์ตอนุกรม) และรายการไดเรกทอรีย่อยเป้าหมายการสร้าง
  • TaskManager: นี่เป็นโครงการแรกของฉันที่ใช้ Arduino-CMake อันนี้เป็นห้องสมุดที่มีตัวอย่าง ที่ไม่ถูกต้องนี้ยังมีCMakeLists.txtที่ระบุเป้าหมายสำหรับโครงการ

จุดที่ต้องปรับปรุง

โซลูชันปัจจุบันยังไม่สมบูรณ์แบบ ในบรรดาการปรับปรุงที่ฉันเห็น (เป็นเพียงโครงการ Arduino-CMake เพื่อรวมการปรับปรุงเหล่านี้หากเห็นว่าเหมาะสม):

  • คุณสมบัติในการคัดลอกไดเรกทอรีห้องสมุดจากโครงการปัจจุบันไปยังไดเรกทอรีห้องสมุด Arduino
  • คุณสมบัติในการอัปโหลดห้องสมุดไปยัง GitHub
  • คุณสมบัติในการดาวน์โหลดห้องสมุดจาก GitHub

2
คุณลอง PlatformIO หรือยัง อาจไม่เคยมีเมื่อคุณถามคำถามนี้ .. platformio.org
ohhorob

4
MyProject
|_MyProject
  |_MyProject.ino
  |_data
  |  |_documentation 
  |  |_PCB
  |  |_schematics
  |_src
     |_MyProjectLibrary1
     |_ThirdPartyLibrary

โฟลเดอร์ MyProject (root ที่เก็บ)

เหตุผลที่ฉันแนะนำMyProjectโฟลเดอร์รูทซ้ำซ้อนที่คุณพูดถึงโดยใช้ GitHub เมื่อคุณดาวน์โหลด (แทนการโคลน) เนื้อหาของที่เก็บ GitHub ชื่อสาขาหรือแท็กจะถูกผนวกเข้ากับชื่อที่เก็บ (เช่นMyProject-master) Arduino IDE กำหนดให้ชื่อโฟลเดอร์ร่างตรงกับชื่อไฟล์ร่าง หากคุณเปิดไฟล์. ino ที่อยู่ในโฟลเดอร์ที่ไม่ตรงกับชื่อสเก็ตช์ Arduino IDE จะแจ้งให้คุณสร้างโฟลเดอร์สเก็ตช์ที่มีชื่ออย่างเหมาะสมและย้ายสเก็ตช์ไปยังโฟลเดอร์นั้น นอกเหนือไปจากนี้ไม่ใช่ประสบการณ์เริ่มต้นที่ดีมากสำหรับผู้ใช้ปัญหาที่ยิ่งใหญ่กว่าคือ Arduino IDE อาจไม่คัดลอกไฟล์ที่เกี่ยวข้องอื่น ๆ ทั้งหมดไปยังโฟลเดอร์ที่สร้างขึ้นใหม่ซึ่งอาจทำให้โปรแกรมไม่สามารถรวบรวมได้อีกต่อไป โดยการวางร่างไว้ในโฟลเดอร์ย่อยคุณหลีกเลี่ยง GitHub ที่เปลี่ยนชื่อของโฟลเดอร์ร่าง

หากสิ่งที่ชื่อไฟล์ GitHub ไม่ใช่ปัญหาสำหรับคุณโฟลเดอร์รูทที่ซ้ำซ้อนก็ไม่จำเป็น

โฟลเดอร์ข้อมูล

ฉันขอแนะนำให้ใช้dataโฟลเดอร์ย่อยสำหรับไฟล์ที่ไม่ใช่รหัสของคุณเพราะ Arduino IDE มีการจัดการโฟลเดอร์ย่อยของชื่อนั้นเป็นพิเศษ พวกเขาจะถูกคัดลอกไปยังตำแหน่งใหม่เมื่อคุณทำFile> Save As ... โฟลเดอร์ย่อยของชื่ออื่นไม่ได้

โฟลเดอร์ src

srcโฟลเดอร์ย่อยที่มีคุณสมบัติพิเศษในการช่วยให้รวบรวม recursive ซึ่งหมายความว่าคุณสามารถออกจากไลบรารีในโฟลเดอร์นั้นและรวมไว้ในร่างของคุณดังนี้:

#include "src/MyProjectLibrary1/MyProjectLibrary1.h"
#include "src/ThirdPartyLibrary/ThirdPartyLibrary.h"

Arduino 1.5 ห้องสมุดโครงสร้างโฟลเดอร์รูปแบบนอกจากนี้ยังได้รับการสนับสนุนที่คุณจะต้องปรับของคุณ#includeงบตาม

โปรดทราบว่า Arduino IDE 1.6.10 เท่านั้น (arduino-builder 1.3.19) และรองรับการรวบรวมร่างแบบเรียกซ้ำ

น่าเสียดายที่ห้องสมุดบางแห่งใช้#includeไวยากรณ์ที่ไม่ถูกต้องสำหรับไฟล์ในเครื่อง (เช่น#include <ThirdPartyLibrary.h>แทน#include "ThirdPartyLibrary.h") ยังคงใช้งานได้เมื่อติดตั้งไลบรารีไว้ในหนึ่งในlibrariesโฟลเดอร์Arduino แต่ไม่สามารถใช้งานได้เมื่อมีการรวมไลบรารีเข้ากับร่างภาพ ดังนั้นห้องสมุดบางแห่งอาจต้องการการแก้ไขเล็กน้อยเพื่อใช้วิธีนี้

ฉันชอบสิ่งนี้มากกว่าการทิ้งไฟล์ไลบรารีทั้งหมดในรูทของโฟลเดอร์ร่างเพราะมันยุ่งและไฟล์ไลบรารีทุกไฟล์จะแสดงใน Arduino IDE เป็นแท็บเมื่อคุณเปิดร่าง (แน่นอนว่าไฟล์ต้นฉบับใด ๆ ที่คุณทำ ต้องการให้สามารถแก้ไขได้จาก Arduino IDE ควรวางไว้ในโฟลเดอร์ root sketch)

ความสามารถในการใช้ห้องสมุดที่รวมไว้นั้นสอดคล้องกับเป้าหมายอื่นของคุณ:

ส่งไปให้เพื่อนเพื่อให้เขาสร้างได้ง่ายที่สุด

การลบข้อกำหนดในการติดตั้งไลบรารีด้วยตนเองทำให้โครงการใช้งานง่ายขึ้นมาก

นี่จะเป็นการหลีกเลี่ยงโอกาสที่จะเกิดความขัดแย้งกับไฟล์ไลบรารีเวอร์ชันอื่นที่มีชื่อเดียวกันซึ่งอาจติดตั้งไว้ก่อนหน้านี้


3

คุณสามารถใช้ makefile https://github.com/sudar/Arduino-Makefile สำหรับการรวบรวมรหัส Arduino คุณไม่จำเป็นต้องใช้ IDE


1
ฉันได้ลองใช้แล้ว แต่น่าเสียดายที่มันสามารถใช้ได้กับเครื่อง Unix เท่านั้นและฉันต้องการการสนับสนุน Windows ขณะนี้ฉันกำลังประเมินโครงการอื่นตาม CMake แต่ฉันยังไม่ได้ทำ ฉันจะโพสต์คำตอบเมื่อฉันตัดสินใจเลือกเครื่องมือ
jfpoilpret

0

อาจจะช้าไปหน่อยสำหรับเกม แต่เป็นคำถามที่ได้รับความนิยมมากพอที่จะตอบโดยใช้วิธีการที่แตกต่างจากที่โพสต์ไปแล้ว

หากคุณต้องการรักษาความเข้ากันได้กับ Arduino IDE โดยตรงคุณสามารถใช้สิ่งที่ฉันได้อธิบายไว้ที่นี่:

https://gitlab.com/mikealger/ExampleArduinoProjectStructure/tree/master/ExampleSketchBook

ฉันยึดสิ่งเหล่านี้เป็นส่วนใหญ่จากบันทึกของArduino - โครงสร้างโครงการและกระบวนการสร้างและเคล็ดลับบางอย่างที่ฉันได้รับในช่วงหลายปีที่ผ่านมา

ฉันไม่รู้จริง ๆ ว่าทำไมนี่จึงหายากผ่านทางหน้า Arduino โดยตรงดูเหมือนว่าโง่มาจากพื้นหลังกึ่งมืออาชีพที่กระบวนการสร้างเป็นป้าน

ขอให้โชคดีที่สุด


ลิงก์ gitlab ดูเหมือนจะใช้งานไม่ได้
Greenonline

มันไม่ทำงานโดยไม่ต้องเชื่อมโยงโดยตรง? ie gitlab.com/mikealger/ExampleArduinoProjectStructure
Mike Alger

ที่จริงทั้งสองลิงก์ทำงานใน Firefox แต่ไม่สามารถใช้งานได้กับ Chrome รุ่นเก่าของฉัน 49.0.2623.112 (64- บิต) ฉันไม่คิดว่าจะเป็นกังวล :-)
Greenonline
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.