M5STACK(13) 時計に温度表示
時計に温度府表示を追加してみました。
配線
温度を表示したときの配線と同じです。
ADT7410 | M5STACK |
---|---|
VDD | G |
SCL | 22 |
SDA | 21 |
GND | 5V |
スケッチ
#include <M5Stack.h> #include <WiFi.h> #include <Wire.h> #include "time.h" // Wi-FiのSSID char *ssid = "elecom2g-b7052c"; // Wi-Fiのパスワード char *password = "3214988521041"; #define JST 3600* 9 int ADT7410_ADDR = 0x48; // ADT7410温度センサのアドレス uint16_t uiVal; float fVal; int iVal; void setup_wifi(){ Serial.println("Connecting to "); Serial.print(ssid); // WiFi接続性改善のため、いったん切断 WiFi.disconnect( true, true ); //WiFi OFF, eraseAP=true delay(500); // WiFi開始 WiFi.begin(ssid, password); // Wi-Fi接続待ち while (WiFi.status() != WL_CONNECTED){ delay(500); M5.Lcd.print("."); } // WiFi接続成功メッセージの表示 M5.Lcd.setCursor(0, 10); M5.Lcd.setTextSize(2); M5.Lcd.println("WiFi Connected."); // M5StackのIPアドレスを表示 M5.Lcd.print("IP address: "); M5.Lcd.println(WiFi.localIP()); } void printLocalTime(){ struct tm timeinfo; if(!getLocalTime(&timeinfo)){ M5.Lcd.println("Failed to obtain time"); return; } // テキストサイズ指定 M5.Lcd.setTextSize(4); // カーソル位置を設定 M5.Lcd.setCursor(40,80); M5.Lcd.printf("%04d-%02d-%02d ", timeinfo.tm_year+1900, timeinfo.tm_mon+1, timeinfo.tm_mday); // テキストサイズ指定 M5.Lcd.setTextSize(5); // カーソル位置を設定 M5.Lcd.setCursor(40,120); M5.Lcd.printf("%02d:%02d:%02d",timeinfo.tm_hour,timeinfo.tm_min,timeinfo.tm_sec); } void setup(){ // M5Stack objectの初期化 M5.begin(); // Wi-Fi処理の開始 setup_wifi(); configTime(9 * 3600L, 0, "ntp.nict.jp", "time.google.com", "ntp.jst.mfeed.ad.jp");//NTPの設定 //configTime(JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); printLocalTime(); WiFi.disconnect(true); WiFi.mode(WIFI_OFF); // 内部プルアップ抵抗有効化 pinMode(21, INPUT_PULLUP); pinMode(22, INPUT_PULLUP); //Serial.begin(9600); // 通信速度を9600bpsに設定 Wire.begin(); // I2Cバスにマスタとして接続 } void loop(){ Wire.requestFrom(ADT7410_ADDR, 2); // ADT7410に2byteのデータを要求 uiVal = (uint16_t)Wire.read() << 8; // 1byte受信し、1byte左シフト uiVal |= Wire.read(); // 1byte受信し、前回値に加算 uiVal >>= 3; // 3bit右シフト if(uiVal & 0x1000){ // bit 12が1のとき iVal = uiVal-0x2000; // 負の温度換算 } else{ iVal = uiVal; // 正の温度換算 } fVal = (float)iVal / 16.0; //Serial.println(fVal,4); M5.Lcd.setTextSize(3); M5.Lcd.setCursor(10, 180); M5.Lcd.print("Temp:"); M5.Lcd.print(fVal,1); M5.Lcd.print(" Celsius"); M5.Lcd.setTextSize(3); printLocalTime(); delay(1000); }