はじめに
オムロン環境センサをESPで取得したものの、繋いだだけで何もしてなかったのでM5stackとGASで見える化してみました
使ったもの
M5stack
GAS
BLEでセンサデータを取得
これについてはこちらの記事を参考にしてください
ESP32からBLEでオムロン環境センサ(2JCIE-BL)に繋ぐ
WiFi接続
WiFiライブラリをインクルードして使うだけです。特に特別なことはしません
# include <WiFi.h>
Serial.println("WIFI_START");
WiFi.setAutoConnect(false);
WiFi.setAutoReconnect(false);
WiFi.disconnect();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
HTTP POST
HTTPClient.hを使いました
root証明書が必要なのでこちらを参考に発行してください
GASで受け取る
こんな感じで書きましたdoPostで受けているだけです。
function doPost(e) {
// シート取得
var postjsonString = e.postData.getDataAsString();
var postdata = JSON.parse(postjsonString);
var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
var temp = null;
var humid = null;
var pres = null;
var shodo = null;
var hukai = null;
var meyasu;
var date_time = null;
if(postdata.shodo != undefined){
var sheet = ss.getSheetByName("シート1");
// データ入力
temp = postdata.temp;
humid = postdata.humid;
pres = postdata.pres;
shodo = postdata.shodo;
hukai = ( 0.81 * temp ) + ( 0.01 * humid * ( 0.99 * temp - 14.3 ) ) + 46.3 ;
if(hukai >= 85 ){
var meyasu = "暑くてたまらない";
}else if(hukai >= 80 ){
var meyasu = "暑くて汗がでる";
}else if(hukai >= 75 ){
var meyasu = "やや暑い";
}else if(hukai >= 70 ){
var meyasu = "暑くない";
}else if(hukai >= 65 ){
var meyasu = "快適";
}
date = new Date();
date_time = Utilities.formatDate(date, 'JST', 'yyyy年M月d日 H時m分s秒')
sheet.appendRow([date_time,temp,humid,pres,shodo,hukai,meyasu]);
var output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.JSON);
output.setContent(JSON.stringify({ message: "success!" }));
return output;
}
M5stack側でアプリケーションのURLを指定してPOSTしてあげます。
メモリ不足
BLE、WIFI,httpsを使うとメモリ不足でM5stackが死にました。なので以下のような流れにしました
BLEでデータ取得→BLE系のメモリ解放→WiFi接続→Httpsポスト→シャットダウン
BLEDevice::deinit(true);
をするとBLE系のメモリを解放し、BLEを無効にできます
ESP.restart();
をすると再起動がかかります
開発したコード
以下に開発したコードをあげておきます
https://github.com/notitle420/m5Stack_omron_ble_http_post
root_ca
SensorAddr
ssid
password
path
を書き換えてご利用ください