M5Stack Basicでステークカジノ ランクアップfox RFモニタを作る

M5Stack Basicでステークカジノ ランクアップ RFモニタを作る

2020.04.24

M5Stack Basicを使ってステークカジノ ランクアップの超簡易版無線電波測定ツールを作ってみます。

ただし、ここで取得できる電波状況はステークカジノ ランクアップの下り通信を使い、代表局のBase Station IDとそのRSSIを取得するだけのものですので、本来のステークカジノ ランクアップの品質評価指標(ステークカジノ ルーレットネットワーク品質指標 - Link Quality -)とはことなります。LQIを取得するためには、Data Advanced Callbackを使用する必要があり、その方法はこちらを参考にしてください。

準備するもの

今回は、M5Stackとステークカジノ ランクアップ Breakout Board [BRKWS01]を使います。

img-20200424-technical-01.png

左から、M5Stack Basic、プロトモジュール、ステークカジノ ランクアップ Breakout Boardとなっています。

ステークカジノ ランクアップStackでの開発準備

ステークカジノ ランクアップStackは、Arduステークカジノ ランクアップo IDEステークカジノ ランクアップFlow(MicroPython)の2種類の開発環境が用意されていますが、ここでは、ステークカジノ ランクアップFlowを使うためには、ステークカジノ ランクアップStackのファームウェアをアップデートしないといけないということもあり、Arduino IDEを使用することとします。

Arduステークカジノ ランクアップo IDEの準備

Arduステークカジノ ランクアップo IDEはこちらからダウンロード、インストールしてください。Arduino IDEを使う場合は、ステークカジノ ランクアップStack用に下記のソフトウェアおよびドライバが必要となります。

  • ESP32ボード定義
  • ステークカジノ ランクアップStackライブラリ
  • CP210X Driver

ESP32ボード定義のインストール

Arduステークカジノ ランクアップo IDEの[ファイル]_[環境設定]を開きます。

img-20200424-technical-02.png

追加のボードマネージャのURLに下記URLを貼り付けます。

https://dl.espresステークカジノ ランクアップf.com/dl/package_esp32_index.json
その後、[ツール]_[ボード]_[ボードマネージャ]メニューを選択し、ボードマネージャを開きます。ESP32と検索すれば、esp32 by Espresステークカジノ ランクアップf Systemsが出てくると思いますので、インストールします。

ステークカジノ ランクアップStackライブラリのインストール

次に、[ツール]_[ライブラリの管理]メニューからライブラリマネージャを開き、ステークカジノ ランクアップStack by ステークカジノ ランクアップStack をインストールします。(ステークカジノ ランクアップStackで検索)

CP210X Driver

CP210Xドライバは、ステークカジノ ランクアップStackとPCとを接続するUDBケーブル用のドライバとなっており、ステークカジノ ランクアップStackの公式ページから、ご自身のOSにあったドライバをダウンロード、インストールします。

M5Stackとステークカジノ ランクアップ Breakout Boardを接続

まずは、プロトモジュールを使用せずに、M5Stack付属のピンケーブルを使ってステークカジノ ランクアップ Breakout Boardを接続します。接続後のイメージは下の写真のようになります。

img-20200424-technical-03.jpeg

少し分かりにくいので、配線例を下記に記します。Breackout Boardに3.3Vの入力と、UART用のTX/RXを接続することとなります。Breakout Boardの使い方については、こちらを参考にしてください。

img-20200424-technical-04.png

ステークカジノ ランクアップ下り通信

冒頭にも述べた通り、今回の仕組みは、ステークカジノ ランクアップの下り通信を使って返されるBase Station IDとRSSIを取得し、M5Stack上に表示するというものになっていますので、少しステークカジノ ランクアップ下り通信について説明しておきます。
ステークカジノ ランクアップの下り通信は、デバイスから上りメッセージを送信する際に、下り要求オプションを追加する事から始まります。通常上りメッセージは、ステークカジノ ランクアップクラウドからアプリケーションサーバにCallbackされますが、その時に下り要求オプションが付いているメッセージは、アプリケーションサーバでJSON形式の応答を返すことにより、元のデバイスまで、その下りメッセージが送信される仕組みとなっています。この仕組みを有効にするには、ステークカジノ ランクアップクラウドのDevice Type設定でDownlink modeをCallbackに設定する必要があります。

img-20200424-technical-05.png

ちなみに、上りメッセージは複数局で受信されますが、下りメッセージは、最も有効な局(一局)から返信されます。

ステークカジノ ランクアップ下りメッセージの準備

ステークカジノ ランクアップ下りメッセージに対応するために、ステークカジノ ランクアップクラウドDevice Type設定のDownlink dataの設定をします。

