工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Firebase経由で2台のArduino間を温湿度データで連携するIoTチュートリアル

部品と材料

部品数量
Arduino UNO2
ESP8266 ESP-012
DHT11温湿度センサー(3ピン)1
DFRobot I2C 16×2 LCDディスプレイ1
ブレッドボード(汎用)2
ジャンパーワイヤー(オス/メス)1セット

アプリとオンラインサービス

プロジェクト概要

このIoTチュートリアルでは、DHT11センサーで温湿度を取得し、1台目のArduino UNOからESP8266経由でFirebaseに送信。2台目のArduino UNOがFirebaseからデータを取得し、I2C LCDに表示します。シリアル通信、Wi-Fiネットワーキング、クラウドデータストレージといった、現代の組み込み開発に必須のスキルを実践的に習得できます。

ステップ1:各ボードの役割を理解する

UNOがセンサーインターフェース、ESP8266がWi-Fiゲートウェイを担当。両者はシリアルポートで通信し、ESP8266自体は直接インターネットに接続せず、Wi-Fiモジュールのみが接続します。各ボードのコードを分けて管理することで混乱を防ぎます。

ステップ2:LCDをUNOに接続

ピン数削減と簡潔さのためI2C接続を採用。DFRobotモジュールの20×4 LCDサンプルがそのまま動作します。20×4ディスプレイ使用時はコンストラクタをLiquidCrystal_I2C lcd(0x3F, 20, 4);に更新してください。

ステップ3:DHT11を2台目のUNOに配線

公式Arduino DHT11チュートリアルに従って配線とライブラリ導入。センサーはシングルデータピン(例ではA0)のみ必要です。

ステップ4:ESP8266とFirebaseをセットアップ

Wi-Fi認証情報とFirebaseプロジェクト詳細をスケッチに設定。Firebase Realtime DatabaseのシンプルなJSONツリーに、ESP8266がtemperatureとhumidityノードを書き込みます。初心者向けに解説動画も用意されています。

ステップ5:シリアル通信をマスターする

シリアル送信時は必要な文字列のみ出力。デバッグ用の余分な出力はプロトコルを破綻させます。実装では、センサー側UNOがカンマ区切り文字列(例:25.3,60.1)をESP8266へ送信し、ESP8266がパースして各値をFirebaseへ転送します。

ステップ6:アップロードとテスト

センサー側UNO、センサー側ESP8266、LCD側ESP8266の順にスケッチを書き込み。数秒ごとにLCDが更新されることを確認。ジャンパーワイヤー抜き差しの際は、必ずArduinoのUSBケーブルを外してから行い、誤ショートを防いでください。

よくある落とし穴と対処法

コードスニペット

lcd_arduino.ino(Arduino)

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
String sensorData;

void setup() {
  Serial.begin(9600);
  lcd.begin(20, 4);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Temperature: ");
  lcd.setCursor(18, 0);
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.setCursor(15, 1);
  lcd.print("%");
}

void loop() {
  if (Serial.available()) {
    sensorData = Serial.readString();
    String temp = sensorData.substring(0, sensorData.indexOf(','));
    String hum = sensorData.substring(sensorData.indexOf(',') + 1);
    lcd.clear();
    lcd.setCursor(13, 0);
    lcd.print(temp);
    lcd.setCursor(10, 1);
    lcd.print(hum);
  }
  delay(2000);
}

lcd_esp8266.ino(ESP8266)

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "YOUR_FIREBASE_LINK"
#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN"
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"

void setup() {
  Serial.begin(9600);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

void loop() {
  String temp = Firebase.getString("temperature");
  String hum = Firebase.getString("humidity");
  Serial.flush();
  Serial.print(temp + "," + hum);
  delay(2000);
}

sensor_arduino.ino(Arduino)

#include <SoftwareSerial.h>
#include <dht.h>
#define DHT_PIN A0
DHT dht;

void setup() {
  Serial.begin(9600);
}

void loop() {
  dht.read11(DHT_PIN);
  String data = String(dht.temperature) + "," + String(dht.humidity);
  Serial.flush();
  Serial.print(data);
  delay(2000);
}

sensor_esp8266.ino(ESP8266)

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "YOUR_FIREBASE_LINK"
#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN"
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"

void setup() {
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  Serial.begin(9600);
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

void loop() {
  if (Serial.available()) {
    String payload = Serial.readString();
    int comma = payload.indexOf(',');
    String temp = payload.substring(0, comma);
    String hum = payload.substring(comma + 1);
    Firebase.setString("temperature", temp);
    Firebase.setString("humidity", hum);
    if (Firebase.failed()) {
      Serial.println("Failed to write to Firebase");
    }
  }
  delay(2000);
}

製造プロセス

  1. ppDAQC Pi-PlateからInitialStateへ温度データをストリーミング - ヘッドレスRaspberry Piで実現
  2. Arduinoで実現する低コスト・リアルタイム太陽光パネル監視システム
  3. Arduino Unoベースの人間検知レスキューロボット:センサー統合ステップバイステップ
  4. Arduinoで作る赤外線心拍センサー:低コスト・リアルタイム波形表示のステップバイステップガイド
  5. Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
  6. Bolt IoTとArduino UNOでLED輝度をシームレス制御
  7. MAX30100脈波センサーをArduinoで活用:ステップバイステップガイド
  8. YL-39/YL-69土壌湿度センサーをArduino UNOに接続するステップバイステップガイド
  9. PHPベースのWebインターフェースでArduino Unoを制御する構築ガイド
  10. Arduino NanoとMPU6050で加速度から傾斜角を算出 - Visuino活用チュートリアル
  11. シームレスなCMMS移行:データ移行のエキスパートガイドライン