This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
wiki:v2:python [2021/12/08 15:24] kees 211208 - Update installation process and import path |
wiki:v2:python [2021/12/30 14:48] (current) kees Some minor changes |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | **!!This page is under construction!!** | ||
- | |||
====== Pixy2 Python tutorial ====== | ====== Pixy2 Python tutorial ====== | ||
Line 17: | Line 15: | ||
In this tutorial we will describe the following platforms: | In this tutorial we will describe the following platforms: | ||
- | * Raspberry Pi: using USB and the libpixyusb2 library. | ||
* LEGO Mindstorms EV3 using Python on the ev3dev operating system. | * LEGO Mindstorms EV3 using Python on the ev3dev operating system. | ||
* LEGO Mindstorms EV3 using MicroPython with PyBricks. | * LEGO Mindstorms EV3 using MicroPython with PyBricks. | ||
+ | * Raspberry Pi: using USB and the libpixyusb2 library. | ||
This tutorial belongs to Pixy2 and Pixy2.1. If you own the previous Pixy, go | This tutorial belongs to Pixy2 and Pixy2.1. If you own the previous Pixy, go | ||
to the chapter "Pixy for LEGO Mindstorms" in the tutorial | to the chapter "Pixy for LEGO Mindstorms" in the tutorial | ||
- | [[https://github.com/KWSmit/Pixy_ev3dev|over here]]. That tutorial is written | + | [[https://github.com/KWSmit/Pixy_ev3dev|over here]], written |
- | by one of our customers. | + | by one of our customers which explains how to use Pixy on LEGO Mindstorms EV3. |
- | + | ||
- | ===== Rasberry Pi ===== | + | |
- | + | ||
- | <Work in progress> | + | |
===== LEGO Mindstorms EV3 ===== | ===== LEGO Mindstorms EV3 ===== | ||
Line 54: | Line 48: | ||
page. | page. | ||
- | ==== API ==== | + | ==== pixycamev3 ==== |
To make programming more easy for you, we developed a Python API to use Pixy2 | To make programming more easy for you, we developed a Python API to use Pixy2 | ||
- | on the EV3. The same API can be used with both Python3 and MicroPython. The | + | on the EV3. To use this API you have to install module ''pixycamev3''. |
+ | The same API can be used with both Python3 and MicroPython. The | ||
only difference is the way you install the API. When installed, using our | only difference is the way you install the API. When installed, using our | ||
API with Python3 is exactly the same as with MicroPython. But first you have | API with Python3 is exactly the same as with MicroPython. But first you have | ||
Line 80: | Line 75: | ||
PixyMon and detach Pixy2 from your computer. | PixyMon and detach Pixy2 from your computer. | ||
- | ==== Installing Python API ==== | + | ==== Installing pixycamev3 ==== |
This Python API works both with Python3 and MicroPython. There are two ways | This Python API works both with Python3 and MicroPython. There are two ways | ||
Line 131: | Line 126: | ||
in your ''pixycamev3'' folder. | in your ''pixycamev3'' folder. | ||
- | Your project folder structure should look now like this: | + | Your project folder structure should look like this: |
<code> | <code> | ||
Line 143: | Line 138: | ||
the file you're ready to program! | the file you're ready to program! | ||
- | ==== Using Python API ==== | + | ==== Using pixycamev3 ==== |
The main object you will need is the ''Pixy2'' class. This object contains all | The main object you will need is the ''Pixy2'' class. This object contains all | ||
Line 179: | Line 174: | ||
from pixycamev3.pixy2 import Pixy2 | from pixycamev3.pixy2 import Pixy2 | ||
- | prixy2 = Pixy2(port=1, i2c_address=0x54) | + | pixy2 = Pixy2(port=1, i2c_address=0x54) |
# Get version | # Get version | ||
Line 200: | Line 195: | ||
from pixycamev3.pixy2 import Pixy2 | from pixycamev3.pixy2 import Pixy2 | ||
- | prixy2 = Pixy2(port=1, i2c_address=0x54) | + | pixy2 = Pixy2(port=1, i2c_address=0x54) |
# Get frame resolution | # Get frame resolution | ||
Line 221: | Line 216: | ||
from pixycamev3.pixy2 import Pixy2 | from pixycamev3.pixy2 import Pixy2 | ||
- | prixy2 = Pixy2(port=1, i2c_address=0x54) | + | pixy2 = Pixy2(port=1, i2c_address=0x54) |
# Turn upper leds on for 2 seconds, then turn off | # Turn upper leds on for 2 seconds, then turn off | ||
Line 297: | Line 292: | ||
| MainFeatures object: ^^ | | MainFeatures object: ^^ | ||
| error | Data error when value True | | | error | Data error when value True | | ||
- | | length_of_payload | Number of bytes in payload | | + | | %%length_of_payload%% | Number of bytes in payload | |
- | | number_of_vectors | Number of vectors detected | | + | | %%number_of_vectors%% | Number of vectors detected | |
- | | number_of_intersections | Number of intersections detected | | + | | %%number_of_intersections%% | Number of intersections detected | |
- | | number_of_barcodes | Number of barcodes detected | | + | | %%number_of_barcodes%% | Number of barcodes detected | |
| vectors | List with Vector objects (length number_of_vectors) | | | vectors | List with Vector objects (length number_of_vectors) | | ||
| intersections | List with Intersection objects (length number_of_intersections) | | | intersections | List with Intersection objects (length number_of_intersections) | | ||
Line 311: | Line 306: | ||
| y1 | Y location endpoint vector | | | y1 | Y location endpoint vector | | ||
| index | Index of vector in array | | | index | Index of vector in array | | ||
- | | flags | <TODO: ??> | | + | | flags | Internal state, used for testing/debugging | |
| ^^ | | ^^ | ||
| Intersection object: ^^ | | Intersection object: ^^ | ||
| x | X location of intersection | | | x | X location of intersection | | ||
| y | Y location of intersection | | | y | Y location of intersection | | ||
- | | nr_of_branches | Number of branches starting at this intersection | | + | | %%nr_of_branches%% | Number of branches starting at this intersection | |
| branches | Array with Branch objects (length number_of_branches) | | | branches | Array with Branch objects (length number_of_branches) | | ||
| ^^ | | ^^ | ||
Line 322: | Line 317: | ||
| x | X location center of barcode | | | x | X location center of barcode | | ||
| y | Y location center of barcode | | | y | Y location center of barcode | | ||
- | | flags | <TODO: ??> | | + | | flags | Internal state, used for testing/debugging | |
| code | Number of barcode (see Pixy2 wiki) | | | code | Number of barcode (see Pixy2 wiki) | | ||
| ^^ | | ^^ | ||
Line 333: | Line 328: | ||
| <code> | | <code> | ||
from pixycamev3.pixy2 import Pixy2 | from pixycamev3.pixy2 import Pixy2 | ||
+ | |||
+ | pixy2 = Pixy2(port=1, i2c_address=0x54) | ||
# Detect barcodes and print their number | # Detect barcodes and print their number | ||
Line 340: | Line 337: | ||
for i in range(0, data.number_of_barcodes) | for i in range(0, data.number_of_barcodes) | ||
print('Barcode number: ', data.barcodes[i].code) | print('Barcode number: ', data.barcodes[i].code) | ||
+ | </code> ^^ | ||
+ | |||
+ | ^ %%set_next_turn(angle)%% ^^ | ||
+ | | **Description:** ^^ | ||
+ | | Set direction for turn at the next intersection. After this intersection ^^ | ||
+ | | Pixy2 will choose it's default turn again. ^^ | ||
+ | | **Parameters:** ^^ | ||
+ | | angle | Direction to choose at the next intersection (-180, 180 degrees) | | ||
+ | | **Returns:** ^^ | ||
+ | | None ^^ | ||
+ | | **Example:** ^^ | ||
+ | | <code> | ||
+ | from time import sleep | ||
+ | from pixycamev3.pixy2 import Pixy2 | ||
+ | |||
+ | pixy2 = Pixy2(port=1, i2c_address=0x54) | ||
+ | |||
+ | # Set next turn to 90 degrees | ||
+ | pixy2.set_next_turn(90) | ||
+ | </code> ^^ | ||
+ | |||
+ | ^ %%set_default_turn(angle)%% ^^ | ||
+ | | **Description:** ^^ | ||
+ | | Set default direction for all intersections. ^^ | ||
+ | | **Parameters:** ^^ | ||
+ | | angle | Default direction (-180, 180 degrees) | | ||
+ | | **Returns:** ^^ | ||
+ | | None ^^ | ||
+ | | **Example:** ^^ | ||
+ | | <code> | ||
+ | from time import sleep | ||
+ | from pixycamev3.pixy2 import Pixy2 | ||
+ | |||
+ | pixy2 = Pixy2(port=1, i2c_address=0x54) | ||
+ | |||
+ | # Set default turn to 0 degrees (straight on) | ||
+ | pixy2.set_default_turn(0) | ||
</code> ^^ | </code> ^^ | ||
Line 346: | Line 380: | ||
You'll find more practical sample code in the | You'll find more practical sample code in the | ||
[[https://github.com/charmedlabs/pixycamev3|Github repository]]. | [[https://github.com/charmedlabs/pixycamev3|Github repository]]. | ||
+ | |||
+ | ===== Rasberry Pi ===== | ||
+ | |||
+ | <Work in progress> | ||