mirror of
https://github.com/undera/pylgbst.git
synced 2020-11-18 19:37:26 -08:00
CDS documented
This commit is contained in:
parent
155e0d09f2
commit
da0bb5ad05
50
README.md
50
README.md
@ -1,4 +1,4 @@
|
|||||||
# Python library to interact with LEGO Move Hub
|
from pylgbst.peripherals import ColorDistanceSensor# Python library to interact with LEGO Move Hub
|
||||||
|
|
||||||
Best way to start is to look into [`demo.py`](demo.py) file, and run it.
|
Best way to start is to look into [`demo.py`](demo.py) file, and run it.
|
||||||
|
|
||||||
@ -42,17 +42,53 @@ connection params
|
|||||||
hub's devices detect process & fields to access them
|
hub's devices detect process & fields to access them
|
||||||
general subscription modes & granularity info
|
general subscription modes & granularity info
|
||||||
good practice is to unsubscribe, especially when used with `DebugServer`
|
good practice is to unsubscribe, especially when used with `DebugServer`
|
||||||
|
|
||||||
### Motors
|
### Motors
|
||||||
### Motor Rotation Sensors
|
### Motor Rotation Sensors
|
||||||
### Tilt Sensor
|
### Tilt Sensor
|
||||||
|
|
||||||
### Color & Distance Sensor
|
### Color & Distance Sensor
|
||||||
Tip: laser pointer pointing to sensor makes it trigger distance sensor
|
|
||||||
|
Field named `color_distance_sensor` holds instance of `ColorDistanceSensor`, if one is attached to MoveHub. Sensor has number of different modes to subscribe. Only one, very last subscribe mode is in effect, with many subscriber callbacks allowed.
|
||||||
|
|
||||||
|
Colors that are detected are part of `COLORS` map (see [LED](#LED) section). Only several colors are possible to detect: `BLACK`, `BLUE`, `CYAN`, `YELLOW`, `RED`, `WHITE`. Sensor does its best to detect best color, but only works when sample is very close to sensor.
|
||||||
|
|
||||||
|
Distance works in range of 0-10 inches, with ability to measure last inch in higher detail.
|
||||||
|
|
||||||
|
Simple example of subscribing to sensor:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from pylgbst import MoveHub, ColorDistanceSensor
|
||||||
|
import time
|
||||||
|
|
||||||
|
def callback(clr, distance):
|
||||||
|
print("Color: %s / Distance: %s" % (clr, distance))
|
||||||
|
|
||||||
|
hub = MoveHub()
|
||||||
|
|
||||||
|
hub.color_distance_sensor.subscribe(callback, mode=ColorDistanceSensor.COLOR_DISTANCE_FLOAT)
|
||||||
|
time.sleep(60) # play with sensor while it waits
|
||||||
|
hub.color_distance_sensor.unsubscribe(callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
Subscription mode constants in class `ColorDistanceSensor` are:
|
||||||
|
- `COLOR_DISTANCE_FLOAT` - default mode, use `callback(color, distance)` where `distance` is float value in inches
|
||||||
|
- `COLOR_ONLY` - use `callback(color)`
|
||||||
|
- `DISTANCE_INCHES` - use `callback(color)` measures distance in integer inches count
|
||||||
|
- `COUNT_2INCH` - use `callback(count)` - it counts crossing distance ~2 inches in front of sensor
|
||||||
|
- `DISTANCE_HOW_CLOSE` - use `callback(value)` - value of 0 to 255 for 30 inches, larger with closer distance
|
||||||
|
- `DISTANCE_SUBINCH_HOW_CLOSE` - use `callback(value)` - value of 0 to 255 for 1 inch, larger with closer distance
|
||||||
|
- `LUMINOSITY` - use `callback(luminosity)` where `luminosity` is float value from 0 to 1
|
||||||
|
- `OFF1` and `OFF2` - seems to turn sensor LED and notifications off
|
||||||
|
- `STREAM_3_VALUES` - use `callback(val1, val2, val3)`, sends some values correlating to distance, not well understood at the moment
|
||||||
|
|
||||||
|
Tip: laser pointer pointing to sensor makes it to trigger distance sensor
|
||||||
|
|
||||||
### LED
|
### LED
|
||||||
|
|
||||||
`MoveHub` class has field `led` to access color LED near push button. To change its color, use `set_color(color)` method.
|
`MoveHub` class has field `led` to access color LED near push button. To change its color, use `set_color(color)` method.
|
||||||
|
|
||||||
You can obtain colors are present as constants `COLOR_*` and also a map of available color-to-name as `COLORS`.
|
You can obtain colors are present as constants `COLOR_*` and also a map of available color-to-name as `COLORS`. There are 12 color values, including `COLOR_BLACK` and `COLOR_NONE` which turn LED off.
|
||||||
|
|
||||||
Additionally, you can subscribe to LED color change events, using callback function as shown in example below.
|
Additionally, you can subscribe to LED color change events, using callback function as shown in example below.
|
||||||
|
|
||||||
@ -76,7 +112,7 @@ hub.led.set_color(COLOR_NONE)
|
|||||||
hub.led.unsubscribe(callback)
|
hub.led.unsubscribe(callback)
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: blinking orange color of LED means battery is low.
|
Tip: blinking orange color of LED means battery is low.
|
||||||
|
|
||||||
### Push Button
|
### Push Button
|
||||||
|
|
||||||
@ -111,8 +147,6 @@ time.sleep(1)
|
|||||||
print ("Value: " % hub.battery.last_value)
|
print ("Value: " % hub.battery.last_value)
|
||||||
```
|
```
|
||||||
|
|
||||||
TODO: investigate `mode` parameter for battery
|
|
||||||
|
|
||||||
## Debug Server
|
## Debug Server
|
||||||
Running debug server opens permanent BLE connection to Hub and listening on TCP port for communications. This avoids the need to re-start Hub all the time.
|
Running debug server opens permanent BLE connection to Hub and listening on TCP port for communications. This avoids the need to re-start Hub all the time.
|
||||||
|
|
||||||
@ -125,6 +159,8 @@ sudo python -c "from pylgbst.comms import *; \
|
|||||||
DebugServer(BLEConnection().connect()).start()"
|
DebugServer(BLEConnection().connect()).start()"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Then push green button on MoveHub, so permanent BLE connection will be established.
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
- Give nice documentation examples, don't forget to mention logging
|
- Give nice documentation examples, don't forget to mention logging
|
||||||
@ -138,7 +174,7 @@ sudo python -c "from pylgbst.comms import *; \
|
|||||||
## Links
|
## Links
|
||||||
|
|
||||||
- https://github.com/JorgePe/BOOSTreveng - source of protocol knowledge
|
- https://github.com/JorgePe/BOOSTreveng - source of protocol knowledge
|
||||||
- https://github.com/spezifisch/sphero-python/blob/master/BB8joyDrive.py - example with +-another approach to bluetooth libs
|
- https://github.com/spezifisch/sphero-python/blob/master/BB8joyDrive.py - example with another approach to bluetooth libs
|
||||||
|
|
||||||
Some things around visual programming:
|
Some things around visual programming:
|
||||||
- https://github.com/RealTimeWeb/blockpy
|
- https://github.com/RealTimeWeb/blockpy
|
||||||
|
@ -320,7 +320,7 @@ class ColorDistanceSensor(Peripheral):
|
|||||||
OFF2 = 0x07
|
OFF2 = 0x07
|
||||||
COLOR_DISTANCE_FLOAT = 0x08
|
COLOR_DISTANCE_FLOAT = 0x08
|
||||||
LUMINOSITY = 0x09
|
LUMINOSITY = 0x09
|
||||||
SOME_20BYTES = 0x0a
|
SOME_20BYTES = 0x0a # TODO: understand it
|
||||||
|
|
||||||
def __init__(self, parent, port):
|
def __init__(self, parent, port):
|
||||||
super(ColorDistanceSensor, self).__init__(parent, port)
|
super(ColorDistanceSensor, self).__init__(parent, port)
|
||||||
@ -372,6 +372,7 @@ class Battery(Peripheral):
|
|||||||
self.last_value = None
|
self.last_value = None
|
||||||
|
|
||||||
def subscribe(self, callback, mode=0, granularity=1, async=False):
|
def subscribe(self, callback, mode=0, granularity=1, async=False):
|
||||||
|
# TODO: investigate `mode` parameter for battery
|
||||||
super(Battery, self).subscribe(callback, mode, granularity)
|
super(Battery, self).subscribe(callback, mode, granularity)
|
||||||
|
|
||||||
# we know only voltage subscription from it. is it really battery or just onboard voltage?
|
# we know only voltage subscription from it. is it really battery or just onboard voltage?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user