PCからドローンを操作するsocket通信プログラムを少しだけ解説してみました。
import threading
import socket
import sys
import time
host = ''
port = 9000
locaddr = (host,port)
# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tello_address = ('192.168.10.1', 8889)
sock.bind(locaddr)
def recv():
count = 0
while True:
try:
data, server = sock.recvfrom(1518)
print(data.decode(encoding="utf-8"))
except Exception:
print ('\nExit . . .\n')
break

「socket通信」って何?
コンピュータ同士(ここではPC&Tello)がネットワークを通じてデータをやり取りするための方法。(コンピュータ間でデータを送受信するための仕組み)
「手紙を出す」みたいなイメージで、
送信先の住所(IP)と郵便受け(ポート)を指定して、
データ(コマンド)を送る感じです。
それでは、学習をしていこう!!
まずは、大まかな流れ!!⇒それから深堀学習していきたいと思います。

# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
1.パソコン側の動き
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((”, 9000)) ←パソコン側(サーバー側)はバインド(関連付け)は必要
ソケット作成時には名前がありません。アドレスがソケットに関連付けられるまで参照できない。
つまり通信プロセスはアドレスを介して接続される。
これは「郵便受け(ポート9000)を開ける」こと。
Telloからの返信(データ)を受け取るための準備。

IPv4とは:IPインターネットプロトコルでインターネットに接続されたコンピュータ同士がデーターをやり取りするためにデーター通信の方法を定めた規約のことで、インターネットに接続されたコンピューターを識別するためのIPアドレスが割り当てられIPv4はこのIPアドレスを32ビットのデーターとして表現するものです。
2.Telloにコマンドを送る
tello_address = (‘192.168.10.1’, 8889) → Telloの「住所(IP)」と「郵便受け(ポート)」です。
コマンドは文字列をバイト形式(b’takeoff’)に変えて送信します。

3.返信を待つ(受信)
while True:
try:
data, server = sock.recvfrom(1518)
print(data.decode(encoding="utf-8"))
Telloから返ってきたデータを受け取って表示。
Telloは “ok” と返すことが多いです。
4.Tello側の動き
- Wi-Fiアクセスポイントとして動作する
Telloは自分自身がWi-Fiルーターのような存在になります。
パソコンはTelloのWi-Fi(TELLO-XXXXXX)に接続します。
- UDP通信sock.sendto(b’takeoff’, tello_address)
でパソコンからの命令を受け取る
8889番ポートでコマンドを待っています。
受け取ったら、「ok」とか「error」をUDPでポート9000番に返信します。 UDP通信とは: データを送信する側のコンピューターが、相手のコンピューターの状態にかかわらず一方的にデータを送り始めます。受信する側のコンピューターが正しくデータを受け取れたか確認する機能もないため、UDPは「コネクションレス型」のプロトコルと呼ばれています UDPはデータが宛先に届いたかどうかは関知しない。複数の相手に同時にデータを送信できる TCPよりリアルタイム性が高い。
もう少し詳しくすると。。。。

IP アドレス & ポート番号の確認は以下の Tello SDK マニュアルで確認します
tello_address = (‘192.168.10.1’, 8889)

深堀学習!!
ソケット通信一連のパソコンの内部の動きを見てよう
コマンドを送る!
sendto() が呼ばれると、以下のように 「ネットワークの階層構造」 を通ってTelloに届きます。

アプリケーション層 ← Pythonの sendto() がここ
↓
トランスポート層 ← UDPプロトコル(ポート番号もここ)
↓
ネットワーク層 ← IPアドレスでTelloを指定
↓
ネットワークインターフェース層(リンク層)
↓
Wi-Fiなどの物理通信でTelloへ
アプリケーション層(Pythonプログラム)
sock.sendto(b’takeoff’, (‘192.168.10.1’, 8889))
ここでアプリ(Python)が「takeoff」という命令を送ります。
sendto() はソケット(socket)というインターフェースを使って次の層(UDP)へ渡します。
このとき、送信元は (”, 9000) つまり「パソコンのポート9000」として送ります。
トランスポート層(UDP)
UDPヘッダが付加されます。
送信元ポート:9000(locaddr でバインド)
送信先ポート:8889(Telloのコマンド受付ポート)
この層は「信頼性より速さ」を優先していて、確認応答や再送処理をしないです。
インターネット層(IP)
IPヘッダが追加されます。
送信元IP:パソコンのIP(例:192.168.10.2)
送信先IP:Tello(192.168.10.1)
この層が、「どこからどこへ」という住所情報(IPアドレス)を扱っています。
ネットワークインターフェース層(Wi-Fi)
TelloのWi-Fi電波を通じて、パケットを物理的に送信します。
ここでMACアドレス(機械の番号)に変換され、電波でTelloに届きます。
少し、トランスポート層(UDP)UDPヘッダが付加 と
インターネット層(IP)IPヘッダが追加を深堀してみます。

UDPヘッダ/IPヘッダの追加、Wi-Fiデーターはどうなってるの?

電波の中身ってどうなっているんだろう? 世界中で使われる定番のパケットキャプチャソフト”Wireshark”を使って パソコンとTelloのWi-Fi上の交信をのぞいてみた(^^)/ パケットキャプチャソフト”Wireshark” https://www.wireshark.org/ 電波の中身って、見えないけどこれを使ったら、見える化できて仕組みをよく学べました
ここまでいろいろと調べてまとめてみて、プログラミングで指示を出し、Tello(ドローン)が飛ぶ仕組みを自分自身も深堀学習できたと思います。