📫
ESP32(XIAOなど)でFirebase RealtimeDBを使う方法
はじめに
本記事では、ESP32搭載マイコン を使って、Firebase Realtime Database にデータを送信する方法を解説します。IoTデバイスからクラウドに状態を記録したり、遠隔監視を実現する際に便利な技術です。Webアプリ等と連携することで簡単にスマート家電っぽいものが自作できます!
🔧 前提・準備
使用環境
- マイコン:XIAO ESP32S3(ESP32系なら他でも可、ESP32-WROOM等でも動作確認済みですが、Wi-Fi通信がADCと干渉してしまうためアナログセンサーと併用すると使い物になりません。XIAOシリーズを強く推奨します。)
- 開発環境:Arduino IDE
- ネット接続:SSID・パスワード方式(一般的なWi-Fi)
- 大学のWi-Fi(eduroam)などの802.1x方式での接続方法については、ぜひ
こちらを参考にしてください!
- 大学のWi-Fi(eduroam)などの802.1x方式での接続方法については、ぜひ
- FirebaseAuth認証方式:Email / Password
使用ライブラリ
Arduino IDEのライブラリマネージャーで以下のライブラリをインストールしてください。
-
Firebase ESP Client by Mobizt
私の環境では v4.4.17 を使用。ライブラリの詳細はこちら
🔥 Firebaseの設定
Firebaseのコンソールで以下の設定を行います。
- プロジェクトを新規作成
- 「Realtime Database」→「データベースを作成」→ 「本番環境」にする
- DBのルールを以下のように設定(書き込みはログイン中のユーザーのみ、読み取りは誰でも可能)
{
"rules": {
".read": true,
".write": "auth != null"
}
}
読み取りも公開したくない場合、特定のユーザーごとに権限を設定したい場合は適宜ルールを書き換えてください
-
「Authentication」→「Email / Password」を有効化
-
ユーザーを登録(例:
hoge@example.com/hogehoge)- ここで登録するアドレスは、形式を守っていれば実在する必要はありません。
🔑 APIキーとDatabase URLを確認
- Firebaseコンソール → 歯車アイコン「プロジェクトの設定」へ
- 「全般」タブ → 下部にある「マイアプリ」→ Webアプリを追加
- 表示されたコード内に
apiKeyとdatabaseURLが記載されています。
const firebaseConfig = {
apiKey: "your-api-key",
databaseURL: "https://your-project-id.firebaseio.com",
...
};
※ databaseURL は、Realtime Database のタブからも確認できます。
🧪 マイコンにDB書き込み処理を実装
ここでは、最小限のコードでデータを1回だけ書き込んでみます。
#include <WiFi.h>
#include <Firebase_ESP_Client.h>
// Wi-Fi情報
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
// Firebase情報(前節で確認したものに置き換えてください)
#define API_KEY "AIzaSyDxxxxxxxxxxxxxxxxxxxxxxxx"
#define DATABASE_URL "https://your-project-id.firebaseio.com/"
// FirebaseAuth情報(Authに登録したものに置き換えてください)
#define USER_EMAIL "hoge@example.com"
#define USER_PASSWORD "hogehoge"
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
void setup() {
Serial.begin(115200);
delay(1000);
// Wi-Fi接続
WiFi.begin(ssid, password);
Serial.print("WiFi接続中");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi接続成功");
// Firebase設定
config.api_key = API_KEY;
config.database_url = DATABASE_URL;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
// 書き込みテスト
if (Firebase.ready()) {
FirebaseJson json;
json.set("test", "hello from ESP32");
bool success = Firebase.RTDB.updateNode(&fbdo, "/test", &json);
if (success) {
Serial.println("✅ 書き込み成功!");
} else {
Serial.printf("❌ 書き込み失敗: %s\n", fbdo.errorReason().c_str());
}
}
}
void loop() {
// 何もしない(1回だけ書き込み)
}
-
/testノードに書き込まれます -
シリアルモニターでログを確認してください -
Firebase.ready()は内部的にトークンの更新などを自動処理してくれます - SSL通信に必要な証明書処理もライブラリ内で完結しています
✅ 結果を確認する
Firebase Console の「Realtime Database」画面を開いて、/test ノードに次のようなデータが表示されていれば成功です:
{
"test": "hello from ESP32"
}
ノードは / 区切りで自由に階層化できます。
🧩 補足:Firebase RTDBの主な書き込みメソッドまとめ
今回のサンプルコードでは updateNode() を使用しましたが、他にも以下のようなメソッドがあります。
| メソッド | 用途・特徴 |
|---|---|
set<T>() |
データを完全に置き換える。Tはint, float, bool, String等 |
setJSON() |
JSON形式で複数のデータを一括書き込み(置き換え) |
updateNode() |
既存ノードの一部だけを更新(部分更新) |
deleteNode() |
ノードを削除する |
🔤 set() の例:単一データの書き込み
Firebase.RTDB.setBool(&fbdo, "/led", true);
Firebase.RTDB.setInt(&fbdo, "/count", 42);
Firebase.RTDB.setString(&fbdo, "/name", "ESP32");
おわりに
これでマイコンから Firebase Realtime Database への基本的な書き込みができるようになりました。IoT開発の幅が一気に広がります。センサーデータの記録、状態の通知、Webアプリとの連携など、ぜひ応用してみてください
Discussion