3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TelloEduをWifiルータに接続して、TellloをWifi子機、ルータをWifi親機の関係にする

Last updated at Posted at 2021-07-26

###参考にしたサイト

##最初の状態

まず最初に、TelloEduの電源を入れます。
次に、Macbook PCのWifi接続先を、TelloEduにします。

スクリーンショット 2021-07-27 0.20.09.png

すると、Wifiの親機と子機の関係は、次の状態になります。

  • 親機:TelloEduドローン
  • 子機:Macbook PC

スクリーンショット 2021-07-26 23.55.19.png

###TelloEduをWifiルーターに接続させる

次に、TelloEduにつながっているMacbook PCのTerminalで、次のコードを叩きます。

Terminal
>>> import socket
>>> tello_ip = '192.168.10.1'
>>> tello_port = 8889
>>> socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> tello_address = (tello_ip , tello_port)
>>> socket.sendto('command'.encode('utf-8'),tello_address)
>>> socket.sendto('ap aterm-xxxxxxxxxx yyyyyyyyyyy'.encode('utf-8'),tello_address)

上の最後の1行が実行されると、TelloEduは、(Macbook PCからの指令を受けて)'ap aterm-xxxxxxxxxx yyyyyyyyyyy'にWifi接続をしにいきます。

ここで、__ap__は、__Wifi Access Point__を意味します。
__'ap aterm-xxxxxxxxxx yyyyyyyyyyy'__とは、具体的には__Wifiルーター__を指しています。

このWifiルータは、「aterm-xxxxxxxxxx」というSSIDを持っていて、このWifiルータに(Wifi)接続するためには、「yyyyyyyyyyy」という(認証)パスワードが必要になります。

  • 接続先のWifiルータのSSID名:aterm-xxxxxxxxxx
  • 接続先のWifiルータのパスワード:yyyyyyyyyyy

なお、Wifiルータが持つSSIDと認証パスワードは、お手持ちのWifiルータの本体や説明書に書かれているので、調べてみてください。

この時点で、TelloEduは自らWifi電波の発信源(Wifi親機)であることをやめて、(Wifi電波を発信中の)Wifiルータにつながりにいく__「Wifi子機」へと変身しています__。

__TelloEduドローンを、Wifi親機からWifi子機に変身させた__のは、次の1行です。

Terminal
>>> socket.sendto('ap aterm-xxxxxxxxxx yyyyyyyyyyy'.encode('utf-8'),tello_address)

いまや、TelloEduは、Wifi子機になっています。
Wifiの親機と子機の関係は、次のように切り替わっています。

  • 親機:Wifiルーター
  • 子機1:TelloEduドローン
  • 子機2:Macbook PC

なお、コントローラーとなるMacbook PCも、Wifi接続先をWifiルーターに切り替えます。
Macbook PCのWifi接続先をWifiルーターに切り替える作業は、Macbook PC上で、手動で行います。

このとき、Macbook PCから、接続可能なWifiアクセスポイントの一覧を探しにいくと、最初に表示されていたはずのTelloEduのWifiアクセスポイント(AP)が、いなくなっています。

スクリーンショット 2021-07-27 0.24.51.png

ここで、親機であるWifiルータから、子機であるTelloEduドローンに対して、どのプライベートIPアドレスが割り振られたのかを確認します。

今回は、__「Fing」というIPアドレスチェッカーアプリ__をインストール済みのiPhoneを、事前に用意しておきました。

このアプリは、アプリをインストールしたiPhone端末が、いま現在つながっているWifiルーターの情報を表示してくれます。Wifiルーターにつながっているすべての端末(これにはFingアプりを入れたiPhone端末も含まれる)について、次の情報が表示されます。

  • 端末製品名
  • 端末メーカー名
  • (ルーターがその端末に割り振った)プライベートIPアドレス

ここで、Fingアプリの入ったiPhoneを、__「TelloEduドローンがつながっているWifiルーター」__にWifi接続することで、__TelloEduドローンに割り振られている(プライベート)IPアドレス__を知ることができます。

今回は、__「192.168.0.9」という(プライベート)IPアドレスがTelloEduドローンに割り振られている__ことが分かりました。

