Drone. Adapters. Tello
(ex_drone v0.3.0)
View Source
Tello drone adapter for ex_drone.
This adapter communicates with DJI Tello and Tello EDU drones over Wi-Fi UDP using the official Tello SDK protocol.
Default Configuration
- Drone IP:
192.168.10.1 - Drone port:
8889 - Local port:
8889 - Command timeout:
10_000ms
Usage
{:ok, drone} = Drone.connect(:tello, name: :tello_1)
Drone.connect_sdk(drone)
Drone.takeoff(drone)
Drone.move(drone, :forward, 50)
Drone.land(drone)
Drone.disconnect(drone)Custom Configuration
{:ok, drone} = Drone.connect(:tello,
name: :tello_1,
drone_ip: {192, 168, 10, 1},
drone_port: 8889,
local_port: 9030,
timeout: 15_000
)Safety warning: The Tello is a real physical drone. Always test in the simulator first. Use prop guards. Do not fly near faces. Have an emergency stop ready.
Summary
Types
Tello adapter state held by Drone.Vehicle.
Functions
Returns Tello-like capability metadata.
Sends an encoded SDK command over UDP and updates dead-reckoned state.
Opens a UDP socket and returns initial Tello adapter state.
Closes the UDP socket.
Returns a telemetry snapshot from dead-reckoned adapter fields.
Types
@type t() :: %Drone.Adapters.Tello{ drone_ip: :inet.ip_address(), drone_port: non_neg_integer(), flying: boolean(), mode: :idle | :sdk_mode | :flying | :emergency, socket: port() | nil, timeout: non_neg_integer(), x: integer(), y: integer(), yaw: integer(), z: integer() }
Tello adapter state held by Drone.Vehicle.
| Field | Type | Meaning |
|---|---|---|
:socket | port() | nil | UDP socket used for SDK commands |
:drone_ip | :inet.ip_address() | Drone address (default {192, 168, 10, 1}) |
:drone_port | non_neg_integer() | Drone command port (default 8889) |
:timeout | non_neg_integer() | Command reply timeout in ms |
:mode | :idle | :sdk_mode | :flying | :emergency | Flight mode |
:flying | boolean() | Whether airborne |
:x, :y, :z | integer() | Dead-reckoned position in centimeters |
:yaw | integer() | Heading in degrees |
Example
%Drone.Adapters.Tello{
drone_ip: {192, 168, 10, 1},
drone_port: 8889,
timeout: 10_000,
mode: :flying,
flying: true,
z: 50
}
Functions
Returns Tello-like capability metadata.
Parameters
state(t/0) — unused beyond dispatch
Returns
Sends an encoded SDK command over UDP and updates dead-reckoned state.
Parameters
state(t/0) — open adapter statecmd(Drone.Command.t()) — command to encode and send
Returns
{:ok, reply, t()}— parsed reply (:okor query value){:error, reason, t()}— UDP or parse failure
Examples
{:ok, :ok, state} =
Drone.Adapters.Tello.command(state, Drone.Command.sdk_mode())
Opens a UDP socket and returns initial Tello adapter state.
Parameters
opts(keyword()) — common keys::drone_ip(:inet.ip_address()) — default{192, 168, 10, 1}:drone_port(non_neg_integer()) — default8889:local_port(non_neg_integer()) — local bind port:timeout(non_neg_integer()) — reply timeout ms
Returns
{:ok, t()}— connected (socket open; SDK mode not yet entered){:error, term()}— socket open failure
Examples
{:ok, state} =
Drone.Adapters.Tello.connect(
drone_ip: {192, 168, 10, 1},
local_port: 9030
)
Closes the UDP socket.
Parameters
state(t/0)
Returns
Always :ok.
Returns a telemetry snapshot from dead-reckoned adapter fields.
Parameters
state(t/0)
Returns
{:ok, map(), t()} with :x, :y, :z, :yaw, :flying, :mode.