PR

【PythonでmBot2プログラミング】CyberPiをイベントで動かそう

Python
この記事は約8分で読めます。

今回は、PythonでmBot2プログラミングシリーズ(CyberPi編)の第1回です。

ここでは、CyberPiのイベント駆動型プログラミングについて紹介します。
イベントとは、特定の状況や条件が発生したときに実行されるアクションのことです。

これを活用すると、ボタンの押下やセンサーの変化をトリガーにしてmBot2を動作させることができます。

目標

  • イベント駆動型プログラムの概念を理解する
  • CyberPiのボタンを利用して、イベントをトリガーにした動作を実装する

Python環境(mBlock Python editor)の立ち上げ

ここでは、『mBlock Python editor』を使って、Pythonコードでプログラミングしていきます。
事前にPython環境を導入しておいてください。

環境の導入に関しては、次の記事を参考にしてください。

イベント駆動型プログラミングとは

イベント駆動型プログラミングとは、特定のイベント(例えば、ボタンが押された、センサーが値を検出した、データが受信されたなど)が発生したときに、それに応じた処理を実行するプログラミング手法です。

プログラムは、通常、発生する可能性のあるイベントを監視し、それに対応する処理(イベントハンドラー)を登録しておきます。

CyberPiにおけるイベント駆動型プログラミング

CyberPiのPython APIでは、『デコレータ』を使って特定のイベントが発生したときに関数を実行します。

import cyberpi

@cyberpi.event.start      # CyberPiの起動
def callback():
	cyberpi.mbot2.forward(50)  # 50RPMで前進

この例では、CyberPiの起動イベントが発生すると、後続のコードが実行されます。
この場合はmBot2が50RPMで前進します。

デコレータとは

デコレータは、Pythonの関数に特別な機能を追加するための構文です。

関数の定義の前に @デコレータ名 の形式で書かれ、その後に続く関数に特別な振る舞いを持たせることができます。

@cyberpi.event.start の意味

CyberPiのPython APIにおいて、@cyberpi.event.start は、「CyberPiが起動したときに実行する関数」を定義するためのデコレーターです。

  1. @cyberpi.event.start は、関数 callback() をイベントシステムに登録する
  2. CyberPiが起動する(起動イベントが発生する)と、 callback() が自動的に実行される

CyberPiで利用できるイベント

CyberPiのPython APIでは、以下のような様々なイベントを利用できます。

  1. CyberPiの起動
  2. ジョイスティック・A/Bボタンの操作
  3. モーションセンサー(姿勢・加速度)の検出
  4. 音声の検出
  5. 光センサーの検出
  6. タイマー
  7. メッセージの受信

CyberPiのイベント駆動に関するPython API

CyberPiの起動

cyberpi.event.start

CyberPiの起動時に、後続のコードを実行。

ボタン操作

cyberpi.event.is_press(name)

指定したボタンが押されたとき、またはジョイスティックが指定した方向に移動したときに、後続のコードを実行。

  • name:ボタンまたはジョイスティックの方向
nameの設定範囲内容
“a”Aボタンが押された
“b”Bボタンが押された
“up”ジョイスティックが上方向に動いた
“down”ジョイスティックが下方向に動いた
“left”ジョイスティックが左方向に動いた
“right”ジョイスティックが右方向に動いた
“middle”ジョイスティックの中央が押された
“any_direction”ジョイスティックが任意の方向に動いた
“any_button”Aボタン、またはBボタンが押された
“any”任意のボタン、またはジョイスティックが任意の方向に動いた

モーションセンサー(姿勢・加速度)の検出

cyberpi.event.is_tiltforward

CyberPiが前方に傾くと、後続のコードを実行。


cyberpi.event.is_tiltback

CyberPiが後方に傾くと、後続のコードを実行。


cyberpi.event.is_tiltleft

CyberPiがに傾くと、後続のコードを実行。


cyberpi.event.is_tiltright

