v3.4.2

v3.4.2 เป็นการเปิดตัวครั้งใหญ่ มีการนำเสนอ OpenMV Cam H7 Plus (SDRAM, บัฟเฟอร์เฟรมขนาดใหญ่สำหรับการจับภาพความละเอียดสูง), กล้อง OV5640 5 MP, การรองรับ FDCAN, การเขียนไดรเวอร์ OV2640 ใหม่, Image.jpeg_encode_for_ide(), และไลบรารี pid / modbus ใหม่ API ifconfig() ของ WINC1500 และค่าเริ่มต้นของ find_apriltags() มีการเปลี่ยนแปลง — อ่านการเปลี่ยนแปลงที่ทำให้โค้ดเดิมเสียหายด้านล่าง

จุดเด่น

  • OpenMV Cam H7 Plus — บอร์ดใหม่พร้อมไดรเวอร์ SDRAM และบัฟเฟอร์เฟรมขนาด ~31 MB สำหรับการจับภาพความละเอียดสูง

  • ไดรเวอร์กล้อง OV5640 5 MP พร้อมการตรวจจับแบบ I2C

  • การรองรับอุปกรณ์ต่อพ่วง FDCAN พร้อมตัวอย่าง CAN

  • การเขียน OV2640 ใหม่ — ภาพตรง, ฟังก์ชันออโต้ที่ทำงานได้, JPEG snapshot, และ framesize sensor.XGA ใหม่

  • IDE JPEGImage.jpeg_encode_for_ide() และการส่ง JPEG ขนาดใหญ่ไปยัง IDE โดยอัตโนมัติ

  • การเปลี่ยนแปลงที่ทำให้โค้ดเดิมเสียหาย: semantics ของ WINC1500 WLAN.ifconfig() เปลี่ยนแปลง, MQTTClient.wait_msg() ไม่ raise เมื่อ recv ว่างอีกต่อไป, และ find_apriltags() ค่าเริ่มต้นเป็น 4-way connectivity — ดูการเปลี่ยนแปลงที่ทำให้โค้ดเดิมเสียหาย

คุณสมบัติใหม่

  • WiFi — เพิ่ม WLAN.netinfo() (ส่งคืน (rssi, security, ssid, mac, ip)) และการกำหนดค่า IP แบบ static ของ WINC1500 ผ่าน WLAN.ifconfig() พร้อมตัวอย่าง static-IP

  • FDCAN — เพิ่มการรองรับอุปกรณ์ต่อพ่วง FDCAN และตัวอย่าง can.py

  • IDE JPEG — เพิ่ม Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); JPEG ขนาดใหญ่ส่งไปยัง IDE โดยอัตโนมัติเมื่อบัฟเฟอร์มีขนาดเล็กเกินไป

  • ไลบรารี — เพิ่มไลบรารี PID-controller pid, ไลบรารี RTU slave modbus (พร้อมตัวอย่าง 32-modbus), และคลาส SSD1306_I2C สำหรับจอ OLED แบบ I2C

  • ตัวอย่าง — เพิ่ม MQTT subscribe (mqtt_sub.py, โดย mqtt.py เปลี่ยนชื่อเป็น mqtt_pub.py)

  • เซนเซอร์ — เพิ่ม framesize sensor.XGA (1024x768); print() / repr() บนภาพ Bayer ตอนนี้ส่งออก JSON metadata

การเปลี่ยนแปลงและปรับปรุงอื่น ๆ

  • เขียนไดรเวอร์ OV2640 ใหม่ (ภาพตรง, ฟังก์ชันออโต้ที่ทำงานได้, รับ JPEG snapshot ได้); เปิดใช้งาน apriltags ความละเอียดสูง (ยกขีดจำกัด ROI <64K-pixel บนบอร์ดที่รองรับ); ลด PCLK ของ OV2640 จาก 72 MHz เป็น 36 MHz

การแก้ไขบั๊ก

การประมวลผลภาพ:

  • แก้ไข overflow ของ binary-ops ที่เกินขอบภาพ, ความแม่นยำ printf/float ใน output ของ find_apriltags() / find_datamatrices() / find_lines(), JSON ที่ผิดรูปแบบใน blob print(), find_apriltags() บนภาพที่ vflipped / hmirrored, บั๊ก ROI ของ find_lbp(), การหมดเวลาการบีบอัด JPEG สำหรับความละเอียดสูง, และการรายงานสถิติหน่วยความจำ fb_alloc

กล้องและเซนเซอร์:

  • แก้ไขการบำรุงรักษา cache โหมด JPEG และการจัดตำแหน่งบัฟเฟอร์, ขนาดการถ่ายโอน DCMI สูงสุด, การตั้งค่ารีจิสเตอร์และความละเอียดของ OV2640, การคืนค่าสถานะ shutdown ของเซนเซอร์เมื่อรีเซ็ต, และคุณภาพภาพ OV7725 (เพิ่ม banding filter ต่อกล้อง)

