3.2.0b4 - 2022-10-21
- Indicate that the hub is shutting down by quickly flashing the hub light for half a second. This makes it easier to see when you can stop pressing the button.
- Indicate that the SPIKE Prime hub is booting and shutting down by fading the stop sign in and out.
- Implemented iterator protocol on
geometry.Matrix
class. - Added support for multi-file projects (pybricks-micropython#115).
- Added new
System.storage()
API (support#85).
- Battery full indication (green light) comes on earlier (support#647).
- New indication for over-charging battery (blinking green light).
- On Move Hub, City Hub, and Technic Hub, programs can now be restarted with the button after downloading them. They are saved on shutdown.
- Improved program download process. Reduces the likelihood of getting errors about incompatible .mpy files when accidentally entering characters in the terminal window when no program is active.
- On Prime Hub and Essential Hub, there is no longer a wait time after boot before you can start programs.
- On Prime Hub and Essential Hub, the user program is now stored in a section of the external flash that is not used by any file system of other known firmwares, in order to avoid compatibility issues when changing firmware.
- Restored the
Motor.speed()
method andDriveBase
equivalent to provide speed as a numerical derivative of the motor position, instead of a model-based estimate. For most use cases, this is a more intuitive result because this speed value is not affected by mechanical load. - When using the REPL, everything from all Pybricks modules was automatically imported for convenience. Now, MicroPython modules are also automatically imported (support#741).
- Updated Bluetooth to Pybricks Profile v1.2.0.
- Bluetooth now uses random private address instead of static public address (support#600).
- Fixed motors going out of sync when starting program (support#679).
- Fixed motor torque signal overflowing under load (support#729).
- Fixed city hub turning back on after shutdown (support#692).
- Fixed IMU I2C bus lockup on SPIKE hubs (support#232).
- Fixed REPL history corrupt after soft reset (support#699).
- Fixed "ValueError: incompatible .mpy file" when pressing the button when there is no program yet (support#599).
3.2.0b3 - 2022-07-20
- Fix integral control not working properly due to mistakes introduced while converting the controllers to use millidegrees.
Motor.run_time
no longer raises an exception for negative time values. Negative times are now treated as zero, thus producing a stationary trajectory.
3.2.0b2 - 2022-07-06
- Added
Motor.stalled()
. It can detect stall during speed and position control (run
,run_angle
, ...) just likeMotor.control.stalled()
, but it also detects stall fordc()
command when the user controls the voltage directly.
- Fixed motor not stopping at the end of
run_until_stalled
(support#662). - Fixed incorrect battery current reading on Technic hub (support#665).
- When the motor was pushed backwards while stalled, the
control.stalled()
was inadvertently cleared because a nonzero speed was detected. This is fixed by checking the intended direction as well. - Fixed I/O devices not syncing at high baud rate.
- Fixed
ENODEV
error while device connection manager is busy (support#674).
- Reworked internal motor model that is used to estimate speed. This results in better speed estimation at low speeds, which makes PID control smoother.
- The
Motor.speed()
method andDriveBase
equivalents now provide the estimated speed instead of the value reported by the motor. This is generally more responsive. - Overhauled the control code to make it smaller and more numerically robust while using higher position resolution where it is available.
- Changed drive base default speed to go a little slower.
- Updated MicroPython to v1.19.
3.2.0b1 - 2022-06-03
- Added
Stop.NONE
asthen
option for motors. This allows subsequent motor and drive base commands to transition without stopping. - Added
Stop.COAST_SMART
asthen
option for motors. This still coasts the motor, but it keeps track of the previously used position target. When a new relative angle command is given (e.g. rotate 90 degrees), it uses that position as the starting point. This avoids accumulation of errors when using relative angles in succession. - Made motor deceleration configurable separately from acceleration.
- Enabled
ujson
module. - Added ability to use more than one
DriveBase
in the same script. - Added support for battery charging on Prime and essential hubs.
- Changed how
DriveBases
andMotor
classes can be used together. Previously, an individual motor could not be used when a drive base used it. From now on, devices can always be used. If they were already in use by something else, that other class will just be stopped (coast). - Changed how unexpected motor problems are handled, such as a cable being
unplugged while it was running. Previously, this raised a
SystemExit
no matter which motor was unplugged. Now it will return anOSError
withENODEV
, which is consistent with trying to initialize a motor that isn't there. TheMotor
class must be initialized again to use the motor again. - Changing settings while a motor is moving no longer raises an exception. Some settings will not take effect until a new motor command is given.
- Disabled
Motor.control
andMotor.log
on Move Hub to save space. - Changed LED color calibration on Prime hub to make yellow less green.
- Updated to upstream MicroPython v1.18.
- Changed imu.acceleration() units to mm/s/s (pybricks-micropython#88) for Move Hub, Technic Hub, and Prime Hub.
- Fixed color calibration on Powered Up remote control (support#424).
- Fixed 3x3 Light Matrix colors with hue > 255 not working correctly (support#619).
3.1.0 - 2021-12-16
- Renamed new
DCMotor.dc_settings()
method toDCMotor.settings()
(support#536).
- Fixed direction for
DriveBase.turn()
andDrivebase.curve()
for some arguments (support#535). - Fixed
then=Stop.COAST
not working inDriveBase
methods (support#535).
3.1.0c1 - 2021-11-19
- Added
DriveBase.curve()
method to drive an arc segment. - Added
then
andwait
arguments toDriveBase
methods (support#57).
- Dropped
integral_range
argument fromControl.pid()
. This setting was ineffective and never used. When set incorrectly, the motor could get stuck for certain combinations ofkp
andki
. - Improved motor behavior for cases with low-speed, low-load, but high inertia (support#366).
- Changed how the duty cycle limit is set for
Motor
andDCMotor
. It is now set as a voltage limit via a dedicated method, instead ofMotor.control
.
- Fixed
then=Stop.COAST
being ignored in most motor commands. - Fixed
brake()
/light.off()
not working on Move hub I/O port C (support#501). - Fixed
Remote()
failing to connect when hub is connected to 2019 or newer MacBooks (support#397). - Fixed intermittent improper detection of hot-plugged I/O devices (support#500).
- A program now stops when a
Motor
is unplugged while it is running, instead of getting in a bad state.
3.1.0b1 - 2021-09-21
- Support for LEGO Technic Color Light Matrix (support#440).
- Support for LEGO UART devices with a new battery power flag. This is required to support the new LEGO Technic Color Light Matrix (support#440).
- Support for the SPIKE Essential hub/Technic Small hub (support#439).
- Fixed Ultrasonic Sensor and Color Sensor turning off when a user script ends (support#456).
- Hub reset due to watchdog timer when writing data to UART I/O device (support#304).
- City/Technic hubs not connecting via Bluetooth on macOS 12 (support#489).
- Updated to MicroPython v1.17.
3.1.0a4 - 2021-08-30
- Enabled builtin
bytearray
(pybricks-micropython#60). - Enabled
ustruct
module (pybricks-micropython#60). - Added alpha support for dual boot installation on the SPIKE Prime Hub.
- Added
pybricks.experimental.hello_world
function to make it easier for new contributors to experiment with Pybricks using C code. - Added ability to import the
main.mpy
that is embedded in the firmware from a download and run program (support#408). - Added
pybricks.iodevices.LWP3Device
to communicate with a device that supports the LEGO Wireless Protocol 3.0.00 (pybricks-micropython#68)
- Move Hub Bluetooth optimizations to reduce firmware size (pybricks-micropython#49).
- Disabled
pybricks.iodevices
module on Move Hub to reduce firmware size. - Improvements to
pybricks.pupdevices.Remote
:- Check if a remote is already connected before attempting to create a new connection.
- Rename first argument from
address
toname
to match documentation. - Implement connecting by name.
- Add
name()
method. - Add
light
attribute.
3.1.0a3 - 2021-07-19
- Added
reset_angle=False
keyword argument toMotor()
class. This makes resetting the angle optional, allowing to maintain absolute positioning for robots with gears (support#389).
- Moved MicroPython
math
module toumath
to be consistent with other MicroPython modules.
- Fixed City hub not always powering off on shutdown (support#385).
- Fixed Move hub turning back on after shutdown (support#386).
3.1.0a2 - 2021-07-06
- Support for reading button state on Technic Hub, City Hub, and Move Hub.
- Support for reading hub name on all Powered Up hubs.
- Enable MicroPython slicing feature on Technic Hub, City Hub, Prime Hub.
- Added pystone benchmark tests for all hubs.
- Added
hub.system.shutdown()
for graceful shutdown (support#58).
- Move
Remote
class fromexperimental
topupdevices
. - Move
Remote.pressed()
toRemote.buttons.pressed()
. - Remove
pybricks.experimental
module on Move Hub. - Increased Move Hub heap from 6K to 7K due to recently freed RAM (pybricks-micropython#57).
- Changed
hub.system.reset(action)
to accept2
only (support#379). This is technically a breaking change, although this method was never officially released or documented. With this change, entering firmware update mode remains possible for backwards-compatibility, but unsafe power off methods are removed.
- Fix Bluetooth not disconnecting when shutting down and button is still pressed.
- Fix I/O ports not powering off when shutting down and button is still pressed.
- Fix version number only showing git hash and not v3.x.
3.1.0a1 - 2021-06-23
- Added PnP ID characteristic to Device Information Service and to advertising data (pybricks-micropython#49).
- Added special location in firmware for storing hub name (support#52). Note: Support will need to be added to tools separately to make use of this.
- Added configuration option to run a simplified version of motor PID control. It is activated on the Move Hub to reduce build size. Motor performance on the other hubs is unaffected.
- Experimental support for the Powered Up remote control (support#186).
- Updated MicroPython to v1.16.
- Simplified the Powered Up UART Protocol host implementation. Unused device properties are no longer stored in order to reduce flash and RAM usage (pybricks-micropython#57).
3.0.0 - 2021-06-08
- Added
Hub.system
attribute (support#321).
Hub.reset()
moved toHub.system.reset()
(support#321).- Motor methods now raise
OSError
withuerrno.EBUSY
instead ofuerrno.EPERM
if the motor is currently being used and the operation cannot be completed.
- Fixed resetting motor angle while holding position causes movement (support#352).
- Fixed
DriveBase
not resetting during initialization (pybricks-micropython#21). - Fixed Ctrl+C stopping REPL when first started (support#347).
- Fixed UART I/O devices retuning uninitialized data (support#361).
Prerelease changes are documented at support#48.