pub struct Tello<S = NoWifi> { /* private fields */ }Expand description
For interacting with the Tello EDU drone using the simple text-based UDP protocol.
The basic flow from the user’s point of view is
SEND command → drone does something → RECEIVE response when it’s finished
Messages are plain ASCII text, eg command forward 10 → response ok
use tello_edu::{Tello, Result};
#[tokio::main]
async fn main() {
fly().await.unwrap();
}
async fn fly() -> Result<()> {
// create a new drone in the `NoWifi` state
let drone = Tello::new();
// wait until the host computer joins the drone's WiFi network
// (joining the network is not automatic - how it happens is up to you)
let drone = drone.wait_for_wifi().await?;
// establish connection and put the drone in "command" mode
let drone = drone.connect().await?;
// fly!
drone.take_off().await?;
drone.turn_clockwise(360).await?;
drone.land().await?;
Ok(())
}Implementations§
source§impl Tello<NoWifi>
impl Tello<NoWifi>
sourcepub async fn wait_for_wifi(&self) -> Result<Tello<Disconnected>>
pub async fn wait_for_wifi(&self) -> Result<Tello<Disconnected>>
Wait until the host joins the drone’s WiFi network
nb exactly how the the network is joined is up to you
sourcepub async fn assume_wifi(&self) -> Result<Tello<Disconnected>>
pub async fn assume_wifi(&self) -> Result<Tello<Disconnected>>
Use this if you are already in the appropriate WiFi network.
source§impl Tello<Disconnected>
impl Tello<Disconnected>
sourcepub async fn connect(&self) -> Result<Tello<Connected>>
pub async fn connect(&self) -> Result<Tello<Connected>>
Connect to the drone using the default options, ie
- using the drone’s own WiFi
- drone address 192.168.10.1
- no state updates
- no video
sourcepub async fn connect_with(
&self,
options: TelloOptions
) -> Result<Tello<Connected>>
pub async fn connect_with( &self, options: TelloOptions ) -> Result<Tello<Connected>>
Connect to the drone using the given options
optionsConnection options
source§impl Tello<Connected>
impl Tello<Connected>
sourcepub async fn disconnect(&self) -> Result<Tello<Disconnected>>
pub async fn disconnect(&self) -> Result<Tello<Disconnected>>
Disconnect from the drone.
sourcepub async fn send(&self, command: &str) -> Result<String>
pub async fn send(&self, command: &str) -> Result<String>
Sends a command to the drone using the simple Tello UDP protocol, returning the reponse.
The basic flow from the user’s point of view is
SEND command → drone does something → RECEIVE response when it’s finished
Messages are plain ASCII text, eg command forward 10 → response ok
commandthe command to send, must be a valid Tello SDK command string
sourcepub async fn send_expect_ok(&self, command: &str) -> Result<()>
pub async fn send_expect_ok(&self, command: &str) -> Result<()>
Sends a command, resolving to an error if the response is not “ok”
commandthe command to send, must be a valid Tello SDK command string
sourcepub async fn send_value_expect_ok<T: Display>(
&self,
command: &str,
value: T
) -> Result<()>
pub async fn send_value_expect_ok<T: Display>( &self, command: &str, value: T ) -> Result<()>
Sends a command with a single value, resolving to an error if the response is not “ok”
commandthe command to send, must be a valid Tello SDK command stringvaluethe value to append to the command
sourcepub async fn send_expect_nothing(&self, command: &str) -> Result<()>
pub async fn send_expect_nothing(&self, command: &str) -> Result<()>
Sends a command, expecting no response at all from the drone.
commandthe command to send, must be a valid Tello SDK command string
sourcepub async fn send_expect<T: FromStr>(&self, command: &str) -> Result<T>
pub async fn send_expect<T: FromStr>(&self, command: &str) -> Result<T>
Sends a command, expecting a response that can be parsed as type T from the drone.
commandthe command to send, must be a valid Tello SDK command string
sourcepub async fn serial_number(&self) -> Result<String>
pub async fn serial_number(&self) -> Result<String>
The unique drone serial number.
sourcepub async fn sdk_version(&self) -> Result<String>
pub async fn sdk_version(&self) -> Result<String>
The Tello SDK version.
sourcepub async fn wifi_signal_to_noise_ratio(&self) -> Result<u8>
pub async fn wifi_signal_to_noise_ratio(&self) -> Result<u8>
The WiFi signal to noise ratio as a percentage.
sourcepub async fn flight_time(&self) -> Result<u16>
pub async fn flight_time(&self) -> Result<u16>
The flight time in seconds, requested directly from the drone.
sourcepub async fn emergency_stop(&self) -> Result<()>
pub async fn emergency_stop(&self) -> Result<()>
Immediately stop all motors.
warning! this will make the drone drop like a brick!
sourcepub async fn speed(&self) -> Result<f32>
pub async fn speed(&self) -> Result<f32>
The drone speed in cm/s, requested directly from the drone.
sourcepub async fn set_speed(&self, speed: u8) -> Result<()>
pub async fn set_speed(&self, speed: u8) -> Result<()>
Set the forward speed.
speedDesired speed, 10-100 cm/s
sourcepub async fn wait(&self, duration: Duration) -> Result<()>
pub async fn wait(&self, duration: Duration) -> Result<()>
Wait for the given length of time.
durationThe time to wait
sourcepub async fn turn_clockwise(&self, degrees: u16) -> Result<()>
pub async fn turn_clockwise(&self, degrees: u16) -> Result<()>
Turn clockwise.
degreesAngle in degrees 1-360°
sourcepub async fn turn_counterclockwise(&self, degrees: u16) -> Result<()>
pub async fn turn_counterclockwise(&self, degrees: u16) -> Result<()>
Turn counter-clockwise.
degreesAngle in degrees 1-360°
sourcepub async fn move_up(&self, distance: u16) -> Result<()>
pub async fn move_up(&self, distance: u16) -> Result<()>
Move straight up.
distanceDistance to travel, 20-500 cm
sourcepub async fn move_down(&self, distance: u16) -> Result<()>
pub async fn move_down(&self, distance: u16) -> Result<()>
Move straight down.
distanceDistance to travel, 20-500 cm
sourcepub async fn move_left(&self, distance: u16) -> Result<()>
pub async fn move_left(&self, distance: u16) -> Result<()>
Move straight left.
distanceDistance to travel, 20-500 cm
sourcepub async fn move_right(&self, distance: u16) -> Result<()>
pub async fn move_right(&self, distance: u16) -> Result<()>
Move straight right.
distanceDistance to travel, 20-500 cm
sourcepub async fn move_forward(&self, distance: u16) -> Result<()>
pub async fn move_forward(&self, distance: u16) -> Result<()>
Move straight forwards.
distanceDistance to travel, 20-500 cm
sourcepub async fn move_back(&self, distance: u16) -> Result<()>
pub async fn move_back(&self, distance: u16) -> Result<()>
Move straight backwards.
distanceDistance to travel, 20-500 cm
sourcepub async fn flip_right(&self) -> Result<()>
pub async fn flip_right(&self) -> Result<()>
Flip right.
nb fails if battery is low
sourcepub async fn flip_forward(&self) -> Result<()>
pub async fn flip_forward(&self) -> Result<()>
Flip forward.
nb fails if battery is low
sourcepub async fn start_video(&self) -> Result<()>
pub async fn start_video(&self) -> Result<()>
Start video as stream of h264-encoded frames.
Use TelloOption::with_video() to set up a channel for receiving the
video frames.
nb You must consume the frame data! The channel is unlimited and will eventually use up all available memory if you don’t.
sourcepub async fn stop_video(&self) -> Result<()>
pub async fn stop_video(&self) -> Result<()>
Stop video streaming.
sourcepub async fn remote_control(
&self,
left_right: i8,
forwards_backwards: i8,
up_down: i8,
yaw: i8
) -> Result<()>
pub async fn remote_control( &self, left_right: i8, forwards_backwards: i8, up_down: i8, yaw: i8 ) -> Result<()>
Remote control’
All arguments are -100 to 100 (not sure what units)
left_rightMovement sidewaysforwards_backwardsForwards/backwardsup_downVertical movementyawTurn left or right