Skip to main content

Control LEGO(tm) BluetoothLE Hubs, Motors, and Sensors using Async Python

Project description

image_pypi image_downloads image_license passing quality Coverage Status

BrickNil [*] provides an easy way to connect to and program LEGO® Bluetooth hubs (including the newer 60197 and 60198 train sets) using Python on OS X and Linux. This work was inspired by this EuroBricks thread, and the NodeJS Powered-Up library. It requires modern Python (designed and tested for 3.7) and uses asynchronous event programming built on top of the Curio async library. As an aside, the choice of async library is fairly arbitrary; and conceivably enabling another library such as asyncio or Trio should be straightforward.

An example BrickNil program for controlling the Train motor speed is shown below:

from curio import sleep
from bricknil import attach, start
from bricknil.hub import PoweredUpHub
from bricknil.sensor import TrainMotor

@attach(TrainMotor, name='motor')
class Train(PoweredUpHub):

    async def run(self):
        for i in range(2):  # Repeat this control two times
            await self.motor.ramp_speed(80,5000) # Ramp speed to 80 over 5 seconds
            await sleep(6)
            await self.motor.ramp_speed(0,1000)  # Brake to 0 over 1 second
            await sleep(2)

async def system():
    train = Train('My train')

if __name__ == '__main__':
    start(system)

Features

  • Supports the following LEGO® Bluetooth systems:
    • PoweredUp hubs for trains

    • Boost Move hub

  • Supports the following actuators/sensors:
    • Internal motors

    • Train motors

    • Hub LED color

    • Boost vision sensor (color, distance)

    • Internal tilt/orientation/accelerometer

    • Hub buttons

  • Fully supports Python asynchronous keywords and coroutines
    • Allows expressive concurrent programming using async/await syntax

    • The current implementation uses the async library Curio by David Beazley

  • Cross-platform
    • Uses the Adafruit Bluefruit BluetoothLE library for Mac OS X

    • Uses the Bleak Bluetooth library for Linux and Win10[], tested on Raspberry Pi

Building a simple train controller

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bricknil-0.6-py3-none-any.whl (60.1 kB view details)

Uploaded Python 3

File details

Details for the file bricknil-0.6-py3-none-any.whl.

File metadata

  • Download URL: bricknil-0.6-py3-none-any.whl
  • Upload date:
  • Size: 60.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.0

File hashes

Hashes for bricknil-0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 4297df8c7271d897cc9f61617a3254e259ae949fa8ee68ae669e903d8d097c57
MD5 9bb20152073054f2c58dee24ceb33c06
BLAKE2b-256 4ee425ab153eedbfa46668cf836a20c7bfdefd131e4232a6a9d4731fae53cc36

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page