今回は、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が起動したときに実行する関数」を定義するためのデコレーターです。
@cyberpi.event.start
は、関数callback()
をイベントシステムに登録する- CyberPiが起動する(起動イベントが発生する)と、
callback()
が自動的に実行される
CyberPiで利用できるイベント
CyberPiのPython APIでは、以下のような様々なイベントを利用できます。
- CyberPiの起動
- ジョイスティック・A/Bボタンの操作
- モーションセンサー(姿勢・加速度)の検出
- 音声の検出
- 光センサーの検出
- タイマー
- メッセージの受信
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を前進させる処理が実行されます。
まとめ
今回は、CyberPiのイベント機能の種類とその実装方法について紹介しました。
イベントを活用することで、mBot2の操作性が向上し、プログラミング学習がより効率的になります。
是非、今後のプログラミング学習に役立ててください。
次回は、CyberPiのディスプレイ制御について紹介します。

mBlockを使ったmBot2のプログラミング方法を丁寧に解説していておススメです。
『mBotでものづくりをはじめよう』には、mBotを使用した拡張的な遊びが満載で、mBot2にも活かせます。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。
mBlock Python editorからmBot2へ書き込みして、動作を確認してみましょう。