v4.5.0

v4.5.0 เป็นรุ่นหลักที่สำคัญ โมดูล lcd เดิมถูกแทนที่ด้วยโมดูล display แบบรวมศูนย์ที่มีแบ็กเอนด์แยกสำหรับ SPI / parallel / DSI / TV มีการเพิ่มบอร์ด Arduino Giga และนำเสนอฟีเจอร์ด้านการแสดงผล การสัมผัส และการควบคุมเซนเซอร์มากมาย มีการเปลี่ยนแปลงที่ไม่รองรับย้อนหลังหลายอย่าง — อ่านรายละเอียดด้านล่าง

ไฮไลต์

  • โมดูล display ใหม่ — แทนที่ lcd ด้วยแบ็กเอนด์รวมศูนย์ SPIDisplay / RGBDisplay / DSIDisplay / TVDisplay

  • รองรับบอร์ด Arduino Giga

  • ฮาร์ดแวร์แสดงผล/สัมผัสใหม่ — จอ DSI บน STM32 H7, TFP410 DVI/HDMI, HDMI/DVI CEC, แผง ST7701 RGB และการสัมผัสแบบ capacitive GT911 / FT5X06

  • การควบคุมเซนเซอร์ใหม่ — การปรับเทียบระดับดำ, โหมดกลางคืน และ sensor.disable_delays(); ความเร็ว transpose เร็วขึ้นมาก (~5x) และ morphology (~2.5x)

  • การเปลี่ยนแปลงที่ไม่รองรับย้อนหลัง: lcddisplay, lcd_touchft5x06, เปลี่ยนชื่อพิน LED — ดูการเปลี่ยนแปลงที่ไม่รองรับย้อนหลัง

ฟีเจอร์ใหม่

  • แบ็กเอนด์การแสดงผลDisplayData (การอ่าน DDC/EDID), อุปกรณ์ DVI/HDMI serializer TFP410, รองรับจอ MIPI-DSI บน STM32 H7, ไดรเวอร์ HDMI/DVI cec และไลบรารี Python display พร้อมตัวช่วยเริ่มต้นแผง ST7701 RGB

  • การสัมผัส — ไดรเวอร์การสัมผัสแบบ capacitive 5 จุด GT911 ใหม่ (read_points() / read_id() / reset())

  • ส่วนขยาย machine — ไลบรารี machine แบบ freezable พร้อมคลาสช่วย machine.LED และเมธอด machine.LED.value([v]) ใหม่

  • การควบคุมเซนเซอร์sensor.set_auto_blc(enable, regs=None) / sensor.get_blc_regs() (การปรับเทียบระดับดำ), IOCTL_SET_NIGHT_MODE / IOCTL_GET_NIGHT_MODE (OV7725/OV5640), OV7670 hmirror/vflip และ sensor.disable_delays() เพื่อข้ามการรอกล้องสำหรับการกำหนดค่าใหม่ที่เร็วขึ้น

  • i.MX RTsensor.set_xclk_frequency() รับความถี่ใดก็ได้ (ปรับไปยัง CSI divider ที่ใกล้เคียงที่สุด) และโมดูล SPI lcd / tv / fir ถูกเปิดใช้งานบน RT1060

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

  • การประมวลผลภาพเร็วขึ้นมาก — image transpose เร็วขึ้น ~5x และ image.morph() เร็วขึ้น ~2.5x

  • การสแกน camera-bus ตอนนี้สแกนและตรวจสอบที่อยู่อุปกรณ์หลายรายการ รองรับบอร์ดที่มีหลายอุปกรณ์บนบัส

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

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

  • แก้ไขความแม่นยำในการคำนวณค่าเกนสำหรับเซนเซอร์หลายรุ่น (HM01B0, HM0360, MT9M114, MT9V0xx, OV2640, OV5640, OV7690, OV7725, OV9650, PAJ6100), MT9V0xx exposure / column-binning, OV5640 exposure และ OV7670 VGA windowing

  • STM32 ตอนนี้ทิ้งเฟรม transpose ที่เสียหายแทนที่จะส่งคืนภาพที่ผิดพลาด

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

  • แก้ไขการล้น integer ที่ส่งผลกระทบต่อการทำงาน image / FIR / ToF / LCD / TV, คำสั่ง floating-point vcvtm/vcvtp ที่ไม่ถูกต้องบน Cortex-M4 (fast_floorf/fast_ceilf), บั๊ก in-place scaling ใน image.to_*() และความเสียหายของ cache จาก DMA2D draw

