リモート電圧計を作る ④ 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します。
文字列で、測定データが送られてきています。