M5StackGrayで温度センサの動作テスト
2021.5.27 Coskx Lab
1 はじめに
M5Stack Grayに温度センサATD7410(Analog Devices)を接続して温度を測定します。
ATD7410は,温度センサで温度を測定し,M5StackにはI2Cでデータを転送します。
ATD7410を基板上に取り付けた製品は多数ありますが,ここでは秋月電子で販売されているAE-ATD7410を使用します。
2 使用環境
- Windows 10 64-bit
- Arduino IDE 1.8.13
- M5Stack Gray ESP32-D0WDQ6-V3 (revision 3)
MPU6886 + BMM150 16MB 40MHz
- AE-ATD7410
3 接続
マニュアルのピンアサインを見てそのままつなげるだけです。
注意 AE-ATD7410説明書には「2.7~5.5V 入力」と書いてありますが,これは3.3Vのシステムでも5Vのシステムでも使えます(2.7~5.5Vのシステム)ということを表しています。
AE-ATD7410の電源に3.3Vを与えると3.3VでI2C通信し,5Vを与えると5VでI2C通信します。
M5Stackで使うとき,M5Stackの信号レベルは3.3Vであるため,3.3Vで通信したいのでAE-ATD7410の電源には3.3Vを与えます。
信号レベルが5Vのマイコンにつなげるときは,5Vで通信したいので5Vを与えます。
参考 M5Stackの裏側に書いてあるピンの名称
注意 SDA,SCLはI2C用に用途の定まったピンなので,他のピンを利用することはできません。
実際の様子です。
4 テストプログラム
http://independence-sys.net/main/?p=2912
を参考にさせていただきました。
単純なI2C通信です。AE-ATD7410のアドレスに2バイト送信要求して,2バイトを読み込みます。
(2バイトの温度データは上位バイト下位バイトの順に受信します。)
データは2バイト中の左詰め上位13bitが有効で2の補数表現です。受け取った値を16で割ると温度が摂氏で受け取れます。
温度センサ動作テスト用プログラム本体
//TemperatureSensor_ATD7410Test.ino//
#include <M5Stack.h>
#include <Wire.h>
const int ADT7410I2CAddress = 0x48;
const int SDApin = 21; //SDAピン番号
const int SCLpin = 22; //SCLピン番号
void setup(void) {
M5.begin();
M5.Power.begin();
Wire.begin(SDApin,SCLpin); //I2C通信の初期化,SDA,SCLのピンを設定
M5.Lcd.setTextSize(2);
M5.Lcd.print("Temp Sensor Test");
}
double getTemperature(){
int16_t temperature16;
double temperature;
Wire.requestFrom(ADT7410I2CAddress, 2); //2バイト要求
temperature16 = (int16_t)Wire.read() << 8; // 上位バイト読み出し
temperature16 |= (int16_t)Wire.read(); // 下位バイト読み出し
temperature16 >>=
3;
// 算術シフトで13bit化
temperature = (double)temperature16 / 16.0; // 温度換算(摂氏)
return temperature;
}
void loop(void) {
M5.update();
double temperature;
temperature = getTemperature();
M5.Lcd.setCursor(0, 20);
M5.Lcd.printf("Temperature = %.2f\n",temperature);
delay(1000); //[msec]
}
5 まとめ
M5StackGrayにて温度測定が測定ができました。
I2Cで2バイトのデータ転送だけなので,通信部分は簡単でした。