Bluetooth環境モニター

このプロジェクトでは、MITアップインベンターで作成されたAndroidアプリを使用して、Arduinoボードからの環境データを受信し表示します。ArduinoボードはDHT11センサーから温度と湿度のデータを取得します。データが収集されると、Bluetoothを介して送信されます。アプリはデータを受信すると、画面上に表示します。

Androidアプリケーションは、 MIT App Inventor という無料のWebベースプラットフォームを利用して構築されます。このプロジェクトは、Arduinoとスマートフォンのインターフェースに慣れる絶好の機会を提供します。

必要なコンポーネント

このプロジェクトでは、以下のコンポーネントが必要です。

全てのキットを一括購入するのが便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

また、以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ブレッドボード

BUY

ジャンパーワイヤー

BUY

湿温度センサーモジュール

BUY

1. 回路を組む

../_images/08-bluetooth_environmental_monitor_bb.png ../_images/08_ble_home_schematic.png

2. Androidアプリを作成する

Androidアプリケーションは、 MIT App Inventor という無料のウェブアプリケーションを使用して開発されます。 MITアップインベンターは、直感的なドラッグアンドドロップ機能により、簡易なアプリケーションを作成するための優れたスタートポイントとして機能します。

さあ、始めましょう。

  1. Get Started with MIT App Inventor にアクセスし、「オンラインツール」をクリックしてログインします。MITアップインベンターに登録するためにはGoogleアカウントが必要です。

    ../_images/08_ai_signup.png
  2. ログインしたら、 Projects -> Import project (.aia) from my computer に進みます。その後、 elite-explorer-kit-main\iot_project\08-bluetooth_environmental_monitor のパスにある ble_environmental_monitor.aia ファイルをアップロードします。

    また、こちらから直接ダウンロードもできます: ble_environmental_monitor.aia

    ../_images/08_ai_import.png
  3. .aia ファイルをアップロードすると、MITアップインベンターソフトウェア上にアプリケーションが表示されます。これは事前に設定されたテンプレートです。MITアップインベンターに慣れた後、このテンプレートを変更することができます。

  4. MITアップインベンターには、主に DesignerBlocks の2つのセクションがあります。ページの右上隅でこれらのセクション間を切り替えることができます。

    ../_images/08_ai_intro_1.png
  5. Designer では、ボタン、テキスト、スクリーンを追加したり、アプリケーションの全体的な見た目を変更したりすることができます。

    ../_images/08_ai_intro_2.png
  6. 次に、 Blocks セクションがあります。このセクションでは、アプリのGUI上の各コンポーネントにカスタム機能を作成し、望ましい機能を実現することができます。

    ../_images/08_ai_intro_3.png
  7. スマートフォンにアプリケーションをインストールするには、 Build タブに移動します。

    ../_images/08_ai_intro_4.png
    • .apk ファイルを生成できます。このオプションを選択すると、 .apk ファイルをダウンロードするか、QRコードをスキャンしてインストールするかを選択するページが表示されます。インストールガイドに従ってアプリケーションのインストールを完了してください。

      こちらから事前にコンパイルされたAPKもダウンロードできます: ble_environmental_monitor.apk

    • このアプリをGoogle Playや他のアプリマーケットにアップロードしたい場合は、 .aab ファイルを生成できます。

3. コードをアップロードする

  1. elite-explorer-kit-main\iot_project\08-bluetooth_environmental_monitor のパスにある 08-bluetooth_environmental_monitor.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

    注釈

    ライブラリをインストールするには、Arduinoライブラリマネージャーを使用して、 「DHT sensor library」「ArduinoBLE」 を検索し、インストールします。

  2. 正しいボードとポートを選択したら、 Upload ボタンをクリックします。

  3. シリアルモニター(ボーレートは 9600 に設定)を開き、デバッグメッセージを確認します。

4. アプリとBluetoothモジュールの接続

