- Added optional
calibrated=True
parameter toacceleration()
andup()
andangular_velocity()
androtation
methods of the IMU (support#943). - Implemented
hub.imu.orientation()
to give the rotation matrix of the hub or robot with respect to the inertial frame. - Added calibration parameters that can be set for angular velocity offset and scale and acceleration offset and scale.
- Added
hub.system.reset_storage
to restore storage and settings to default state.
- Enabled UTF-8 support for
str
objects. - The method
DriveBase.angle()
now returns a float (support#1844). This makes it properly equivalent tohub.imu.heading
. - Re-implemented tilt using the gyro data by default. Pure accelerometer tilt
can still be obtained with
hub.imu.tilt(use_gyro=False)
. - Re-implemented
hub.imu.heading()
to use optionally use the projection of 3D orientation to improve performance when the hub is lifted off the ground. The 1D-based heading remains the default for now. - Change return value of connected() property from bool to int using the value of pbdrv_usb_get_bcd(). This will allow pro users to be able to tell if they have a "nonstandard" charger that could prevent proper charging (pybricks-micropython#274).
- When the Bluetooth button is selected to stop the program, don't disable the stop button while the hub menu is active ([support#1975]).
- Fixed
DriveBase.angle()
getting an incorrectly rounded gyro value, which could causeturn(360)
to be off by a degree (support#1844). - Fixed
hub
silently ignoring non-orthogonal base axis when it should raise.
3.6.0b2 - 2024-10-15
- Allow color objects to be iterated as h, s, v = color_object or indexed as color_object[0]. This allows access to these properties in block coding (support#1661).
- Added
observe_enable
to the hubBLE
class to selectively turn observing on and off, just like you can with broadcasting (support#1806). - Added
hub.system.info()
method with hub status flags (support#1496) and value representing how the program was started.
- Relaxed speed limit from 1000 deg/s to 1200 deg/s for external Boost motor (support#1623).
- Make
broadcast_channel
optional instead of defaulting to0
.
- Fixed persistent data not being deleted when swapping
from
3.6.0b1
to3.5.0
and back to3.6.0b1
(support#1846). - Fixed controls stopping if
use_gyro
is called again with the same argument as already active (support#1858). - Fixed lockup and reboot with f-strings and slice allocations in tight loops (support#1668).
- Fixed program restarting if the stop button was held to end the program without an exception (support#1863).
- Fixed program lockup when restarting a hub light or light matrix animation at exact multiples of its animation interval (support#1295).
3.6.0b1 - 2024-09-24
- Allow Bluetooth to be toggled off and on with the Bluetooth button on the Prime Hub and the Inventor Hub (support#1615), and have this state persist between reboots.
- Added
heading_correction
tohub.imu.settings
to allow for automatic correction of thehub.imu.heading()
value (support#1678). - Added
update_heading_correction
to interactively set the heading correction value (support#1678). - Added optional one byte program identifier to program start command. For now, this is added to start various builtin programs, but it prepares for the ability to start different downloaded programs too (pybricks-micropython#254).
- Added one byte program identifier to the hub status report to the host.
- Added interface and implementation for storing and selecting multiple code slots on the Prime Hub and Inventor Hub.
- Added ability to set distance and angle in
DriveBase.reset()
. If the DriveBase is using the gyro, it will be set to the same angle. (support#1617). - Added
DriveBase.arc
method with more intuitive parameters to drive along an arc, to eventually replaceDriveBase.curve
(support#1157).
- Changed protocol to Pybricks Profile v1.4.0.
- When upgrading the firmware to a new version, the user program will now be erased. This avoids issues with incompatible program files (support#1622).
- The
angular_velocity_threshold
, andacceleration_threshold
settings inhub.imu.settings
are now persistent between reboots. - Reduced hub poweroff time from 3 to 2 second to make it easier to turn off the hub (pybricks-micropython#250).
- Improved font for the digits
0--9
when displaying them withhub.display.char(str(x))
(pybricks-micropython#253). - On SPIKE Prime Hub and Robot Inventor Hub, moved Bluetooth indications to the Bluetooth light. Only warning lights will be shown on the main button light. See (support#1716) and (pybricks-micropython#261).
- Allow gyro calibration only while all motors are coasting (support#1840) to prevent recalibration during very steady moves (support#1687)
- Reduced default angular velocity stationary threshold from an undocumented 5 deg/s to 3 deg/s to reduce unwanted calibration while moving (support#1105).
- If
imu.reset_heading()
is called while a drive base is actively using the gyro, an exception will be raised (support#1818).
- Fixed not able to connect to new Technic Move hub with
LWP3Device()
. - Removed
gc_collect()
fromtools.run_task()
loop to fix unwanted delays. - Fixed
await wait(0)
never yielding, so parallel tasks could lock up (support#1429).
- Removed
loop_time
argument topybricks.tools.run_task
as this wasn't having the desired effect, and would cause loop round trips to take10 ms
for everyawait wait(1)
(support#1460). This was an undocumented feature.
3.5.0 - 2024-04-11
- Bump version from release candidate to 3.5.0 without additional changes.
3.5.0b2 - 2024-04-05
- Added optional keyword arguments to
pybricks.tools.read_input_byte()
for automatic conversion viachr
and to skip to the last byte (support#1574). - Added
disconnect
method topybricks.pupdevices.Remote
andpybricks.iodevices.LWP3Device
(support#802).
- Raise a descriptive error when the
Car
class can't find a steering mechanism end stop within 10 seconds (support#1564). - Extended region of readable data with
hub.system.storage
to include user program (pybricks-micropython#243).
- Fixed hubs not shutting down when holding hub button (support#1419).
3.5.0b1 - 2024-03-21
- Added support for rumble in
XboxController
(support#1024). - Added
Button.UP
,Button.DOWN
,Button.LEFT
, andButton.RIGHT
toXboxController
buttons method (support#1537). The separate directional pad method remains available.
- Allow single floating point value for brightness array (support#1547).
3.4.0 - 2024-03-11
- Additional error checking in
pybricks.robotics.Car
setup (support#1502).
3.4.0b3 - 2024-03-05
- Added
joystick_deadzone
keyword argument to suppress controller drift in theXboxController
(support#1473). - Added
pybricks.tools.running
to return if a stopwatch is currently running (support#1490).
- Use
Button
parameter forXboxController
(support#1488), not strings. - If
pybricks.tools.run_task
is called without arguments, it will return whether the runloop is running or not (support#1499). - On Move Hub, the verbosity of error messages is further reduced to reduce the firmware size, to allow for bug fixes/updates (pybricks-micropython#240).
- Re-implemented
pybricks.robotics.Car
in C so it can be enabled on Move Hub which does not support frozen modules (support#1502).
- Fix
pybricks.iodevices
not allowing writing -128 value (support#1366) and raise informative error messages instead of clamping the input.
3.4.0b2 - 2024-02-10
- Added
pybricks.iodevices.XboxController
(support#191, support#1024). - Re-enable
pybricks.iodevices.LWP3Device
missing from last beta.
- Fix hub not shutting down while a program runs (support#1438).
- On Technic Hub and City Hub, the Bluetooth chip is now configured to reject connection parameter updates from peripherals. This avoids interference with broadcast when used with the Xbox controller.
3.4.0b1 - 2024-01-30
- Added
pybricks.robotics.Car
for controlling a car with one or more drive motors and a steering motor. This is a convenience class that combines several motors to provide the functionality used in most Technic cars.
- Fix observing stopping on City and Technic hubs after some time (support#1096).
- Fix Bluetooth locking up when connecting Bluetooth adapter with small MTU to Technic and City hubs (support#947).
- Fix Technic Hub not always starting automatically after firmware exiting update mode (support#1408). Also apply this to Move Hub and City Hub.
- Fix Bluetooth locking up when connecting Bluetooth adapter with small MTU to Technic and City hubs (support#947).
- Fix Remote pairing difficulty (support#880).
- Fix Remote light not working or crashing the hub (support#1357).
- Fix Technic Hub and City Hub broadcasting missing messages (support#1357).
- Fix Technic Hub and City Hub broadcasting delays.
- Changed polarity of output in the
Light
class. This makes no difference for the Light class, but it makes the class usable for certain custom devices (pybricks-micropython#166). - Improved Bluetooth peripheral scanning and connect process to allow for new device types to be added in the future.
- Changed keypad return type to set instead of tuple. This affects the remote and hubs.
3.3.0 - 2023-11-24
- Bump version from release candidate to 3.3.0.
3.3.0c1 - 2023-11-20
- Added
MoveHub.imu.tilt()
(support#539). - Enabled hub init orientation support for Move Hub (support#539).
- Allow Move Hub to ignore
broadcast
instead of raising an exception while connected.
- Fixed Move Hub accelerometer not working since v3.3.0b5 (support#1269).
- Fixed Bluetooth chip locking up on Technic and City hubs when broadcasting (support#1095).
- Fixed potential crash when GC occurs while observing BLE data (support#1278)
- Fixed Technic Hub and City Hub eventually stopping observing BLE data after a few minutes (support#1096) by implementing an auto-reset workaround.
3.3.0b9 - 2023-10-26
- Added
hub.buttons
as an alias forhub.button
on buttons with one hub (support#1254). - Implemented
brake
forDriveBase
(support#881).
- The
use_gyro
method is added to the normalDriveBase
class instead of having a separateGyroDriveBase
class. Since the latter was only released in beta versions, this is not a breaking change (support#1054). - New color distance function used by the color sensors that is more consistent when distinguishing user-provided colors (pybricks-micropython#104).
- Updated the unreleased BLE API to ensure sent and received objects are the same. Allows one of the supported types or a list/tuple thereof.
- Improved external device detection speed (support#1140).
- Fixed Powered Up Tilt Sensor not working (support#1189).
- Fixed
surface=False
not working inColorSensor
(support#1232). - Fixed
PUPDevice.write
not selecting correct mode (support#1213). - Fixed City Hub turning back on after shutdown (support#1195).
- Fixed SPIKE hubs not broadcasting at all when attempting to broadcast in a tight loop (support#1151).
3.3.0b8 - 2023-07-07
- Added
use_gyro
method to toggle gyro use on and off in theGyroDriveBase
class (support#1054). - Added
pybricks.tools.read_input_byte()
function (support#1102).
- Relaxed thresholds that define when the IMU is stationary, to make the defaults work better in noisier conditions (support#1105).
- Fixed Technic (Extra) Large motors not working (support#1131) on all hubs.
- Fixed Powered Up Light not working (support#1131) on all hubs.
- Fixed UART sensors not working on Technic Hub (support#1137).
- Fixed incorrect number of ports on City Hub (support#1131).
3.3.0b7 - 2023-06-30
- Added
'modes'
entry to the dictionary returned byPUPDevice.info()
. It is a tuple of(name, num_values, data_type)
tuples for each available mode. - Added
pybricks.tools.read_input_byte()
function (support#1102). - Added
pybricks.tools.hub_menu()
function (support#1064).
- Changed internal drivers for LEGO devices (motors and sensors) on all platforms.
- Fixed hub will not power off when Bluetooth chip crashes on City and Technic hubs (support#1095).
- Fixed
off()
method inColorLightMatrix
,UltrasonicSensor
,ColorSensor
(support#1098).
3.3.0b6 - 2023-06-02
- Enabled builtin
set
type (except on BOOST Move hub) (support#402). - Added experimental support for multitasking (pybricks-micropython#166).
- Updated BTStack to v1.5.5.
- Fixed BLE broadcast not working on City hub.
- Fixed crash on BTStack hubs when program stopped during call to
ble.broadcast()
. - Fixed BLE broadcast not working on Technic hub when not connected (support#1086).
- Fixed delayed sensor sync on boot on City hub (support#747).
3.3.0b5 - 2023-05-16
- Enabled the
gc
module (except on BOOST Move hub). - Added
hub.ble
attribute for broadcasting/observing (pybricks-micropython#158).
- Updated MicroPython to v1.20.0.
- Fixed stdin containing
0x06
command byte (support#1052). - Fixed motor process causing delays on ev3dev (support#1035).
3.3.0b4 - 2023-04-21
- Fixed gyro on Technic Hub occasionally giving a bad value, which made it not calibrate properly (support#1026).
- Fixed discrepancy in heading value across hubs by accounting for sampling time (support#1022).
- Fixed iterator for
Matrix
objects giving bad values. - Fixed Bluetooth sometimes locking up on Technic/City hubs (support#567).
- Fixed
GyroDriveBase
being slow to respond to heading perturbations when driving at high speed (support#1032).
- Added
pybricks.tools.cross(a, b)
to get a vector cross product. - Added experimental implementation of
hub.imu.heading()
(support#912). - Added support for reading single-axis rotation, which is useful in applications like balancing robots, where full 3D orientation is not required, or even undesired.
- Added
hub.imu.ready()
to check that the IMU has been calibrated and is ready for use. - Added
GyroDriveBase
class to control drivebase steering with the gyro. - Added optional
window
parameter toMotor.speed
to specify the differentiation window size that determines the average speed. This lets the user choose smaller values to get a more responsive (but noisier) or higher values to get a smoother (but more delayed) speed signal.
- Removed
positive_direction
fromDriveBase
initializer. This was temporarily added in the previous beta release to facilitate gyro support, but made it more complicated than needed (support#992). - Removed
pybricks.geometry
in an effort to reduce the number of modules with just a few elements.Matrix
andvector
have moved totools
. TheAxis
enum was moved toparameters
. Each item can still be imported from its original location for backwards compatibility.
3.3.0b3 - 2023-03-28
- Added
positive_direction
toDriveBase
initializer. It defaults to clockwise to ensure this is not a breaking change. Users can now change it to counterclockwise, which is more common in engineering (support#989). - Added support for setting drivebase acceleration and deceleration separately using a tuple, consistent with single motors (support#881).
- Fixed allocator interfering with motor control when memory usage is high (support#977).
- Fixed
Stop.NONE
not working properly for some drivebase geometries (support#972). - Fixed reading programs larger than 65535 bytes on boot on SPIKE hubs. ([support#996).
- Various Bluetooth stability and reliability improvements on BOOST Move hub (support#320, support#324, support#417).
- Fixed Bluetooth random address not changing on City and Technic hubs (support#1011).
- Methods like
control.limits()
now check the user input and raise aValueError
if a value is out of bounds (support#484). This affects only settings setters, which are usually used as a one-off. Nothing changes to speed values set at runtime. These are still capped to valid numbers without raising exceptions. - Renamed
precision_profile
toprofile
in theMotor
initializer. - In
DriveBase
,wheel_diameter
andaxle_track
now accept decimal values for increased precision (support#830).
- Removed
DriveBase.left
andDriveBase.right
properties (support#910).
3.3.0b2 - 2023-03-08
- Added
precision_profile
parameter toMotor
initializer. This can be used to reduce control gains to get smoother motions for heavy loads or heavily gear applications where precision is less relevant.
- Changed how the PID values are initialized for each motor. This may lead to slightly altered performance.
- Fixed move hub crashing on boot.
- Fixed position based commands starting from the wrong position if the previous command was a time based command that could not hit its target (support#956).
- Fixed EV3 motors getting out of date with the updated motor controllers (support#941) and (support#955).
- Fixed long delay when connecting to remote on SPIKE hubs (support#466).
3.3.0b1 - 2023-02-17
- Added support for frozen modules when building from source (support#829).
- Added
close()
method toDCMotor
andMotor
so they can be closed and re-initialized later (support#904). - Fixed workaround for motor hold drifting away under external input movement (support#863).
- Added
Motor.model
object to interact with the motor state estimator. - Added
Stop.BRAKE_SMART
asthen
option for motors. It works just likeSMART_COAST
, but with passive electrical braking. - Added logging support for control stall and pause state.
- Fixed
Light
controlling wrong ports on Move hub (support#913). - Reduced motor motion while holding position and added configurable setter and getter for this deadzone.
- Fixed type checking optimized out on Move hub (support#950).
- Fixed end-user stall flag coming up too early in position based control.
- Further reduced stutter at low motor speeds (support#366).
3.2.2 - 2023-01-06
- Fixed some objects do not implement
__hash__
(support#876). - Fixed
Motor.run_time
not completing under load (support#903).
3.2.1 - 2022-12-26
- Fixed
imu.angular_velocity
returning the values ofimu.acceleration
.
3.2.0 - 2022-12-20
- Buffered stdout is flushed before ending user program.
- Fixed SPIKE/MINDSTORMS hubs advertising after disconnect while user program is still running (support#849).
- Fixed Essential hub hanging on boot when bootloader entered but USB cable not connected (support#821).
- Fixed button needs debouncing on City/Technic/Essential hubs (support#716).
- Fixed motor hold drifting away under external input movement (support#863).
3.2.0c1 - 2022-12-09
- Fixed
motor.control.limits()
not working if acceleration wasNone
. - Fixed crash on calling methods on uninitialized objects (support#805).
- Fixed crash on calling methods in
__init__(self, ...)
before callingsuper().__init(...)
on uninitialized objects (support#777). - Reverted Pybricks Code stop button raises
SystemAbort
instead ofSystemExit
(support#834). - Improved stop message raised on
SystemExit
andSystemAbort
(support#836). - Fixed Technic Hub and City Hub sometimes not shutting down when a Bluetooth operation is busy (support#814).
- Fixed
hub.system
methods not working (support#837).
- Changed default XYZ orientation of the Technic Hub and the Essential Hub to match the SPIKE Prime Hub and Move Hub (support#848).
3.2.0b6 - 2022-12-02
- Added support for
PBIO_PYBRICKS_COMMAND_REBOOT_TO_UPDATE_MODE
Pybricks Profile BLE command. - Implemented
Motor.load()
which now measures load both during active conditions (run
) and passive conditions (dc
).
- The Pybricks Code stop button will force the program to exit even if the user
catches the
SystemExit
exception (pybricks-micropython#117). - Changed
PrimeHub.display.image()
toPrimeHub.display.icon()
and renamed its kwarg fromimage
toicon
(support#409). - Deprecated
Control.load()
,Control.stalled()
, andControl.done()
methods, but they will continue to exist in the firmware until further notice (support#822). New scripts are encouraged to use the (improved) variants available directly onMotor
objects.
- Fixed connecting
Remote
on BOOST move hub (support#793).
- Removed
hub.system.reset()
method. - Disabled
micropython
module on Move Hub.
3.2.0b5 - 2022-11-11
- Added
DriveBase.stalled()
for convenient stall detection. - Added
DriveBase.done()
for convenient completion detection, which is practical when combined withwait=False
. - Added
Motor.done()
for convenient completion detection, which is practical when combined withwait=False
. Especially on Move Hub, which does not have the control attribute enabled.
- Fixed brief hub freeze on
pybricks.common.Logger.save()
when not connected to the computer (support#738). - Fixed drive base stall flags being set while not stalled (support#767).
- Fixed
Motor.run_target
raising exception for short moves (support#786).
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.