旅を楽しくするArduino端末を作る。その16-旅Arduino Ver4 スマホアプリ化-

第16回では引き続き、BluetoothとWifi通信が内部実装されているマイコン「ESP32-WROOM-Devkit」を使い、旅Arduinoを無線化します。
第15回の続きの記事になりますので、第15回目を参照の上ご覧ください。

受信したBluetoothシリアル通信を自作アプリで取得

前回で、AndroidスマートフォンにArduino(ESP32)からのセンサーデータをBluetoorh経由送ることが可能となりましたので、このデータをアプリ画面上に表示できるよう、Androidアプリを作成します。

Androidアプリに関しては、説明を省略させていただきます。
基本的なつくりとしては、

  1. Bluetoothシリアル通信(SPP)を開始できるように機能を実装
  2. 定期的に送られてくるセンサーデータを取得し、解析
  3. GPS情報はスマートフォンから取得できるため、定期的に位置情報を取得
  4. 得られた情報をアプリ画面上に描画

といった仕組みで動いております。

一応、上記処理のコードを含んだjavaファイルをzipに圧縮しダウンロードできるようにしときます。
(javaファイルはセキュリティソフトに消される可能性が高いので、拡張子をtxtに変更しておきます。)

旅Arduino ver4 回路図

新たな回路図になります。
今まではarduino nano everyを使っていましたが、ESP32に変更しております。
また、以前のverではGPSユニットを付けていましたが、スマートフォンで同様の機能を実装できますので、構成から外しております。

注意点として、ESP32の信号ラインは3,3V動作です。今までの5Vではありません。
幸いにも今まで利用してきたセンサーは3.3Vと5Vどちらでも動作しますので、大きな問題とはなりませんでした。

電源に関しては、消費電力が非常に小さいので、USBからの給電のみとしております。今まではLCDを使うためにDCDCコンバータを利用していましたが、スマートフォンに変更になったため、別途電源を用意する必要がなくなり、回路構成が非常にシンプルになりました。

旅Arduinoコード

#include <Wire.h>
#include "BluetoothSerial.h"
#include "SparkFunBME280.h"
#include <Adafruit_INA219.h>

BluetoothSerial SerialBT;
BME280 sensor;
Adafruit_INA219 ina219;

float m_fltTemp;
float m_fltHumidity;
float m_fltPressure;
float m_fltVoltage;
float m_fltCurrent;
float m_fltPowermW;

void setup() {
  Serial.begin(115200);
  Serial.print("StartMyDevice");

  SerialBT.begin("TravelArduino");

  Wire.begin(21,22);

  //Debug
  
  sensor.settings.commInterface   = I2C_MODE; 
  sensor.settings.I2CAddress      = 0x76;
  sensor.settings.runMode         = 3; 
  sensor.settings.tStandby        = 0;
  sensor.settings.filter          = 0;
  sensor.settings.tempOverSample  = 1;
  sensor.settings.pressOverSample = 1;
  sensor.settings.humidOverSample = 1;
  
  //BME280
  sensor.beginI2C();
  
  // INA219 Init
  while (!Serial) {
      delay(1);
  }
  uint32_t currentFrequency;

  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
  while (1) { delay(10); }
  }
}

void loop() {

//BME280
  m_fltTemp = 0;
  m_fltHumidity = 0;
  m_fltPressure = 0;
  
  m_fltTemp = sensor.readTempC();
  m_fltHumidity = sensor.readFloatHumidity();
  m_fltPressure = sensor.readFloatPressure() / 100.0;

  // INA210
  float fltShuntVoltage;
  float fltBusVoltage;
  fltShuntVoltage = ina219.getShuntVoltage_mV();
  fltBusVoltage = ina219.getBusVoltage_V();
  m_fltVoltage = (fltBusVoltage + (fltShuntVoltage / 1000));
  m_fltPowermW = ina219.getPower_mW();

  String sendData = String(m_fltTemp) + "," + String(m_fltHumidity) + "," + String(m_fltPressure) + "," + String(m_fltVoltage) + "," + String(m_fltPowermW) + ";" ;
  Serial.println(sendData);
  SerialBT.println(sendData);

  delay(1500);
}

ESP32に配置するコードです。
各種アドレス、Bluetooth名は必要に応じて変更してください。

シリアル通信には/で分割したデータを送信しています。本当であればチェックサム機能を実装するべきなのですが、データの信頼性が問題になることは今回ないので、実装していません。

結果

LCDを8pinで動かしていたのが懐かしく感じるくらい、進歩しました。
マスターシリンダー上部に大きく鎮座していた、表示部&制御部は、表示部はスマートフォンに、制御部はシート下に収まるように進化しました。

LCDと違い、視野角が非常に広いスマートフォンはいつどの角度で見ても見やすく、電源も別途用意せずに済むのでいいことづくめです。

本当にやりたいことができてきたので、旅Arduinoは

完成

とします。

ここまで非常に長い記事を見ていただけた皆様、本当にありがとうございました。
皆様の役に立てたら幸いです。

その1-不満点を挙げよう- 
その2-不満点をまとめよう-

その3-電圧測定器を作る-
その4-温湿度計を作る-
その5-気圧計を作る-
その6-方位・高度計をGPSで-
その7-12Vバッテリーから電力供給
その8-Ver1作成-
その9-電圧計の誤差とその代替案-
その10-Ver2へアップデート-
その11-LCDをI2Cで制御しよう-
その12-LCDをI2C化-
その13-Ver3へアップデート-
その14-USB充電の仕様に関して-
その15-Arduino言語を用いながらBluetoothで通信できるESP32-
その16-旅Arduino Ver4 スマホアプリ化-

関連記事一覧

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP