Arduino UNO R4 Minimaでセンサ・インターフェーシング ④ 温湿度センサSi7021の測定結果を7セグメントLEDに表示
センサの測定値は、シリアルモニタに表示できました。これを、見やすい形で、外部に知らせるために、4桁の7セグメントLED表示器を利用します。
AdafruitのStemma QT/Qwiicボードの中に、4桁の7セグメントLED表示器があります。コントローラはHT16K33です。白色をスイッチサイエンスから入手しました。
●AdafruitのStemma QT/Qwiic7セグメント4桁ディスプレイ (白色)のおもなスペック
- LEDディスプレイ 文字高:0.56インチ(約14 mm)
- コントローラ:HT16K33のスレーブ・アドレスはデフォルトが0x70、ボード上にある三つのジャンパの設定で0x70~0x77に設定できる
- 動作電圧 5Vが望ましいが3.3Vでも動作する
●接続
温湿度センサSi7021の空いているStemma QT/Qwiicコネクタに、Stemma QT/Qwiic 7セグメント4桁ディスプレイ (白色)を専用のケーブル(いろいろな長さが市販されている)でつなぎます。
電源5Vでi2cScanner.ino(前回のスケッチ)を動かします。3.3Vではどのデバイスも表示されません。
実際のスケッチは3.3Vで動かします
<スレーブ・アドレスの計算>
A2 | A1 | A0 | アドレス |
---|---|---|---|
- | - | - | 0x70 |
- | - | ショート | 0x71 |
- | ショート | - | 0x72 |
- | ショート | ショート | 0x73 |
ショート | - | - | 0x74 |
ショート | - | ショート | 0x75 |
ショート | ショート | - | 0x76 |
ショート | ショート | ショート | 0x77 |
●ライブラリを導入
表示器が使っているHT16K33コントローラを利用するには、二つのライブラリが必要です。
Adafruit LED Backpack を導入します。
次に、Adafruit GFXライブラリを導入します。途中、BUSなど、別途必要なものが表示されたら、全部インストールしておきます。
●サンプル・スケッチを動かす
ファイル->スケッチ例->Adafruit LED Backpackからsevenseg.inoを読み込みます。
setup{}を、シリアルモニタに表示が出なかったので、次のように修正します。
void setup() {
#ifndef __AVR_ATtiny85__
Serial.begin(9600);
while (!Serial) {
delay(10);
}
Serial.println("7 Segment Backpack Test");
#endif
matrix.begin(0x70);
}
デモ表示が始まります。
表示に必要な部分を残し、整理します。
// Written by Limor Fried/Ladyada for Adafruit Industries.
#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
Adafruit_7segment matrix = Adafruit_7segment();
void setup() {
Serial.begin(9600);
while (!Serial) {
delay(10);
}
Serial.println("7 Segment Backpack Test");
matrix.begin(0x70);
matrix.setBrightness(0x05); // default 0x0E
}
void loop() {
float temperature = 37.99;
matrix.print(temperature, DEC);
matrix.writeDisplay();
delay(2000);
float humidity = 89.00;
matrix.print(humidity, DEC);
matrix.writeDisplay();
delay(5000);
}
このスケッチでは、温度の37.99と湿度の89.00を交互に表示します。
輝度の調整をするmatrix.setBrightness(0x05);は少し暗め、0x1fだと明るめです。
●センサの値を 7セグメント4桁ディスプレイ 表示するスケッチ
温湿度センサSi7021の測定した温度と湿度を、上記のスケッチのloop{}のところで変更します。
// Written by Limor Fried/Ladyada for Adafruit Industries.
#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_Si7021.h"
Adafruit_7segment matrix = Adafruit_7segment();
Adafruit_Si7021 sensorSi7021 = Adafruit_Si7021();
void setup() {
Serial.begin(9600);
while (!Serial) {
delay(10);
}
Serial.println("\n Si7021 sensor + 7 Segment");
matrix.begin(0x70);
matrix.setBrightness(0x05); // default 0x0E
sensorSi7021.begin();
}
void loop() {
Serial.print("Temperature: ");
Serial.println(sensorSi7021.readTemperature(), 2);
Serial.print("\tHumidity: ");
Serial.println(sensorSi7021.readHumidity(), 2);
matrix.print(sensorSi7021.readTemperature(), DEC);
matrix.writeDisplay();
delay(2000);
matrix.print(sensorSi7021.readHumidity(), DEC);
matrix.writeDisplay();
delay(5000);
}
実行している様子です。