こんにちは。
ラウィです。
はじめに
今日は12月24日のクリスマスイブですが、布団に入りながら、今回紹介するプログラムを作っていました(笑)
さて、今回はM5stackのボタンを押すと、google spreadsheetにデータを送る方法を共有します。
私はプログラミング初心者なので、結構時間がかかり徹夜していまいました(笑)
誤字などあるかもしれませんが、プログラムは動くので許してください
プログラムは先人の知恵を借りて作成したので、省けるところは、参考にしたサイトを見てやってください!
Google APIの取得とsheetの設定
まず、Google DriveとsheetのAPIを取得してください。
そうしないと、シートにデータが反映されない可能性があります。
こちらのサイトを参考にしてください
「3.プログラムの実行」は動作確認したい方だけで大丈夫です。
ちなみに、私はやりませんでした。
補足しておくと、
スクリプトエディタのコードを実行をすると、エラーがでると思いますが、気にしなくて大丈夫です。
あと、こちらのサイトも参考になったので、ご覧ください。初期設定での動作確認方法が書かれています。この確認はしておいた方がいいと思います!
https://raspberry-pi.nomad-life.net/1917477/memo/esp32%E3%81%A7google%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%93%E3%81%A7%E3%81%BF%E3%82%8B
Arduino IDEの設定
今回動作させるプログラムはArduinoIDEで動作させます。
こちらのサイトを参考に設定してください。
サイトの説明に2種類のESP32関連のボードをインストールすると書かれていますが「ESP32」のボード1つインストールすれば問題ないです!
②③は今回実行しないので、読まなくても大丈夫です。
https://nomad-life.net/19191277/%E6%A0%BD%E5%9F%B9-%E7%AE%A1%E7%90%86/%E3%80%90%E8%BE%B2%E6%A5%AD%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AD%E3%82%AC%E3%83%BC%E3%80%91%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%A7%E7%B0%A1%E5%8D%98%E8%A1%A8%E7%A4%BA
あとは、M5stack の設定を行います
こちらのサイトを参考にしてみてください
プログラム①
設定は終わったのでM5stackにプログラムを入れて実行させます。
IDEの設定で参考にしたサイトの④のプログラムをそのまま実行させます。
https://nomad-life.net/19191277/%E6%A0%BD%E5%9F%B9-%E7%AE%A1%E7%90%86/%E3%80%90%E8%BE%B2%E6%A5%AD%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AD%E3%82%AC%E3%83%BC%E3%80%91%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%A7%E7%B0%A1%E5%8D%98%E8%A1%A8%E7%A4%BA
これで動作しないと、問題がどこかにあるはずなので、手順や設定などを見直して下さい。
プログラム②
以下がM5stack のボタンを押したときにデータをspreadsheetに反映させるプログラムです。
プログラム①で作成したプログラムをベースに作成しています。
#include <WiFiClientSecure.h>
#include <M5Stack.h>
WiFiClientSecure client;
//適当な値を代入しています
float sensor1 = 1;
float sensor2 = 2;
float sensor3 = 3;
//ボタン設定
const uint8_t buttonA_GPIO = 39;
const uint8_t buttonB_GPIO = 38; //今回はBボタンは使わない
const uint8_t buttonC_GPIO = 37; //今回はCボタンは使わない
bool flag_btA_is_pressed = false;
static void buttonA_isr() {
Serial.println("A interrupt");
flag_btA_is_pressed = true;
}
const char* ssid = "×××";
const char* password = "×××";
const char* server = "script.google.com";
// google script key
const char* key = "×××";
void setup() {
Serial.begin(115200);
M5.begin();
M5.Lcd.setRotation(3); // 左を上にする
M5.Lcd.setTextSize(3); // 文字サイズを3にする
M5.Lcd.fillScreen(BLACK); // 背景を黒にする
//ボタンの設定
pinMode(buttonA_GPIO, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonA_GPIO), buttonA_isr, FALLING);
}
void wifi_conect() {
WiFiServer server(80);
// Wi-Fiに接続
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
M5.Lcd.setCursor(0, 0, 1);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.println("Wifi connectting");
// 接続するまで待機する
delay(1000);
}
Serial.print("Connected to ");
Serial.println(ssid);
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
if (flag_btA_is_pressed) {
flag_btA_is_pressed = false;
wifi_conect();
String URL = "https://script.google.com/macros/s/";
URL += key;
URL += "/exec?";
URL += "&1_cell=";
URL += sensor1 ;
URL += "&2_cell=";
URL += sensor2 ;
URL += "&3_cell=";
URL += sensor3 ;
Serial.println(URL);
// サイトにアクセス
Serial.println("\nStarting connection to server...");
if (!client.connect(server, 443)) {
Serial.println("Connection failed!");
M5.Lcd.setCursor(0, 0, 1);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.println("Failed");
} else {
Serial.println("Connected to server!\n");
client.println("GET " + URL);
M5.Lcd.setCursor(0, 0, 1);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.println("Sending...");
client.stop();
Serial.println("finish.");
M5.Lcd.setCursor(0, 0, 1);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.println("Success");
}
}
WiFi.disconnect();
}
ArduinoIDEでM5stackのボタンを使用するためには設定をする必要があるみたいです。定義にはBとCが書かれていますが、今回のプログラムでは使用していません
このサイトを参考に設定しました
http://jing98.wp.xdomain.jp/?p=434
予め、シートの1行目に日付など項目を書いておくといいと思います。
また、今回はsensor=1,sensor=2,sensor=3と定義していますが、中身の数字を変えれば温湿度センサや、超音波センサなどのセンサの値にすることも可能です。
実行結果
実行するとこのようになります
最後に
以上になります。ボタンの長押しや、Bボタン、Cボタンで様々なセンサの値を入れたり、複数のシートに値を入れられるようにできたら面白いですね。
最後までご覧くださり、ありがとうございました。
お疲れ様でした!(@^^)/~~~