IDE จัดส่งบอร์ด เฟิร์มแวร์ ตัวอย่าง โมเดลการเรียนรู้ของเครื่อง และสตับของโปรแกรม OpenMV เอง แต่สามารถโหลดเนื้อหาประเภทเดียวกันจากบริษัทอื่นได้เช่นกัน เช่น บอร์ดที่พันธมิตรสร้างขึ้น เฟิร์มแวร์ที่ทำงานบนนั้น ตัวอย่างและโมเดลที่ปรับให้เหมาะสม และการเติมโค้ดให้สมบูรณ์สำหรับ API ที่เฟิร์มแวร์เพิ่ม สิ่งเหล่านี้มาถึงเป็น third-party repositories: โฟลเดอร์ของเนื้อหาที่ IDE ผสานเข้ากับตัวมันเองและคอยอัปเดตอยู่เสมอ
เพจนี้มีผู้ชมสองคน ส่วนใหญ่มีไว้สำหรับบุคคลที่ติดตั้งและจัดการพื้นที่เก็บข้อมูลที่ผู้อื่นเผยแพร่ ส่วนสุดท้าย authoring a repository ใช้สำหรับการสร้างผู้ขาย
13.1.14.1. หน้าพื้นที่เก็บข้อมูลของบุคคลที่สาม
ทุกอย่างจัดการได้จาก Edit → Preferences → OpenMV → Third Party Repositories ตารางแสดงรายการที่เก็บที่ติดตั้งทั้งหมด และสำหรับแต่ละชื่อที่แสดง รหัสแบบสั้น ไม่ว่าจะเป็น Built-in หรือ User เวอร์ชันที่ติดตั้งของเนื้อหาแต่ละประเภทที่มีให้ เช่น เฟิร์มแวร์ ตัวอย่าง รุ่น สตับ และ URL ที่อัปเดต
Built-in หมายความว่าพื้นที่เก็บข้อมูลถูกวางไว้ในไดเร็กทอรีของแอปพลิเคชันโดยผู้ติดตั้งที่ผู้จำหน่ายจัดส่งมาให้ ซึ่งเป็นวิธีที่แพ็คเกจไดรเวอร์เพิ่มไฟล์ลงในโปรแกรม User หมายความว่าคุณติดตั้งด้วยตนเองจาก URL ข้อแตกต่างในทางปฏิบัติเพียงอย่างเดียวคือคุณไม่สามารถลบที่เก็บข้อมูลในตัวออกจาก IDE ได้ - มันถูกลบออกโดยการถอนการติดตั้งอะไรก็ตามที่วางไว้ตรงนั้น - ดังนั้นปุ่ม Remove จึงถูกปิดใช้งาน
13.1.14.4. ลำดับความสำคัญและการแทนที่
ที่เก็บเป็นรายการที่เรียงลำดับ มีลำดับความสำคัญสูงสุดที่ด้านบน และเลื่อนขึ้นและเลื่อนลงเพื่อจัดลำดับรายการที่เลือกใหม่ ลำดับจะมีความสำคัญก็ต่อเมื่อมีแหล่งที่มาสองแหล่งให้สิ่งที่ same: บอร์ดที่มีตัวระบุ USB เดียวกัน หรือตัวอย่าง รุ่น หรือต้นขั้วที่มีชื่อเดียวกัน เมื่อสิ่งนั้นเกิดขึ้น รายการที่สูงกว่าจะชนะ และพื้นที่เก็บข้อมูลทุกแห่งจะชนะเนื้อหาในตัวของ OpenMV นี่เป็นการจงใจ - เป็นวิธีที่ผู้ขายจัดหาเฟิร์มแวร์ของตนเองสำหรับบอร์ดที่ใช้ตัวระบุ USB ของบอร์ด OpenMV ร่วมกัน แทนที่เฟิร์มแวร์หุ้นที่ IDE จะเสนอให้ หรือแทนที่ตัวอย่างหุ้นด้วยอันที่เขียนขึ้นสำหรับฮาร์ดแวร์ของพวกเขา
เนื่องจากการแทนที่จะเปลี่ยนการทำงานของชื่อที่คุ้นเคย เพจจึงไม่มีการซ่อนชื่อใดเลย แผงคำเตือนการแทนที่จะแสดงรายการการแทนที่ทั้งหมดที่มีผล - บอร์ดของพื้นที่เก็บข้อมูล ตัวอย่าง โมเดล หรือต้นขั้วกำลังแทนที่ส่วนใด - และรายการเดียวกันนี้จะปรากฏหนึ่งครั้งเป็นข้อความในครั้งแรกที่เห็นพื้นที่เก็บข้อมูล หากบอร์ด ตัวอย่าง หรือรุ่นไม่ทำงานตามที่เอกสารของ OpenMV อธิบาย แผงนี้เป็นสถานที่แรกที่ต้องพิจารณา
13.1.14.6. การเขียนที่เก็บข้อมูล
พื้นที่เก็บข้อมูลคือโฟลเดอร์ที่ตั้งชื่อตามผู้ขาย โดยเก็บรายการ config.json และโฟลเดอร์ย่อยสำหรับเนื้อหาแต่ละประเภทที่มีให้:
acme/
config.json
firmware/
settings.json board descriptions
ACME_CAM1/ one folder per board, named by boardFirmwareFolder
firmware.bin
romfs0.img
firmware.version
examples/
index.csv which examples show for which board / sensor
01-Getting-Started/ numbered category folders, same as OpenMV's
hello_acme.py
read_sensor.py
02-Acme-Widgets/
spin_widget.py
examples.version
models/
index.csv which models show for which board
acme/ a group; its index.html + image describe it
index.html
image.jpg
person_detector/ one folder per model
person_detector.tflite
person_detector.txt class labels
models.version
stubs/
acme_hal.pyi a module the firmware adds
csi.pyi overrides OpenMV's to add methods
stubs.version
ชื่อโฟลเดอร์คือรหัสที่เก็บ: ตัวอักษรตัวพิมพ์เล็ก, ตัวเลข, - และ _ โดยขึ้นต้นด้วยตัวอักษร โฟลเดอร์ทุกส่วนเป็นทางเลือก จัดส่งเฉพาะสิ่งที่คุณมี ข้างโฟลเดอร์แต่ละส่วนจะมีไฟล์ <part>.version ที่เก็บสตริงเวอร์ชันเดียว (1.2.0) ที่ IDE ใช้ในการตัดสินใจว่าเมื่อใดที่การอัปเดตจะใหม่กว่า
13.1.14.6.1. รายการ
config.json ตั้งชื่อพื้นที่เก็บข้อมูล และชี้ไปที่ไฟล์เก็บถาวรที่ดาวน์โหลดได้สำหรับแต่ละส่วน:
{
"name": "acme",
"displayName": "Acme Robotics",
"homepage": "https://acme.example",
"configUrl": "https://acme.example/openmv/config.json",
"firmware": {
"release": { "version": "1.2.0", "url": "https://acme.example/acme-fw-1.2.0.zip", "sha256": "..." },
"development": { "version": "dev-20260701", "url": "https://acme.example/acme-fw-dev.zip", "sha256": "..." }
},
"examples": { "release": { "version": "1.1.0", "url": "https://acme.example/acme-examples-1.1.0.zip", "sha256": "..." } },
"models": { "release": { "version": "1.0.0", "url": "https://acme.example/acme-models-1.0.0.zip", "sha256": "..." } },
"stubs": { "release": { "version": "1.0.0", "url": "https://acme.example/acme-stubs-1.0.0.zip", "sha256": "..." } }
}
name ต้องตรงกับชื่อโฟลเดอร์ configUrl คือที่อยู่ที่ไฟล์เดียวกันนี้โฮสต์อยู่ IDE จะดึงข้อมูลอีกครั้งเพื่อตรวจสอบการอัปเดต ดังนั้นให้ละเว้นเฉพาะพื้นที่เก็บข้อมูลที่จะไม่อัปเดตเท่านั้น แต่ละส่วนมีช่อง release และเฟิร์มแวร์อาจมีช่อง development ที่ใช้โดยการติดตั้งรีลีสการพัฒนาล่าสุด ค่า Release version จะถูกเปรียบเทียบเป็นตัวเลข ดังนั้นจึงเสนอค่าที่สูงกว่าเป็นการอัปเดต เวอร์ชันการพัฒนาจะถูกเปรียบเทียบเพื่อการเปลี่ยนแปลงเท่านั้น sha256 เป็นทางเลือก แต่จะได้รับการยืนยันเมื่อมี
แต่ละ url ชี้ไปที่ .zip (เฉพาะ zip) ไฟล์เก็บถาวรเก็บ one top-level folder ทุกประการ และ IDE จะติดตั้ง contents ของโฟลเดอร์นั้นเป็นส่วน - ดังนั้นไฟล์เก็บถาวรเฟิร์มแวร์จึงถูกบรรจุในลักษณะนี้:
acme-fw-1.2.0.zip
acme-firmware/ one wrapping folder; its name does not matter
settings.json
ACME_CAM1/
firmware.bin
romfs0.img
และแตกไฟล์ไปที่โฟลเดอร์ firmware/ ที่แสดงก่อนหน้านี้ ตัวอย่าง โมเดล และไฟล์เก็บถาวร stubs ได้รับการบรรจุในลักษณะเดียวกัน -- โฟลเดอร์ตัดคำเดียวที่บรรจุสิ่งที่จะอยู่ภายใน examples/, models/ หรือ stubs/ ชื่อของโฟลเดอร์การตัดคำจะถูกละเว้น สิ่งที่สำคัญคือมีหนึ่งเดียว การซิปไฟล์ที่รูทของไฟล์เก็บถาวรโดยไม่มีโฟลเดอร์ตัดคำ หรือการรวมไฟล์ไว้ในโฟลเดอร์มากกว่าหนึ่งโฟลเดอร์ จะไม่ถูกติดตั้ง วิธีที่ง่ายที่สุดในการแก้ไขให้ถูกต้องคือการซิปโฟลเดอร์ -- เลือก acme-firmware และบีบอัดมัน แทนที่จะเลือกเนื้อหาในนั้น
13.1.14.6.2. บอร์ด ตัวอย่าง โมเดล และสตับ
firmware/settings.json ใช้รูปแบบคำอธิบายบอร์ดเดียวกันกับเฟิร์มแวร์ที่ IDE จัดส่ง เพิ่มรายการ boards ให้กับแต่ละบอร์ดของคุณ กฎบางข้อมีผลเฉพาะกับบอร์ดบุคคลที่สาม: boardFirmwareFolder จะต้องไม่ซ้ำกัน (OpenMV หรือผู้จำหน่ายรายอื่นยังไม่ได้ใช้ เนื่องจากเป็นชื่อโฟลเดอร์ที่ไบนารีของคุณอาศัยอยู่) แต่ละบอร์ดจะต้องมี firmware_version ของตัวเอง (นี่คือสิ่งที่ขับเคลื่อนพรอมต์การอัพเดตเมื่อเชื่อมต่อ) และบอร์ดอาจตั้งค่า boardFirmwareFolderAlias เป็นชื่อโฟลเดอร์เฟิร์มแวร์ของบอร์ด OpenMV เพื่อสืบทอดตัวอย่างและรุ่นหุ้นของบอร์ดนั้น - การหลบหนี ฟักออกมาสำหรับบอร์ดที่เข้ากันได้กับเฟิร์มแวร์กับ OpenMV คาดว่าจะนำตัวระบุ bootloader ของ OpenMV มาใช้ซ้ำ (มีไดรเวอร์ Windows ที่ลงนามแล้ว) ตัวระบุแอปที่ขัดแย้งกับบอร์ดในตัวจะแทนที่บอร์ดนั้น ซึ่งแผงคำเตือนแทนที่จะรายงาน
ตัวอย่างอยู่ในโฟลเดอร์หมวดหมู่ที่มีหมายเลขกำกับ เช่น OpenMV's (01-Getting-Started); หมวดหมู่ที่คุณตั้งชื่อเหมือนกับ OpenMV จะแทรกเข้าไป และชื่อใหม่จะกลายเป็นส่วนเมนูของตัวเอง โมเดลคือโฟลเดอร์ที่เก็บ .tflite และป้ายกำกับคลาส .txt ที่ตรงกัน ซึ่งจัดกลุ่มไว้ภายใต้โฟลเดอร์ที่มี index.html (และรูปภาพเสริม) เป็นคำอธิบายที่แสดงอยู่ข้างๆ ใน Model Zoo examples/index.csv และ models/index.csv เป็นไฟล์บอร์ดและฟิลเตอร์เซ็นเซอร์เดียวกัน ตัวอย่างและโมเดลที่ OpenMV ใช้ จับคู่กับตัวอย่างและเส้นทางโมเดลของคุณ และตัดสินใจว่าไฟล์ใดของคุณจะแสดงสำหรับบอร์ดใด Stubs เป็นไฟล์ .pyi ธรรมดา; IDE มอบโฟลเดอร์ของตนไปยังเซิร์ฟเวอร์ภาษาเพื่อให้แก้ไขควบคู่ไปกับ OpenMV และต้นขั้วที่ตั้งชื่อสำหรับโมดูลที่มีอยู่ (csi.pyi) จะแทนที่ความสมบูรณ์ของโมดูลนั้น
13.1.14.6.3. การเผยแพร่และการปรับปรุง
หากต้องการเผยแพร่ ให้โฮสต์ config.json และไฟล์เก็บถาวรที่อ้างอิงถึง URL ที่เสถียร และมอบ URL config.json ให้กับผู้ใช้เพื่อใช้ในการติดตั้ง ทุกที่ที่ให้บริการไฟล์ธรรมดาบน HTTPS ใช้งานได้ ไม่ว่าจะเป็นเว็บเซิร์ฟเวอร์ ที่เก็บอ็อบเจ็กต์ หรือโฮสต์โค้ด หากต้องการจัดส่งการอัปเดต ให้อัปโหลดไฟล์เก็บถาวรใหม่ เพิ่มค่า version ที่ได้รับผลกระทบในโฮสต์ config.json ที่โฮสต์ และในครั้งถัดไปที่ IDE ของผู้ใช้แต่ละคนเปิดตัวก็จะเสนอการอัปเดต ผู้ใช้ที่ติดตั้งพื้นที่เก็บข้อมูลผ่านโปรแกรมติดตั้งจะได้รับการอัปเดตในลักษณะเดียวกันแทน ตราบใดที่ config.json ที่ติดตั้งนั้นมี configUrl
13.1.14.6.4. โฮสติ้งบน GitHub
GitHub เป็นโฮสต์ที่สะดวก และ IDE ดึงข้อมูลจากมันในลักษณะเดียวกับที่ดึงทรัพยากรของตัวเอง มีสองส่วนในการวาง: รายการและไฟล์เก็บถาวร
เก็บ config.json ไว้ในที่เก็บและให้ผู้ใช้ raw URL ซึ่งเป็นที่อยู่ที่ให้บริการไฟล์โดยตรง ไม่ใช่หน้า GitHub ที่แสดงไฟล์นั้น ปุ่ม Raw บนไฟล์จะแสดงขึ้นมา มันมีแบบฟอร์ม
https://raw.githubusercontent.com/<user>/<repo>/<branch>/config.json
URL แบบดิบนั้นคือสิ่งที่ผู้ใช้วางลงในการติดตั้งจาก URL และสิ่งที่คุณใส่ไว้ในรายการ configUrl ของตัวเอง ดังนั้น IDE จึงดึงข้อมูลอีกครั้งเพื่อตรวจสอบการอัปเดต การชี้ไปที่สาขา (main) หมายถึงการผลักดันการกระทำใหม่เพื่อเผยแพร่การเปลี่ยนแปลง การชี้ไปที่แท็กจะทำให้ผู้ใช้ปักหมุดเป็นเวอร์ชันที่แก้ไขแล้วแทน
โฮสต์ไฟล์เก็บถาวร .zip เป็น release assets แทนที่จะคอมมิต -- รีลีสถูกสร้างขึ้นสำหรับการดาวน์โหลดแบบไบนารี ดังนั้นชุดเฟิร์มแวร์หลายเมกะไบต์จึงอยู่ในนั้น ไม่ใช่ในประวัติของพื้นที่เก็บข้อมูล แนบไฟล์เก็บถาวรแต่ละรายการกับรุ่น GitHub และใช้ URL ดาวน์โหลดซึ่งมีแบบฟอร์ม
https://github.com/<user>/<repo>/releases/download/<tag>/acme-fw-1.2.0.zip
ในช่อง url ของไฟล์ Manifest โดยแต่ละช่องจะมี sha256 ของไฟล์เก็บถาวร การจัดส่งการอัปเดตคือ: แนบไฟล์เก็บถาวรใหม่ไปยังรีลีส แก้ไข config.json เพื่อชี้ไปที่ไฟล์เหล่านั้นและชนเวอร์ชันต่างๆ และคอมมิต IDE จะรับการเปลี่ยนแปลงในการเปิดตัวครั้งถัดไป (ไฟล์ Raw จะถูกส่งผ่านแคชที่รีเฟรชภายในไม่กี่นาทีของการพุช)