Spresenseとガスセンサ BME680の接続

Addon ボードなのでSpresense本体に取り付けます。SPRESENSEのカメラコネクタに近い側に、この基板のロゴ「SPRESENSE BME680」とSPRESENSE基板上のSONYロゴの向きを揃えます。

LTE拡張ボードへの接続については、ガスセンサ BME680は認識しますが、センサデータ入力の最初はエラーとなり、以降はセンサデータの値の変化がなく、固定値で入力します。

次に、 LTE拡張ボードに接続しようとした資料を示します。

ガスセンサ BME680の信号を次のようにSpresenseの LTE拡張ボードに接続します。

Spresenseの LTE拡張ボードとガスセンサ BME680の接続の接続
ガスセンサ BME680 SpresenseのLTE拡張ボード
GND GND
3.3v 3.3V
SCL PWM2
SDA PWM3

ガスセンサ BME680 Addon ボードのPin配置を次に示します。

SpresenseのLTE拡張ボードに接続されているガスセンサ BME680のI2Cアドレスをスキャンするプログラム「i2c_scanner.ino」を実行すると、次にように、I2Cアドレス「0x77」が表示されます。なお「i2c_scanner.ino」は、「Wire1.begin()」等の「Wire」を「Wire1」に変更する必要があります。

考えられる原因 ー基板上のR3、R4のパターンはI2Cのプルアップ用の抵抗のためのものです。SPRESENSE基板上でプルアップされているため未実装ですが、他の基板で使う場合は適宜1005サイズの抵抗のはんだ付けが必要かも…。

ガスセンサ BME680スケッチの作成

画面左側のライブラリマネージャで「Adafruit_BME680」を検索して、ガスセンサ BME680スケッチのライブラリ「Adafruit_BME680」をインストールします。

次の手順でスケッチ例「bme682test」を取得します。

取得したスケッチ例「bme682test」を次に示します。spi関連はコメントにしました。

bme682test.ino


//#include <Wire.h>
//#include <SPI.h>
//#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

/*
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme(&Wire); // I2C
//Adafruit_BME680 bme(&Wire1); // example of I2C on another bus
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO,  BME_SCK);

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println(F("BME680 test"));

  if (!bme.begin()) {
    Serial.println("Could not find a valid BME680 sensor, check wiring!");
    while (1);
  }

  // Set up oversampling and filter initialization
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150); // 320*C for 150 ms
}

void loop() {
  Serial.println(" 1");
  if (! bme.performReading()) {
    Serial.println("Failed to perform reading :(");
    return;
  }
  Serial.println(" 2");
  Serial.print("Temperature = ");
  Serial.print(bme.temperature);
  Serial.println(" *C");

  Serial.print("Pressure = ");
  Serial.print(bme.pressure / 100.0);
  Serial.println(" hPa");

  Serial.print("Humidity = ");
  Serial.print(bme.humidity);
  Serial.println(" %");

  Serial.print("Gas = ");
  Serial.print(bme.gas_resistance / 1000.0);
  Serial.println(" KOhms");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");

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

ガスセンサ BME680スケッチについては、「新しいセンサクライアントを作ってみる」に従ってスケッチを作成するように説明されていますが、指定されたライブラリには ガスセンサ BME680スケッチ例はありせんでした。

ガスセンサ BME680スケッチの実行

SpresenseとTFT液晶の接続

Spresense LTE拡張ボードとILI9341搭載2.8インチSPI制御タッチパネル付TFT液晶 MSP2807を次のように接続します。Spresense LTE拡張ボードのジャンパーピン「CN2」を3.3Vに接続します。3.3Vにレベルシフトされます。

LTE拡張ボード TFT液晶
3.3V LED
SPI3_SCK SCK
SPI3_MISO SDO(MISO)
SPI3_MOSI SDI(MOSI)
SPI3_CS0 CS
PWM3(D03) RESET
PWM2(D09) DC
3.3V VCC
GND GND

SDOは9ピンで、LED信号の次になりますが、TFT液晶 MSP2807からの読み込みを行わない場合、接続する必要はありません。

表示スケッチの作成

  1. 画面左側のライブラリマネージャで「Adafruit_ILI9341」を検索して、「Adafruit_ILI9341」をインストールします。
  2. 表示スケッチは次に示すスケッチ例「graphicstest」を参照して作成します。
  3. 作成した表示スケッチ「SpresenselteILI9341.ino」を次に示します。
  4. SpresenselteILI9341.ino

    #include "SPI.h"
    #include "Adafruit_ILI9341.h"
    
    #define TFT_CS 32
    #define TFT_RST 3
    #define TFT_DC 9
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
    
    void setup() {
      Serial.begin(115200);
      Serial.println("ILI9341 text start!");
    
      tft.begin();
      tft.setRotation(3);
      testText();
    }
    
    void loop(void) {
    }
    
    unsigned long testText() {
      tft.fillScreen(ILI9341_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9341_GREEN);
      tft.setTextSize(5);
      tft.println("Groop");
      tft.setTextSize(2);
      tft.println("I implore thee,");
      tft.setTextSize(1);
      tft.println("my foonting turlingdromes.");
      tft.println("And hooptiously drangle me");
      tft.println("with crinkly bindlewurdles,");
      tft.println("Or I will rend thee");
      tft.println("in the gobberwarts");
      tft.println("with my blurglecruncheon,");
      tft.println("see if I don't!");
      return micros() - start;
    }
    
    

表示スケッチの実行

作成した表示スケッチを実行しても、データが表示されませんでした。原因不明
→「Adafruit_ILI9341」との接続が誤っていそう。情報が見つからない。