先に作成したアプリケーションがスマートフォンにインストールされていることを確認します。

  1. まず、スマートフォンで Bluetooth をオンにします。

    ../_images/08_app_1.png
  2. 次に、新しくインストールされた Environmental Monitor アプリを開きます。

    ../_images/08_app_2.png
  3. このアプリを初めて開くと、Bluetoothの使用に必要な許可を求める2つのプロンプトが連続して表示されます。

    ../_images/08_app_3.png
  4. アプリ内で Connect ボタンをクリックし、アプリとBluetoothモジュール間の接続を確立します。

    ../_images/08_app_4.png
  5. このページには、すべてのペアリングされたBluetoothデバイスのリストが表示されます。リストから xx.xx.xx.xx.xx.xx UNO R4 Home オプションを選択します。各デバイスの名前はMACアドレスの隣にリストされています。

    ../_images/08_app_5.png
  6. 上記のページにデバイスが表示されない場合は、デバイスの位置情報スイッチをオンにしてみてください(一部のAndroidシステムバージョンでは、Bluetooth機能と位置情報スイッチが統合されています)。

    ../_images/08_app_6.png
  7. 接続が成功すると、メインページにリダイレクトされ、そこで温度と湿度が表示されます。

    ../_images/08_app_7.png

5. コードの説明

  1. ライブラリのインポートと定数の定義

    • 必要なライブラリをインポートし、DHTセンサーピンとタイプに関する定数を定義します。

    注釈

    ライブラリをインストールするには、Arduinoライブラリマネージャーを使用して、 「DHT sensor library」「ArduinoBLE」 を検索し、インストールします。

    #include <DHT.h>
    #include <ArduinoBLE.h>
    #define DHTPIN 11
    #define DHTTYPE DHT11
    
  2. BLEサービスと特性の初期化

    • BLE環境センシングサービスと特性のUUIDを定義します。 Bluetooth SIG によって提供された事前定義されたUUIDを使用しています。 environmentalSensingService には 0x181A が割り当てられ、それぞれ 0x2A6E0x2A6Ftemperature and humidity 用に予約されています。

    BLEService environmentalSensingService("181A");
    BLEShortCharacteristic temperatureCharacteristic("2A6E", BLERead | BLENotify);
    BLEUnsignedShortCharacteristic humidityCharacteristic("2A6F", BLERead | BLENotify);
    
  3. Setup関数

    • シリアル通信、DHTセンサー、BLEを初期化します。

    void setup() {
      Serial.begin(9600);
      dht.begin();
      if (!BLE.begin()) {
        Serial.println("starting Bluetooth® Low Energy module failed!");
        while (1)
          ;
      }
      setupBle();
    }
    
  4. メインループ

    • BLEイベントをポーリングし、定期的にセンサーデータを更新します。

    • millis() - lastUpdateTime > updateInterval の行は、センサーデータがupdateIntervalミリ秒ごとに更新されることを保証します。

    void loop() {
      BLE.poll();
      if (millis() - lastUpdateTime > updateInterval) {
        // Read sensor data and update BLE characteristics
      }
    }
    
  5. BLEおよびデバッグ関数

    BLEを設定し、デバッグ情報を出力し、BLEイベントを管理するための関数。

    void printDHT(float h, float t) { /* ... */ }
    void setupBle() { /* ... */ }
    void blePeripheralConnectHandler(BLEDevice central) { /* ... */ }
    void blePeripheralDisconnectHandler(BLEDevice central) { /* ... */ }
    
    • printDHT(float h, float t): DHT11によって読み取られた温度と湿度のデータをシリアルモニターに出力するために使用されます。この関数はデバッグ目的のためです。

    • setupBle(): ブロードキャスト名、特性、およびサービスを設定を含むBluetoothを初期化します。

    • blePeripheralConnectHandler(BLEDevice central) および blePeripheralDisconnectHandler(BLEDevice central): これらの関数は、Bluetoothが接続または切断されたときのイベントを処理します。デバイスがUNO R4とBluetooth経由で正常に接続すると、オンボードLEDが点灯します。デバイスが切断されると、LEDが消灯します。