スクリーンショット 2021-07-26 23.32.00.png

スクリーンショット 2021-07-27 0.03.54.png

なお、Macbookから、__ping 192.168.0.9__を実行すると、この端末は生きていることがわかりました。

Terminal
electron@diynoMacBook-Pro ~ % ping 192.168.0.9
PING 192.168.0.4 (192.168.0.4): 56 data bytes
64 bytes from 192.168.0.9: icmp_seq=0 ttl=64 time=82.683 ms
64 bytes from 192.168.0.9: icmp_seq=1 ttl=64 time=109.259 ms
^Z
zsh: suspended  ping 192.168.0.9
electron@diynoMacBook-Pro ~ % 

##Macbook PCからTelloEduドローンを操作してみる

それでは、同じWifi親機(Wifiルータ)にWifi接続している、Wifi子機の兄弟分であるTelloEduドローンと、Macbook PCどうしで、通信をさせてみます。

今回は、(Wifi子機) Macbook PCから、(Wifi子機) TelloEduドローンに向けて、操縦コマンドを送信してみます。

別の記事では、この反対方向のデータ送信の例として、(Wifi子機) TelloEduドローンから(Wifi子機) Macbook PCに向けて送信される、次のデータを、Macbook PC側でConsole(Terminal)や ウィンドウに表示してみたいと思います。

  • ドローンの現在状態を示す信号(飛行高度、気圧、速度、ロール、ヨー、ピッチ、残電源など)
  • ドローン搭載カメラが捉えた画像データ

さて。Macbook PCのTerminalで次のコードを打ち込むことで、TelloEduドローンに、離陸と着陸の操作を行わせることに成功しました。

Terminal
>>> tello_new_ip = '192.168.0.9'
>>> tello_new_address = (tello_new_ip , tello_port)
>>> socket.sendto('command'.encode('utf-8'),tello_new_address)
7
>>> socket.sendto('takeoff'.encode('utf-8'),tello_new_address)
7
>>> socket.sendto('land'.encode('utf-8'),tello_new_address)
4
>>> quit()

Macbook PCから、「192.168.0.9」という(プライベート)IPアドレスを持つ端末(つまり、TelloEduドローン)に向けて、上記の操作コマンドが送られたことになります。

tello_new_ip = '192.168.0.9'

ここで1つ、注意すべきことがあります。

なお、Wifiルーターから各端末(子機)に割り振られるプライベートIPアドレスが、一定時間経過後に、動的に切り替わってしまうDHCPのWifiルータを使っている場合、TelloEduドローンに割り振られた(プライベート)IPアドレスは、切り替わってしまいます。

そうなると、MacbookのTerminalから送信される操縦コマンドは、TelloEduドローンに届かなくなり、操縦不能になってしまうため、気をつけてください。

Wifiルーターは、各端末に対して一度割り当てたIPアドレスをいつまでも変えずに、固定してくれるものを使うようにしましょう。 (今回は、Wifiルータから割り振られるプライベートIPアドレスが一定時間ごとに切り替わるDHCPルータを使いました)

###さらなる発展

後は、同じことを2機目、3機目のTelloEduにしていくと、1台のPCから複数機のTelloEduをコントロールできるようなります。

X機のTelloEduドローンと、1台のMacbook PCはすべてWifi子機になります。
Wifiルーターは、唯一のWifi親機になります。

( 以下、2機目以降のドローンのプライベートIPアドレスは、架空の文字列です )

スクリーンショット 2021-07-27 0.06.08.png

###後記

####( 事象1 )

一晩置いて、翌朝、Telloに電源を再投入すると、TelloEduとWifiルータとの接続は切れていて、TelloEduは再びWifi親機に戻っていました。

( Macbook PC上のWifi AP一覧画面 )

elloEduが発信源のWifi AP 「TELLO-9FXXXX」が表示されている。

スクリーンショット 2021-07-27 10.04.07.png

( (Wifiルータに接続中の)iPhone内のFingアプリ上でのIPアドレス検索結果 )