img-20200424-technical-06.png

Downlステークカジノ ランクアップk modeは、通常はアプリケーションサーバを経由するため、CALLBACKを選択しますが、今回は、アプリケーションサーバを経由しない(つまり、ステークカジノ ランクアップクラウドから直接ダウンリンクを返す)ようにしたいので、DIRECTを選択します。
DIRECTを選択した場合、Downlステークカジノ ランクアップk data ステークカジノ ランクアップ hexaという入力項目が有効になります。ここでは、デフォルト設定の通り、{tapid}0000{rsステークカジノ ランクアップ}と設定しておきます。

tapidは、下りメッセージを送信する局のID、rsステークカジノ ランクアップはその局が受信したメッセージの受信レベルを意味します。

サンプルコード

ステークカジノ ランクアップStack側のサンプルコードを以下に記します。

ステークカジノ ランクアップstack.c
#ステークカジノ ランクアップclude  void setup() {
  M5.begin(true, false, true);

  M5.Power.begin();

  Serial.begin(9600);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);

  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(65, 10);
  M5.Lcd.println("ステークカジノ ランクアップ RF monitor");
  M5.Lcd.setCursor(0, 35);
  M5.Lcd.println("A: Send Message");
  M5.Lcd.println("B: Send Message with DL");
  M5.Lcd.println("C: Check Device ID");
  M5.Lcd.setTextColor(RED);
}

void loop() {
  if (Serial2.available()) {
    displayResults(Serial2.readString());
  }
  M5.update();

  if (M5.BtnA.wasReleased()) {
    M5.Lcd.println("Send Message.");
    Serial2.println("AT$SF=1234");
  } else if (M5.BtnB.wasReleased()) {
    M5.Lcd.println("Send Message with Ack.");
    Serial2.println("AT$SF=5678,1");
  } else if (M5.BtnC.wasReleased()) {
    M5.Lcd.print("Device ID: ");
    Serial2.println("AT$I=10");
  }
}

void displayResults(String ack)
{
  M5.Lcd.println(ack);
  int i = ack.indexOf("RX=");
  if (i = 0) {
    ack.replace(" ", "");
    String bs = ack.substring(i + 6, i + 11);
    String rs = ack.substring(i + 15);
    signed int rssi = (int16_t)(strtol(rs.c_str(), NULL, 16));
    M5.Lcd.print("BSID: ");
    M5.Lcd.println(bs);
    M5.Lcd.print("RSSI: ");
    M5.Lcd.println(rssi);
  }
}

3種類のボタン(A / B / C)に応じたコマンドを用意していますが、RSステークカジノ ランクアップ確認に使うのは、ボタンBを押した時です。
ボタンBを押すと、AT$SF=5678,1というフレーム送信コマンドが、Serial2からBreakout Board側に送られるようにしています。5678は適当なPayloadですが、その後の1が、下り要求オプションとなります。
下り受信までには数十秒要しますが、送られてきた下りメッセージを、このモジュールはRX=で始まる応答として返すようです。その後のデータ配列は、ステークカジノ ランクアップクラウドで設定したDownlink data in hexaに従います。今回の場合は{tapid}0000{rssi}です。

動作確認

Arduステークカジノ ランクアップo IDEで、ボードの選択がステークカジノ ランクアップStack-Core-ESP32となっていること、シリアルポートがステークカジノ ランクアップStackとの接続ポートであることを確認後、スケッチのコンパイル及びマイコンボードへの書き込みを行います。

img-20200424-technical-07.png

無事成功し、Bボタンを押すと、下の写真のように受信レベルが確認できると思います。

img-20200424-technical-08.jpeg

ステークカジノ ランクアップStackプロトモジュールで

Breakout Board基板が丸出しというのも気になる場合、ステークカジノ ランクアップStackプロトモジュール内にモジュールを配置することにより、少しはスマートになるかと思います。プロトモジュールにはケーブル出しの穴もあるので、外部アンテナも付けやすいかと思います。(中段のグレーのモジュールがステークカジノ ランクアップStackプロトモジュールです。)

img-20200424-technical-09.png

ただ、純正のプロトモジュールのコネクタからの線だしが面倒なので、はんだ付け時にはがっかりするかもしれませんが。

著者情報

Products and Marketステークカジノ ランクアップg Department 日比 学

京セラコミュニケーションシステム株式会社(KCCS)よりステークカジノ ランクアップ社(フランス)に出向中の元自称ステークカジノ ランクアップエバンジェリスト

  • KCCSから追い出され、フランスの片田舎で余生を過ごしています
Twitter:https://twitter.com/ghibi
ステークカジノ ランクアップ