MKR1000データをGoogleスプレッドシートに送信する
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
このプロジェクトでは、MKR1000でデータを処理し、そのデータをWiFi経由でクラウドのGoogleスプレッドシートに送信できます。このプロジェクトは、クレジットカードに登録したり、独自のブラックボックスAPIを使用したりすることなく実行できます。この特定の例では、安価でユビキタスなDHT11環境センサーを使用していますが、付属のArduinoコードを任意のセンサーまたはデバイスに簡単に変更できます。このプロジェクトは、スケッチでDHT11データをThingspeak.comにアップロードしてグラフィカルなグラフを作成する関連プロジェクトの1つと簡単に組み合わせることができることを指摘する価値があります。
これは4つの部分の最初です。プロジェクトの最初の部分では、付属のGoogle App Scriptコードを使用して、WiFiデータを受け入れるように独自のGoogleスプレッドシートを設定および構成します。
パート1:Googleスプレッドシートの作成と展開
1。 無料のGoogleメールをお持ちでない場合は、登録してください。
2。 無料のGoogleアカウントにログインして、新しい「Googleスプレッドシート」を作成します。これは、WiFi経由でDHTのセンサー値が入力されるスプレッドシートです。この時点で、スプレッドシートのURLキーをコピーして保存する必要があります。このキーは、新しいスプレッドシートの「/ d /」と「/ edit」の間のURLにリストされています(青い円を参照)。
<図>3。 スプレッドシートに「環境データ」のようなオリジナルの名前を付けます。次に、データを処理してスプレッドシートに正しく入力するGoogle App Script(JavaScriptと同様)を作成する必要があります。 Google App Scriptを挿入するには、最初にスプレッドシートからスクリプトエディタに移動します。
ツール→スクリプトエディタ
これで、Google ScriptEditorページが表示されます。これで、Gscriptに「MyEnvironmentalGScript」のような特別な名前を付けることができます。この時点で、スクリプトエディタページでやるべきことが4つ残っています。
A)含まれているGoogleScriptコードをコピーしてエディターに貼り付けます
B)以前に保存したスプレッドシートのURLキー(手順2)をコピーして、Google Scriptコードの正しい行(引用符の間)に次のように貼り付けます。
var id =''; //スプレッドシートID
C)スクリプトを保存します: ファイル→すべて保存
D)Webアプリとしてデプロイ: 公開-→Webアプリとしてデプロイ…
<図>4。 Googleスプレッドシートを設定するための最後のステップでは、Web配置パラメータを構成します。これらすべてのフィールドを正しく設定することが重要です。 4つのフィールドすべてを正確に設定しないと、スプレッドシートは正しく機能しません。
フィールド1)「現在のウェブアプリのURL:」をコピーして保存します 「これは生成されたばかりですが、後でPushingBoxでAPIを構成するときに必要になります。
フィールド2)プロジェクトバージョンを「 new 」として保存します 」各反復で、作成するスクリプトリビジョンごとに新しいプロジェクトバージョンを作成しない場合(リビジョンを作成する場合)、スクリプトリビジョンはWeb上で更新されないことに注意することが重要です。これは直感に反し、無視しがちですが、現在Googleがこのシステムを構成している方法です。
フィールド3)「 アプリを次のように実行する
:
<コード> コード> 「これを「 me(your GMail here)
」に設定します 」。
フィールド4)「 アプリにアクセスできるユーザー
:
「これを「誰でも、匿名でも
」に設定します 。 "
パート2:PushingBoxの構成
Pushingbox.comは、DHTデータをGoogleスプレッドシートで利用できるようにするための、シンプルで無料の簡単なAPI仲介者として機能します。 PushingBox API仲介を使用する必要があるのは、HTTPで送信されたデータをGoogle準拠のHTTPS暗号化データに変換することです。標準の要件を満たすために重要な暗号化アルゴリズムを作成することもできますが、PushingBoxを使用する方が簡単で、1日あたり最大1,000件のリクエストが無料で提供されます。さらに、独自のパラメータを入力できる「ブラックボックス」APIを処理する必要はありませんが、カスタマイズをほとんど制御できず、関数が実際にどのように機能するかについての実際のアイデアはありません。以下は、データを処理するようにPushingboxを構成するための手順です。
1.Gmailを使用してPushingBoxアカウントを作成します。
2.上部にある[マイサービス]をクリックします
3. [マイサービス]で[サービスの追加]ボックスに移動し、[サービスの追加]をクリックします。
4.作成するサービスは、サービスのリストの最後の項目であり、次のように呼び出されます。” CustomURL、
独自のサービスを設定してください!
」。次に、このCustomUrlサービスを選択します。
5.ボックスが開き、3つのアイテムを要求します。以下のように記入してから、送信を押してください
CustomURL構成の名前:
ルートURL: このURLはで始まります https://script.google.com ... これはパート1で保存したGoogleScriptアドレスであるため
方法:
<図>6.サービスを送信した後、サービスのシナリオを作成する必要があります。これを行うには、ページの上部にある[マイシナリオ]を選択します。
7. [シナリオの作成またはデバイスの追加]ボックスに、シナリオの適切な名前を入力します。サービスに名前を付けたら、右側の[追加]ボタンをクリックします。
8.ここで、「シナリオのアクションを追加する」というメッセージが表示されます。前の手順で作成したサービス名の横に表示される「このサービスにアクションを追加する」ボタンを選択する必要があります。これにより、新しいシナリオが新しいサービスに割り当てられます。
9.「Get」または「Post」メソッドを要求するデータボックスが開きます(これは直感に反しているように見えますが、Getメソッドを使用します)。すべてのDHTデータ(5つのデータポイント)をGoogleシートに記録するには、Google AppScriptにリストされている変数名をArduinoスケッチにリストされている名前にリンクする必要があります。 Pushingbox APIで名前を正しくフォーマットすると、このリンクタスクが実行されます。次の文字列をコピーしてボックスに貼り付けます。
?humidityData =$ humidityData $&celData =$ celData $&fehrData =$ fehrData $&hicData =$ hicData $&hifData =$ hifData $
注: ステートメントは「」で始まります ? 」は「GET」を示します。
結果は次のようになりますが、独自のシナリオ名とデバイスID番号が使用されます:
<図>必ず「DeviceID」文字列をコピーしてください。次のステップでの予備テストと、後のパート4のArduinoスケッチの両方で必要になります。
3.APIのテスト
DHTのデータをWeb経由で送信するようにMKR1000をプログラムする最後の急勾配に進む前に、これまでに行ったすべてが正しいことをテストすると便利です。ハードウェア部分の完了を待つと、エラーの原因を突き止めるのがより困難になる可能性があります。幸い、これまでのところ、コードをテストする簡単な方法があります。ハードコードされた疑似データをWebブラウザのアドレスバーに直接入力して、Googleシートが正しく更新されていることを確認できます。これは、ブラウザのアドレスバーにコピーして貼り付けることができるものの例です。
http://api.pushingbox.com/pushingbox?devid=(YOUR-DEVID-HERE)&humidityData=33&celData=44&fehrData=111&hicData=22&hifData=77
必要に応じて、後続の行に異なる値を使用して新しい偽のデータを再入力することもできますが、Pushingboxからのリクエストは1日あたり1,000件しかないため、気が狂うことはありません。この手順でスプレッドシートが更新されなかった場合は、パート4を試す前に、この説明のパート1〜3に戻ってエラーを確認してください。
パート4
ハードコードされた疑似データをブラウザからGoogleスプレッドシートに直接プッシュできたことを確認したら、Wi-Fi経由でPushingboxを介してMKR1000からGoogleスプレッドシートにデータを直接送信する次のステップに進むことができます。付属のArduinoスケッチをMKR1000にアップロードして実行する前に、次の3つの手順を完了する必要があります。
ハードウェア
1. MKR1000をDHTに配線する:これは、特にMKR1000を使用している場合、簡単な作業です。私はあなたが5ボルトとしてリストされているMKR1000で利用可能な5ボルトでDHTに電力を供給することをお勧めします。おそらくDHTは3.3vで動作する可能性がありますが、私はDHTの測定値がより低い電圧で信頼できることを発見していません。 DHTからMKR1000にデータを入力するためにいくつかの異なるピンを使用するオプションがありますが、私のスケッチではピン5 を使用しています。 ピンD5 にマップする ボード上部のMKR1000にあります。
<図>ソフトウェア(1)
2.MKR1000で動作するようにArduinoIDEを設定するにはいくつかの手順があります。これらの手順には、2つのライブラリのダウンロードと、正しいMRK1000ボードパッケージ([ツール]-> [ボード]-> [ボードマネージャー])を使用したArduino IDE(1.6.4以降)の構成が含まれます。多くの方は、必要なすべてのソフトウェアをすでにインストールしています。インストールしていない方のために、必要なライブラリとMKR1000ボードサポートパッケージを取得するためのリンクを以下に示します。また、最新のMKR1000ボードサポートパッケージが正しく機能しなかったため、以前のバージョンのMKR1000ボードパッケージを使用する必要があったことにも注意してください。これを読むまでに、この問題が解決されていることを願っています。
https://www.arduino.cc/en/Reference/WiFi101
スケッチに必要な2つのライブラリ:
- https://github.com/arduino-libraries/WiFi101
- https://learn.adafruit.com/dht
ソフトウェア(2)
3.これで、プロジェクトの最終ステップの準備が整いました。付属のArduinoスケッチをコピーして貼り付け、デバイスに合わせてカスタマイズしてから、スケッチをMKR1000にアップロードする必要があります。スケッチはまた、9600ボーでシリアル出力を中継するため、WiFi経由で送信されるデータを監視できます。カスタマイズする必要があるArduinoスケッチの3つのフィールドは次のとおりです。
A)WiFi名
B)WiFiパスワード
C)プッシュボックスのデバイスID(分割)
これで完了です。すべてが正しく完了すると、出力は次の図のようになります。
<図>このプロジェクトの基盤となったソフトウェアコンポーネントの大部分を構築してくれたすべての人々に感謝します。適切な帰属のために、コードコメントにそれらの名前をリストしました。このプロジェクトのどの部分でも、独自の魔法を作成するために必要なものを自由に使用してください。
-SDB
コード
- DHTを使用したPushingBox経由でのMKR1000からGoogleスプレッドシートへ
- HTTPS形式でワイヤレスデータを受信するためのGoogleScript
- PushingBox URL文字列(HTTPS接着剤用)
DHT Arduino を使用してPushingBox経由でGoogleスプレッドシートにMKR1000
このArduinoスケッチは、WiFIを介してデータをプッシュボックスにプッシュして暗号化し、次にPushingBoxにプッシュしてそのデータをGoogleシートに記録します// --------------------- -------------------------- //このスケッチは、dht.hライブラリ用のAdafruitDHTセンサーとtdicolaを組み合わせたものです// https:// learn .adafruit.com / dht / overview // https://gist.github.com/teos0009/acad7d1e54b97f4b2a88//他の著者Arduinoおよび関連するGoogleスクリプト:// AdityaRiska Putra // Ahmed Reza Rafsanzani // Ryan Eko Saputro //関連項目:// http://jarkomdityaz.appspot.com/////ELINS UGM //// MKR1000のHackster.ioプロジェクト用に変更// Stephen Borsay(Portland、OR、USA)// Arduino以降httpsはできません。PushingboxAPI(httpを使用)を使用して// Googleスクリプト(httpsを使用)を実行する必要があります。または、IvanのSecureWifi暗号化を使用します。#include#include "DHT.h" #define DHTPIN 5 //接続しているピン、pin1は端から5番目のピンです//使用しているDHTセンサーの種類をコメント解除します!#define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 //#define DHTTYPE DHT22 // DHT 22DHT dht(DHTPIN、DHTTYPE); const char WEBSITE [] ="api.pushingbox.com"; // pushingbox API serverconst String devid ="YOUR_DEVICEID"; //シナリオのPushingboxのデバイスIDconstchar * MY_SSID ="YOUR SSID"; const char * MY_PWD ="YOUR WiFi PASSWORD"; int status =WL_IDLE_STATUS; // DNSを使用したくない場合(およびスケッチを減らした場合)サイズ)// server:// IPAddress server(74,125,232,128);の名前の代わりに数値IPを使用します。 // Googleの数値IP(DNSなし)void setup(){//シリアルを初期化し、ポートが開くのを待ちます:Serial.begin(9600); while(!Serial){; //シリアルポートが接続するのを待ちます。ネイティブUSBポートにのみ必要} //シールドの存在を確認します:if(WiFi.status()==WL_NO_SHIELD){Serial.println( "WiFiシールドが存在しません"); //続行しない:while(true); } // Wifiネットワークへの接続を試みます:while(status!=WL_CONNECTED){Serial.print( "SSIDへの接続を試みています:"); Serial.println(MY_SSID); // WPA / WPA2ネットワークに接続します。open/ WEPネットワークを使用している場合はこの行を変更しますstatus =WiFi.begin(MY_SSID、MY_PWD); //接続を10秒待ちます:delay(10000); } Serial.println( "Wi-Fiに接続"); printWifiStatus(); } void loop(){//測定の合間に待ちます。 delay(10000); // floatを使用することをお勧めしますが、パッケージサイズまたはfloat変換は機能しません//文字列関数またはfloat変換関数で将来改訂されますint湿度データ=dht.readHumidity(); //温度を摂氏(デフォルト)として読み取りますint celData =dht.readTemperature(); //温度を華氏(isFahrenheit =true)として読み取りますint fehrData =dht.readTemperature(true); //読み取りが失敗したかどうかを確認し、早期に終了します(再試行します)。 if(isnan(humidityData)|| isnan(celData)|| isnan(fehrData)){Serial.println( "DHTセンサーからの読み取りに失敗しました!");戻る; } //華氏で熱指数を計算します(デフォルト)int hifData =dht.computeHeatIndex(fehrData、HydriumData); //摂氏で熱指数を計算します(isFahreheit =false)int hicData =dht.computeHeatIndex(celData、HydriumData、false); Serial.print( "湿度:"); Serial.print(humidityData); Serial.print( "%\ t"); Serial.print( "温度:"); Serial.print(celData); Serial.print( "* C"); Serial.print(fehrData); Serial.print( "* F \ t"); Serial.print( "熱指数:"); Serial.print(hicData); Serial.print( "* C"); Serial.print(hifData); Serial.println( "* F \ n"); Serial.println( "\ nサーバーにデータを送信しています..."); //接続を取得した場合は、serial:WiFiClientクライアントを介して報告します。 // WiFiオブジェクトをインスタンス化し、ここからスコープすることも、グローバルにスコープすることもできます// PushingBoxを介してWiFiクライアントを使用してAPIサービスを取得し、Googleに中継しますif(client.connect(WEBSITE、80)){client.print( "GET / pushingbox?devid =" + devid + "&humidityData =" +(文字列)humidityData + "&celData =" +(文字列)celData + "&fehrData =" +(文字列)fehrData + "&hicData =" +(文字列)hicData + "&hifData =" +(文字列) hifData); // HTTP 1.1は永続的な接続を提供し、バッチリクエストを許可します//または出力バッファにパイプラインしますclient.println( "HTTP / 1.1"); client.print( "ホスト:"); client.println(WEBSITE); client.println( "ユーザーエージェント:MKR1000 / 1.0"); // MKR1000の場合、esp8266とは異なり、接続を閉じないclient.println(); Serial.println( "\ n送信されたデータ"); }} void printWifiStatus(){//接続しているネットワークのSSIDを出力します:Serial.print( "SSID:"); Serial.println(WiFi.SSID()); // WiFiシールドのIPアドレスを出力します:IPAddress ip =WiFi.localIP(); Serial.print( "IPアドレス:"); Serial.println(ip); //受信信号強度を出力します:long rssi =WiFi.RSSI(); Serial.print( "信号強度(RSSI):"); Serial.print(rssi); Serial.println( "dBm");}
HTTPS形式でワイヤレスデータを受信するためのGoogleScript JavaScript
これをGoogleスプレッドシートのスクリプトエディタに貼り付けて、ワイヤレスデータを受信します。暗号化/セキュリティ証明書のHTTPS形式である必要があることを忘れないでください。そのため、PushingBox// --------------------------を使用しています。 --------------------- //元々はMogsdad @ Stackoverflowによって公開されました//jarkomdityaz.appspot.com用に変更されました// StephenBorsayによってHackster.io用に変更されました// - - - - - - - - - - - - - - - - - - - - - - - -/*得るクエリのリクエスト:https://script.google.com/macros/s// exec?celData =data_here ----------------------- ----------------------------------------------- GScript、PushingBoxおよびArduino / ESP8266変数の順序:humidityDatcelDatafehrDatahicDatahifData ----------------------------------------- ----------- * // *スプレッドシートAPIの使用* / function doGet(e){Logger.log(JSON.stringify(e)); //パラメータを表示varresult ='Ok'; //成功したと見なすif(e.parameter ==undefined){result ='パラメータなし'; } else {var id =' PushingBox URL文字列(HTTPS接着剤用) HTML
これは、まったく同じ名前でGoogleスプレッドシートに送信されるArduino / MKR1000変数名を接続するための文字列です。仲介者をRESTfullyに有効にするセキュリティとしてPushingBoxを使用します。?humidityData =$ humidityData $&celData =$ celData $&fehrData =$ fehrData $&hicData =$ hicData $&hifData =$ hifData $
カスタムパーツとエンクロージャー
その他のデータ
その他のワイヤレスhttps://github.com/sborsay/Arduino_Wireless 回路図
レイアウト 製造プロセス