v3.4.2

v3.4.2 là một phiên bản lớn. Nó giới thiệu OpenMV Cam H7 Plus (SDRAM, bộ đệm khung hình khổng lồ cho chụp ảnh độ phân giải cao), camera OV5640 5 MP, hỗ trợ FDCAN, driver OV2640 được viết lại, Image.jpeg_encode_for_ide(), và các thư viện pid / modbus mới. API ifconfig() của WINC1500 và mặc định của find_apriltags() đã thay đổi — đọc phần thay đổi gây gián đoạn bên dưới.

Điểm nổi bật

  • OpenMV Cam H7 Plus — bo mạch mới với driver SDRAM và bộ đệm khung hình ~31 MB cho chụp ảnh độ phân giải cao.

  • Driver camera OV5640 5 MP với phát hiện qua I2C.

  • Hỗ trợ ngoại vi FDCAN, kèm theo ví dụ CAN.

  • Viết lại OV2640 — ảnh đúng chiều, các chức năng tự động hoạt động, ảnh chụp JPEG, và kích thước khung hình sensor.XGA mới.

  • IDE JPEGImage.jpeg_encode_for_ide() và tự động truyền JPEG lớn sang IDE.

  • Gây gián đoạn: ngữ nghĩa của WLAN.ifconfig() WINC1500 đã thay đổi, MQTTClient.wait_msg() không còn đưa ra ngoại lệ khi recv rỗng, và find_apriltags() mặc định kết nối 4 chiều — xem phần thay đổi gây gián đoạn.

Tính năng mới

  • WiFi — thêm WLAN.netinfo() (trả về (rssi, security, ssid, mac, ip)) và cấu hình IP tĩnh WINC1500 qua WLAN.ifconfig(), kèm theo ví dụ IP tĩnh.

  • FDCAN — thêm hỗ trợ ngoại vi FDCAN và ví dụ can.py.

  • IDE JPEG — thêm Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); các JPEG lớn tự động truyền sang IDE khi bộ đệm quá nhỏ.

  • Thư viện — thêm thư viện PID pid, thư viện RTU slave modbus (kèm theo ví dụ 32-modbus), và class SSD1306_I2C cho màn hình OLED I2C.

  • Ví dụ — thêm MQTT subscribe (mqtt_sub.py, với mqtt.py đổi tên thành mqtt_pub.py).

  • Cảm biến — thêm kích thước khung hình sensor.XGA (1024x768); print() / repr() trên ảnh Bayer giờ xuất metadata JSON.

Các thay đổi và cải tiến khác

  • Viết lại driver OV2640 (ảnh đúng chiều, các chức năng tự động hoạt động, ảnh chụp JPEG được chấp nhận); bật apriltags độ phân giải cao (loại bỏ giới hạn ROI <64K điểm ảnh trên các bo mạch hỗ trợ); giảm PCLK OV2640 từ 72 MHz xuống 36 MHz.

Sửa lỗi

Xử lý ảnh:

  • Sửa lỗi tràn bộ nhớ vượt cuối ảnh trong binary-ops, độ chính xác printf/float trong đầu ra find_apriltags() / find_datamatrices() / find_lines(), JSON bị lỗi trong print() blob, find_apriltags() trên ảnh vflipped / hmirrored, lỗi ROI find_lbp(), timeout nén JPEG cho độ phân giải lớn, và báo cáo thống kê bộ nhớ fb_alloc.

Camera và cảm biến:

  • Sửa lỗi bảo trì cache và căn chỉnh bộ đệm chế độ JPEG, kích thước truyền DCMI tối đa, cấu hình thanh ghi và độ phân giải OV2640, khôi phục trạng thái tắt cảm biến khi reset, và chất lượng ảnh OV7725 (thêm bộ lọc banding theo từng camera).

Mạng và hệ thống:

  • Sửa lỗi hardfault/bug của socket.accept(), xử lý timeout socket WINC1500 (timeout 0 giờ là blocking; socket không bị đóng khi recv timeout), deep-sleep H7, RTC (cập nhật upstream và các vấn đề EXTI / wakeup-timer / soft-reset của H7), và ngắt timer pyb.Servo (Servo không hoạt động).

Hỗ trợ phần cứng và bo mạch

  • OpenMV Cam H7 Plus (OPENMV4R) — bo mạch mới với driver SDRAM cho phép bộ đệm khung hình lớn (~31 MB).

  • OV5640 — driver camera 5 MP mới với phát hiện qua I2C.

  • FDCAN — hỗ trợ ngoại vi.

Thay đổi API gây gián đoạn

Các thay đổi API hiển thị với người dùng giữa v3.4.1 và v3.4.2. Phạm vi: Python C-modules trong modules/ và thư viện Python trong scripts/libraries/.

Mỗi thay đổi được gắn nhãn theo mức độ ảnh hưởng:

  • nghiêm trọng — ảnh hưởng đến hầu hết các tập lệnh đã dùng tính năng này; bạn sẽ cần chuyển đổi code.

  • nhỏ — API hẹp; chỉ ảnh hưởng đến các tập lệnh đã dùng nó.

  • hành vi — API giống nhau, kết quả khác; hãy kiểm tra lại các tập lệnh đã được tinh chỉnh.

Các thay đổi được nhóm theo mức độ ảnh hưởng theo thứ tự đó. Nếu bạn chỉ muốn chuyển đổi code, hãy chuyển đến danh sách kiểm tra di chuyển ở cuối. Mỗi hash commit liên kết đến diff của nó trên GitHub.

Ngữ nghĩa của WLAN.ifconfig() WINC1500 đã thay đổi (nghiêm trọng)

Trên WiFi shield WINC1500, WLAN.ifconfig() không còn trả về danh sách 5 phần tử cũ [rssi, security, ssid, mac, ip]. Giờ nó lấy/đặt một tuple (ip, subnet, gateway, dns) (và hỗ trợ cấu hình IP tĩnh), phù hợp với giao diện network chuẩn. Code đọc thông tin kết nối từ ifconfig() phải chuyển sang phương thức WLAN.netinfo() mới ((rssi, security, ssid, mac, ip)).

Commits: e685b484a

MQTTClient.wait_msg() trả về None khi recv rỗng (nhỏ)

MQTTClient.wait_msg() của thư viện mqtt giờ trả về None khi nhận rỗng thay vì đưa ra OSError(-1). Code bắt OSError(-1) để phát hiện socket đóng/rỗng phải kiểm tra giá trị trả về None thay thế.

Commits: 76239ea89

find_apriltags() mặc định kết nối 4 chiều (hành vi)

image.find_apriltags() giờ mặc định kết nối cạnh 4 chiều (thay vì 8 chiều) — nhanh hơn, nhưng các tag được phát hiện có thể khác đôi chút. Để khôi phục độ chính xác trước đó, hãy build firmware với IMLIB_ENABLE_FINE_APRILTAGS được định nghĩa.

Commits: c1d9bec2c

Danh sách kiểm tra di chuyển

Để chuyển đổi sạch sang v3.4.2, công việc thông thường là:

  1. Thay thế các lần đọc thông tin kết nối WLAN.ifconfig() WINC1500 bằng WLAN.netinfo() (thay đổi ifconfig).

  2. Kiểm tra giá trị trả về None từ MQTTClient.wait_msg() thay vì bắt OSError(-1) (thay đổi wait_msg).

  3. Tinh chỉnh lại phát hiện AprilTag hoặc build với IMLIB_ENABLE_FINE_APRILTAGS nếu bạn cần kết nối 8 chiều (thay đổi find_apriltags).

Tất cả các tập lệnh khác chạy không đổi.