5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M5StickC + Blynk でRoverCをスマホからBLEでコントロール

Last updated at Posted at 2020-04-12

M5StickCとRoverC、さらにUnitVを買ってしまった

ArduinoとESP32はライフワーク(?)の室内二酸化炭素測定とクラウド(Ambient IoT)へのデータのアップロードに以前から利用中。
授業テーマでもあるIoTだからという大義名分のもと、小さくて見た目がかわいいので、M5StickCに加えてRoverCをついつい楽天でポチってしまった。さらにUnitV(AIカメラユニット)も購入してあり、RoverCに物体追尾をさせる予定。ところがUnitVをRoverCに取り付けるのになんとレゴブロックが必要ではないか。さすがに子供も大きくなり、そんなものはあるわけもないので、これは別途ばら売りのレゴブロックパーツを発注中。
image.png

スマホでRoverC動かしたい

レゴブロックのパーツが届くまでしばらくかかりそうなので、とりあえず、まずRoverCを動かしてみることに。
最初はArduinoのM5SticCライブラリのRoverCというスケッチで動かそうと思ったのだが、どうも専用のジョイスティックJoyCが必要な模様。ジョイスティックの要らないシンプルなスケッチRoverC_Arduino_Alone.inoでしばらく楽しんだものの、やはりリモートコントロールしたくなる。

そういえばBlynkってあったなー

専用のジョイスティックなど使わなくてもスマホでコントロールできるのではないかと思いだしたのがBlynk。iPhoneのアプリで簡単にパーツを組み立てる感覚でwifiやBluetooth、BLEでリモートからESP32のコントロールが可能。いままでWifiでリモートコントロールしたことはあったが、今回、はじめてBLEに挑戦。BLEはBluetooth Low Energyの略でBluetoothの拡張仕様で名前の通りきわめて低電力で動くらしい。ビーコンと呼ばれているものもBLE。

まず、Arduinoのスケッチを用意

RoverC_Arduino_Alone.inoとM5StickCでBlynkを試してみた(Lチカ)を参考にスケッチを用意。RoverC_Arduino_Alone.inoに前後進、左右平行移動、右回り、左回りの関数が用意されていたのでそれをそのまま活用。
複雑なことは何もせず、RoverC_Arduino_Alone.inoにBlynk固有の処理を書き加えた感じ。Blynk上のリモコン画面(?)用に前進、後進などのボタンを6つ用意したので、それに対応した処理が最後のBLYNK_WRITEで記述されている。

#include <M5StickC.h>
#include "RoverC.h"
#include <BlynkSimpleEsp32_BLE.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#define BLYNK_PRINT Serial
#define BLYNK_USE_DIRECT_CONNECT

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "認証コード"; //Auth Token for BLE

// the setup routine runs once when M5StickC starts up
void setup() {

  // Initialize the M5StickC object
  M5.begin();

  M5.Lcd.setRotation(3);
  M5.Lcd.setTextColor(BLUE);
  M5.Lcd.setCursor(40, 30, 4);
  M5.Lcd.printf("BlynkBLE");

  // Debug console
  Serial.begin(9600);
  Serial.println("Waiting for connections...");
  Blynk.setDeviceName("M5StickC_RoverC");
  Blynk.begin(auth);

  RoverC_Init();
}

// the loop routine runs over and over again forever
void loop() {
  //ここは具体的な処理はかかない。Blynkで何かアクションがあると下の関数が呼ばれる
  Blynk.run();

}

//以下の関数はボタンがプッシュされるたびに呼ばれる
BLYNK_WRITE(V0) {
  int16_t forward = param.asInt(); //入ってくる信号を変数に渡す
  if (forward == 1) {
    Move_forward(50);
  }
  else {
    Move_stop(0);
  }
}

BLYNK_WRITE(V1) {
  int16_t backward = param.asInt();
  if (backward == 1) {
    Move_back(50);
  }
  else {
    Move_stop(0);
  }
}

BLYNK_WRITE(V2) {
  int16_t right = param.asInt();
  if (right == 1) {
    Move_right(50);
  }
  else {
    Move_stop(0);
  }
}

BLYNK_WRITE(V3) {
  int16_t left = param.asInt();
  if (left == 1) {
    Move_left(50);
  }
  else {
    Move_stop(0);
  }
}

BLYNK_WRITE(V4) {
  int16_t rightT = param.asInt();
  if (rightT == 1) {
    Move_turnright(50);
  }
  else {
    Move_stop(0);
  }
}

BLYNK_WRITE(V5) {
  int16_t leftT = param.asInt();
  if (leftT == 1) {
    Move_turnleft(50);
  }
  else {
    Move_stop(0);
  }
}

肝心のBlynkの方は?

Blynkアプリの設定はM5StickCでBlynkを試してみた(Lチカ)に詳しいので参照されたい。
ここではBLEという名前で新しいプロジェクトを作り、方眼紙(?)上の画面をタップすると、Widgetと呼ばれるパーツを選択する画面が出てくる。使ったのは、RoverCの動きを規定する6つのボタンとBLEのWidgetで、以下のようにリモコン画面っぽく(?)配置した。

image.png

各ボタンごとの設定は以下の通りで、バーチュアルなピンをそれぞれV0からV5までアサインしてあり、先ほどのArduinoのスケッチに対応するものとなっている。

image.png

BLEセッティングのConnect BLE DeviceをクリックするとBluetoothの選択肢が出てくるので、先ほどのスケッチが書き込まれたM5StickCの名称(スケッチ中のBlynk.setDeviceName("M5StickC_RoverC");で決めた名称を選んで接続する。もちろんこの時点ではM5StickCはスケッチが書き込まれて電源が入っている想定。あとは、リモコン画面のプレイボタンを押せば操作可能となる。もちろんRoverCのスイッチもオンにすることを忘れないこと。
かなり軽快に動いてくれ、特に左右のカニ歩き(?)は本当に可愛い。

image.png

仕上がりはこんな感じで。

ezgif.com-video-to-gif.gif

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?