v3.7.0¶
v3.7.0 is a big release. It adds the audio module (Portenta H7 PDM
microphone) with a new non-blocking callback API, the micro_speech
TensorFlow speech-recognition module, a brand-new parallel-RGB LCD
controller (with HDMI output and FT5X06 touch), an image.flush() method
with pixel-format constants, and a rewritten image.draw_image() scaling
pipeline. Several legacy helper libraries and image methods were removed and
the yuv_to_* math changed — read the breaking changes below.
Highlights¶
audiomodule — Portenta H7 onboard PDM microphone capture with a non-blockingstart_streaming(callback)API.micro_speech— a TensorFlow micro-speech recognition module.New LCD controller — parallel RGB display support, HDMI output (TFP410), and FT5X06 touch.
image.draw_image()— rewritten with a full scaling/alpha/palette pipeline (x_scale/y_scale/hint/color_palette…).image.flush()plus pixel-format constants (image.BINARY/GRAYSCALE/RGB565/YUV422/BAYER/JPEG).Breaking: legacy math helper libraries and several image methods were removed,
draw_image()/ LCD APIs were reworked, andyuv_to_*no longer subtracts 128 — see the breaking changes.
New features¶
audio— a new Portenta H7audiomodule for PDM-microphone capture:audio.init(), non-blockingaudio.start_streaming(callback), andaudio.stop_streaming()(frequency is specified in Hz).micro_speech— a new module with aMicroSpeechclass,audio_callback(), andmicro_speech()for TensorFlow speech recognition;listen()uses a running-window average and accepts afilterkeyword to restrict results to a label list.LCD — a new LCD controller with parallel RGB display support,
LCD_NONE/LCD_SHIELD/LCD_DISPLAYtypes, many framesize constants,triple_buffer/framesize/refresh/bgr/deinit, an expandeddisplay, HDMI output via the TFP410, and FT5X06 touch-screen support.image.flush()— added animage.flush()method and pixel-format constants (image.BINARY/GRAYSCALE/RGB565/YUV422/BAYER/JPEG).image.draw_image()— rewritten with a new scaling pipeline:x_scale/y_scale/x_size/y_size,rgb_channel,alpha,color_palette,alpha_palette, andhint, plusimage.AREA/BILINEAR/BICUBIC/CENTER/EXTRACT_RGB_CHANNEL_FIRST/APPLY_COLOR_PALETTE_FIRSTconstants and new alpha-blending / color-table / scaling examples.ImageReader.next_frame()gained apausekeyword to disable the real-time playback delay.Added Portenta audio examples (
audio_fft.py,micro_speech.py) and an ExtInt wake-from-stop example.
Other changes and improvements¶
The built-in examples were reorganized under
scripts/examples/Arduino/; the framebuffer now updates instantly after loading/creating images withcopy_to_fb=True(no manual flush needed); the Portenta heap was reduced slightly to fit more static driver state.
Bug fixes¶
Camera and imaging:
Fixed swapped red/blue (RGB565 byte order) in captured images, DMA2D draw rounding to match other draw code,
fb_alloccorruption in recursive allocations (find_blobs()), and gatedtop_hat()/black_hat()behind both binary and math ops being enabled.
Display and audio:
Fixed the LCD shield output and the Portenta 1-channel mono audio mode.
Portenta:
Worked around an Ethernet/SDRAM issue (drive
rst_ethhigh) and fixed the SDRAM timing configuration.
Hardware and board support¶
Arduino Portenta H7 — onboard PDM microphone (SAI / PDM2PCM) audio capture.
LCD — new parallel-RGB display controller (LTDC enabled in the H7 build), HDMI output via the TFP410, and FT5X06 touch-screen LCD support.
Breaking API changes¶
User-visible API breaks between v3.6.9 and v3.7.0. Scope: Python C-modules in
modules/ and Python libraries in scripts/libraries/.
Each change is tagged with its impact:
minor — narrow API; only affects scripts that used it.
behavior — same API, different results; re-check tuned scripts.
Changes are grouped by impact in that order. If you just want to port your code, jump to the migration checklist at the end. Each commit hash links to its diff on GitHub.
Legacy math helper libraries removed (minor)¶
The mtx, rv, ulinalg, umatrix, and vec helper libraries
were removed from scripts/libraries in favor of ulab. Scripts that
import any of these will fail and must be ported to ulab.
Commits: 1f7da9272
remove_shadows() / chrominvar() / illuminvar() removed (minor)¶
image.remove_shadows(), image.chrominvar(), and
image.illuminvar() were deleted with no replacement. Scripts calling these
methods must remove the calls.
Commits: 3173c2bb3
image.draw_image() signature reworked (minor)¶
image.draw_image() was rewritten on top of a new scaling pipeline. The old
positional alpha / single scale arguments and prior positional
ordering no longer apply; use the new keyword form (x_scale= / y_scale=
or x_size= / y_size=, alpha=, color_palette=, hint= …).
Commits: 3439f8824
LCD module rewrite (minor)¶
The lcd module was rewritten for the new display controller.
lcd.init() now takes a display type (LCD_NONE / LCD_SHIELD /
LCD_DISPLAY) and new keyword arguments, and the constant / API surface was
substantially reorganized. Old shield-only scripts mostly still work, but the
defaults and behavior changed — review LCD scripts against the new
type / framesize API.
Commits: 185538207
yuv_to_* no longer subtracts 128 (behavior)¶
image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() /
yuv_to_lab() now treat the Y tuple element as an unsigned 0–255 value
instead of subtracting 128. Callers must pass Y without the previous −128 bias
to get the same colors as before.
Commits: dcf141192
Migration checklist¶
For a clean port to v3.7.0 the typical work is:
Port
mtx/rv/ulinalg/umatrix/vecusage toulab(the math-library removal).Remove
image.remove_shadows()/chrominvar()/illuminvar()calls (the removed image methods).Update
image.draw_image()calls to the new keyword signature (the draw_image rework).Review LCD scripts against the new
lcdtype/framesizeAPI (the LCD rewrite).Drop the −128 bias when passing Y to
yuv_to_*(the yuv_to_* change).
All other scripts run unchanged.