2019年12月31日火曜日

Bluetooth経由でmicro:bitの温度を取得してM5Stackに表示する

Bluetooth経由でmicro:bitの温度を取得してM5Stackに表示するには、以下の手順を実行します。

1. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じで一通りのbluetoothサービスを最初に追加します
また、ペアリングをしなくても利用できるようにします
2. microbitの温度を取得するプログラム
Arduino IDEから以下のプログラムをM5Stackに書き込みます。microbitのADDRESSは適宜書き換えてください。

#include <M5Stack.h>
#include "BLEDevice.h"

// Address of microbit
#define MYSERVER_ADDRESS "XX:XX:XX:XX:XX:XX"

// Temperature Service
static BLEUUID svcUUID("e95d6100-251d-470a-a062-fa1922dfa9a8");

// Temperature Service - Characteristics
static BLEUUID chUUID("e95d9250-251d-470a-a062-fa1922dfa9a8");

static BLEAddress *pServerAddress;
static BLERemoteCharacteristic* pRemoteCharacteristic;
static BLEClient*  pClient;

void setup()
{
  M5.begin(true, false, true);
  M5.Power.begin();

  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextColor(GREEN);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println(F("Starting..."));

  // init the device.
  BLEDevice::init("");
  pServerAddress = new BLEAddress(MYSERVER_ADDRESS);

  // connect to microbit
  BLEClient* pClient = BLEDevice::createClient();
  pClient->connect(*pServerAddress, BLE_ADDR_TYPE_RANDOM);
  if( pClient->isConnected() == false ){
    M5.Lcd.println("failed to connect the server...");
    delay(2000);
    return;
  }

  // get Service
  BLERemoteService* pRemoteService = pClient->getService(svcUUID);
  if( pRemoteService == nullptr ){
    M5.Lcd.println(F("failed to get service UUID..."));
    delay(2000);
    pClient->disconnect();
    return;
  }

  // get Characteristic
  pRemoteCharacteristic = pRemoteService->getCharacteristic(chUUID);
  if( pRemoteCharacteristic == nullptr ){
    M5.Lcd.println(F("failed to get characteristic UUID..."));
    pClient->disconnect();
    delay(2000);
    return;
  }
}

void loop()
{
  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextSize(4);
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setCursor(80, 100);

  M5.update();
  if( pRemoteCharacteristic->canRead()) {
    // read temperature
    uint8_t value = pRemoteCharacteristic->readUInt8();
      
    M5.Lcd.print("temp:");
    M5.Lcd.println(value);
  }
  delay(2000);
}

3. microbitの温度を取得するプログラムの実行結果

〇参考情報
Bluetooth Developer Studio Level 3 Profile Report


0 件のコメント:

コメントを投稿