M5stack grayでBLEを使う

M5stackには色々な機能が含まれているので、順次の機能確認でまずはBLE機能を使ってみます。

ソースはPlatformIOのライブラリでBuil-in中のESP32 BLE ArduinoのRevealから見えるBLE_scanから持ってきています。ライブラリーにM5stack追加とソースに

#include <m5stack.h> はM5stack使う時には必ず追加必要です。

#include <m5stack.h>    // this is needed to the original source code.

/*
   Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp
   Ported to Arduino ESP32 by Evandro Copercini
*/

#include <bledevice.h>
#include <bleutils.h>
#include <blescan.h>
#include <bleadvertiseddevice.h>

int scanTime = 5; //In seconds
BLEScan* pBLEScan;

class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice advertisedDevice) {
      Serial.printf("Advertised Device: %s \n", advertisedDevice.toString().c_str());
    }
};

void setup() {
  Serial.begin(115200);
  Serial.println("Scanning...");

  BLEDevice::init("");
  pBLEScan = BLEDevice::getScan(); //create new scan
  pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
  pBLEScan->setInterval(100);
  pBLEScan->setWindow(99);  // less or equal setInterval value
  M5.begin();       //Init M5Core.  
  M5.Power.begin(); //Init Power module.  
  M5.Lcd.fillScreen(BLACK); //Set the screen background color to black. 
  M5.Lcd.setTextColor(GREEN , BLACK); //Sets the foreground color and background color of the displayed text.  
  M5.Lcd.setTextSize(2);    //Set the font size.  
  M5.Lcd.setCursor(0, 70);
  M5.Lcd.printf("pow on");
}

void loop() {
  // put your main code here, to run repeatedly:
  BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
  Serial.print("Devices found: ");
  Serial.println(foundDevices.getCount());
  Serial.println("Scan done!");
  pBLEScan->clearResults();   // delete results fromBLEScan buffer to release memory
  delay(2000);
}
このソースは関数をポインタにして、onResult()はイベント待ちだろうからコールバック関数使ってます。コールバック関数使うために関数をポインタ化するんでしょうが。
シリアル出力を使っているので、platformio.iniで速度指定をしないと文字化けします。

monitor_speed = 115200

を追加して実行させると、メッセージを吐き出しますが以下はその一部です。

Devices foundが0というのは不思議ですが。

 

admin