さて、No.1でESP32 DEV Moduleの開発環境ができたのと、簡単な操作で慣れたところで、実際に今回は、温度と湿度センサーをつけてみましょう。
温湿度センサ
SHT31使用 高精度温湿度センサモジュールキット: 組立キット 秋月電子通商 電子部品
上記のページに取扱説明書と仕様書のリンクがあるので、まずは確認しましょう
温湿度センサとESP32 DEV Moduleをつなげます
ESP32 DEV Moduleと温湿度センサの接続は以下のようにしています
ESP32 | SHT31 |
3V3 | 端子1 |
IO21(SDA) | 端子2 |
IO22(SCL) | 端子3 |
– | 端子4 |
GND | 端子5 |
センサーから温度と湿度を取得しましょう
VS CodeかArduinoIDEを立ち上げて、新規ファイルを作成しましょう。
setup()で、センサーに接続しに行きます。
SHT31のI2Cアドレスは、取扱説明書にのっている通り
今回は、ADRはopenにしているので、0x45です。
Wireは、I2Cと通信するライブラリです。
Wire.begin(21,22);
> SDA(データ)が、21でSCL(転送用クロック)22
I2Cの端子として21ピンと22を使う宣言をしています。
#include <Wire.h> // Sensor address #define SHT31_ADDR 0x45 void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println("setup"); Wire.begin(21,22); // I2C }
測定コマンドを送ります。
コマンドコードは取扱説明書を確認。
取得できた温度測定値を取り出して、変換のための計算をして、シリアルモニタに出力します。変換のための計算式も取扱説明書にあります。
void loop() { byte command[2] = { 0x24, 0x00 }; byte data[7]; Wire.beginTransmission(SHT31_ADDR); Wire.write(command, sizeof(command)); Wire.endTransmission(); delay(300); int i = 0; Wire.requestFrom(SHT31_ADDR, 6); while (Wire.available() && i < 6) { data[i++] = Wire.read(); } data[i] = 0; float temp = -50.0 + (175.0 * (unsigned int)(data[0] * 256 + data[1]) / 65535.0); float humidity = (100.0 * (unsigned int)(data[3] * 256 + data[4])) / 65535.0; Serial.print(temp); Serial.print(" , "); Serial.println(humidity); delay(5000); }
これで、ESP32 DEV Moduleにアップロードしてみましょう
シリアルモニタに、温度と湿度が表示されました!
シリアルモニタは、Serial.begin(9600);としているので、9600bpsに設定してみてくださいね。
さて、次はhttp://Wifiに接続して、https通信をしてみましょう!