もう5回もやってるので連載っぽくなってきました。
今日は何をするの?
今日はね、M5StickCのボタンをポチっと押すと、Firebase Realtime Databaseというクラウドのデータベースの値が変わる、ってやつをやってみたいと思います。
これができれば、M5StickCで取得したいろんなセンサーの値とかをクラウドに送信できるようになります。いいでしょ?
まずはFirebaseのアカウントをつくります

プロジェクトの作成
https://firebase.google.com/にアクセスすると、こんな画面が出てくるはずです。

こーんな感じのが出てくるので、迷わずプロジェクトを作成しましょう。

適当に名前をつけて続行します。このあとに、「Googleアナリティクスを使うかい?」とか聞かれるので、まあOFFでよいです。そしてプロジェクトを作成します。

あたらしいプロジェクトの作成が完了したら、メイン画面でこいつをポチッと押します。

そして下のほうに行くと、Realtime Databaseがあるので、ここでデータベースを作成します。なお、「ロックモードで開始」と「テストモードで開始」があるので、「テストモード」のほうを選んで、有効にするをタップします。

こんな震えるメッセージが出ますが、実験なので華麗にスルーしてみます。

そうすると、こんな画面が出ます。この「iot-sandbox-ea132」というのがデータベースです。ここで+ボタンを押して、「button」という名前の変数を追加します。値はとりあえず0でも入れておきます。
これでFirebase側の設定はひとまずOK。
Arduino IDEにライブラリをインストールします
今回使うのは以下のライブラリです。前回の記事でArduinoJsonをインストールした人は、バージョン6が入っていると思うが、バージョン5の最新版に変更しておいてください。6だと動かない。
スケッチ – ライブラリを管理 – ライブラリをインクルードから、ArduinoJson 5.13.5をインストールする。

もうひとつ、IOXhop_FirebaseESP32をインストールします。

GithubのClone or downloadを押して、Download ZIPでローカルにファイルをダウンロードします。
スケッチ – ライブラリを管理 – .zip形式のライブラリをインストールで、ダウンロードしたファイルをインストールします。
コードをかく。
#include <M5StickC.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#include <IOXhop_FirebaseESP32.h>
#include "ArduinoJson.h"
#define WIFI_SSID "WifiのSSIDをここに書いてね" // ①
#define WIFI_PASSWORD "Wifiのパスワードをここに書いてね"
#define FIREBASE_DB_URL "https://iot-sandbox-ea132.firebaseio.com/" // ②
WiFiMulti WiFiMulti;
int count = 1; // ③
void setup() {
M5.begin();
M5.Lcd.setRotation(3);
M5.Lcd.setCursor(0, 0, 2);
WiFiMulti.addAP(WIFI_SSID,WIFI_PASSWORD);
M5.Lcd.print("Connecting");
while(WiFiMulti.run() != WL_CONNECTED) {
M5.Lcd.print(".");
delay(1000);
}
M5.Lcd.println("");
M5.Lcd.println("Connected to");
M5.Lcd.println(WiFi.localIP());
delay(500);
Firebase.begin(FIREBASE_DB_URL); // ④
}
void loop() {
M5.update(); // ⑤
if (M5.BtnA.wasPressed() ) { // ⑥
M5.Lcd.println("Pushed");
Firebase.setInt("/button", count); // ⑦
count ++; // ⑧
}
}
こんなかんじです。Wifi接続部分は前回の記事で解説してるので、省略させてもらいます。本当はめんどくさいから省略するんです。
解説します
① WifiアクセスポイントのSSID/Pass
ここに自分の環境のWifiのSSIDとパスワードを記入します。
② Realtime Databaseのアドレス

これは、さっき作ったRealtime Databaseのアドレスです。ここにかかれているのがそうです。アカウントによって全部ちがうから、決して上の画像に載ってるやつをそのままコピペしてはイカンです。自分のを書いてください。
③ 書き込む値をしまっておく変数
今回は数字(int)なので、とりあえず1で初期化しておきます。
④ Firebaseと接続する
このへんの処理はぜんぶライブラリがやってくれるので、とっても便利です。
⑤ これはお作法
⑥ ボタンが押された
M5StickCの正面についている、いちばん大きいボタンがタップされたイベントをひろっています。
⑦ Realtime Databaseに値を書き込む
いよいよ、さっき作ったbuttonというプロパティに、値を書き込みます。今回は数字だから、setIntというメソッドを使っています。
⑧ 値をインクリメントする
ボタンを何回もカチカチしてカウントアップしたいので、countを1づつ増やしています。
さあ、実行してみよう

M5StickCに書き込みを行い、Wifiに接続されたあとに「M5」と書かれたボタンを押すと、「Pushed」と表示され、

無事に値がリアルタイムに書き換わりました。実験成功!
それでは今夜もこのへんで。
この記事へのコメントはありません。