Qumcum Pythonライブラリを使ってクムクムロボットを制御するとき、これから作成するPythonプログラムは、プログラム内で通信を行います。
通信プログラムの基本
通信を行うプログラムは、
- 通信相手と接続する
- 通信を行う
- 通信相手との通信を終了する(切断する)
という順番でプログラムは処理を行います。
このうち、「2.通信を行う」の部分を工夫していろいろな通信を行うことで複雑な処理を実現しています(今回の場合はこの「2.通信を行う」の部分でLEDの制御を行います)。
ただ、このQumcum Python ライブラリでは大きく2種類のプログラミング方法があります。
- Pythonプログラムから直接QumcCommLib.dllを呼び出す
- Pythonプログラムからqumcum.pyを経由して呼び出す
それぞれでのプログラミングの方法の中で「1.通信相手と接続する」「3.通信相手との通信を終了する(切断する)」も説明します。
Pythonプログラムから直接QumcCommLib.dllを呼び出す
Pythonプログラムからクムクムロボットを制御するときの処理は全体で
- ライブラリ・パッケージをインポートする
- DLLがロードできるようにする
- DLLをロードする
- 通信相手と接続する
- 通信を行う(LEDの制御を行う)
- 通信相手との通信を終了する(切断する)
となります。
※ここで、QumcCommLib.dllはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。
コード全体はこのようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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) # RGB-LED点灯 dll.qumcomm_led_on(h, 1) time.sleep(0.2) # RGB-LED消灯 dll.qumcomm_led_off(h, 1) # Qumcumから切断 dll.qumcomm_end(h) |
ライブラリ・パッケージをインポートする
まず、プログラムで必要なライブラリ・パッケージをインポートします。
1 2 3 |
import os import time from ctypes import * |
コード | インポートされるライブラリ・パッケージ | 説明 |
import os | os | オペレーティングインターフェース用のライブラリがインポートされます ‘QumcCommLib.dll’をロードできるようにする関数を使うためにインポートします |
import time | time | 時刻データへのアクセスと変換用ライブラリがインポートされます sleep()関数という「一定時間処理を止めて待つ」関数を使うためにインポートします |
from ctypes import * | ctypes | ‘ctypes’というPythonから動的ライブラリを呼ぶための標準ライブラリがインポートされ、ライブラリ内のすべての関数が使えるようにしています。 文字列の変換やDLL関数呼び出しを行うためにインポートします |
DLLがロードできるようにする
DLL(QumcCommLib.dll)は作成したプログラムを実行するフォルダに置いていることを想定しています。
1 2 |
# DLLのフォルダにカレントディレクトリを追加します os.add_dll_directory(os.getcwd()) |
os.add_dll_directory()関数はDLLがロードできるディレクトリを追加する関数です。
この関数の引数に追加したいディレクトリを文字列で追加することになるのですが、コードではos.getcwd()関数を使って「カレントワーキングディレクトリ(現在実行対象としているディレクトリ)」を指定しています。
DLLをロードする
DLL(QumcCommLib.dll)をPythonプログラム内で使うことができるようにします
1 2 |
# DLLをロードします dll = cdll.QumCommLib |
cdllはDLLをロードするためにエクスポートされているオブジェクトです。(詳細はこちら)
‘cdll.QumCommLib’と記述することで’QumCommLib.dll’を見つけてロードします。
通信相手と接続する
通信相手と接続を行います。
COMポートの番号はお使いのPCなどによって変わってきます。
COMポートの確認方法については、「Pythonでクムクムロボットのライブラリーを使う方法」にある「シリアルポートの確認方法」で確認してください。
1 2 3 4 5 |
# COMポートの番号文字列を生成 port = c_char_p('COM7'.encode('utf-8')) # Qumcumと接続 h = dll.qumcomm_connect(port, 115200) |
c_char_p()は次行にあるqumcom_connect()関数に渡す第1引数のCOMポートが文字列でC言語のchar*(charのポインタ型)なのでポインタに変換するためにこのc_char_p()でポインタに変換しています。
dll.qumcom_connect()の第2引数にある’115200’は通信速度(ボーレート)で115,200bpsのことです。
戻り値の’h’という変数は「ハンドル」と呼ばれるものでこのQumcum Pythonライブラリの関数を呼び出すときに必要となる変数です。
通信を行う(LEDの制御を行う)
このプログラムの本題である「LEDの制御」を行います。こちらはQumcum PythonライブラリのAPIにあるqumcomm_led_on()関数とqumcomm_led_off()関数を使います。
1 2 3 4 5 |
# RGB-LED点灯 dll.qumcomm_led_on(h, 1) time.sleep(0.2) # RGB-LED消灯 dll.qumcomm_led_off(h, 1) |
qumcomm_led_on()でLEDの点灯を行っています。第1引数はハンドル(‘h’)で第2引数はLEDの色で下表のようになっています。
第2引数の値 | LEDの色 |
1 | Red(赤) |
2 | Green(緑) |
3 | Blue(青) |
次のtime.sleep(0.2)[‘0.2’は小数です]は「0.2秒間待つ」となります。(time.sleepの詳細はこちら)
qumcomm_led_off()でLEDの消灯を行っています。第1引数はハンドル(‘h’)で第2引数はLEDの色でqumcomm_led_on()の表と同じです。
ですので、この部分のコードは
- RGB-LEDの赤を点灯させる
- 0.2秒待つ
- RGB-LEDの赤を点灯させる
となります。
通信相手との通信を終了する(切断する)
実行したい処理がすべて終わったら通信相手との通信を終了します。
1 2 |
# Qumcumから切断 dll.qumcomm_end(h) |
引数はハンドル(‘h’)のみです。
Pythonプログラムからqumcum.pyを経由して呼び出す
Pythonプログラムからクムクムロボットを制御するときの処理は全体で
- ライブラリ・パッケージをインポートする
- 通信相手と接続する
- 通信を行う(LEDの制御を行う)
- 通信相手との通信を終了する(切断する)
となります。
※ここで、QumcCommLib.dllとqumcum.pyはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。
コード全体はこのようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import time import qumcum # Qumcumと接続 qumcum.connect("COM7") # RGB-LED点灯 qumcum.led_on(1) time.sleep(0.2) # RGB-LED消灯 qumcum.led_off(1) # Qumcumから切断 qumcum.end() |
ライブラリ・パッケージをインポートする
まず、プログラムで必要なライブラリ・パッケージをインポートします。
1 2 |
import time import qumcum |
コード | インポートされるライブラリ・パッケージ | 説明 |
import time | time | 時刻データへのアクセスと変換用ライブラリがインポートされます sleep()関数という「一定時間処理を止めて待つ」関数を使うためにインポートします |
import qumcum | qumcum | qumcum.pyがインポートされます。qumcum.pyは内部でQumCommLib.dllをロードしますのでこの2つのファイル(qumcum.pyとQumCommLib.dll)は同じディレクトリに配置してください。 |
通信相手と接続する
通信相手と接続を行います。
COMポートの番号はお使いのPCなどによって変わってきます。
COMポートの確認方法については、「Pythonでクムクムロボットのライブラリーを使う方法」にある「シリアルポートの確認方法」で確認してください。
1 2 |
# Qumcumと接続 qumcum.connect("COM7") |
ここでは”COM7″としていますが、ここが「シリアルポートの確認方法」で確認したCOMポートの番号になります。
通信を行う(LEDの制御を行う)
このプログラムの本題である「LEDの制御」を行います。こちらはQumcum PythonライブラリのAPIにあるqumcum.led_on()関数とqumcum.led_off()関数を使います。
1 2 3 4 5 6 7 |
# RGB-LED点灯 qumcum.led_on(1) time.sleep(0.2) # RGB-LED消灯 qumcum.led_off(1) |
qumcum.led_on()でLEDの点灯を行っています。引数はLEDの色で下表のようになっています。
第2引数の値 | LEDの色 |
1 | Red(赤) |
2 | Green(緑) |
3 | Blue(青) |
次のtime.sleep(0.2)[‘0.2’は小数です]は「0.2秒間待つ」となります。(time.sleepの詳細はこちら)
qumcum.led_off()でLEDの消灯を行っています。引数はLEDの色でqumcum.led_on()の表と同じです。
ですので、この部分のコードは
- RGB-LEDの赤を点灯させる
- 0.2秒待つ
- RGB-LEDの赤を点灯させる
となります。
通信相手との通信を終了する(切断する)
実行したい処理がすべて終わったら通信相手との通信を終了します。
1 2 |
# Qumcumから切断 qumcum.end() |
qumcum.end()に引数はありません。