v3.4.2

v3.4.2 是一個重大版本。它推出了 OpenMV Cam H7 Plus(SDRAM、用於高解析度擷取的超大影格緩衝區)、OV5640 5 MP 相機、FDCAN 支援、重寫的 OV2640 驅動程式、Image.jpeg_encode_for_ide(),以及新的 pid / modbus 函式庫。WINC1500 ifconfig() API 與 find_apriltags() 的預設值有所變更——請閱讀下方的破壞性變更。

重點

  • OpenMV Cam H7 Plus——具備 SDRAM 驅動程式與約 31 MB 影格緩衝區、可用於高解析度擷取的全新開發板。

  • 具備 I2C 偵測的 OV5640 5 MP 相機驅動程式。

  • FDCAN 周邊支援,附上 CAN 範例。

  • OV2640 重寫——正立影像、可運作的自動功能、JPEG 快照,以及新的 sensor.XGA 影格尺寸。

  • IDE JPEG——Image.jpeg_encode_for_ide() 以及將大型 JPEG 自動傳輸至 IDE。

  • 破壞性變更: WINC1500 WLAN.ifconfig() 語意已變更,MQTTClient.wait_msg() 在收到空白資料時不再擲回例外,且 find_apriltags() 預設改為 4 方向連通性——請參閱破壞性變更。

新功能

  • WiFi——新增了 WLAN.netinfo()(回傳 (rssi, security, ssid, mac, ip))以及透過 WLAN.ifconfig() 進行 WINC1500 靜態 IP 設定,並附上靜態 IP 範例。

  • FDCAN——新增了 FDCAN 周邊支援與 can.py 範例。

  • IDE JPEG——新增了 Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide();當緩衝區太小時,大型 JPEG 會自動傳輸至 IDE。

  • 函式庫——新增了 pid PID 控制器函式庫、modbus RTU 從站函式庫(附上 32-modbus 範例),以及用於 I2C OLED 顯示器的 SSD1306_I2C 類別。

  • 範例——新增了 MQTT 訂閱(mqtt_sub.py,並將 mqtt.py 重新命名為 mqtt_pub.py)。

  • 感測器——新增了 sensor.XGA(1024x768)影格尺寸;在 Bayer 影像上呼叫 print() / repr() 現在會輸出 JSON 中繼資料。

其他變更與改進

  • 重寫了 OV2640 驅動程式(正立影像、可運作的自動功能、接受 JPEG 快照);啟用了高解析度 apriltags(解除支援的開發板上 <64K 像素的 ROI 限制);將 OV2640 PCLK 從 72 MHz 降至 36 MHz。

錯誤修正

影像處理:

  • 修正了二元運算超出影像結尾的溢位、find_apriltags() / find_datamatrices() / find_lines() 輸出中的 printf/浮點精度、色塊 print() 中格式錯誤的 JSON、在 vflip / hmirror 影像上的 find_apriltags()find_lbp() ROI 錯誤、大解析度的 JPEG 壓縮逾時,以及 fb_alloc 記憶體統計回報。

相機與感測器:

  • 修正了 JPEG 模式快取維護與緩衝區對齊、最大 DCMI 傳輸大小、OV2640 暫存器設定與解析度、在重設時還原感測器關機狀態,以及 OV7725 影像品質(新增了每相機的條紋濾鏡)。

網路與系統:

  • 修正了 socket.accept() 硬錯誤/錯誤、WINC1500 socket 逾時處理(逾時 0 現在為阻塞式;socket 不會在 recv 逾時時關閉)、H7 深度睡眠、RTC(上游更新以及 H7 EXTI / 喚醒計時器 / 軟重設問題),以及 pyb.Servo 計時器 IRQ(Servo 先前無法運作)。

硬體與開發板支援

  • OpenMV Cam H7 Plus(OPENMV4R)——具備 SDRAM 驅動程式、可啟用大型(約 31 MB)影格緩衝區的全新開發板。

  • OV5640——具備 I2C 偵測的全新 5 MP 相機驅動程式。

  • FDCAN——周邊支援。

破壞性 API 變更

v3.4.1 與 v3.4.2 之間使用者可見的 API 破壞性變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 函式庫。

每項變更皆標註其影響程度:

  • major——影響大多數使用該功能的指令碼;你需要移植程式碼。

  • minor——範圍狹窄的 API;僅影響使用到它的指令碼。

  • behavior——API 相同,但結果不同;請重新檢查已調校過的指令碼。

變更依影響程度依序分組。如果你只想移植程式碼,請跳至結尾的 遷移檢查清單。每個 commit 雜湊值都連結至其在 GitHub 上的 diff。

WINC1500 WLAN.ifconfig() 語意變更 (major)

在 WINC1500 WiFi shield 上,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 (minor)

mqtt 函式庫的 MQTTClient.wait_msg() 現在會在收到空白資料時回傳 None,而非擲回 OSError(-1)。捕捉 OSError(-1) 以偵測已關閉/空白 socket 的程式碼必須改為檢查 None 回傳值。

Commits: 76239ea89

find_apriltags() 預設改為 4 方向連通性 (behavior)

image.find_apriltags() 現在預設使用 4 方向(而非 8 方向)邊緣連通性——速度更快,但偵測到的標籤可能略有不同。若要恢復先前的準確度,請在建置韌體時定義 IMLIB_ENABLE_FINE_APRILTAGS

Commits: c1d9bec2c

遷移檢查清單

若要乾淨地移植至 v3.4.2,典型的工作為:

  1. 將讀取 WINC1500 WLAN.ifconfig() 連線資訊的程式碼替換為 WLAN.netinfo()ifconfig 變更)。

  2. 檢查 MQTTClient.wait_msg()None 回傳值,而非捕捉 OSError(-1)wait_msg 變更)。

  3. 若你需要 8 方向連通性,請重新調校 AprilTag 偵測,或在建置時定義 IMLIB_ENABLE_FINE_APRILTAGSfind_apriltags 變更)。

所有其他指令碼皆可不變執行。