Thonnyを使ってCoDrone EDUを制御する(準備編)
はじめに
この記事ではRobolink社の教育用プログラミングドローンCoDrone EDUをThonnyを使ってPythonプログラムで制御する方法について解説します。
Thonnyはすでにインストールされているものとして解説をしますので、インストール方法については他の記事を参照してください。
CoDrone EDUとは
CoDrone EDUはドローン本体とコントローラがセットになって販売されています。
コントローラにはジョイスティックやボタン、スクリーンなどが装備されていて、コントローラだけでもジョイスティックやボタンでドローンを制御できます。
この記事では、コントローラをUSBケーブルでパソコンと接続し、パソコン上でThonnyを使ってドローンを制御します。
ドローンとコントローラは2.4GHz帯の電波を使って通信を行います。
パソコンからのコマンドはコントローラを経由して2.4GHz帯の電波でドローンに送られ、ドローンに搭載されたセンサ類のデータも2.4GHz帯の電波を使ってコントローラに送られ、USBケーブルを経由してパソコンに送られます。
コントローラの空中線電力は技適資料によると3mW、ドローンの空中線電力は1mWとなっています。
この電波の強さだと、伝搬距離は数十メートルと思われます。
使用されているCPUは技適資料によると、ドローン、コントローラともARMのSTM32F401となっています。
Thonnyへライブラリのインストール
インタープリタの切り替え
- Thonnyのメニューバーにある「ツール」にある「オプション」をクリックします。
- Thonnyオプションのウインドウが開くので、「インタープリタ*」タブをクリックし、一番上にあるインタープリタの種類を「ローカルPython3」にします。
- 右下の「OK」ボタンをクリックします。
これでパソコン上(Thonny内)のPythonでプログラムが実行されるようになります。
ESP32などを使用して開発をする場合、インタープリタを元に戻すことを忘れないで下さい。
ライブラリのインストール
続いて、ライブラリのインストールを行います。
-
Thonnyのメニューバーにある「ツール」にある「パッケージを管理...」をクリックします。
-
下図のような画面が表示されるので、① 検索欄に「codrone-edu」と入力し、② 「PyPlを検索」ボタンをクリックします。
-
「codrone-edu」が表示されるので、① バージョンを確認して、② 「インストール」ボタンをクリックします。インストールが完了すると、③ 「閉じる」ボタンをクリックします。
-
Thonnyのシェル部の >>> プロンプトで下図のように import codrone_edu と入力してエラーが出なければライブラリのインストールは完了です。
codrone_edu.pyは~/Documents/Thonny_Local/lib/python3.10/site-packages/
ドローン、コントローラの接続
- コントローラをUSBケーブルでパソコンと接続します。コントローラに電池を入れている場合は取り外しておいてください。
- コントローラのスクリーンにLINKと表示され、スクリーンの両サイドにある赤いLEDが点滅します。
- ドローンにバッテリーを挿入します。裏表を間違えないようにしてください。
- ドローンのLEDが白色に点灯し、しばらくすると音がなってLEDが消灯します。コントローラのLEDも消灯します。
これでドローンとコントローラのリンクが完了です。
サンプルコード(1)
このサンプルコードはドローンからドレミの音をだします。
Thonnyのエディタ部に次のプログラムを入力して実行するとドローンからドレミという音が聞こえます。
(場合によっては、一部の音が欠けることがあります。)
# 03.Drone_buzzer.py
# import codrone_edu library
from codrone_edu.drone import *
from time import sleep
# make drone instance
drone = Drone()
def play_sound_drone(tone, duration):
print(tone)
while drone.drone_buzzer(tone, duration) != None:
continue
sleep(0.01)
print("Program Started.")
# Pairing with controller
# it returns device name and battery status
drone.pair()
play_sound_drone(523, 100)
play_sound_drone(587, 100)
play_sound_drone(659, 100)
実行結果
プログラムの実行は、codrone_eduライブラリでたくさんのモジュールをインポートしているので、実行ボタンを押して実際に動くまで3秒ぐらいかかる場合があります。
以下はMacでの実行結果です。Windowsパソコンで実行した場合はコントローラのデバイス名が異なります。
Program Started.
Found CoDrone EDU controller. /dev/cu.usbmodemxxxxxxxxxxxxx
Connecting to CoDrone EDU controller.
Connected to CoDrone EDU
Battery = 100 %
サンプルコード(2)
このサンプルコードはコントローラからドレミの音をだします。
Thonnyのエディタ部に次のプログラムを入力して実行するとコントローラからドレミという音が聞こえます。
# 02.Controller_buzzer.py
# import codrone_edu library
from codrone_edu.drone import *
# make drone instance
drone = Drone()
print("Program Started.")
# Pairing with controller
drone.pair()
drone.controller_buzzer(523,100)
drone.controller_buzzer(587,100)
drone.controller_buzzer(659,100)
# close connection
#drone.close()
サンプルコード(お遊び)
次のサンプルコードを実行するとファミマのジングルがコントローラから出ます。
# 02-2.Controller_buzzer(FamilyMart).py
# import codrone_edu library
from codrone_edu.drone import *
from time import sleep
# FamilyMart Entering Jingle. 0 is a rest.
NOTE = [740, 587, 440, 587, 659, 880, 0, 329, 659, 740, 659, 440, 587]
# make drone instance
drone = Drone()
def play_sound_controller(tone, duration):
print(tone)
while drone.controller_buzzer(tone, duration) != None:
continue
sleep(0.01)
# This doesn't work well, why?
def play_sound_drone(tone, duration):
print(tone)
while drone.drone_buzzer(tone, duration) != None:
continue
sleep(0.01)
print("Program Started.")
# Pairing with controller
drone.pair()
#
for freq in NOTE:
play_sound_controller(freq, 300)
# play_sound_drone(freq, 300)
サンプルコード(3)
次のサンプルコードはコントローラのLEDを1秒毎に赤、緑、青の順に切り替え、最後は消灯します。
# 04.Controller_LED.py
# import codrone_edu library
from codrone_edu.drone import *
# make drone instance
drone = Drone()
print("Program Started.")
# Pairing with controller
drone.pair()
# tuen off all LEDs
drone.controller_LED_off()
sleep(1)
# set controller LED red
drone.set_controller_LED(255, 0, 0, 100)
sleep(1)
# set controller LED green
drone.set_controller_LED(0, 255, 0, 100)
sleep(1)
# set controller LED blue
drone.set_controller_LED(0, 0, 255, 100)
sleep(1)
# tuen off LED
drone.controller_LED_off()
サンプルコード(4)
次のサンプルコードはドローンのLEDを1秒毎に赤、緑、青の順に切り替え、最後は消灯します。
# 05.Drone_LED.py
# import codrone_edu library
from codrone_edu.drone import *
# make drone instance
drone = Drone()
print("Program Started.")
# Pairing with controller
drone.pair()
# tuen off all LEDs
drone.drone_LED_off()
sleep(1)
# set controller LED red
drone.set_drone_LED(255, 0, 0, 100)
sleep(1)
# set controller LED green
drone.set_drone_LED(0, 255, 0, 100)
sleep(1)
# set controller LED blue
drone.set_drone_LED(0, 0, 255, 100)
sleep(1)
# tuen off LED
drone.drone_LED_off()
おわりに
今回の記事はここまでです。
次回はドローンを飛行させる記事を書く予定です。
今回使用したライブラリ(codron_edu)の詳細情報(英語)は以下のページにあります。
Discussion