{article.alt}

ESP32と温湿度センサを使ったIoTシステム

ESP32とBME280温湿度/気圧センサ、ThingSpeakを使った室内環境モニタリングシステムです。

準備

手順1: Arduino IDEをPCにインストール

<<<Arduino公式ウェブサイト>>>からArduino IDEをダウンロードし、PCにインストールします。

ide install

手順2: ESP32ボードマネージャをArduino IDEに追加

  • Arduino IDEを開き、ファイル -> 環境設定を選択します。
  • 追加のボードマネージャのURLに以下のURLを入力し、OKをクリックします。
https://dl.espressif.com/dl/package_esp32_index.json
  • ツール -> ボード -> ボードマネージャを開きます。
  • 検索ボックスにesp32と入力し、検索結果に表示される「esp32 by Espressif Systems」をインストールします。

手順3: BME280ライブラリとThingSpeakライブラリをインストール

  • スケッチ -> ライブラリをインクルード -> ライブラリを管理を選択します。
  • 検索ボックスにBME280と入力し、検索結果に表示される「Adafruit BME280 Library」をインストールします。
  • 同様に、検索ボックスにThingSpeakと入力し、検索結果に表示される「ThingSpeak Communication Library」をインストールします。

コーディング

手順4: Arduinoを使ってコードを作成

  • Arduino IDEで新しいスケッチを作成し、以下のコードを追加します。『Your Wi-Fi SSID』、『Your Wi-Fi Password』、『Your ThingSpeak API Key』を適切な値に置き換えてください。
  • ThingSpeakのAPI取得方法は後述します。
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <WiFi.h>
#include <ThingSpeak.h>

const char* ssid = "<Your Wi-Fi SSID>";
const char* password = "<Your Wi-Fi Password>";
const long channelID = <Your ThingSpeak Channel ID>;
const char* writeAPIKey = "<Your ThingSpeak API Key>";

Adafruit_BME280 bme;
WiFiClient client;

void setup() {
  Serial.begin(115200);
  Wire.begin();

  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  connectToWiFi();
  ThingSpeak.begin(client);
}

void loop() {
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();
  float pressure = bme.readPressure() / 100.0F;

  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" *C");

  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");

  Serial.print("Pressure: ");
  Serial.print(pressure);
  Serial.println(" hPa");

  // Write data to ThingSpeak
  ThingSpeak.setField(1, temperature);
  ThingSpeak.setField(2, humidity);
  ThingSpeak.setField(3, pressure);

  int result = ThingSpeak.writeFields(channelID, writeAPIKey);
  if (result == 200) {
    Serial.println("Successfully sent data to ThingSpeak");
  } else {
    Serial.println("Error sending data to ThingSpeak");
  }

  // Wait for 20 seconds before sending data again
  delay(20000);
}

void connectToWiFi() {
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

このコードは、BME280センサーから温度、湿度、気圧を読み取り、ThingSpeakにデータを送信する機能が実装されています。コードをコピーしたら、Arduino IDEでESP32ボードにアップロードします。

ThingSpeakの登録、API取得

手順5: ThingSpeakの登録

  • ThingSpeakをGoogle等で検索して、以下から新規登録を行います。

thingspeak create

  • 登録が完了したら、『New Channel』から新しいチャネルを作成し、必要な項目を入力して下さい。温度、湿度、気圧のデータを表示したいため、Fieldは3つ作ります。

  • 『API Keys』からAPIを取得し、Arduinoのコードに埋め込んでください。

thingspeak api

ハードウェアのセッティング

手順6: ハードウェアを接続する

ESP32ボードとBME280センサーを次のように接続します。

  • ESP32の3.3Vピン -> BME280のVCCピン
  • ESP32のGNDピン -> BME280のGNDピン
  • ESP32のSCLピン(通常はGPIO22)-> BME280のSCLピン
  • ESP32のSDAピン(通常はGPIO21)-> BME280のSDAピン

手順7: ThingSpeakでデータを確認する

  • ThingSpeakのダッシュボードにアクセスし、チャネルに送信された温度、湿度、気圧のデータを確認します。

これで、ESP32とBME280温度センサーを使ったIoTシステムが完成し、温度、湿度、気圧のデータがWi-Fiを通じてThingSpeakに送信されます。データは、ThingSpeakのダッシュボードで視覚化や分析ができます。