This page has deprecated and moved to the new documentation framework of the main Bitcraze website. Please go to [[https://www.bitcraze.io/documentation/system/]]
The [[doc:crazyflie:client:pycfclient:index|Crazyflie Python client]] runs a number of back-ends where you can set/get information from other applications via [[http://zeromq.org/|ZMQ]].
Here's a list of the ports/functions available:
^ Port ^ Type ^ Functionality ^
| 1213 | REQ | Set parameters |
| 1214 | PUSH | LED-ring memory |
| 1212 | PULL | Input device |
====== Parameters ======
The parameter back-end gives access to setting parameters in the Crazyflie. The back-end is enabled by default.
===== Protocol =====
Available fields:
^ Field ^ Format ^ Comments ^
| version | int | Should be set to 1 |
| cmd | string | Command to send (currently only set is supported) |
| name | string | The name of the parameter |
| value | string | The value of the parameter |
Example of setting the //buzzer.freq// parameter to 4000.
{
"version": 1,
"cmd": "set",
"name" : "buzzer.freq",
"value": "4000"
}
====== LED-ring ======
The LED-ring back-end gives access to the LED-ring memory driver where the user can write the RGB values for all 12 LEDs on the ring. The back-end is enabled by default.
===== Protocol =====
Available fields:
^ Field ^ Format ^ Comments ^
| version | int | Should be set to 1 |
| rgbleds | array of 3 item arrays of int | R/G/B value for each LED (starting at 1) |
Example of setting all LEDs off:
{
"version": 1,
"rgbleds": [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
}
====== Input device ======
If you don't want to use the API and you don't want to bother about scanning/connecting/logging/etc or there's no API for the environment you use, there's an easy way to control the Crazyflie. Just like you would control the Crazyflie with a gamepad or joystick connected to a computer, you can use ZMQ to inject control set-points directly into the client. You still use the client for connecting/logging/graphing/setting parameters, it's just the control part that's broken out.
By default this is disabled in the configuration file and needs to be enabled. The configuration file parameter is named //enable_zmq_input// (see [[doc:crazyflie:dev:host:client:index#user_configuration_file|this]] to edit the configuration). To enable controlling by the back-end select the //ZMQ@127.0.0.1:1212// input device in the //Input device// menu.
===== Protocol =====
Available fields:
^ Field ^ Format ^ Comments ^
| version | int | Should be set to 1 |
| client_name | string | Name of the client (currently unused) |
| ctrl | dict | A dictionary with keys and values that match the internal names of controls in the client (see list below)|
Available keys for the //ctrl// dictionary:
^ Field ^ Range ^ Unit ^ Comments ^
| roll | N/A | degrees | |
| pitch | N/A | degrees | |
| yaw | N/A | degrees/second | |
| thrust | 0-100 | Percent | |
| estop | T/F | boolean | Used to stop the Crazyflie and disable the control |
| alt1 | T/F | boolean | Alt1 is internally mapped to functionality like switching LED-ring effect |
| alt2 | T/F | boolean | Alt2 is internally mapped to functionality like switching LED-ring headlights on/off |
Example:
{
"version": 1,
"client_name": "ZMQ client",
"ctrl": {
"roll": 0.0,
"pitch": 0.0,
"yaw": 0.0,
"thrust": 0.0
}
}
**NOTE1**: Altitude hold is currently not working.
**NOTE2**: The values are used at 100Hz in the client, no matter at what rate they are sent via ZMQ