First post: 2023-05-07
Updated at: 2023-05-07
ESP32と温湿度センサを使ったIoTシステム
ESP32とBME280温湿度/気圧センサ、ThingSpeakを使った室内環境モニタリングシステムです。
目次
準備
手順1: Arduino IDEをPCにインストール
<<<Arduino公式ウェブサイト>>>からArduino IDEをダウンロードし、PCにインストールします。
手順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等で検索して、以下から新規登録を行います。
-
登録が完了したら、『New Channel』から新しいチャネルを作成し、必要な項目を入力して下さい。温度、湿度、気圧のデータを表示したいため、Fieldは3つ作ります。
-
『API Keys』からAPIを取得し、Arduinoのコードに埋め込んでください。
ハードウェアのセッティング
手順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のダッシュボードで視覚化や分析ができます。