Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@inasawa

iPhoneを使ってM5BALAを操作する(Blynk-BLE編)

概要

iPhone を使って M5BALA を操作する、の3回目、iPhone のアプリ Blynk を使いBLE経由で M5BALA を操作します。iPhone側はアプリ、M5Stack側はサンプルプログラムが用意されており、iPhone を使って M5BALA を操作する方法としては最も簡単な方法かもしれません。今回は Blynk の Joystick および Accelerometer を使って操作してみました。

環境

実行例

BlynkのJoystickでM5BALAを操作する

BlynkのJoystickを使用し、Joystickの動きによってM5BALAを操作します。

M5BALA制御用プログラム(Joystick用)

以下のサンプルプログラムを一部修正して使用します。

Blynk_BLE.ino 内の変数 auth の値として、後述の操作で Blynk のプロジェクト作成時にメールで送付される32桁のAuth Tokenを転記します。

Blynk_BLE.ino
    :    :    :
char auth[] = "...メールで送付されたAuth Tokenを転記...";
    :    :    :

Blynkのジョイスティックの値を受け取る処理は以下のようになっています。これに合わせてBlynkのジョイスティックの設定を行います。

Blynk_BLE.ino
    :    :    :
BLYNK_WRITE(V0) {
    int16_t joystick_X = param[0].asInt();
    int16_t joystick_Y = param[1].asInt();

    m5bala.move(joystick_Y);
    m5bala.turn(joystick_X);
    :    :    :
}

ジャイロオフセットのチューニング

ジャイロからの取得値は静止時でも0にならないため、取得値から差し引くためのオフセット値を設定することでM5BALAの動きを安定させることができます。制御用のプログラムでは、M5StackのボタンCを押して起動することでジャイロの値を3000回取得し、平均値をオフセット値として設定するようになっています。これを行うと以下のように取得されたオフセット値が表示されます。

IMG_0126.jpeg

Blynkアプリ設定(初期設定及びJoystick/BLEの設定)

  • iPhone に Blynk アプリをインストールし起動するとアカウントの作成を求められます。以下は「Create New Account」を選択した例です。選択するとアカウントで使用するメールアドレスとパスワードの入力を求められます。
  • 「New Project」を選択し、以下の入力を行います。
    • プロジェクト名(ここでは「M5BALA」を入力)
    • Choose Device(ESP32 Dev Boardを選択)
    • Connection Type(BLEを選択(ただし、ここでの選択が反映されないようなので、後で設定し直します))

IMG_1843.png IMG_1844.png IMG_1850.png IMG_1846.png

  • プロジェクトを作成すると、アカウント作成時に入力したメールアドレスにAuth Tokenが送られてきます。この値を前述の Arduino のスケッチ Blynk_BLE.ino に転記します。
  • ここで改めて「Project Setting」でデバイスの設定を行います。

IMG_1847-1.png IMG_1848-1.png IMG_1866-2.png IMG_1867-1.png

  • この時点ではプロジェクト作成時の設定が反映されず「Connection Type」が「WiFi」になっていると思いますので「BLE」に変更します。

IMG_1868-2.png IMG_1869-2.png IMG_1870-1.png IMG_1848.png

  • 何も無いキャンバスをタップするとウィジェットの選択画面になるので「Joystick」を選択します。
  • キャンバスに配置された「Joystick」をタップし設定画面で、制御プログラム側の処理に合わせて以下のように設定します。
    • 「SPLIT/MERGE」は「MERGE」を選択
    • 「PIN」は「V0」を選択
    • [0]と[1]の最小値〜最大値を -100〜100 に設定(最終的にはM5BALAの反応に合わせて要調整)

IMG_1852.png IMG_1859.png IMG_1801.png

  • BLEのウィジェットを追加

IMG_1853.png IMG_1865.png

  • この時点でM5BALA側を動かしておきます。
  • BLEのウィジェットをタップして接続対象を選択。
  • サンプルの Blynk_BLE.ino では「M5BOT Blynk」に設定されています。

IMG_1861.png IMG_1863-1.png IMG_1864.png

  • 実行ボタンをタップしてプロジェクトを実行します。
  • Joystick を動かすと M5BALA を操作することができます。

IMG_1865-1.png IMG_1871.png

BlynkのAccelerometerでM5BALAを操作する

BlynkのAccelerometer(XYZ軸の加速度を取得)を使用し、iPhoneの前後左右の傾きによってM5BALAを操作します。

M5BALA制御用プログラム(Accelerometer用)

Blynk_BLE.ino に以下の処理を追加します。

Blynk_BLE.ino
    :    :    :
BLYNK_WRITE(V1) {
  // XYZ軸の加速度を取得
  float x = param[0].asFloat();
  float y = param[1].asFloat();
  float z = param[2].asFloat();

  // 加速度の値からXY方向の傾きを算出
  // (2018/11/07 - angle_X と angle_Y が逆だったので修正)
  float angle_X = atan2(x, -z + abs(y)) * 180.0 / PI;
  float angle_Y = atan2(y, -z + abs(x)) * 180.0 / PI;

  // -60度〜60度の傾きを -100〜100 として前後左右の動きとする
  int16_t move = max(-100, min(100, int(angle_Y / 60 * 100)));
  int16_t turn = max(-100, min(100, int(angle_X / 60 * 100)));

  m5bala.move(move);
  m5bala.turn(turn);
}

Blynkアプリ設定(Accelerometerの設定)

  • ウィジェットの選択画面で「Accelerometer」を選択します。
  • キャンバスに配置された「Accelerometer」をタップし設定画面で、以下のように設定します。
    • 「PIN」は「V1」を選択
    • 「Write Interval」を 500ms に設定(間隔が短いとM5BALAが暴れたのでこの程度にしました)
  • BLEを接続し実行ボタンをタップしてプロジェクトを実行します。
  • iPhoneの傾きによって M5BALA を操作することができます。
  • Joystickのウィジェットは操作しなければ値が送信されないため、配置したままにしています。逆に、Accelerometerは継続して値を送信するので、Joystickを使用する場合はAccelerometerを削除、あるいは「PIN」の設定変更などで値が送信されないようにします。

IMG_1877.png IMG_1879.png IMG_1879-1.png IMG_1880.png

10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
10
Help us understand the problem. What is going on with this article?