เครือข่ายและระบบ:

  • แก้ไข hardfault/บั๊กของ socket.accept(), การจัดการ timeout ของ WINC1500 socket (timeout 0 ตอนนี้เป็น blocking; socket ไม่ถูกปิดเมื่อ recv timeout), H7 deep-sleep, RTC (อัปเดต upstream และปัญหา H7 EXTI / wakeup-timer / soft-reset), และ timer IRQ ของ pyb.Servo (Servo ไม่ทำงานมาก่อน)

การรองรับฮาร์ดแวร์และบอร์ด

  • OpenMV Cam H7 Plus (OPENMV4R) — บอร์ดใหม่พร้อมไดรเวอร์ SDRAM ที่เปิดใช้งาน framebuffer ขนาดใหญ่ (~31 MB)

  • OV5640 — ไดรเวอร์กล้อง 5 MP ใหม่พร้อมการตรวจจับแบบ I2C

  • FDCAN — การรองรับอุปกรณ์ต่อพ่วง

การเปลี่ยนแปลง API ที่ทำให้โค้ดเดิมเสียหาย

การเปลี่ยนแปลง API ที่มองเห็นได้ระหว่าง v3.4.1 และ v3.4.2 ขอบเขต: Python C-modules ใน modules/ และไลบรารี Python ใน scripts/libraries/

การเปลี่ยนแปลงแต่ละรายการถูกติดแท็กด้วยผลกระทบ:

  • major — ส่งผลต่อสคริปต์ส่วนใหญ่ที่ใช้คุณสมบัตินี้; คุณจะต้องปรับปรุงโค้ด

  • minor — API แคบ; ส่งผลเฉพาะสคริปต์ที่ใช้มัน

  • behavior — API เดิม แต่ผลลัพธ์ต่างกัน; ตรวจสอบสคริปต์ที่ปรับแต่งแล้วอีกครั้ง

การเปลี่ยนแปลงถูกจัดกลุ่มตามผลกระทบตามลำดับนั้น หากคุณต้องการปรับปรุงโค้ด ให้ข้ามไปที่ รายการตรวจสอบการย้าย ที่ท้ายเอกสาร hash ของแต่ละ commit เชื่อมโยงไปยัง diff บน GitHub

semantics ของ WINC1500 WLAN.ifconfig() เปลี่ยนแปลง (major)

บน WINC1500 WiFi shield, WLAN.ifconfig() ไม่ส่งคืน list 5 องค์ประกอบเดิม [rssi, security, ssid, mac, ip] อีกต่อไป ตอนนี้ได้/ตั้งค่า tuple (ip, subnet, gateway, dns) (และรองรับการกำหนดค่า IP แบบ static) ซึ่งตรงกับอินเทอร์เฟซ network มาตรฐาน โค้ดที่อ่านข้อมูลการเชื่อมต่อจาก ifconfig() ต้องเปลี่ยนไปใช้เมธอด WLAN.netinfo() ใหม่ ((rssi, security, ssid, mac, ip))

Commits: e685b484a

MQTTClient.wait_msg() ส่งคืน None เมื่อ recv ว่าง (minor)

MQTTClient.wait_msg() ของไลบรารี mqtt ตอนนี้ส่งคืน None เมื่อ receive ว่างเปล่าแทนที่จะ raise OSError(-1) โค้ดที่ catch OSError(-1) เพื่อตรวจจับ socket ที่ปิด/ว่างต้องตรวจสอบค่าส่งคืน None แทน

Commits: 76239ea89

find_apriltags() ค่าเริ่มต้นเป็น 4-way connectivity (behavior)

image.find_apriltags() ตอนนี้ค่าเริ่มต้นเป็น 4-way (แทนที่จะเป็น 8-way) edge connectivity — เร็วกว่า แต่แท็กที่ตรวจจับได้อาจแตกต่างกันเล็กน้อย เพื่อคืนค่าความแม่นยำเดิม ให้ build เฟิร์มแวร์โดยกำหนด IMLIB_ENABLE_FINE_APRILTAGS

Commits: c1d9bec2c

รายการตรวจสอบการย้าย

สำหรับการย้ายไปยัง v3.4.2 อย่างสะอาด งานทั่วไปคือ:

  1. แทนที่การอ่านข้อมูลการเชื่อมต่อ WINC1500 WLAN.ifconfig() ด้วย WLAN.netinfo() (การเปลี่ยนแปลง ifconfig)

  2. ตรวจสอบ MQTTClient.wait_msg() สำหรับค่าส่งคืน None แทนการ catch OSError(-1) (การเปลี่ยนแปลง wait_msg)

  3. ปรับแต่งการตรวจจับ AprilTag ใหม่หรือ build โดยกำหนด IMLIB_ENABLE_FINE_APRILTAGS หากต้องการ 8-way connectivity (การเปลี่ยนแปลง find_apriltags)

สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่ต้องแก้ไข