IoT開発(2)-ESP-WROOM-02で気温測定

2021年6月12日

どもです。
この記事は、IoT開発(1)-ESP-WROOM-02のセットアップからの続きです。

前回のエントリでは、ESP-WROOM-02にArduinoのプログラムを書き込んでL-チカする、という内容を書きました。
今回は、次のステップとして、「温度センサーで値を取得」に挑戦します。

1.使用するセンサー

今回使用するセンサーは、「MDK001」です。
MDK001は、マルツさんでコチラから購入可能です。
使用やサンプルコードは、コチラです。

※今回のエントリで使用するコードは、このコードを参考にしています。

2.配線

ESP-WROOM-02とMDK001の配線は、下記の通りに行います。

ESP-WROOM-02とMDK001の配線
ESP-WROOM-02 MDK001
3V3 VDD
IO14 SCL
IO12 SDO
IO13 SDI
GND CS
GND GND

MDK001はSPIで通信/値を取得しますので、それに合わせた配線になっています。
MDK001のCSを、GNDに直に接続しています。
これは、通信対象が1台であり選択の必要が無く、またコードの量を(少しだけですが)削減するためです。

上記以外の配線として、デバッグ用にESP-WROOM-02のGPIO4にLEDを接続しています。

電源は、パソコンからUSB/AE-UM232R経由で取っています。

3.プログラム

今回のコードは、下記の通りです。

#include <SPI.h>

extern "C" {
#include "user_interface.h"
}

#define _DEBUG 1
#if _DEBUG
#define DBG(...) { Serial.print(__VA_ARGS__); }
#define DBGLED(...) { digitalWrite(__VA_ARGS__); }
#else
#define DBG(...)
#define DBGLED(...)
#endif /* _DBG */

#define LED   4
#define SCK   14
#define MOSI  13
#define MISO  12
#define CS_E  15

void setup()
{
#ifdef _DEBUG
	Serial.begin(115200);
	delay(20);
#endif
	DBG("Start");
	pinMode(LED, OUTPUT);
	pinMode(CS_E, OUTPUT);
	digitalWrite(CS_E, HIGH);
	
	//Initialize SPI configuration.
	SPI.begin();
	SPI.setDataMode(SPI_MODE3);
	SPI.setBitOrder(MSBFIRST);
	SPI.setClockDivider(SPI_CLOCK_DIV8);
	
	digitalWrite(CS_E, LOW);
	SPI.transfer(0x54);
	
	delay(240);
}

void loop()
{
	DBGLED(LED, 1);
	uint16_t readVal = 0;
	float temp = 0;

	readVal = (uint16_t)SPI.transfer(0) << 8; //Upper 8bit.
	readVal = readVal | SPI.transfer(0);
	DBG("readVal = ");
	DBG(readVal, HEX);
	DBG("\r\n");

	readVal = readVal >> 3;

	if (0x1000 & readVal) {
	readVal = (uint32_t)readVal - 8192;
	}
	temp = ((float)readVal) / 16.0;

	DBG("temperature = ");
	DBG(temp);
	DBG("\r\n");
	DBGLED(LED, 0);
	
	delay(3000);
}

本エントリの最初にも書きましたが、このプログラムはマルツさんのサンプルコードをほとんどのそのまま使用しています。
詳細な内容は、マルツさんのサイトを参照して下さい。

4.実行

実行すると、3秒ごとに測定した結果が表示されます。
その結果が以下!

LEDが点灯している間にPCの表示が変更され、その後LEDが消灯する、という様子が分かると思います。

5.まとめ

今回は、ESP-WROOM-02にMDK001を接続して、気温を取得/表示させました。
これでESP-WROOM-02でセンサー値を取得することができるようになりました。
次は、いよいよネットワークに接続して、センサーの値を送信します。

ではっ!

続きます

この記事は、以下の記事に続きます。
こちらの記事も併せて読んでいただけると、幸いです。
IoT開発(3)-ESP-WROOM-02でデータを送信
IoT開発(4)-ESP-WROOM-02を電池で駆動
IoT開発(5)-ESP-WROOM-02をDeepSleepで長時間駆動させる