3j-通信機API-プログラミング

4.クムクムロボットとの接続~LEDの点灯

Qumcum Pythonライブラリを使ってクムクムロボットを制御するとき、これから作成するPythonプログラムは、プログラム内で通信を行います。

通信プログラムの基本

通信を行うプログラムは、

  1. 通信相手と接続する
  2. 通信を行う
  3. 通信相手との通信を終了する(切断する)

という順番でプログラムは処理を行います。

このうち、「2.通信を行う」の部分を工夫していろいろな通信を行うことで複雑な処理を実現しています(今回の場合はこの「2.通信を行う」の部分でLEDの制御を行います)。

ただ、このQumcum Python ライブラリでは大きく2種類のプログラミング方法があります。

  1. Pythonプログラムから直接QumcCommLib.dllを呼び出す
  2. Pythonプログラムからqumcum.pyを経由して呼び出す

それぞれでのプログラミングの方法の中で「1.通信相手と接続する」「3.通信相手との通信を終了する(切断する)」も説明します。

Pythonプログラムから直接QumcCommLib.dllを呼び出す

Pythonプログラムからクムクムロボットを制御するときの処理は全体で

  1. ライブラリ・パッケージをインポートする
  2. DLLがロードできるようにする
  3. DLLをロードする
  4. 通信相手と接続する
  5. 通信を行う(LEDの制御を行う)
  6. 通信相手との通信を終了する(切断する)

となります。

※ここで、QumcCommLib.dllはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。

コード全体はこのようになります。

 

ライブラリ・パッケージをインポートする

まず、プログラムで必要なライブラリ・パッケージをインポートします。

コード インポートされるライブラリ・パッケージ 説明
import os os オペレーティングインターフェース用のライブラリがインポートされます
‘QumcCommLib.dll’をロードできるようにする関数を使うためにインポートします
import time time 時刻データへのアクセスと変換用ライブラリがインポートされます
sleep()関数という「一定時間処理を止めて待つ」関数を使うためにインポートします
from ctypes import * ctypes ‘ctypes’というPythonから動的ライブラリを呼ぶための標準ライブラリがインポートされ、ライブラリ内のすべての関数が使えるようにしています。
文字列の変換やDLL関数呼び出しを行うためにインポートします

DLLがロードできるようにする

DLL(QumcCommLib.dll)は作成したプログラムを実行するフォルダに置いていることを想定しています。

os.add_dll_directory()関数はDLLがロードできるディレクトリを追加する関数です。
この関数の引数に追加したいディレクトリを文字列で追加することになるのですが、コードではos.getcwd()関数を使って「カレントワーキングディレクトリ(現在実行対象としているディレクトリ)」を指定しています。

DLLをロードする

DLL(QumcCommLib.dll)をPythonプログラム内で使うことができるようにします

cdllはDLLをロードするためにエクスポートされているオブジェクトです。(詳細はこちら)

‘cdll.QumCommLib’と記述することで’QumCommLib.dll’を見つけてロードします。

通信相手と接続する

通信相手と接続を行います。
COMポートの番号はお使いのPCなどによって変わってきます。
COMポートの確認方法については、「Pythonでクムクムロボットのライブラリーを使う方法」にある「シリアルポートの確認方法」で確認してください。

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()関数を使います。

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()の表と同じです。

ですので、この部分のコードは

  1. RGB-LEDの赤を点灯させる
  2. 0.2秒待つ
  3. RGB-LEDの赤を点灯させる

となります。

通信相手との通信を終了する(切断する)

実行したい処理がすべて終わったら通信相手との通信を終了します。

引数はハンドル(‘h’)のみです。

Pythonプログラムからqumcum.pyを経由して呼び出す

Pythonプログラムからクムクムロボットを制御するときの処理は全体で

  1. ライブラリ・パッケージをインポートする
  2. 通信相手と接続する
  3. 通信を行う(LEDの制御を行う)
  4. 通信相手との通信を終了する(切断する)

となります。

※ここで、QumcCommLib.dllとqumcum.pyはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。

コード全体はこのようになります。

 

ライブラリ・パッケージをインポートする

まず、プログラムで必要なライブラリ・パッケージをインポートします。

コード インポートされるライブラリ・パッケージ 説明
import time time 時刻データへのアクセスと変換用ライブラリがインポートされます
sleep()関数という「一定時間処理を止めて待つ」関数を使うためにインポートします
import qumcum qumcum qumcum.pyがインポートされます。qumcum.pyは内部でQumCommLib.dllをロードしますのでこの2つのファイル(qumcum.pyとQumCommLib.dll)は同じディレクトリに配置してください。

通信相手と接続する

通信相手と接続を行います。
COMポートの番号はお使いのPCなどによって変わってきます。
COMポートの確認方法については、「Pythonでクムクムロボットのライブラリーを使う方法」にある「シリアルポートの確認方法」で確認してください。

ここでは”COM7″としていますが、ここが「シリアルポートの確認方法」で確認したCOMポートの番号になります。

通信を行う(LEDの制御を行う)

このプログラムの本題である「LEDの制御」を行います。こちらはQumcum PythonライブラリのAPIにあるqumcum.led_on()関数とqumcum.led_off()関数を使います。

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()の表と同じです。

ですので、この部分のコードは

  1. RGB-LEDの赤を点灯させる
  2. 0.2秒待つ
  3. RGB-LEDの赤を点灯させる

となります。

通信相手との通信を終了する(切断する)

実行したい処理がすべて終わったら通信相手との通信を終了します。

qumcum.end()に引数はありません。

タイトルとURLをコピーしました