v3.4.2

إصدار v3.4.2 إصدار كبير. فهو يقدّم OpenMV Cam H7 Plus (ذاكرة SDRAM، ومخزن إطارات ضخم للالتقاط بدقة عالية)، والكاميرا OV5640 بدقة 5 ميغابكسل، ودعم FDCAN، وبرنامج تشغيل OV2640 مُعاد كتابته، و Image.jpeg_encode_for_ide()، ومكتبتي pid / modbus جديدتين. تغيّرت واجهة ifconfig() لـ WINC1500 والقيم الافتراضية لـ find_apriltags() — اقرأ التغييرات الجذرية أدناه.

أبرز النقاط

  • OpenMV Cam H7 Plus — لوحة جديدة مع برنامج تشغيل SDRAM ومخزن إطارات بحجم ~31 ميغابايت للالتقاط بدقة عالية.

  • برنامج تشغيل الكاميرا OV5640 بدقة 5 ميغابكسل مع كشف عبر I2C.

  • دعم الطرفية FDCAN، مع مثال CAN.

  • إعادة كتابة OV2640 — صور قائمة بشكل صحيح، ودوال تلقائية تعمل، ولقطة JPEG، وحجم إطار sensor.XGA جديد.

  • JPEG لـ IDEImage.jpeg_encode_for_ide() والإرسال التلقائي لصور JPEG الكبيرة إلى IDE.

  • تغيير جذري: تغيّرت دلالات WLAN.ifconfig() لـ WINC1500، ولم تعد MQTTClient.wait_msg() تطلق استثناءً عند الاستقبال الفارغ، وأصبحت find_apriltags() تستخدم التوصيل رباعي الاتجاهات افتراضيًا — انظر التغييرات الجذرية.

ميزات جديدة

  • WiFi — أُضيفت WLAN.netinfo() (تُرجع (rssi, security, ssid, mac, ip)) وإعداد عنوان IP ثابت لـ WINC1500 عبر WLAN.ifconfig()، مع مثال لعنوان IP ثابت.

  • FDCAN — أُضيف دعم طرفية FDCAN ومثال can.py.

  • JPEG لـ IDE — أُضيفت Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide()؛ تُرسَل صور JPEG الكبيرة تلقائيًا إلى IDE عندما يكون المخزن صغيرًا جدًا.

  • المكتبات — أُضيفت مكتبة متحكم PID pid، ومكتبة RTU التابعة modbus (مع مثال 32-modbus)، وصنف SSD1306_I2C لشاشات OLED عبر I2C.

  • أمثلة — أُضيف اشتراك MQTT (mqtt_sub.py، مع إعادة تسمية mqtt.py إلى mqtt_pub.py).

  • المستشعر — أُضيف حجم الإطار sensor.XGA (1024x768)؛ وأصبحت print() / repr() على صورة Bayer تُخرج بيانات وصفية بصيغة JSON.

تغييرات وتحسينات أخرى

  • أُعيدت كتابة برنامج تشغيل OV2640 (صور قائمة بشكل صحيح، دوال تلقائية تعمل، قبول لقطة JPEG)؛ وتم تفعيل apriltags بدقة عالية (يرفع حد منطقة الاهتمام <64K بكسل على اللوحات القادرة على ذلك)؛ وخُفّض PCLK لـ OV2640 من 72 MHz إلى 36 MHz.

إصلاحات الأخطاء

التصوير:

  • أُصلح تجاوز سعة عمليات ثنائية بعد نهاية الصورة، ودقة printf/float في مخرجات find_apriltags() / find_datamatrices() / find_lines()، وتنسيق JSON المشوّه في print() للكتل، و find_apriltags() على الصور المقلوبة عموديًا / أفقيًا، وخطأ منطقة الاهتمام في find_lbp()، ومهلة ضغط JPEG للدقات الكبيرة، وإحصاءات ذاكرة fb_alloc.

الكاميرا والمستشعرات:

  • أُصلحت صيانة ذاكرة التخزين المؤقت في وضع JPEG ومحاذاة المخزن، وأقصى حجم نقل DCMI، وإعداد سجلات OV2640 ودقاتها، واستعادة حالة إيقاف تشغيل المستشعر عند إعادة التعيين، وجودة صورة OV7725 (أُضيف مرشح تشويش لكل كاميرا).

