あいまいまいんの生物学

あいまいまいんの生物学

生物学が好き。勉強したり遊んだり。

日頃感じたこと思ったこと、出来事など

勉強して面白かった話

授業で使えそうな生物学の知識・雑談・小ネタ

などなどを紹介していきたいと思います

コメント大歓迎!気軽にコメントして下さい

ゲームサイトはこちら

M5Stackで温度・湿度・気圧を測定しGoogle Spreadsheetに記録する

最近在宅の時間が多くなってきました。
ので、ちょっと心に余裕もできたので今日はM5Stack開発を頑張りました。一念発起!
今までやってきたことは下の記事からどうぞ↓
i-my-mine.hatenablog.com
i-my-mine.hatenablog.com
i-my-mine.hatenablog.com
i-my-mine.hatenablog.com
i-my-mine.hatenablog.com


さて、今回はですね、いよいよデータの蓄積というところを頑張っていこうと!
色んなデータがとれるようになってきたので、それを記録することで、自分がずっと何かにつきっきりじゃなくても経時的変化が見られるような、そんなツールにM5Stackをするべく頑張ってみました!
一番参考にさせて頂いたのは下のページです!
www.telomere0101.site

ただ、同じセンサーを自分が持っていなかったので、それに合わせてコードもちょっといじる必要がありました。
自分が持っているセンサーはENVユニットで、気温、湿度に合わせて気圧もとれたので、
どうせならspreadsheetに気圧もつけられるようにしよう!と思いました。

で、基本的には上のブログを拝読し理解した気になりつつちょこまか実装していったのですが…
最初につまったのが「スクリプトプロパティからシート名をとる」というところ。
スクリプトプロパティとは…????
調べてみたら、めっちゃ丁寧に教えてくれてるところがあった。
tonari-it.com
tonari-it.com
これらブログに従って、GASの「ファイル」タブから「プロジェクトのプロパティ」、そして「スクリプトのプロパティ」を選択し、「行を追加」を押して
プロパティに「SHEET_NAME」、値に自分が記録したいシート名を書きました。(シート名っていうのはSpreadsheetのファイル名ではなく、下に出ているまさに「各シート」の名前です。デフォルトだと「シート1」とかかな…)
書いたコードは基本参考にさせて頂いたページに載っているのでそちらを見て欲しいが、気圧分足して変えたところだけ書き留めておく。

 //ここまで一緒… 
  var tmp = null;
  var hum = null;
  var pressure = null;
  var date = null;
  var time = null;
   
  tmp = postdata.tmp;
  hum = postdata.hum;
  pressure = postdata.pressure;
 
  date = new Date();
  date_time =  Utilities.formatDate(date, 'JST', 'yyyy年M月d日 H時m分s秒')
  sheet.appendRow([date_time,tmp,hum,pressure]);
 //ここからも一緒… 

で、「公開」タブ→「ウェブアプリケーションとして導入」から公開したんですが、これもまたトリッキーで、なんか最初ブロックされるんだよね…ブロックを躱していこうな…(もし困ったら検索しよう!)
あとこれは後々困ったんですが、scriptの中身を更新したはずなのに全然その変更が反映されずにエラーが返されるみたいなことがあって。結局そういうときは一度disable web appして、また公開するといいみたいです。ついでにその時Project versionもNewにして、適当な番号か名前かをつけて新しい版で公開してくださいな。


さて、次にM5Stackのwifi接続なわけですが、そもそもwifi接続できるのかやったことなかったなと思い、以下の人のブログを参考に試してみる。
kotarohattori.com

我が家はバッファローだけどGが2.4GHz帯だって。
www.buffalo.jp

だめだと「. . . . . . 」と出続けるのでとてもわかりやすかったです。


で、これと自分の持っているENVのユニットを組み合わせつつ、spreadsheetに送るための実装だ!
これもセンサーユニットが違うせいでいくつか変わっているが、変わった部分だけ掲載する。
基本は本当最初に紹介したブログが完璧なのでそちらのページを見て欲しい。

#include <M5Stack.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT12.h"
#include <Adafruit_BMP280.h>
#include "Adafruit_Sensor.h"


Adafruit_BMP280 bme;
DHT12 dht12;
 
const char* ssid = "Buffalo-G-(ここは各自のSSIDを)";
const char* password = "(ここは各自のパスワードを)";
 
//setup start
void setup() {
  M5.begin();
  Wire.begin();
  Serial.begin(115200);
  delay(100);
 
  Serial.print("Attempting to connect to SSID: ");
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  Serial.println(ssid);
  WiFi.begin(ssid, password);
 
  // attempt to connect to Wifi network:
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    // wait 1 second for re-trying
    delay(1000);

    Serial.println(F("ENV Unit(DHT12 and BMP280) test..."));

    while (!bme.begin(0x76)){  
      Serial.println("Could not find a valid BMP280 sensor, check wiring!");
      M5.Lcd.println("Could not find a valid BMP280 sensor, check wiring!");
    }
    M5.Lcd.clear(BLACK);
    M5.Lcd.println("ENV Unit test...");
  }
 
  Serial.print("Connected to ");
  Serial.println(ssid);
 
}
 
//loop endless
void loop() {
  float tmp = dht12.readTemperature();
  float hum = dht12.readHumidity();
  float pressure = bme.readPressure();
  Serial.printf("Temperature: %2.2f*C  Humid: %0.2f%%  Pressure: %0.2fPa\r\n", tmp, hum, pressure);

  M5.Lcd.setCursor(0, 0);
  M5.Lcd.setTextColor(WHITE, BLACK);
  M5.Lcd.setTextSize(3);
  M5.Lcd.printf("Temp: %2.1f  \r\nHumi: %2.0f%%  \r\nPressure:%2.0fPa\r\n", tmp, hum, pressure);
 
  //make JSON
  char json[100];
  sprintf(json, "{\"tmp\": %2.2f , \"hum\": %2.2f , \"pressure\": %2.2f }", tmp, hum, pressure);
 //ここからは一緒…

ブログでは5分に一度更新になっていたけれど、どう動くか速く見たくて1分に一度更新にした。忙しない。

f:id:I_my_mine:20200430160308p:plain
できた!


f:id:I_my_mine:20200430161041j:plain
こっちはM5Stackの画面ね。



ということで無事できました。
なんか謎の達成感だ!!!!!!!!!!!



ということで、次の目標は
・ジャイロのデータもspreadsheetでとれるようにしたい
・上のログのシステムをメニューから選択できるようにして他の機能と一緒に組み込みたい
wifiをコードに書き込むんじゃなくて検索→接続→始める、みたいにしたい
って感じですね。他にも色々やりたいことはあるけれど、取り敢えず直近はこれ。
ジャイロについては以下のサイトを参考にやっていきます。
docs.m5stack.com
docs.m5stack.com

あとは教材としてどう活かすかだね…
二酸化炭素濃度とかだとダイレクトに使えそうだけど、温度湿度気圧だけじゃなぁ…という気持ち。
他にもどうやって活かせるか考えていかないと…