'192.168.0.9'の行がグレーアウト(灰色色)になり、非活性に切り替わっている。
このAPは「オフラインです」と表示されている。

####( 事象2 )

事象1の体験後にTelloEduの電源を切り、さらに数時間経過後、Telloに電源を再投入すると、TelloEduは再び、Wifiルータにつながっていました。

  • Macbook PC上のWifi AP一覧画面: TelloEduが発信源のWifi AP 「TELLO-9FXXXX」がない。
  • (Wifiルータに接続中の)iPhone内のFingアプリ上でのIPアドレス検索結果: '192.168.0.9'が黒文字で活性化表示されていて、「オンライン中」になっている。

###Terminalに手打ちしたPythonコードを、スクリプトファイル化しました

  • TelloEduドローン1機を、Wifiルータに接続させます。
  • このスクリプトを実行するMacbook PCは、対象となるTelloEduドローンに、あらかじめWifi接続しておきます。

####telledu_connect_to_wifi_router.py

telledu_connect_to_wifi_router.py
import socket, argparse    

# WifiルーターのSSIDをコマンドライン引数から受け取る
parser = argparse.ArgumentParser(description='')  
parser.add_argument('-ssid')  

# Wifiルーターのパスワードをコマンドライン引数から受け取る
parser.add_argument('-pw')  

args = parser.parse_args() 
wifi_host_ssid = args.ssid
wifi_host_pw = args.pw

message_1 = "Wifiルータ(SSID): " + str(wifi_host_ssid)
message_2 = "Wifiルータ(パスワード): " + str(wifi_host_pw)

print(message_1)
print(message_2)

# TelloEduのプラウベートIPアドレスとポート番号は全機体、同じ定数文字列
tello_ip = '192.168.10.1'
tello_port = 8889

# (Wifi client) Macbook -> (Wifi host) TelloEduに接続
socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tello_address = (tello_ip , tello_port)
wifi_host_ap = "ap {0} {1}".format(wifi_host_ssid, wifi_host_pw)
print(wifi_host_ap)
socket.sendto('command'.encode('utf-8'),tello_address)
socket.sendto(wifi_host_ap.encode('utf-8'),tello_address)

####( 使い方 )

コマンドライン引数として、TelloEduを接続させたいWifi親機(Wifiルーター)のSSIDとパスワードを渡します。

Terminal
electron@diynoMacBook-Pro ~ % python3 telledu_connect_to_wifi_router.py -ssid aterm-xxxxxxxxxx -pw yyyyyyyyyyy
Wifiルータ(SSID): aterm-xxxxxxxxxx
Wifiルータ(パスワード): yyyyyyyyyyy
ap aterm-xxxxxxxxxx yyyyyyyyyyy
electron@diynoMacBook-Pro ~ %

####telloedu_single_remote_control.py

  • TelloEduドローン1機を、Macbook PCから遠隔操作します。
  • コントローラーとなるMacbook PCは、TelloEduドローンと同じWifiルータに接続済みにしておきます。
telloedu_single_remote_control.py
import socket, argparse, time    

# WifiルーターのSSIDをコマンドライン引数から受け取る
parser = argparse.ArgumentParser(description='')  
parser.add_argument('-ip')  

args = parser.parse_args() 
tello_ip = args.ip

print("IPアドレス {0} 番のTelloEduドローンに操作コマンドを送ります。".format(tello_ip))

# TelloEduのポート番号は全機体、同じ定数文字列
tello_port = 8889
tello_address = (tello_ip , tello_port)

socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

socket.sendto('command'.encode('utf-8'),tello_address)
time.sleep(3)
socket.sendto('takeoff'.encode('utf-8'),tello_address)
time.sleep(3)
socket.sendto('land'.encode('utf-8'),tello_address)
time.sleep(3)

####( 使い方 )

コマンドライン引数として、遠隔操作したいTelloEduのプライベートIPアドレスを渡します。

Terminal
electron@diynoMacBook-Pro ~ % python3 telloedu_single_remote_control.py -ip 192.168.0.9
IPアドレス 192.168.0.9 番のTelloEduドローンに操作コマンドを送ります。
electron@diynoMacBook-Pro ~ %
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?