Python Crazyradio Library

The python crazyradio lib can be found in the Crazyflie python library git repos It is a single file that implements the low level Crazyradio dongle functionalities.

Theory of operation

The Crazyradio is configured in PTX mode which means that it will start all communication. If a device in PRX mode is on the same address, channel and datarate, the device will send back an ack packet that may contains data.

   Crazyradio    Device
      _             _
      |             |
      |  Packet     |
      |        Ack  |
      |             |

This is an example on how to use the lib:

import crazyradio

cr = crazyradio.Crazyradio()

res = cr.send_packet([0xff, ])
print res.ack                   # At true if an ack has been received
print                  # The ack payload data






[init]{.underline}(self. device=None, devid=0)
Name _ _init_ _ (Constructor)
Parameters (USBDevice) device, (int) devid
Returns None
Description Initialize the Crazyradio object. If device is not specified, a list of available Crazyradio is made and devId selects the Crazyradio used (by default the first one)
Name close
Parameters None
Returns None
Description Close the USB device. Should be called before closing the program.
set_channel(self, channel)
Name set_channel
Parameters (int) channel
Returns None
Description Set the Crazyradio channel. Channel must be between 0 and 125. Channels are spaced by 1MHz starting at 2400MHz and ending at 2525MHz.
set_address(self, address)
Name set_address
Parameters (list of int) address
Returns None
Description Set the Crazyradio address. The address is 5 bytes long. It should be a list of 5 bytes values.
set_data_rate(self, datarate)
Name set_datarate
Parameters (int) datarate
Returns None
Description Set the Crazyradio datarate. Datarate is one of DR_250KPS, DR_1MPS or DR_2MPS
set_power(self, power)
Name set_power
Parameters (int) power
Returns None
Description Set the Crazyradio transmit power. Power is one of P_M18DBM, P_M12DBM, P_M6DBM or P_0DBM respectively for -18dBm, -12dBm, -6dBm and 0dBm.
set_arc(self, arc)
Name set_arc
Parameters (int) arc
Returns None
Description Set the number of retry. 0<arc<15. See nRF24L01 documentation for more info.
set_ard_time(self, us)
Name set_ard_time
Parameters (int) us
Returns None
Description Set the time to wait for an Ack in micro seconds. 250<us<4000. The wait time for an Ack packet corresponds to the time to receive the biggest expected Ack. See nRF24L01 documentation for more info.
set_ard_bytes(self, nbytes)
Name set_ard_bytes
Parameters (int) nbytes
Returns None
Description Set the time to wait for an Ack in number of ack payload bytes. The Crazyradio will calculate the correct time with the currently selected datarate.
set_cont_carrier(self, active)
Name set_cont_carrier
Parameters (bool) active
Returns None
Description Enable or disable the continuous carrier mode. In continuous carrier the Crazyradio transmit a constant sinus at the currently set frequency (channel) and power. This is a test mode that can affect other 2.4GHz devices (ex. wifi) it should only be used in a lab for test purposes.
scan_channels(self, start, stop, packet)
Name scan_channels
Parameters (int) start, (int) stop, (int) packet
Returns (list) List of channels that Acked the packet
Description Sends \packet\ to all channels from start to stop. Returns a list of the channels for which an ACK was received.
send_packet(self, dataOut)
Name send_packet
Parameters (list or tuple) dataOut
Returns (_radio_ack) Ack status
Description Sends the packet dataOut on the configured channel and datarate. Waits for an ack and returns a _radio_ack object that contains the ack status and optional ack payload data.



(bool) ack At True if an Ack packet has been receive (ie. if the packet was received by the device)
(bool) powerDet Indicate the nRF24LU1 power detector status. See nRF24LU1 documentation for more information.
(int) retry Number of retry before an ack was received
(tuple) data Data payload received in the Ack packet