kintone × M5Stack で ライフログ
前回、M5stackからkintoneに書き込む方法がわかったので、ちょっと実用的なものをつくってみたくなって、ライフログ的なものをやってみようと思いました。
とりあえずの仕様
「ライフログとは、人間の生活を長期間に渡りデジタルデータとして記録すること、またその記録自体を指す。」との事。で、私の日々やってることをよくよく考えると
仕事、遊び、ごはん、寝る。
それと、仕事か遊びかよくわからないkintoneをやっている。
という事に集約されるという結論に至りましたので^^;。活動リストは
の繰り返しで日々すぎていっている。。。ということになります。(^-^;;
これをM5Stackのボタンで選択、kintoneに送信できたらOKとなります。
あとは、今後の事も考えてMACアドレスが取得できたら端末識別や個人認証の代わりになるので便利かな。よし!
MACアドレス
MACアドレスとは端末のネットワークカード(NIC)にふられている固有の番号のこと。先頭24バイトはベンダーIDとよばれています。残り24バイトは各ベンダーさんが重複しないように管理しています。
ライフログアプリの利用者は私ひとり。M5Stackもひとつしかもっていないので端末や個人の識別は、今は必要ないのですが、将来的に複数のIoTデバイスや複数人での利用を考えると、kintone側で「どのIoTデバイスからのアクセスか」というのは欲しい情報になるハズ。
kintoneのIDや独自の識別コード等をM5Stackに組み込む方法もありますが、まあ今回のケースだと、とりあえずMACアドレスを利用するのがてっとり早い。
で、ちょっとGoogleで調べてみました。
お部屋でモバイルさんのサイト。MACアドレスをWifi接続とは関係なく取得。なるほど。M5Stackに複数のNICというケースもあまりないと思うのでアリですね。
鯨井貴博@opensourcetechさんのサイト。シリアルポートでM5Stackの詳細情報を取得する方法が今回わかりました。というかシリアルモニタの使い方がはじめて分かりました。^^;
mgo-tecsさんのサイト。すごい!M5Stackでやってみましたが、本当にチップ情報が大量に取得できました。これ自分で調べるのはかなり大変ですよね。私自身の情報の理解が追いついてないです。
どれもすばらしい情報です。大変参考になりました。
先人の皆様にはいつも助けていただいています。ありがとうございます。
kintoneアプリ
とくに難しいことはしていません。見たまんまです。
日時についてはとりあえずkintoneレコード登録時です。のでネットワーク遅延等の問題がある可能性があります。^^;
スケッチ
スケッチは以下の設定で。
環境に応じてサブドメイン、アプリID、APIトークン、それと、SSIDとPASSWORDの変更をしてください。
#include <M5Stack.h>
#include <WiFi.h>
#include <driver/adc.h>
#include <HTTPClient.h>
// Wifi の設定(利用可能なSSIDとPASSWORDを設定してください)
const char* ssid = "wifiのSSID";
const char* password = "wifiのPASSWORD";
// kintone データ更新用設定
char macAdr[24];
char activChr[24];
char activ[5][10] = { "1.ShiGoTo",
"2.AsoBi ",
"3.GoHan ",
"4.SuiMin ",
"5.kintone"
};
int count = 0;
char json[4096];
HTTPClient http;
void setup() {
adc_power_acquire(); // ADC Power ON https://macsbug.wordpress.com/2021/05/02/buttona-on-m5stack-does-not-work-properly/
M5.begin();
// Wifi AP に接続
WiFi.begin(ssid, password); // Wi-Fi APに接続
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
//WiFi Connected
Serial.println("\nWiFi Connected.");
Serial.println(WiFi.localIP());
M5.Lcd.setTextSize(3);
M5.Lcd.println("WiFi Connected:");
M5.Lcd.println(WiFi.localIP());
M5.Lcd.println("");
//MACアドレス
byte mac[6];
WiFi.macAddress(mac);
sprintf(macAdr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
Serial.println(macAdr);
M5.Lcd.println(macAdr);
//内容
sprintf(activChr, "%s" , activ[0]);
M5.Lcd.setCursor(0, 120);
M5.Lcd.println(activChr);
}
void loop() {
M5.update();
if(M5.BtnA.wasReleased()){
M5.Lcd.setCursor(200, 120);
M5.Lcd.println(" ");
count++;
if (count > 4) {
count = 0;
}
sprintf(activChr, "%s" , activ[count]);
M5.Lcd.setCursor(0, 120);
M5.Lcd.println(activChr);
}
if(M5.BtnC.wasReleased()){
M5.Lcd.setCursor(200, 120);
M5.Lcd.println(" ");
count--;
if (count < 0) {
count = 4;
}
sprintf(activChr, "%s" , activ[count]);
M5.Lcd.setCursor(0, 120);
M5.Lcd.println(activChr);
}
if(M5.BtnB.wasReleased()){
sprintf(json,"{\"app\":\"1234\",\"record\":{\"活動\":{\"value\":\"%s\"},\"MACアドレス\":{\"value\":\"%s\"}}}",activChr,macAdr);
int httpResponseCode = 0;
http.begin("https://piyo.cybozu.com/k/v1/record.json");
http.addHeader(F("X-Cybozu-API-Token"), F("ABCdefgHijklMnOpqrstuVwxYzAbcdefgHiJkLmN")); // <= kintoneアプリのAPI-Tokenを設定
http.addHeader(F("Content-type"), F("application/json"));
httpResponseCode = http.POST(json);
Serial.printf("httpResponseCode = %d \n", httpResponseCode);
Serial.println(http.getString());
M5.Lcd.setCursor(200, 120);
M5.Lcd.println("Send!");
}
}
noteに貼るときちょっとインデントがへんになっちゃった(スペースがいっこ消えた?)けど動くハズです。
MACアドレス取得のタイミングは迷いましたが、今回は、WiFi.localIP() で取得。ネットワーク接続に利用したMACを正としました。結果的にはどのタイミングで取得しても同じになると思います。
活動リストは、M5Stackで日本語表示はひと手間かかるようでしたので半角英数字で以下のように設定
ボタンの割り付けは以下
では、コンパイルして書き込みして「ポチッ!」
やたー。Send!のメッセージでた。でkintoneは?
はいってるはいってる。あとはレコード編集画面を開いて。。
詳細な内容を追記したらOK!
うん。いい感じ!いったん、完成!
最後に
実用的っぽいものがなんとなくできました。ライフログという形をとってますが、タイムカードの代わりなどにも使えそうですよね。
いつものように取りあえず私の環境で動いたレベルでの公開ですが、参考になればうれしいです!