การแสดงผลและระบบ:

  • แก้ไขการตั้งเวลา DSI display และโหมด portrait, micro_speech listen() บน Nicla Vision / Portenta H7, สวิตช์ผู้ใช้ STM32 (pyb.Switch) และรองรับบัส I2C4

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

  • Arduino Giga — บอร์ดใหม่ พร้อมการแมปพิน Arduino และชุดตัวอย่างครบชุด

  • OpenMV RT1060 — เปิดใช้งานโมดูล SPI LCD, TV และ FIR thermal

  • Arduino Nano 33 BLE Sense — พิน LED

การเปลี่ยนแปลง API ที่ไม่รองรับย้อนหลัง

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

การเปลี่ยนแปลงแต่ละอย่างถูกแท็กตามผลกระทบ:

  • major — สคริปต์ส่วนใหญ่ที่ใช้งานต้องได้รับการแก้ไข

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

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

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

โมดูล lcd ถูกแทนที่ด้วย display (major)

โมดูล lcd เดิมถูกลบออกและแทนที่ด้วยโมดูล display แบบรวมศูนย์ที่แยกเป็น SPIDisplay (SPI LCD shield), RGBDisplay / parallel, DSIDisplay (MIPI-DSI) และแบ็กเอนด์ TVDisplay ที่มี API ร่วมกัน สคริปต์ต้องเปลี่ยนจาก import lcd ไปใช้โมดูล display และสร้างออบเจ็กต์แบ็กเอนด์ที่เหมาะสม

Commits: 227824aac, 6c6336829

โมดูล Touch, พิน LED และไดรเวอร์ที่รวมมา (minor)

โมดูล lcd_touch ทั่วไปถูกแทนที่ด้วยโมดูลไดรเวอร์ capacitive-touch FT5X06 เฉพาะทาง ชื่อพิน LED ถูกเปลี่ยนชื่อเพื่อความสม่ำเสมอในทุกบอร์ด (สคริปต์ที่อ้างอิงชื่อพิน LED เดิมต้องอัปเดต) ไดรเวอร์ hts221 / lps22h / lsm6dsox / lsm9ds1 IMU/sensor ที่รวมมาถูกแทนที่ด้วยเวอร์ชัน micropython-lib upstream ซึ่ง API แตกต่างกันเล็กน้อย (ตัวอย่างที่รวมมาได้รับการอัปเดตให้ตรงกัน)

Commits: 86ad6dcdb, 9344c3b74, 2b5b7963b

การควบคุมเซนเซอร์ที่ไม่รองรับตอนนี้จะแสดงคำเตือน (behavior)

sensor.set_auto_gain(), set_auto_exposure(), set_auto_whitebal() และ set_auto_blc() ตอนนี้แสดงคำเตือนแทนการยก RuntimeError เมื่อเซนเซอร์ที่ใช้งานอยู่ไม่รองรับการควบคุมนั้น ทำให้สคริปต์เดียวกันสามารถทำงานบนเซนเซอร์ที่มีความสามารถต่างกันได้ โค้ดที่อาศัยการจับข้อยกเว้นต้องได้รับการอัปเดต

Commit: dbf4996f2

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

สำหรับการพอร์ตที่สะอาดไปยัง v4.5.0 งานทั่วไปคือ:

  1. แทนที่การใช้ import lcd ด้วยโมดูล display ใหม่และแบ็กเอนด์ที่เหมาะสม (การเปลี่ยนแปลงโมดูล display)

  2. เปลี่ยน lcd_touch เป็น FT5X06, อัปเดตชื่อพิน LED เดิม และตรวจสอบ API ไดรเวอร์ IMU upstream อีกครั้ง (การเปลี่ยนแปลง touch/pin/driver)

  3. แทนที่ try/except RuntimeError รอบการควบคุมเซนเซอร์ที่ไม่รองรับด้วยการตรวจสอบความสามารถ (การเปลี่ยนแปลงการควบคุมเซนเซอร์)