お久しぶりで.最近Arduinoを使ってFirestoreのデータをいじる機会ができたので,備忘録として残しておこうと思います.
はじめに
FirestoreやCloud storage,Authentificationなどなど便利な機能を提供してくれるFirebase君.もちろん,ネット上には素晴らし記事が沢山落っこちています.
しかし,Arduinoなどのマイコンを使って機能を使う方法の記事は意外と少なさそう?(特に日本語記事).IoTデバイスなどを作るときにはFirebaseを使用することが結構あると思います.
そこで,今回はArduinoを使用して,Firestoreにデータをアップロードする機能を試してみます.
使用ライブラリ
ArduinoのFirebaseClientというライブラリを使用しました.以下がリポジトリになります.
どうやら,以下のライブラリの後継のライブラリが上のライブラリのようです.
本ライブラリはArduino以外にもESP系やRaspberry pi系,STM系のマイコンにも対応しているようなので,私は試していませんが動くと思います.
準備
FirebaseClientのインストール
Arduino IDEを使用して開発を行っていこうと思います.
まず,ライブラリのインストールを行います.
IDEのライブラリマネージャーの検索欄に「FirebaseClient」と入力すると,以下の画像のようにライブラリが出てきます.見つけたらインストールボタンを押してインストールを行います.

Firebaseの設定
まず,Firebaseのプロジェクト作成します.プロジェクトの作成方法に関しては説明をいれると長くなってしまいそうなので,割愛します.以下のサイトなど参考になりました.

プロジェクトを作成し終わったら以下の手順で,FirestoreとAuthenticationの設定を行います.AuthenticationではFirestoreのデータへアクセスするために必要なログインユーザーの設定を行います.また,これを設定しないと後々Arduinoのプログラムの方で必要となるウェブAPIキーが発行されなかったりします.

まずコンソール画面に行きます.その後,左側にある全てのプロダクトを選択します.

使用した機能を追加する画面が出てきます.今回はFirestoreとAuthenticationをそれぞれ押して追加します.

追加が完了すると,それぞれの機能にアクセスするショットカットができます.
まずは,Firestoreの方の設定を行います.

データベース作成ボタンからデータベースの作成を行います.

ロケーションを各々の地域に設定します.

本番環境モードとテストモードのどちらかを選択しましす.どちらを選択するかによって,デフォルトのセキュリティールールが変わってきます.
Firestoreではセキュリティールールによって,アクセスが制限されるようになっており許可されたユーザーでなければデータの読み込みや書き出しなどが禁止されます.
テストモードを選択すると,データベースへのアクセスが30日間以内なら誰でもできるようになります.一方,本番モードだと全てのアクセスが制限されています.
今回はお試しなので,テストモードを選択しておきます.
これでFirestoreの方は一旦終わりです.
続いて,Authenticationの設定です.

Authenticationタブの「始める」を押します.これだけで認証機能が利用できるようになります.
続いて,データへのアクセスを行うユーザーの登録を行います.

画像の通り,ログイン方法のタブからメール/パスワードを用いたログイン方法を追加します.

有効にして保存します.


「ユーザーを追加」からメールアドレスとパスワードを設定します.ここで追加したメールアドレスとパスワードはArduino側のプログラムで使用します.

追加すると,画像のようになります.
以上で事前準備は終わりです.
Arduinoプログラム
続いてArduinoのプログラムの方を作成します.

まず,IDEから上の画像のようにサンプルプロジェクトを引っ張ってきます.
exampleを見ると非常に多くのサンプルがあり,色々試したくなってきます.
今回使用するcreateサンプルプロジェクトは20秒ごとにDocumentを新しく生成するものです.
続いて,コード中の以下の部分(38-44行目)の部分を変更します.
#define WIFI_SSID "WIFI_AP"
#define WIFI_PASSWORD "WIFI_PASSWORD"
#define API_KEY "Web_API_KEY"
#define USER_EMAIL "USER_EMAIL"
#define USER_PASSWORD "USER_PASSWORD"
#define FIREBASE_PROJECT_ID "PROJECT_ID"
まず上2つは,WIFIのSSIDとPassWordをそれぞれ入れます.
続いて,3つ目のAPI_KEYと6つ目のFIREBASE_PROJECT_IDは以下の画像のようにFirebaseプロジェクト管理画面で確認できます.


プロジェクトIDがFIREBASE_PROJECT_ID,ウェブAPIキーがAPI_KEYに対応しています.
USER_EMAILとUSER_PASSWORDはAuthenticationで作成した物を入力します.
これでコードの方は完成です.
実行
書き込み終えたら,20秒ごとにdocumentが作成されます.Firestoreの管理画面に行くと以下の画像のように追加されていれば成功です.

問題
本プログラムですが,自身の環境(Aruduino Uno R4 WIFI)では実行してしばらくすると以下のようなエラーが発生します.

Firmware name: "C:\Users\ttaka\AppData\Local\arduino\sketches\3907D2FCCA95F2D372BAC6610FBA18C7/main.ino", compiled on: Mar 11 2025
Fault on interrupt or bare metal(no OS) environment
Error: Main stack(20007a40) was overflow
どうやら,スタックがオーバーフローしているらしいです.
解決策はまだ見つかっていなので,解決策がわかる方がいましたらコメントで教えていただければ幸いです.
終わりに
今回はArduinoでFirestoreにデータを保存してみました.
FirebaseClientというライブラリを使用することで非常に簡単に操作を行えました.IoTデバイスを作る際などには重宝しそうです.
しかし,自分の環境だとオーバーフローしてしまうので解決策を見つけてきたいと思います.
コメント