Seeed Studio XIAO ESP32C3でBLE ③ I2CでセンサBMP280をつなぐ

 マイコン・ボードXIAO ESP32C3のI2Cインターフェースにセンサをつなぎます。I/O電圧は3.3Vと思われます。

I2C、SPI、UARTのピン配置

気圧センサBMP280

 気圧と温度が得られるBMP280をI2Cインターフェースでつなぎます。Adafruitの4ピン・コネクタ(STEMMA QT)をはんだ付けしました。

 ライブラリを管理から、BMP280のライブラリをインストールします。Adafruitのセンサを初めて使うときは、もろもろのライブラリのインストールをするかと聞かれるので、yesと答えます。

 サンプルのスケッチ例からをbmp280testをインストールします。

 コンパイルして実行します。

 bmp280testから必要な部分を残します。


//  Written by Limor Fried & Kevin Townsend for Adafruit Industries.

#include <Wire.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp; // I2C

void setup() {
  Serial.begin(9600);
  while ( !Serial ) delay(100);   // wait for native usb
  bmp.begin();
  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}

void loop() {
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");
    Serial.print(bmp.readPressure()/100);
    Serial.println(" hPa");

    Serial.println();
    delay(2000);
}

BLEペリフェラル

 BMP280の測定値をBLEで送信します。


/*
    Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleServer.cpp
    Ported to Arduino ESP32 by Evandro Copercini
    updates by chegewara
// Written by Limor Fried & Kevin Townsend for Adafruit Industries.
*/
 
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h> float temp = 0; float press = 0; #define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" #define CHARACTERISTIC_T_UUID "beb5483d-36e1-4688-b7f5-ea07361b26a8" #define CHARACTERISTIC_P_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" BLECharacteristic *tCharacteristic; BLECharacteristic *pCharacteristic; Adafruit_BMP280 bmp; // I2C void setup() { Serial.begin(115200); while(!Serial); Serial.println("Starting BMP280 work!"); bmp.begin(); bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */ Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */ Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */ Adafruit_BMP280::FILTER_X16, /* Filtering. */ Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */ BLEDevice::init("ESP32-BMP280 peripheral"); BLEServer *pServer = BLEDevice::createServer(); BLEService *pService = pServer->createService(SERVICE_UUID); tCharacteristic = pService->createCharacteristic( CHARACTERISTIC_T_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY ); pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_P_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY ); pService->start(); BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); pAdvertising->setScanResponse(true); BLEDevice::startAdvertising(); } void loop() { readBMP280(); tCharacteristic->setValue(temp); tCharacteristic->notify(); pCharacteristic->setValue(press); pCharacteristic->notify(); delay(2000); } void readBMP280() { Serial.print("Temperature = "); temp = bmp.readTemperature(); Serial.print(temp); Serial.println(" *C"); Serial.print("Pressure = "); press = bmp.readPressure() / 100.0; Serial.print(press); Serial.println(" hPa"); Serial.println(); }

 オンセミのBLEであるRSL10 Bluetooth Low Enaergy Exploerを使って情報を見ます。

 connectして、Nothificationをチェックすると、実数形式でデータを送ってきます。このサイトで、データの変換をしました。

前へ

Seeed Studio XIAO ESP32C3でBLE ② BLEのサンプルを動かす

次へ

Arduino UNOで制御する正弦波発生器AD9834