今から始める電子工作 ⑯ I2Cバス その1-3 温湿度センサSHT45 + OLEDグラフィック・ボード
前前回、AdafruitのSHT45ボード、SparkFanのOLEDグラフィック・ボードをArduino UNO R4 WiFi マイコン・ボードにつなぎました。どちらのデバイスも、そのメーカのライブラリを利用しました。
- AdafruitのSHT45ボード AdafruitのAdafruit SHT4x Library
- SparkFanのOLEDグラフィック・ボード SparkFanのSparkFun Qwiic OLED Adruino Library
前回は、グラフィック・ボードのライブラリを変更しました。
- AdafruitのSHT45ボード AdafruitのAdafruit SHT4x Library
- SparkFanのOLEDグラフィック・ボード AdafruitのOLEDライブラリ、グラフィック・ライブラリ類
今回は、SHT45用にSensirionの純正ライブラリを利用します。ボードとライブラリの関係は次のようになります。
- AdafruitのSHT45ボード Sensirion I2C SHT4xライブラリ
- SparkFanのOLEDグラフィック・ボード AdafruitのOLEDライブラリ、グラフィック・ライブラリ類
●環境
- Arduino IDE;2.3.4
- Windows11;23H2
- Arduino UNO R4 WiFi
●接続
前回、前々回と同じです。
●温湿度センサSHT45用ライブラリ
ArduinoIDEのライブラリの検索欄に「Sensirion SHT4x」と入れて出てきたSensirion I2C SHT4xライブラリをインストールします。
途中、追加のライブラリをというパネルが出るので、全てをインストールを選びます。
●サンプルのスケッチ
スケッチ例 -> Sensirion I2C SHT4x -> exampleUsageを選びます。
QWIICコネクタを使うので、60と61行の2か所修正します。
Wire1.begin(); sensor.begin(Wire1, SHT40_I2C_ADDR_44);
実行します。
●測定値をOLEDグラフィック・ディスプレイに表示
前回の、AdafruitのOLEDライブラリ、グラフィック・ライブラリ類の記述を追加します。
/* * Generator: sensirion-driver-generator 0.40.0 * Product: sht4x * Model-Version: 2.1.1 * Copyright (c) 2024, Sensirion AG */ #include <Arduino.h>
#include <SensirionI2cSht4x.h>
#include <Wire.h>
#include <Adafruit_SH110X.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h> // macro definitions // make sure that we use the proper definition of NO_ERROR #ifdef NO_ERROR #undef NO_ERROR #endif #define NO_ERROR 0 SensirionI2cSht4x sensor; Adafruit_SSD1306 display(128, 64, &Wire1); static char errorMessage[64]; static int16_t error; void setup() { Serial.begin(115200); delay(1000); Wire1.begin(); sensor.begin(Wire1, SHT40_I2C_ADDR_44); sensor.softReset(); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } Serial.println("OLED begun"); display.display(); delay(1000); // Clear the buffer. display.clearDisplay(); display.display(); display.setRotation(0); display.setFont(&FreeSans9pt7b); display.setTextColor(SH110X_WHITE); } void loop() { float aTemperature = 0.0; float aHumidity = 0.0; delay(20); error = sensor.measureLowestPrecision(aTemperature, aHumidity); if (error != NO_ERROR) { Serial.print("Error trying to execute measureLowestPrecision(): "); errorToString(error, errorMessage, sizeof errorMessage); Serial.println(errorMessage); return; } Serial.print("aTemperature: "); Serial.print(aTemperature); Serial.print("\t"); Serial.print("aHumidity: "); Serial.print(aHumidity); Serial.println(); display.clearDisplay(); display.setCursor(0, 20); display.println("SHT45 Sensor"); display.setCursor(0, 40); display.print("Temp: "); display.print(aTemperature,1); display.println(" 'C"); display.print("Hum: "); display.print(aHumidity,1); display.println(" %"); display.display(); yield(); delay(1000); }
実行します。