Getting Started
View SourcePrerequisites
- Elixir 1.17 or later
- Erlang/OTP 26 or later
- A DJI Tello or Tello EDU (optional -- the simulator works without hardware)
Installation
Add ex_drone to your dependencies:
def deps do
[
{:ex_drone, "~> 0.1.0"}
]
endThen run:
mix deps.get
Your First Flight (Simulator)
The simulator requires no hardware and is the best way to learn ex_drone:
{:ok, drone} = Drone.connect(:sim, name: :my_drone)
Drone.connect_sdk(drone)
Drone.takeoff(drone)
Drone.move(drone, :up, 40)
Drone.move(drone, :forward, 100)
Drone.rotate(drone, :cw, 90)
Drone.land(drone)
Drone.disconnect(drone)Querying State
{:ok, drone} = Drone.connect(:sim, name: :test)
Drone.connect_sdk(drone)
{:ok, battery} = Drone.query(drone, :battery)
{:ok, telemetry} = Drone.telemetry(drone)Safety Policies
Configure safety limits at connection time:
# Indoor mode (tight limits)
{:ok, drone} = Drone.connect(:sim, name: :indoor, safety: [indoor: true])
# Custom limits
{:ok, drone} = Drone.connect(:sim, name: :custom,
safety: [
max_altitude_cm: 200,
max_distance_cm: 500,
min_battery_percent: 20,
prop_guards: true
]
)
# Dry-run mode (validate without flying)
{:ok, drone} = Drone.connect(:sim, name: :dry, safety: [dry_run: true])Emergency Stop
Drone.emergency(drone) # Bypasses all safety checks, stops motors immediatelyConnecting to a Tello
- Power on your Tello drone
- Connect to the Tello's Wi-Fi network (SSID:
TELLO-XXXXXX) - Connect with ex_drone:
{:ok, drone} = Drone.connect(:tello, name: :tello_1)
Drone.connect_sdk(drone)
Drone.takeoff(drone)Always test your missions in the simulator first.