الشبكات والنظام:

  • أُصلح خطأ/تعطّل صعب في socket.accept()، ومعالجة مهلة المقبس في WINC1500 (أصبحت المهلة 0 حاجبة الآن؛ ولا تُغلَق المقابس عند مهلة الاستقبال)، والنوم العميق في H7، و RTC (تحديث المصدر الأعلى ومشكلات EXTI / مؤقت الاستيقاظ / إعادة التعيين البرمجية في H7)، ومقاطعة مؤقت pyb.Servo (كان Servo غير وظيفي).

العتاد ودعم اللوحات

  • OpenMV Cam H7 Plus (OPENMV4R) — لوحة جديدة مع برنامج تشغيل SDRAM يتيح مخزن إطارات كبيرًا (~31 ميغابايت).

  • OV5640 — برنامج تشغيل كاميرا جديد بدقة 5 ميغابكسل مع كشف عبر I2C.

  • FDCAN — دعم الطرفية.

تغييرات API الجذرية

تغييرات API المرئية للمستخدم بين v3.4.1 و v3.4.2. النطاق: وحدات Python بلغة C في modules/ ومكتبات Python في scripts/libraries/.

يُوسم كل تغيير بمدى تأثيره:

  • رئيسي — يؤثر على معظم البرامج النصية التي استخدمت الميزة؛ ستحتاج إلى نقل الكود.

  • ثانوي — واجهة API ضيقة؛ يؤثر فقط على البرامج النصية التي استخدمتها.

  • سلوك — نفس الواجهة، نتائج مختلفة؛ أعد فحص البرامج النصية المضبوطة.

تُجمَّع التغييرات حسب التأثير بهذا الترتيب. إذا كنت تريد فقط نقل الكود، انتقل إلى قائمة التحقق للترحيل في النهاية. يربط كل تجزئة commit إلى الفرق الخاص به على GitHub.

تغيّرت دلالات WLAN.ifconfig() لـ WINC1500 (رئيسي)

على درع WiFi WINC1500، لم تعد WLAN.ifconfig() تُرجع القائمة القديمة المكونة من 5 عناصر [rssi, security, ssid, mac, ip]. فهي الآن تجلب/تعيّن صفًا (ip, subnet, gateway, dns) (وتدعم إعداد عنوان IP ثابت)، بما يطابق واجهة network القياسية. يجب على الكود الذي قرأ معلومات الاتصال من ifconfig() التحول إلى طريقة WLAN.netinfo() الجديدة ((rssi, security, ssid, mac, ip)).

Commits: e685b484a

تُرجع MQTTClient.wait_msg() القيمة None عند الاستقبال الفارغ (ثانوي)

أصبحت MQTTClient.wait_msg() في مكتبة mqtt تُرجع الآن None عند الاستقبال الفارغ بدلًا من إطلاق OSError(-1). يجب على الكود الذي التقط OSError(-1) لاكتشاف مقبس مغلق/فارغ الفحص عن قيمة الإرجاع None بدلًا من ذلك.

Commits: 76239ea89

تستخدم find_apriltags() التوصيل رباعي الاتجاهات افتراضيًا (سلوك)

أصبحت image.find_apriltags() تستخدم الآن التوصيل الحوافي رباعي الاتجاهات افتراضيًا (بدلًا من ثماني الاتجاهات) — أسرع، لكن قد تختلف العلامات المكتشفة قليلًا. لاستعادة الدقة السابقة، اِبنِ البرنامج الثابت مع تعريف IMLIB_ENABLE_FINE_APRILTAGS.

Commits: c1d9bec2c

قائمة التحقق للترحيل

للنقل النظيف إلى v3.4.2 يكون العمل المعتاد:

  1. استبدل قراءات معلومات الاتصال من WLAN.ifconfig() لـ WINC1500 بـ WLAN.netinfo() (تغيير ifconfig).

  2. افحص MQTTClient.wait_msg() بحثًا عن إرجاع None بدلًا من التقاط OSError(-1) (تغيير wait_msg).

  3. أعد ضبط كشف AprilTag أو اِبنِ مع IMLIB_ENABLE_FINE_APRILTAGS إذا كنت بحاجة إلى التوصيل ثماني الاتجاهات (تغيير find_apriltags).

تعمل جميع البرامج النصية الأخرى دون تغيير.