見出し画像

kintone × M5Stack で ライフログ

前回、M5stackからkintoneに書き込む方法がわかったので、ちょっと実用的なものをつくってみたくなって、ライフログ的なものをやってみようと思いました。

とりあえずの仕様

ライフログとは、人間の生活を長期間に渡りデジタルデータとして記録すること、またその記録自体を指す。」との事。で、私の日々やってることをよくよく考えると

仕事、遊び、ごはん、寝る。
それと、仕事か遊びかよくわからないkintoneをやっている。

という事に集約されるという結論に至りましたので^^;。活動リストは

1.仕事
2.遊び
3.ごはん
4.寝る
5.kintone

の繰り返しで日々すぎていっている。。。ということになります。(^-^;;
これをM5Stackのボタンで選択、kintoneに送信できたらOKとなります。

Aボタン:活動リストを昇順で変更
Bボタン:kintoneへ送信
Cボタン:活動リストを降順で変更

あとは、今後の事も考えて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レコード登録時です。のでネットワーク遅延等の問題がある可能性があります。^^;

フォーム
フィールド名:MACアドレス
タイプ:文字列(1行)
フィールドコード:MACアドレス

フィールド名:日時
タイプ:日時
初期値:レコード登録時の日時を初期値にする
フィールドコード:日時

フィールド名:活動
タイプ:文字列(1行)
フィールドコード:活動

フィールド名:内容
タイプ:文字列(複数行)
フィールドコード:内容

アプリ02

設定
APIトークン:レコード追加ができればOK

設定05

一覧
一覧1:レコード番号、MACアドレス、活動、内容

画像2

スケッチ

スケッチは以下の設定で。

環境に応じてサブドメイン、アプリID、APIトークン、それと、SSIDとPASSWORDの変更をしてください。

サブドメイン:piyo
アプリID:1234
APIトークン:ABCdefgHijklMnOpqrstuVwxYzAbcdefgHiJkLmN

#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で日本語表示はひと手間かかるようでしたので半角英数字で以下のように設定

1.ShiGoTo
2.AsoBi
3.GoHan
4.SuiMin
5.kintone

ボタンの割り付けは以下

ボタンAを押すたびに、1.→2.→3.→4.→5.→1. ... と順番に切り替わる。
ボタンCは、5.→4→.3.→2.→1.→5. ... と逆順に切り替わる。
ボタンBを押すと、kintoneに新規登録して、Send! とメッセージを表示。

では、コンパイルして書き込みして「ポチッ!」

画像6

やたー。Send!のメッセージでた。でkintoneは?

画像7

はいってるはいってる。あとはレコード編集画面を開いて。。

フォーム書きこみ02

詳細な内容を追記したらOK!

画像7

うん。いい感じ!いったん、完成!

最後に

実用的っぽいものがなんとなくできました。ライフログという形をとってますが、タイムカードの代わりなどにも使えそうですよね。

いつものように取りあえず私の環境で動いたレベルでの公開ですが、参考になればうれしいです!


この記事が気に入ったらサポートをしてみませんか?