Package: tello-asyncio
tello-asyncioA library for controlling and interacting with theTello EDUdrone usingmodern asynchronous Python.  All operations are implemented as awaitable coroutines, completed when the drone sends acknowledgment of the command message.Packagetello-asyncioon PyPi.$pip3installtello-asyncioimportasynciofromtello_asyncioimportTelloasyncdefmain():drone=Tello()try:awaitdrone.connect()awaitdrone.takeoff()awaitdrone.turn_clockwise(360)awaitdrone.land()finally:awaitdrone.disconnect()asyncio.run(main())See theexamplesdirectory for more usage example scripts.Requires Python 3.6+. Developed and tested with Python 3.9.4 in Mac OS and 3.6.9 in Ubuntu 18.04 on aJetson Nano.  Thetello_asynciopackage has no other dependencies (and never will have any), but some examples need other things to be installed to work.Full documentation is available onRead the docs(If Rust is more your thing, there is also an equivalent aynchronous Rust librarytello-edu)Tello SDK SupportTello SDK 2.0(Tello EDU) - complete supportTello SDK 3.0(RoboMaster TT) - complete support, butEXTcommands for controlling LEDs etc must be formatted by the userA Note on AwaitingThe Tello SDK command/response model is a natural fit for the asynchronous pythonawaitableidea, but the drone will get confused if commands are sent before it's had a chance to respond. Each command should beawaitedbefore sending the next.It works best sequentially like this...awaitdrone.takeoff()awaitdrone.land()...butnotconcurrently (which will not work as expected)awaitasyncio.gather(drone.takeoff(),drone.land())Version History1.0.0Basic drone controlUDP connection for sending commands and receiving responses (default AP mode only - you must join the drone's own WiFi network)take off and landrotate clockwise and counter-clockwisemove up, down, left, right, forward and back1.1.0Drone statelistens for and parses UDP state messages (not yet including the mission pad related values)access via the read onlystateobject attribute, or via shortcuts likeheight,temperatureetcconstructor takes an optionalon_statecallback argument for notification of new stateor use the asynchronous generatorstate_streamfor an infinite stream of updates1.2.0Advanced drone controlflipsgo/curve to relative positionemergency stopVideostart/stop video streamvideo urlError handlinghandles error command responses from drone1.3.0Complete SDKmission padswifiremote controlVideoraw video frame data via callback or async generatorError handlingdetects command/response mismatch1.3.1Documentation1.3.2Documentation onRead the docs1.4.0Video frame data reassembled properly from UDP packet chunksWorking video frame decoding example1.4.1Video in OpenCV example1.5.0Python 3.6 support1.6.0Drone instance passed to state and video callbacksWait for WiFi network (Linux only)2.0.0Tello SDK 3.0 support2.1.0Wait for Wifi network implemented for macOS as well as LinuxMission pad fixes & example improvement (thanks @jsolderitsch!)2.1.1Examples ask the user for the WiFi name prefix2.1.2Don't wait for a response from remote control (rc x x x x) commands2.1.3Various SDK 3.0 fixes (thanks @jdelfino!)Handle "forced stop" message which arrives out of sequence