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からの読み込みを行わない場合、接続する必要はありません。
表示スケッチの作成
- 画面左側のライブラリマネージャで「Adafruit_ILI9341」を検索して、「Adafruit_ILI9341」をインストールします。
- 表示スケッチは次に示すスケッチ例「graphicstest」を参照して作成します。
- 作成した表示スケッチ「SpresenselteILI9341.ino」を次に示します。
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」との接続が誤っていそう。情報が見つからない。