The python crazyradio lib can be found in the Crazyflie python library git repos
https://github.com/bitcraze/crazyflie-lib-python/blob/master/cflib/drivers/crazyradio.py.
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()
cr.set_channel(90)
cr.set_data_rate(cr.DR_2MPS)
res = cr.send_packet([0xff, ])
print res.ack # At true if an ack has been received
print res.data # The ack payload data
API
Crazyradio
Fields
None
Methods
[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) |
close(self)
| 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. |
_radio_ack
Fields
| (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 |
Methods
None