学習用ロボット(クムクム)をPythonのプログラムから動かす
学習用ロボット(クムクム)とPCの間は、BLEモジュール’RN4020’が持つMLDPモードという通信方式を使って通信を行っています。
MLDPモードとは、Microchip Low-energy Data Profile のことで、SSP (Serial Port Profile) を使って無線化することを指します。
そして、クムクムをPythonのプログラムから動かすには、まず、PCとクムクムの間でシリアル通信ができないといけません。
Pythonでシリアル通信を行うことも可能ですが、ここでシリアル通信を行い、クムクムを制御するためのコマンドなどを作っているととても時間がかかってしまいます。
Python用ライブラリがある
学習用ロボット(クムクム)のサイトに、Python用ライブラリがあり配布されています。
Qumcum Pythonライブラリ
クムクムのサイトで下記の注意がありますのでご一読ください。
使用上の注意
1.API(DLL)はサンプルβバージョンにより不具合などがある場合もあります。
2.APIの細かい使い方、サンプルプログラムの内容、改造などについてのご質問については原則的にお答えできません。
3.技術的なアドバイスや細かい内容について個人的な範囲でのお答えは原則的にお答えできません。
4.API・サンプルのs著作権は弊社に帰属しますが、第三者への配布などはご自由です。あくまで個人の学習用として参考としてお使いください。
使用上の注意を確認いただいたうえで、QumcumのサイトからPython用ライブラリ(qumcum_python.zip)をダウンロードします。
ダウンロードはこちらから。
Qumcum Pythonライブラリを展開する
Qumcum Pythonライブラリをダウンロードしたらqumcum_python.zipを選択して、右クリックメニューから「すべて展開…」で圧縮ファイルを展開します。
圧縮ファイルを展開すると下記のようなフォルダがあります。
フォルダ | 内容 |
doc | Qumcum Pythonライブラリのドキュメントがあります。 |
lib/x64 | Python(64-bit)をインストールした場合のQumcum Pythonライブラリの本体(プログラム実行に必要なファイル)があります。 |
lib/x86 | Python(32-bit)をインストールした場合のQumcum Pythonライブラリの本体(プログラム実行に必要なファイル)があります。 |
sample | Qumcum Pythonライブラリを使うサンプルプログラムがあります。 |
各フォルダ内のファイル
フォルダ | ファイル | 説明 |
doc | Qumcum_python用インターフェース一覧.pdf | クムクム制御用APIのインターフェースの説明が書かれたドキュメントです。 |
lib/x64 | QumCommLib.dll | Python(64-bit)をインストールした場合のDLLです。 |
lib/x86 | QumCommLib.dll | Python(32-bit)をインストールした場合のDLLです。 |
sample | QumCommLib.dll | サンプルにはPython(32-bit)をインストールした場合のDLLが入っています。 |
sample | qumcum.py | QumCommLib.dllを使うためのPythonモジュール |
sample | sample.py | PythonからQumCommLib.dllのみを使ってクムクムを制御するサンプルプログラム |
sample | qumcum_sample.py | qumcum.py経由でQumCommLib.dllを呼び出してクムクムを制御するサンプルプログラム |
QumCommLib.dllとPythonモジュール(qumcum.py)とプログラムの関係
クムクムとPCを接続し、Qumcum Pythonライブラリを使ってPythonで制御するには2通りの方法があります。
a. PythonからQumCommLib.dllのみを使ってクムクムを制御する
クムクムの制御を呼び出すプログラムのコード上から直接QumCommLib.dllをロードし、接続を行い制御します。
b. qumcum.py経由でQumCommLib.dllを呼び出してクムクムを制御する
クムクムの制御を呼び出すプログラムからはqumcum.pyをインポートして、APIを呼び出して制御します。
上記2つの方法は、それぞれ下記のような特徴があります。
方法 | メリット | デメリット |
a. PythonからQumCommLib.dllのみを使ってクムクムを制御する | DLLを直接呼び出すことができるので他のコードの影響が少ない | DLLのロードからアンロードまでの管理を自分のプログラム内で行わなければいけない |
b. qumcum.py経由でQumCommLib.dllを呼び出してクムクムを制御する | qumcum.pyがDLLのロードからアンロードまでの管理を担ってくれるのでプログラムのコード量を抑えることができる | インポートを行うためqumcum.pyの実装に依存することになる |
Qumcum Pythonライブラリを使用するための準備
シリアル通信を使用するため、接続するシリアルポートを確認しておく必要があります。
確認を始める前にクムクムの通信機がPCとUSBケーブルで接続されている場合は、いったん通信機を外しておいてください。
シリアルポートの確認方法
- デバイスマネージャを開きます。
デバイスマネージャは[スタート]ボタン上で右クリックして[デバイスマネージャ]をクリックすると開くことができます。 - デバイスマネージャの<コンピュータ名>の中にある「ポート(COMとLPT)」の横の→をクリックして展開します。
- この状態でクムクムの通信機とPCをUSBケーブルで接続します。
- クムクムの通信機が認識されると「USB Serial Port(COM*)」(*はCOMポートの番号)というデバイスが表示されます。
この“COM*”(*はCOMポートの番号)の部分が、Qumcum Pythonライブラリでクムクムと通信を行うときに必要になります。
QumCommLib.dllのみでの使用方法
実行するプログラムのフォルダに QumCommLib.dll を置きます。
QumCommLib.dllは、Python(64-bit)をインストールした場合は qumcum_python\lib\x64 Python(32-bit)をインストールした場合は qumcum_python\lib\x86のDLLを使用してください。
PythonからQumCommLib.dllのみを使ってクムクムを制御する
DLLの関数を呼び出すには、スクリプト内に dll = cdll.QumCommLib と記述して、DLLをロードし、dll.関数名でAPIを呼び出します。
import os import time from ctypes import * # DLLのフォルダにカレントディレクトリを追加します os.add_dll_directory(os.getcwd()) # DLLをロードします dll = cdll.QumCommLib # COMポートの番号文字列を生成 port = c_char_p('COM7'.encode('utf-8')) # Qumcumと接続 h = dll.qumcomm_connect(port, 115200)
「COMポートの番号文字列を生成」の部分で指定している’COM7’の部分は、さきほどデバイスマネージャで確認した’COM*'(*はCOMポートの番号)を指定します。
Qumcum Pythonライブラリでは sample/sample.py にサンプルがあります。
qumcum.py経由でQumCommLib.dllを呼び出してクムクムを制御する
同じフォルダにあるqumcum.pyの関数が使用できるようインポートし、そのインポートした’qumcum’に関数呼び出しを記述して呼び出します。
import qumcum # Qumcumと接続 # ※"COM7"は通信機を接続したときに表示されたCOMポートの名称です qumcum.connect("COM7")
qumcum.connect()の引数で指定している’COM7’の部分は、さきほどデバイスマネージャで確認した’COM*'(*はCOMポートの番号)を指定します。
Qumcum Pythonライブラリでは sample/qumcum_sample.py にサンプルがあります。