NodeMCU から Google スプレッドシートにデータを送信する方法
公開: 2020-08-26NodeMCU ファームウェアを使用してセンサー データをインターネット経由で Google スプレッドシートに送信するのは非常に便利です。 これは Google スクリプトを通じて実行でき、多くのクラウド ストレージの代替手段とは異なり、費用がかからないという利点があります。
この記事では、ESP8266 と DHT11 温度および湿度センサーを使用して温度測定値を送信するための単純なプロジェクトを紹介します。
Google シートをセットアップする
まず、新しいスプレッドシートを作成します。 Google アカウントにログインし、マイ ドライブに移動して、空のスプレッドシートを開きます。
スプレッドシートの URL キーをコピーします。 スプレッドシートに直感的な名前を付けます。 [ツール] メニューの [スクリプト エディター] に移動します。
スクリプトに名前を付けます (繰り返しになりますが、特に複数のプロジェクトを実行している場合は、直感的にわかるようにしてください)。 指定されたスクリプトを使用し、それをコピーして Google Script エディタに貼り付けます。
スプレッドシート ID 行の下に、保存したスプレッドシートの URL キーを貼り付けます。
スクリプトを保存し、アプリとしてデプロイします。 このオプションは「公開」メニューの下にあります。 スプレッドシートが正しく動作するように展開パラメータを構成します。
- 「現在のWebアプリのURL」を保存します。
- すべてのスクリプト リビジョンに対してプロジェクト バージョンを新規として保存します (これにより、Google は今後行われるリビジョンを更新できるようになります)。
- [アプリを実行する形式] フィールドに、「me(あなたの Gmail アドレス)」という文字列を追加します。
- 「アプリにアクセスできるユーザー」フィールドに「誰でも、匿名でも」という行を追加します。
ESP8266 および DHT11 センサーをセットアップするためのコード
ESP8266 を DHT11 センサーに接続するときにアップロードする必要があるものは次のとおりです。
#include “ESP8266WiFi.h”
#include “DHT.h”
#define DHTPIN 2 // 接続しているデジタル ピン
//esp ボードのピン 2 から D4
// 使用している DHT センサー タイプのコード内のコメントを削除します。
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21
//#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN,DHTTYPE);
const char WEBSITE[] = “api.pushingbox.com”; // PushingBox API サーバー
const String devid = “<YOUR_Devid_HERE>”; // Pushingbox からのデバイス ID
const char* MY_SSID = “<YOUR_WIFI_NAME_HERE”;
const char* MY_PWD = “<YOUR_WIFI_PASSWORD_HERE>”;
void setup()
{
シリアル.begin(115200);
dht.begin();
Serial.print(「「+*MY_SSID」に接続中);
WiFi.begin(MY_SSID, MY_PWD);
Serial.println(“wl connect に入ります”);
while (WiFi.status() != WL_CONNECTED) //接続されていない、..接続を待機中
{
遅延(1000);
Serial.print(“.”);
}
Serial.println(“wl 接続済み”);
Serial.println("");
Serial.println(“資格情報が受け入れられました! Wi-Fi に接続されました\n “);
Serial.println("");
}
ボイドループ()
{
// 読み取り間の時間をさらに長くする
//PusingBox からの無料リクエストの数を超えないよう、Google シートにデータを入力します
遅延(10000); //10 秒、(サンプリング レートとサービス呼び出しクォータ)
float 湿度データ = dht.readHumidity();
// 温度を摂氏として読み取ります (デフォルト)
float celData = dht.readTemperature();
// 温度を華氏として読み取ります (isFahrenheit = true)
float fehrData = dht.readTemperature(true);
// 失敗した読み取りのチェックは早期に終了します (再試行するため)。
if (isnan(湿度データ) || isnan(celData) || isnan(fehrData))
{
Serial.println(“DHT センサーからの読み取りに失敗しました!”);
戻る;
}
// 摂氏で暑さ指数を計算します (isFahreheit = false)
float hicData = dht.computeHeatIndex(celData, 湿度データ, false);
// 華氏で暑さ指数を計算します (デフォルト)
float hifData = dht.computeHeatIndex(fehrData, 湿度データ);
//選択したシリアル モニターまたは端末に 115200 ボーで印刷します
Serial.print(“湿度: “);
Serial.print(湿度データ);
Serial.print(” %\t”);
Serial.print(“セル温度:”);
Serial.print(celData);
Serial.print(" *C ");
Serial.print(“フェールの温度: “);
Serial.print(fehrData);
Serial.print(" *F\t");
Serial.print(“セルの熱指数: “);
Serial.print(hicData);
Serial.print(" *C ");
Serial.print(“フェールの暑さ指数: “);
Serial.print(hifData);
Serial.print(" *F\n");
WiFiClient クライアント。 // WiFi オブジェクトをインスタンス化する
//PusingBox 経由で WiFi クライアントを使用して API サービスを開始する
if (client.connect(WEBSITE, 80))
{
client.print(“GET /pushingbox?devid=” + devid
+ “&humidityData=” + (文字列) 湿度データ
+ “&celData=” + (文字列) celData
+ “&fehrData=” + (文字列) fehrData
+ “&hicData=” + (文字列) hicData
+ “&hifData=” + (文字列) hifData
);
client.println(" HTTP/1.1");
client.print(“ホスト: “);
client.println(ウェブサイト);
client.println(“ユーザーエージェント: ESP8266/1.0”);
client.println(“接続: 閉じる”);
client.println();
}
}
Google App Script コードの例
センサー データ転送用の読み取り可能なスクリプトを作成するために必要なコードは次のとおりです。
GET リクエストクエリ:
https://script.google.com/macros/s/<gscriptID>/exec?celData=data_here
HumidityDat、celData、fehrData、hicData、hifData (GScript、PusingBox、Arduino 変数を記述する順序)
関数 doGet(e) {
Logger.log ( JSON.stringify(e) ); // これはパラメータを表示するためのものです
変数結果 = 'OK';
If (e.parameter == 未定義) {
結果 = 'パラメータなし';
}
それ以外 {
Var id= '<スプレッドシートの URL\;
変数シート = SpreadsheetApp.openById(id).getActivesheet();
変数 newRow =sheet.getLastRow() + 1;
変数 rowData = [];
//var waktu = new Date()'
rowData[0] = 新しい日付(); //列 A のタイムスタンプ用
for (var param in e.parameter) {
logger.log('in for ループ、param='+param);
var value =stripQuotes(e.parameter[param]);
スイッチ (パラメータ) {
case 'humidityData': //パラメータ
rowData[1] = 値; //B列の値
壊す;
ケース 'celData';
rowData[2] = 値;
壊す;
ケース「fehrData」:
rowData[3] = 値 ;
壊す;
ケース「hicData」:
rowData[4] = 値;
壊す;
ケース「hifData」:
rowData[5] = 値;
壊す;
デフォルト:
result = “サポートされていないパラメータ”;
}
Logger.log(JSON.stringify(rowData));
Var newRange =sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([行データ]);
}
ContentService.createTextOutput(結果)を返します。
}
関数stripQuotes(値){
戻り値.replace(/^["']|['|]$/g, "");
}
PushBoxのセットアップ
このサービスは、DHT センサー データと Google スプレッドシートの間の仲介者として機能します。 PushingBox API を使用すると、HTTP で送信されたデータを、Google が認識できる暗号化された HTTPS データに変換できます。
PushingBox では 1 日あたり 1,000 リクエストに制限されていることに注意してください。 ただし、Google が対応する独自の暗号化アルゴリズムを作成するために必要な多くの面倒な作業と専門知識が削減されます。
- PushingBox アカウントをまだお持ちでない場合は、作成します。
- NodeMCU センサー データ プロジェクトにも使用している Gmail アドレスを使用します。
- 「マイサービス」に移動します。
- 「サービスの追加」オプションから新しいサービスを追加します。
- CustomURL というタイトルの最後のオプションまでスクロールし、独自のサービスを設定してください。
- 名前、URL、メソッドを必要とするフィールドに入力します。
- メソッドとして「GET」を選択します。
- URL には、Google Scrip アドレスを作成したときに生成された URL のうち、「script.google.com…」で始まる URL を使用します。
- サービスを送信し、[マイ シナリオ] に移動します。
- 直感的な名前を入力し、追加ボタンを押します。
- 画面にプロンプトが表示されたら、アクションを追加します。
- 各変数の名前をフォーマットして GET メソッドを構成します。 この手順は、記録するセンサーの数と記録する内容によって異なります。
ハードウェアの構成
ESP8266 で DHT センサーを使用している場合は、3.3 V ではなく 5 V でユニットに電力を供給します。 電圧が低いと、正しい測定値が得られない可能性があります。
ESP8266 のピン 2 と D4 を接続します。
ソフトウェアの設定
このセットアップは Arduino IDE (できれば 1.6.4 より新しいバージョン) で動作します。 これは、システムにいくつかのライブラリをダウンロードする必要があることも意味します。
ライブラリは次のリンクから見つけることができます。
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
次のステップでは、Arduino スケッチをアップロードし、プロジェクトとデバイスに合わせて構成します。 プロジェクトに合わせてフォーマットおよびカスタマイズする必要がある関連フィールドは 3 つだけです。
- Wi-Fiネットワーク。
- Wi-Fiのパスワード。
- PushingBox ID。
NodeMCU データ転送にどのようにアプローチしますか?
これを行う方法は他にもあり、NodeMCU ファームウェアを備えた ESP8266 を使用してデータを直接 Google スプレッドシートや他のクラウド プラットフォームに転送するために使用できるセンサー タイプも多数あります。
プロジェクトをパーソナライズするために独自のスクリプトとコードを作成することを好みますか、それとも github やその他のプラットフォームで検証済みのスクリプトをオンラインで検索し、そこから適応しますか? 以下のコメントセクションで、お気に入りのコードとスクリプトのソース、ESP8266 とセンサーの組み合わせをお知らせください。