CyberPiがに傾くと、後続のコードを実行。


cyberpi.event.is_faceup

CyberPiの画面が上を向いたとき、後続のコードを実行。


cyberpi.event.is_facedown

CyberPiの画面が下を向いたとき、後続のコードを実行。


cyberpi.event.is_shake

CyberPiが振られたとき、後続のコードを実行。


cyberpi.event.is_waveup

CyberPiが振り上げられたとき、後続のコードを実行。


cyberpi.event.is_wavedown

CyberPiが振り下げられたとき、後続のコードを実行。


cyberpi.event.is_waveleft

CyberPiが左に振られたとき、後続のコードを実行。


cyberpi.event.is_waveright

CyberPiが右に振られたとき、後続のコードを実行。


cyberpi.event.is_freefall

CyberPiが落下したとき、後続のコードを実行。


cyberpi.event.is_clockwise

CyberPiがz軸を中心に時計回りに回転したとき、後続のコードを実行。
※z軸:mBot2を地面に置いたときに、垂直方向となる軸


cyberpi.event.is_anticlockwise

CyberPiがz軸を中心に反時計回りに回転したとき、後続のコードを実行。
※z軸:mBot2を地面に置いたときに、垂直方向となる軸

音声・光・振動・タイマーの検出

cyberpi.event.greater_than(threshold, type)

指定した種類の値が、閾値より大きい場合に、後続のコードを実行。

  • threshold:閾値
    • 範囲:0~100
  • type:データの種類
    • “microphone”:マイク
    • “light_sensor”:光センサー
    • “shake_val”:振動の強さ
    • “timer”:タイマー

cyberpi.event.smaller_than(threshold, type)

指定した種類の値が、閾値より小さい場合に、後続のコードを実行。

  • threshold:閾値
    • 範囲:0~100
  • type:データの種類
    • “microphone”:マイク
    • “light_sensor”:光センサー
    • “shake_val”:振動の強さ
    • “timer”:タイマー

メッセージの受信

cyberpi.event.receive(message)

指定されたブロードキャストメッセージを受信したとき、後続のコードを実行。

  • message:ブロードキャストメッセージの名前

cyberpi.event.upload_broadcast(message)

指定されたアップロードモード・ブロードキャストメッセージを受信したとき、後続のコードを実行。

  • message:アップロードモード・ブロードキャストメッセージの名前

cyberpi.event.cloud_broadcast(message)

指定されたユーザークラウド・ブロードキャストメッセージを受信したとき、後続のコードを実行。

  • message:ユーザークラウド・ブロードキャストメッセージの名前

cyberpi.event.wifi_broadcast(message)

指定されたLAN・ブロードキャストメッセージを受信したとき、後続のコードを実行。

  • message:LAN・ブロードキャストメッセージの名前

簡単な動作プログラム作成

mBot2のモータ制御プログラム

Bボタンが押されたとき、mBot2を3秒間前進させる』プログラムを作ってみます。

import cyberpi

@cyberpi.event.is_press("b")
def callback():
    cyberpi.mbot2.forward(50, 3)

@cyberpi.event.is_press("b") で、関数callback() をイベントシステムに登録します。

関数callback() は、Bボタンが押されたときに実行され、callback() の中でmBot2を前進させる処理が実行されます。

mBlock Python editorからmBot2へ書き込みして、動作を確認してみましょう。

まとめ

今回は、CyberPiのイベント機能の種類とその実装方法について紹介しました。

イベントを活用することで、mBot2の操作性が向上し、プログラミング学習がより効率的になります。
是非、今後のプログラミング学習に役立ててください。

次回は、CyberPiのディスプレイ制御について紹介します。

mBlockを使ったmBot2のプログラミング方法を丁寧に解説していておススメです。

『mBotでものづくりをはじめよう』には、mBotを使用した拡張的な遊びが満載で、mBot2にも活かせます。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

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