Wio LTE for Arduino で温湿度センサーを使う

Wio LTE for Arduino で温湿度センサー (Grove Temperature & Humidity Sensor Pro) を使う方法です。
こちらにあるプログラムを使いました。
[DHT22](https://github.com/kuronyankotan/wiolte/tree/master/DHT22)

Ubuntu 21.04 にインストールした Arduino 1.8.15 で動作を確認しました。
センサーは D38 に接続しました。

プログラム

```text:temperature_humidity/temperature_humidity.ino
// ---------------------------------------------------------------
/*
	temperature_humidity.ino

					Jul/27/2021
*/
// ---------------------------------------------------------------
#include <WioLTEforArduino.h>

#define SENSOR_PIN    (WIOLTE_D38)

int TemperatureAndHumidityPin;
// ---------------------------------------------------------------
void setup()
{
	SerialUSB.println("*** temperature_humidity *** Jul/27/2021 PM 16:06");
	TemperatureAndHumidityBegin(SENSOR_PIN);
}

// ---------------------------------------------------------------
void loop()
{
	float temp;
	float humi;

	if (!TemperatureAndHumidityRead(&temp, &humi)) {
		SerialUSB.println("ERROR! TemperatureAndHumidityRead");
	}
else
	{
	SerialUSB.print("Current humidity = ");
	SerialUSB.print(humi);
	SerialUSB.print("%  ");
	SerialUSB.print("temperature = ");
	SerialUSB.print(temp);
	SerialUSB.println("C");
	}

	delay(2000);
}

// ---------------------------------------------------------------
void TemperatureAndHumidityBegin(int pin)
{
	TemperatureAndHumidityPin = pin;
	DHT22Init(TemperatureAndHumidityPin);
}

// ---------------------------------------------------------------
bool TemperatureAndHumidityRead(float* temperature, float* humidity)
{
  byte data[5];
  float ff = NAN;

  DHT22Start(TemperatureAndHumidityPin);
  for (int i = 0; i < 5; i++) data[i] = DHT22ReadByte(TemperatureAndHumidityPin);

  DHT22Finish(TemperatureAndHumidityPin);

  if (!DHT22Check(data, sizeof (data))) return false;
  ff = data[0];
  ff *= 256;
  ff += data[1];
  ff *= 0.1;
  *humidity = ff;

  ff = data[2] & 0x7F;
  ff *= 256;
  ff += data[3];
  ff *= 0.1;
  if (data[2] & 0x80) {
    ff *= -1;
  }
  *temperature = ff;

  return true;
}

// ---------------------------------------------------------------
void DHT22Init(int pin)
{
	digitalWrite(pin, HIGH);
	pinMode(pin, OUTPUT);
}

// ---------------------------------------------------------------
void DHT22Start(int pin)
{
  // Host the start of signal
  digitalWrite(pin, LOW);
  delay(18);

  // Pulled up to wait for
  pinMode(pin, INPUT);
  while (!digitalRead(pin)) ;

  // Response signal
  while (digitalRead(pin)) ;

  // Pulled ready to output
  while (!digitalRead(pin)) ;
}

// ---------------------------------------------------------------
byte DHT22ReadByte(int pin)
{
  byte data = 0;

  for (int i = 0; i < 8; i++) {
    while (digitalRead(pin)) ;

    while (!digitalRead(pin)) ;
    unsigned long start = micros();

    while (digitalRead(pin)) ;
    unsigned long finish = micros();

    if ((unsigned long)(finish - start) > 50) data |= 1 << (7 - i);
  }

  return data;
}

// ---------------------------------------------------------------
void DHT22Finish(int pin)
{
  // Releases the bus
  while (!digitalRead(pin)) ;
  digitalWrite(pin, HIGH);
  pinMode(pin, OUTPUT);
}

// ---------------------------------------------------------------
bool DHT22Check(const byte* data, int dataSize)
{
  if (dataSize != 5) return false;

  byte sum = 0;
  for (int i = 0; i < dataSize - 1; i++) {
    sum += data[i];
  }

  return data[dataSize - 1] == sum;
}

// ---------------------------------------------------------------
```

実行結果
![temperature_humidity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/ec55d339-c6a4-d154-316e-5433de96c12d.png)