TOPに戻る

リモート電圧計を作る ④ BLEペリフェラル 使用するのはAE-ESP32-WROOM-32E-MINI<その2>

 前回、ESP32ボードに18ビットA-Dコンバータをつないで動作させました。第2回でBLEのプログラムを作りましたが、1時間ほどで暴走しました。そのスケッチを新しいマイコン・ボードAE-ESP32-WROOM-32E-MINIで動かします。

スケッチ

 測定したA-Dコンバータの値は、実数を文字列に直して送ります。ESP32のBLEライブラリでは、送るCHARACTERISTICは代入する実数や文字列で自動で型が決まります。実数で送ると、受け取るセントラル側ではIEEE754形式のフォーマットを実数に変更する手間がかかります。


#include <Wire.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <string>

#define MCP3421_address 0x68
#define configData 0b00011100  // RDY continuas 18bit PGA=x1

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define Voltage_CHARACTERISTIC_UUID     "beb5483e-36e1-4688-b7f5-ea07361b26a8"

BLECharacteristic *pCharacteristic;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  Serial.println("\nstart");
  Wire.setClock(100000);
  Wire.beginTransmission(MCP3421_address); 
      Wire.write(configData);
  Wire.endTransmission();

  BLEDevice::init("MCP3421_BLE");
  BLEServer *pServer = BLEDevice::createServer();
  BLEService *pService = pServer->createService(SERVICE_UUID);

  pCharacteristic = pService->createCharacteristic(
                                         BLEUUID(Voltage_CHARACTERISTIC_UUID),
                                         BLECharacteristic::PROPERTY_READ  |
                                         BLECharacteristic::PROPERTY_NOTIFY 
                                       );
  
  pService->start();
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->start();
}

int32_t read_Voltsdata() {
  Wire.requestFrom(MCP3421_address, 3);
    //wait for response
  while(Wire.available() == 0);
    uint32_t T = Wire.read();
    T = (T & 0b00000011)  << 8 | Wire.read() ;
    T = T << 8 | Wire.read() ;
    return ( -(T & 0b100000000000000000) | (T & 0b011111111111111111) );
}

void loop() {
  float Volts = read_Voltsdata() * 15.625 / 1000000.0;
  String s = String(Volts,6);
  char  sVolts[16];
  s.toCharArray(sVolts,s.length()); 

  Serial.println(&sVolts[0]);

  pCharacteristic->setValue(&sVolts[0]);
  pCharacteristic->notify();
  delay(2000);
}

 ->アイコンをクリックしてコンパイルをします。コンパイルが終了します。

(後日、桁を増やすためにString s = String(Volts,6);の6を7に変更しました)

 ここで、BOOTボタンを押したまま、ENボタンを押し、両方のボタンを離します。2秒ほどすると、マイコンへの書き込みが始まります。

 下記のように書き込みが終了した時点で、ENボタンを押すとリセットがかかり、プログラムが動き出します。

 シリアルモニタは115200bpsにしておきます。

 セントラルになるRSL10  Bluetooth Low Enaergy Explorer(オンセミ)でconnectします。

  文字列で、測定データが送られてきています。

連載 リモート電圧計を作る

(1) BLEペリフェラル 使用するのはM5STAMP C3<その1>

(2) BLEペリフェラル 使用するのはM5STAMP C3<その2>

(3) BLEペリフェラル 使用するのはAE-ESP32-WROOM-32E-MINI<その1>

(4) BLEペリフェラル 使用するのはAE-ESP32-WROOM-32E-MINI<その2>

(5) BLEセントラルをラズパイで<その1>BLEの接続

(6) BLEセントラルをラズパイで<その2>Webへ出力