Aquesta és una versió anterior. La versió actual és la 0.18.0. cfcli 0.18.0 · Data de publicació:
Fitxers d’instal·lació 0.16.0
| Arquitectura | Tipus | Àmbit | Mida del fitxer | Baixa | SHA256 |
|---|---|---|---|---|---|
| 64 bits | ZIP → Portable | — | — | github.com | VirusTotal |
L’enllaç i l’SHA256 provenen del manifest comunitari del Gestor de paquets del Windows. Convé comparar el hash del fitxer baixat abans d’executar-lo.
Notes de la versió
This release is mostly about swarms. cfcli can now store lists of Crazyflies,
run commands on all of them at once, and share swarms and lighthouse
configurations with the people you fly with.
### New features
• **Swarms** — a swarm is a named list of Crazyflies, each with a short name,
stored in the same YAML format as
[Swarmkeeper](https://github.com/evoggy/swarmkeeper) so a file can move
between the two. `swarm config` manages them (`list`, `select`, `create`,
`delete`, `show`, `name`, `add`, `remove`, `rename`, `import`, `export`,
`move`), `swarm scan` shows which Crazyflies answer, and
`select --from-swarm CF-02` selects one of them for all the other commands.
See [docs/swarm.md](docs/swarm.md).
```text
$ cfcli swarm config import ~/Documents/Swarmkeeper/swarms/lab.yaml
Imported swarm 'lab' from …/lab.yaml (3 Crazyflies), 3 URIs now use radio:/// (any Crazyradio)
Selected swarm 'lab' (3 Crazyflies)
$ cfcli swarm scan
CF | URI | Radio | Online
------+---------------------------+-------+--------
CF-01 | radio:///80/2M/E7E7E7E701 | 1 | yes
CF-02 | radio:///90/2M/ABAD1DEA01 | 0 | yes
CF-03 | radio:///90/2M/ABAD1DEA02 | 0 | yes
3 of 3 Crazyflies answered
```
`swarm config add` takes URIs, `--scan`, or `--from-usb` (the one
USB-attached Crazyflie), and asks for a name when a single Crazyflie is added.
Swarm IDs and Crazyflie names complete in bash, zsh and PowerShell.
• **Any Crazyradio:`radio:///`** — a URI with the radio left empty means "any
Crazyradio". A single Crazyflie gets the first Crazyradio that can be opened,
so cfcli keeps working while another program holds radio 0. A swarm is spread
over all attached Crazyradios, and Crazyflies on the same channel, or on
channels less than 2 apart, always share one, so two radios never transmit on
the same channel. `radio://0/` is rewritten to `radio:///` when Crazyflies are
imported or added to a swarm; other radio indices are kept.
• **Commands on a whole swarm** — these run on every Crazyflie in the selected
swarm, or on the ones picked with `--cf`, `--exclude` or `--swarm`:
| Command | |
|---|---|
| `swarm platform info \| reboot \| power-off \| sleep \| wakeup` | |
| `swarm param get \| set \| store \| clear` | without names, the parameters are picked from the first Crazyflie |
| `swarm log print` | streaming, or one row per Crazyflie with `--once` |
| `swarm deck list`, `swarm debug assert` | |
| `swarm bootload info \| flash` | see below |
| `swarm rechannel` | see below |
| `swarm lh check \| write` | see below |
Listings look like the normal ones with a `CF` column in front, and `--csv`
rows start with `cf,uri`. A Crazyflie that fails doesn't stop the others; its
error goes to stderr with its name in front. The exit code is 0 when all
succeed, the usual code when all fail the same way (10 when none answer), and
the new **50** otherwise.
```text
$ cfcli swarm platform info
CF | Platform | Firmware | CRTP protocol
------+-------------------------+-------------+---------------
CF-BS | Crazyflie 2.1 Brushless | 2026.08 +84 | 13
CF-01 | Crazyflie 2.1 Brushless | 2026.08 | 12
CF-02 | Crazyflie 2.1 Brushless | 2026.08 | 12
```
Each Crazyradio talks to up to 8 Crazyflies at a time, and log and parameter
TOCs are downloaded once per firmware instead of once per Crazyflie (3.2 s
cold and 0.6 s warm for `swarm platform info` on 3 Crazyflies).
• **Flashing a swarm** — `swarm bootload flash` takes the same `--release`,
`--zip`, `--bin` and `--targets` as `bootload flash` and flashes the
Crazyflies one after another, with a summary table at the end. A release is
downloaded for each platform in the swarm, and everything is prepared before
the first Crazyflie is touched, so a wrong `--zip` stops the command instead of
failing halfway. STM32 and nRF51 images given with `--bin` are only flashed
when all the Crazyflies have the same platform; `--platform` flashes one
platform at a time in a mixed swarm.
`swarm bootload info` shows the bootloader versions of each Crazyflie and
restarts it back into its firmware. Its `Broadcast` column tells whether both
bootloaders support broadcast flashing (bootloader protocol 0x11), which is in
preparation; this release flashes one Crazyflie at a time.
• **Spreading a swarm over several channels** — Crazyflies on one channel share
one Crazyradio, so a swarm on a single channel can only use one.
`swarm rechannel --count 3` (channels 80, 78 and 76) or
`--channels 80,76,72` gives each channel an equal share, keeps Crazyflies
that are already on one of the channels where they are, and refuses a plan
that would put two Crazyflies with the same address on one channel. The plan
is shown and confirmed first (`--dry-run` stops there, `--yes` skips the
question). Each Crazyflie that moves is reprogrammed, rebooted and found on
its new channel before its URI in the swarm file changes, so running the
command again after an interruption finishes the job.
• **Sharing swarms and lighthouse configurations** — `auth login` signs cfcli in
to a server through the browser, with nothing to copy (`auth status`,
`auth logout`). Signed in, swarms on the server sit next to the local ones as
`<organization>/<swarm>`, and every swarm command takes either kind of ID.
`swarm config move lab org/lab` shares a local swarm, and moving it back takes
it back. The default server is https://arc.bitcraze.io; `--server` signs in to
another one. See [docs/auth.md](docs/auth.md).
```text
| ID | Name | Crazyflies | Stored
--+-------------------+-------------+------------+----------------------------
• | lab | Lab | 3 | this computer
| bitcraze-lab/cage | Flight cage | 8 | arc.bitcraze.io, revision 3
```
With sync on (`settings sync on`, the default), commands check the server
first and upload changes right away, and a change someone else made in between
is kept. With sync off, `pull` and `push` sync by hand. Without the server,
commands work on this computer's copies and upload the changes later, so
working with the Crazyflies never waits for the network. When you change your
ID for an organization on the server, cfcli moves its copies and the selected
swarm to the new ID.
• **Stored lighthouse configurations** — lighthouse configurations can be stored
like swarms, locally as `<config>` or shared as `<org>/<config>`:
`lh config list`, `save` (the Crazyflie's configuration), `import`, `export`
(a file the Crazyflie client opens), `name`, `delete`, `move`, `pull` and
`push`. `display`, `write` and `check` take a stored configuration, a file
(`-i`) or YAML on stdin. See [docs/lighthouse.md](docs/lighthouse.md).
A swarm can name the configuration it flies in (`swarm config lh`).
`swarm lh check` compares every Crazyflie with it, and `swarm lh write` writes
it to the Crazyflies that don't have it yet and reads it back:
```text
$ cfcli swarm lh check
Lighthouse config 'lab/cage' (revision 3):base stations 0, 1, 2, 3
CF | Lighthouse
------+------------------------------------------
CF-01 | up to date
CF-02 | BS 2 moved 4.1 cm, turned 0.62°
CF-03 | no position for BS 0, 1, 2, 3
Error:differs: 2 of 3 Crazyflies have another lighthouse configuration; 'cfcli swarm lh write' gives them this one
```
• **Comparing lighthouse configurations** — `lh config check` compares the
Crazyflie's configuration with a file or a stored one, per base station:how
far the geometry moved and turned, and whether the calibration belongs to
another base station. A difference exits with the new code **60**, so a
script can act on it. `--csv` is supported.
```text
BS | Geometry | Calibration
---+----------------------+-------------------------------------------------------------------------
0 | not on the Crazyflie | other base station:0x00BC614E in the file, 0xE8781C12 on the Crazyflie
1 | - | same
```
• **One log sample** — `log print --once` reads one sample, prints it as a table
and stops; `--csv` gives the header and the first row. See
[docs/logging.md](docs/logging.md).
• **Radio URIs of USB-attached Crazyflies** — `scan --from-usb` reads the radio
configuration of every USB-attached Crazyflie and prints its radio URI,
without selecting it the way `select --from-usb` does:
```text
$ cfcli scan --from-usb
> radio://0/90/2M/ABAD1DEA01 (usb://410050000551343036333233)
```
• **Restarting the STM32 into USB DFU** — `platform dfu` restarts the STM32 into
its ROM bootloader over the radio, without holding the power button, and
waits for it to show up on USB (`0483:df11`). `platform reboot` brings it back.
This needs nRF51 firmware with
[crazyflie2-nrf-firmware#126](https://github.com/bitcraze/crazyflie2-nrf-firmware/pull/126),
which is not in a firmware release yet. See [docs/platform.md](docs/platform.md).
• **GAP8 as a flash target** — the AI-deck's GAP8 (`bcAI:gap8-fw`) can now be
flashed.
### Bug fixes
• **`bootload info` shows the real bootloader protocol version** — the version
was read from the byte that echoes the command, so every bootloader reported
`Protocol Version:16` (0x10). It is now read from the right byte (0 for
bootloaders from before it existed), and the CPU ID is shown in full instead
of its first 2 bytes.
• **Entering the bootloader no longer hangs** — the warm boot behind
`bootload flash` and `bootload info` asked the firmware for its bootloader
once, and could wait forever if that request or its answer was lost. It now
asks aga