概要
温湿度センサー(HDC1000)をGR-COTTONに接続して温湿度を測ってみます。
準備
GR-COTTON、USBケーブル(マイクロBタイプ)、HDC1000モジュールの3つを準備します。
GR-COTTONにはピンソケット、HDC1000モジュールにはピンヘッダーを取り付ける必要があります。
HDC1000の購入についてはこちら(秋月電子通商Web)
ピンソケットの購入についてはこちら(秋月電子通商Web)
下図のようにHDC1000モジュールを、GR-COTTONに接続します。
GR-COTTONの裏面にある白いジャンパーが3V3、USB側にします。BATT側にある場合は引き抜いて、USB側に差し込んでください。
温湿度をシリアルモニターに表示する。
1秒毎に温湿度センサーから読み込んだ値をシリアルモニターに表示するサンプルです。
#include <arduino.h>
#include <Wire.h>
#define SHT31_ADDRESS 0x40
#define SHT31_RDY_PIN 2
#define SHT31_TEMPERATURE_POINTER 0x00
#define SHT31_HUMIDITY_POINTER 0x01
#define SHT31_CONFIGURATION_POINTER 0x02
#define SHT31_SERIAL_ID1_POINTER 0xfb
#define SHT31_SERIAL_ID2_POINTER 0xfc
#define SHT31_SERIAL_ID3_POINTER 0xfd
#define SHT31_MANUFACTURER_ID_POINTER 0xfe
#define SHT31_CONFIGURE_MSB 0x10 /* Get both temperature and humidity */
#define SHT31_CONFIGURE_LSB 0x00 /* 14 bit resolution */
void getTemperatureAndHumidity(float *temperature, float *humidity) {
unsigned int tData, hData;
Wire.beginTransmission(SHT31_ADDRESS);
Wire.write(SHT31_TEMPERATURE_POINTER);
Wire.endTransmission();
while (digitalRead(SHT31_RDY_PIN) == HIGH);
Wire.requestFrom(SHT31_ADDRESS, 4);
while (Wire.available() < 4);
tData = Wire.read() << 8;
tData |= Wire.read();
hData = Wire.read() << 8;
hData |= Wire.read();
*temperature = tData / 65536.0 * 165.0 - 40.0;
*humidity = hData / 65536.0 * 100.0;
}
//*********************************************************
void setup()
{
setPowerManagementMode(PM_STOP_MODE); // use stop delay
//Initialize Serial and I2C communications
Serial.begin(9600);
Wire.begin();
pinMode(SHT31_RDY_PIN, INPUT);
//Put the SHT31 IC into the correct operating mode
Wire.beginTransmission(SHT31_ADDRESS);
Wire.write(SHT31_CONFIGURATION_POINTER);
Wire.write(SHT31_CONFIGURE_MSB);
Wire.write(SHT31_CONFIGURE_LSB);
Wire.endTransmission();
}
//------------------------------------------------------
void loop()
{
float temperature, humidity;
getTemperatureAndHumidity(&temperature, &humidity);
Serial.print("Temperature = ");
Serial.print(temperature);
Serial.print(" degree, Humidity = ");
Serial.print(humidity);
Serial.println("%");
Serial.flush();
delay(1000);
}
温湿度をPicalico Reader用に表示する。
GR-COTTONのタッチセンサーに触れるごとに、温度と湿度を可視光通信で表示します。
スマートフォンアプリのPicalico Readerで可視光通信を読み取ることができます。
#include <arduino.h>
#include <Wire.h>
#include <PicalicoClass.h>
Picalico pica(LOW); // set LED to active high
#define SHT31_ADDRESS 0x40
#define SHT31_RDY_PIN 2
#define SHT31_TEMPERATURE_POINTER 0x00
#define SHT31_HUMIDITY_POINTER 0x01
#define SHT31_CONFIGURATION_POINTER 0x02
#define SHT31_SERIAL_ID1_POINTER 0xfb
#define SHT31_SERIAL_ID2_POINTER 0xfc
#define SHT31_SERIAL_ID3_POINTER 0xfd
#define SHT31_MANUFACTURER_ID_POINTER 0xfe
#define SHT31_CONFIGURE_MSB 0x10 /* Get both temperature and humidity */
#define SHT31_CONFIGURE_LSB 0x00 /* 14 bit resolution */
void getTemperatureAndHumidity(float *temperature, float *humidity) {
unsigned int tData, hData;
Wire.beginTransmission(SHT31_ADDRESS);
Wire.write(SHT31_TEMPERATURE_POINTER);
Wire.endTransmission();
while (digitalRead(SHT31_RDY_PIN) == HIGH);
Wire.requestFrom(SHT31_ADDRESS, 4);
while (Wire.available() < 4);
tData = Wire.read() << 8;
tData |= Wire.read();
hData = Wire.read() << 8;
hData |= Wire.read();
*temperature = tData / 65536.0 * 165.0 - 40.0;
*humidity = hData / 65536.0 * 100.0;
}
//*********************************************************
void setup()
{
setPowerManagementMode(PM_SNOOZE_MODE, 0, 800); // use snooze
//Initialize Serial and I2C communications
Wire.begin();
//Put the SHT31 IC into the correct operating mode
Wire.beginTransmission(SHT31_ADDRESS);
Wire.write(SHT31_CONFIGURATION_POINTER);
Wire.write(SHT31_CONFIGURE_MSB);
Wire.write(SHT31_CONFIGURE_LSB);
Wire.endTransmission();
}
//------------------------------------------------------
void loop()
{
float temperature, humidity;
static bool g_mode = 0;
analogRead(A6); // into snooze mode, wait for touch.
pica.attach(22, 23, 24);
getTemperatureAndHumidity(&temperature, &humidity);
if(g_mode == 0){
pica.writeTemperature((int)temperature); // write temperature into picalico
} else {
pica.writePercent((int)humidity); // write temperature into picalico
}
delay(10000); // operate 10sec
g_mode = !g_mode;
pica.detach();
}