Windows PC編
センサーはSHT41に変えます。秋月だと、
これですね。前記事のAE-ADT7410がI2C接続の温度センサーだったのですが、こちらは温湿度センサーモジュールですね。Windows PCで試してみましょう。スケッチは、
#include <Wire.h>
#include "SensirionI2cSht4x.h"
SensirionI2cSht4x sht4x;
void setup() {
Serial.begin(115200);
Wire.begin();
sht4x.begin(Wire);
uint16_t error;
char errorMessage[256];
error = sht4x.serialNumber();
if (error) {
Serial.print("Error trying to execute serialNumber(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("Serial number: ");
Serial.println(sht4x.getSerialNumber());
}
}
void loop() {
uint16_t error;
float temperature, humidity;
error = sht4x.measureHighPrecision(temperature, humidity);
if (error) {
Serial.print("Error trying to execute measureHighPrecision(): ");
char errorMessage[256];
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %RH");
}
delay(1000);
}
出力例は、
RX: Adafruit SHT4x test
Found SHT4x sensor
Serial number 0xE3F1B3A
High precision
No heater
Temperature: 30.96 degrees C
Humidity: 59.42% rH
Read duration (ms): 11
RX: Temperature: 30.95 degrees C
Humidity: 59.36% rH
Read duration (ms): 10
RX: Temperature: 30.96 degrees C
Humidity: 59.46% rH
Read duration (ms): 12
RX: Temperature: 30.94 degrees C
Humidity: 59.36% rH
Read duration (ms): 11
このように、温度、湿度、Read durationの各値が読み取れます。この計測をしていたときには、

このようなread outだったので、温度が1°C程度、湿度は8%程ズレていますが、詳細に検証しないと結論は出せませんね。ADT7410とこのSHT41でも精度は違うはずです。手動というか目視で計測値の比較をするのは面倒至極なので、上の画面から温度湿度さらには時刻を自動的に認識記録するようなプログラムを探しています。なければ作るのか?(笑)そのうちに….。
センサーの出力は、rs232c経由でインターセプトしてプログラムから読み取りたいので、このサイトでは定番のC++ Builder CEでアプリケーションを書きます。以前にRS232Cの書き込みのルーチンを使いましたけど、今回は書き込みではなく読み出しばっかりですね。面倒なので、今回はCodex君に相談しました。限定的な状況だと結構完動するコードを提示してきます。ただし細部は今一ですが….。こちらで手を入れる必要があります。コードの完成度は90%程度でしょうか?あらかじめTeraterm等でCOMポートの番号を調べておく必要はあります。実行例は、

何故かボタンのキャプションが二つとも文字化けしています。
Uni1.dfmの該当部分は、
object ButtonOpen: TButton
Left = 304
Top = 34
Width = 96
Height = 25
Caption = '開始'
TabOrder = 2
OnClick = ButtonOpenClick
end
object ButtonClose: TButton
Left = 416
Top = 34
Width = 96
Height = 25
Caption = '停止'
TabOrder = 3
OnClick = ButtonCloseClick
end
なので、文字化けしていません。毎度のことなのだと、ボタンが沢山あるときにうんざりしますね。って、自分で作れって?(笑)
シリアルポートの受信データが取れていますから、文字列をscanして結果は得られますね。ボーレートが選べるのはgoodですね。

コメント