MKR1000 ke Google Sheets Tanpa Hambatan: Unggah Data Sensor Melalui WiFi
Komponen dan Perlengkapan
Arduino MKR1000
×
1
Sensor Suhu & Kelembaban DHT11 (4 pin)
×
1
Kawat jumper (generik)
×
1
Papan roti (generik)
×
1
Aplikasi dan Layanan Online
Arduino IDE
Google Sheets
Tentang Proyek Ini
Proyek ini memungkinkan Anda memproses data dengan MKR1000 dan mengirim data tersebut ke Google Sheets di cloud melalui WiFi. Proyek ini dapat dilakukan tanpa pendaftaran kartu kredit atau penggunaan API proprietary black box. Untuk contoh spesifik ini saya menggunakan sensor lingkungan DHT11 yang murah dan umum, namun Anda dapat dengan mudah mengubah kode Arduino yang disertakan untuk sensor atau perangkat apa pun yang Anda sukai. Nilai untuk diperhatikan sekarang bahwa proyek ini dapat dengan mudah digabungkan dalam sketsa dengan salah satu proyek terkait saya, yang mengunggah data DHT11 ke Thingspeak.com untuk grafik diagram.
Ini adalah bagian pertama dari empat bagian. Dalam bagian pertama proyek Anda akan menyiapkan dan mengonfigurasi Google Sheet Anda sendiri untuk menerima data WiFi Anda dengan menggunakan kode Google App Script yang disertakan.
Bagian 1: Membuat dan Menyebarkan Google Sheet Anda
1. Daftarkan email gratis Google jika Anda belum memilikinya.
2. Masuk ke akun Google gratis Anda dan buat “Google Sheet” baru, ini adalah spreadsheet yang akan diisi oleh nilai sensor DHT kami melalui WiFi. Titik ini Anda perlu menyalin dan menyimpan kunci URL spreadsheet Anda. Kunci ini tercantum di URL antara “/d/” dan “/edit” dari spreadsheet baru Anda (lihat lingkaran biru).
3. Beri nama Spreadsheet Anda dengan sesuatu yang orisinal seperti “Environmental Data,” sekarang kita harus membuat Google App Script kami (mirip dengan JavaScript) yang akan memproses data kami dan mengisi spreadsheet kami dengan benar. Untuk memasukkan Google App Script kami kita pertama-tama menavigasi dari spreadsheet kami ke Script Editor:
Tools →Script Editor
Kami sekarang akan berada di halaman Google Script Editor. Sekarang kita dapat memberi nama Gscript kami dengan sesuatu yang super kreatif seperti “My Environmental GScript”. Pada titik ini kita memiliki empat hal yang tersisa untuk dilakukan pada halaman Script editor.
A) Salin dan Tempelkan kode Google Script yang disertakan ke Editor
B) Salin dan tempelkan kunci URL spreadsheet yang sebelumnya disimpan (langkah 2) ke baris yang benar dalam kode Google Script (antara tanda kutip) di mana itu mengatakan:
var id = ' '; // Spreadsheet ID
C) Simpan skrip: File→Save All
D) Terapkan sebagai web App: Publish-→ Deploy as web App…
4. Langkah akhir kami untuk menyiapkan Google sheet akan melibatkan pengonfigurasi parameter penerapan Web. Penting untuk mengatur semua bidang ini dengan benar. Jika Anda tidak mengatur keempat bidang dengan tepat spreadsheet Anda tidak akan berfungsi dengan baik.
Bidang 1) Salin dan Simpan “Current web app URL:“ yang baru saja dihasilkan, kita akan membutuhkan ini nanti ketika kita mengonfigurasi API kami di PushingBox.
Bidang 2) Simpan versi proyek sebagai “new” pada setiap iterasi, penting untuk dicatat bahwa jika Anda tidak membuat versi proyek baru untuk setiap revisi skrip yang Anda buat (jika Anda memutuskan untuk melakukan revisi apa pun), revisi skrip Anda tidak akan diperbarui di web. Ini tidak intuitif, dan mudah diabaikan, tetapi ini saat ini bagaimana Google mengonfigurasi sistem ini.
Bidang 3) “Execute the app as:“ atur ini menjadi “me(your GMail here)”.
Bidang 4) “Who has access to the app: “ atur ini menjadi “anyone, even anonymous."
Bagian 2: Mengonfigurasi PushingBox
Pushingbox.com berfungsi sebagai perantara API yang sederhana, gratis, dan mudah dalam memungkinkan data DHT kami dapat diterima oleh Google Sheets. Kebutuhan untuk menggunakan API perantara PushingBox adalah untuk mengubah data yang ditransmisikan HTTP kami menjadi data HTTPS terenkripsi yang sesuai dengan Google. Kami dapat mencoba membuat algoritma enkripsi yang tidak trivial untuk memenuhi persyaratan standar tetapi menggunakan PushingBox lebih mudah, dan kami diberi hingga 1.000 permintaan per hari secara gratis. Selain itu kita tidak perlu berurusan dengan API “Black Box” apa pun yang kita dapat memasukkan parameter kita sendiri, tetapi kemudian mendapatkan sedikit kontrol atas kustomisasi, dan tidak ada ide nyata tentang cara kerja fungsi tersebut. Berikut adalah langkah-langkah untuk mengonfigurasi Pushingbox untuk bekerja dengan data kami:
1. Buat akun PushingBox menggunakan Gmail Anda.
2. Di atas klik “My Services”
3. Sementara sekarang di “My Services” pergi ke kotak “Add a service” dan klik “Add a service”.
4. Layanan yang Anda inginkan adalah item terakhir pada daftar layanan dan disebut: ”CustomURL, Set your own service !”. Sekarang pilih layanan CustomUrl ini.
5. Sebuah kotak akan terbuka dan meminta tiga item. Isi seperti di bawah ini, lalu tekan submit
Nama konfigurasi CustomURL Anda:
Root URL:Url ini akan dimulai dengan https://script.google.com... karena ini adalah alamat Google Script yang disimpan dari Bagian 1
Method:
6. Setelah mengajukan layanan Anda Anda sekarang harus membuat skenario untuk layanan. Untuk melakukan ini pilih “My Scenarios” di atas halaman.
7. Masukkan nama yang sesuai untuk skenario Anda di kotak “Create a scenario or add a device”. Setelah Anda menamai layanan Anda klik tombol “add” di kanan.
8. Sekarang akan meminta untuk “Add an action for your scenario” Anda sekarang harus memilih tombol “Add an action to this service” yang terdaftar di samping nama layanan yang Anda buat di langkah sebelumnya. Ini menetapkan skenario baru Anda ke layanan baru Anda.
9. Sebuah kotak data akan terbuka meminta metode “Get” atau “Post” Anda (kami menggunakan metode Get meskipun ini tampaknya tidak intuitif). Untuk mencatat semua data DHT kami (lima titik data) ke spreadsheet Google Anda Anda perlu menautkan nama variabel yang tercantum dalam Google App Script Anda ke nama yang tercantum dalam sketsa Arduino kami. Memformat nama dengan benar di API Pushingbox akan menyelesaikan tugas penautan ini. Salin dan tempel string berikut ke dalam kotak Anda.
Catatan: Pernyataan dimulai dengan “ ? “ untuk menunjukkan “GET”.
Hasilnya harus terlihat seperti berikut, tetapi dengan nama skenario dan nomor ID perangkat Anda sendiri:
Pastikan untuk menyalin string “DeviceID” Anda, Anda akan membutuhkannya untuk pengujian awal di langkah berikutnya, dan nanti untuk Sketsa Arduino di Bagian 4.
3. Menguji API
Sebelum kita melanjutkan ke langkah terakhir, di mana kita memprogram MKR1000 untuk mengirim data DHT kami melalui web, akan sangat membantu untuk menguji bahwa semua yang telah kita lakukan sejauh ini benar. Jika kita menunggu untuk menyelesaikan bagian hardware maka penyebab kesalahan apa pun mungkin lebih sulit untuk ditelusuri. Untungnya kita memiliki metode sederhana untuk menguji kode kita sejauh ini. Kami dapat langsung memasukkan beberapa pseudo-data yang di-hard-code ke dalam bilah alamat browser kami dan memeriksa apakah spreadsheet Google kami diperbarui dengan benar. Berikut adalah contoh apa yang dapat Anda salin dan tempelkan ke bilah alamat browser Anda.
Jika Anda suka Anda bahkan dapat memasukkan ulang data palsu baru dengan nilai yang berbeda untuk baris selanjutnya, namun ingat, Anda hanya memiliki 1.000 permintaan per hari dari Pushingbox jangan berlebihan! Jika prosedur ini tidak memperbarui spreadsheet Anda maka kembali dan tinjau Bagian 1 -3 dari instruksi ini untuk kesalahan sebelum mencoba Bagian 4.
Bagian 4
Setelah memastikan Anda dapat mendorong beberapa pseudo-data yang di-hard-code secara langsung dari browser Anda ke Google Sheet Anda Anda sekarang siap untuk langkah berikutnya yang melibatkan pengiriman data secara langsung dari MKR1000 ke Google Sheets melalui Pushingbox melalui WiFi. Sebelum Anda dapat mengunggah dan menjalankan sketsa Arduino yang disertakan ke MKR1000 Anda harus menyelesaikan tiga langkah berikut.
Hardware
1. Merangkaikan MKR1000 ke DHT: Ini adalah tugas sederhana, terutama jika menggunakan MKR1000. Saya merekomendasikan Anda menyala DHT dengan 5 volt, yang tersedia pada MKR1000, terdaftar sebagai 5v. Tidak disangka DHT dapat bekerja pada 3.3v tetapi saya tidak menemukan pembacaan DHT yang andal pada tegangan yang lebih rendah. Anda memiliki opsi untuk menggunakan sejumlah pin yang berbeda untuk memasukkan data dari DHT ke MKR1000, tetapi dalam sketsa saya saya menggunakan Pin 5 yang memetakan ke Pin D5 pada MKR1000 di atas papan.
Software(1)
2. Ada beberapa langkah untuk menyiapkan Arduino IDE Anda untuk bekerja dengan MKR1000 Anda. Langkah-langkah ini mencakup unduhan dua library dan konfigurasi Arduino IDE (1.6.4 atau lebih baru) dengan paket Board MRK1000 yang benar (Tools-->Board-->Boards Manager). Banyak dari Anda telah menginstal semua perangkat lunak yang Anda butuhkan, bagi mereka yang belum, di bawah ini adalah tautan untuk mengambil library yang dibutuhkan dan paket dukungan papan MKR1000. Juga perhatikan saya harus menggunakan versi sebelumnya dari paket Board MKR1000 karena paket dukungan papan MKR1000 terbaru tidak berfungsi dengan benar. Saya berharap masalah ini telah teratasi saat Anda membaca ini.
https://www.arduino.cc/en/Reference/WiFi101
Dua library yang diperlukan untuk sketsa:
https://github.com/arduino-libraries/WiFi101
https://learn.adafruit.com/dht
Software(2)
3. Anda sekarang siap untuk langkah akhir proyek, Anda perlu menyalin dan menempelkan sketsa Arduino yang disertakan, menyesuaikannya untuk perangkat Anda, dan kemudian mengunggah sketsa ke MKR1000 Anda. Sketsa ini juga meneruskan output serial pada 9600 baud sehingga Anda dapat memantau data yang dikirim melalui WiFi. Tiga bidang pada sketsa Arduino yang harus Anda kustomisasi adalah:
A) Nama WiFi Anda
B) Kata sandi WiFi Anda
C) ID Perangkat Pushing box Anda (devid)
Itu saja, Anda selesai! Jika semuanya selesai dengan benar output Anda akan terlihat seperti gambar di bawah ini:
Terima kasih kepada semua orang yang telah membangun sebagian besar komponen perangkat lunak yang proyek ini didasarkan. Saya mencantumkan nama mereka dalam komentar kode untuk atribusi yang tepat. Silakan gunakan potongan proyek apa pun yang Anda butuhkan untuk membuat sihir Anda sendiri.
-SDB
Kode
MKR1000 ke Google Sheets melalui PushingBox menggunakan th DHT
Google Script untuk menerima data nirkabel dalam format HTTPS
String URL PushingBox (untuk perekat HTTPS)
MKR1000 ke Google Sheets melalui PushingBox menggunakan th DHTArduino
Sketsa Arduino ini mendorong data melalui WiFI ke pushing box untuk enkripsi lalu ke PushingBox untuk mencatat data tersebut ke Google Sheet Anda
//----------------------------------------------- //This sketch is combined from Adafruit DHT sensor and tdicola for dht.h library // https://learn.adafruit.com/dht/overview // https://gist.github.com/teos0009/acad7d1e54b97f4b2a88 //other Authors Arduino and associated Google Script: //Aditya Riska Putra //Ahmed Reza Rafsanzani //Ryan Eko Saputro //See Also: //https://jarkomdityaz.appspot.com/ // //ELINS UGM // //Modified for Hackster.io project for the MKR1000 //by Stephen Borsay(Portland, OR, USA) //Since Arduino can't https, we need to use Pushingbox API (uses http)to run //the Google Script (uses https). Alternatly use Ivan's SecureWifi encryption #include <WiFi101.h> #include "DHT.h" #define DHTPIN 5 // what pin we're connected to, pin1 is 5th pin from end // Uncomment whatever DHT sensor type you're using! #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 server const String devid = "YOUR_DEVICEID"; //device ID on Pushingbox for our Scenario const char* MY_SSID = "YOUR SSID"; const char* MY_PWD = "YOUR WiFi PASSWORD"; int status = WL_IDLE_STATUS; // if you don't want to use DNS (and reduce your sketch size) // use the numeric IP instead of the name for the server: //IPAddress server(74,125,232,128); // numeric IP for Google (no DNS) void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue: while (true); } // attempt to connect to Wifi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(MY_SSID); //Connect to WPA/WPA2 network.Change this line if using open/WEP network status = WiFi.begin(MY_SSID, MY_PWD); // wait 10 seconds for connection: delay(10000); } Serial.println("Connected to wifi"); printWifiStatus(); } void loop() { // Wait between measurements. delay(10000); //prefer to use float, but package size or float conversion isnt working //will revise in future with a string fuction or float conversion function int humidityData = dht.readHumidity(); // Read temperature as Celsius (the default) int celData = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) int fehrData = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(humidityData) || isnan(celData) || isnan(fehrData)) { Serial.println("Failed to read from DHT sensor!"); return; } // Compute heat index in Fahrenheit (the default) int hifData = dht.computeHeatIndex(fehrData, humidityData); // Compute heat index in Celsius (isFahreheit = false) int hicData = dht.computeHeatIndex(celData, humidityData, false); Serial.print("Humidity: "); Serial.print(humidityData); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(celData); Serial.print(" *C "); Serial.print(fehrData); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hicData); Serial.print(" *C "); Serial.print(hifData); Serial.println(" *F\n"); Serial.println("\nSending Data to Server..."); // if you get a connection, report back via serial: WiFiClient client; //Instantiate WiFi object, can scope from here or Globally //API service using WiFi Client through PushingBox then relayed to Google if (client.connect(WEBSITE, 80)) { client.print("GET /pushingbox?devid=" + devid + "&humidityData=" + (String) humidityData + "&celData=" + (String) celData + "&fehrData=" + (String) fehrData + "&hicData=" + (String) hicData + "&hifData=" + (String) hifData ); // HTTP 1.1 provides a persistent connection, allowing batched requests // or pipelined to an output buffer client.println(" HTTP/1.1"); client.print("Host: "); client.println(WEBSITE); client.println("User-Agent: MKR1000/1.0"); //for MKR1000, unlike esp8266, do not close connection client.println(); Serial.println("\nData Sent"); } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }
Google Script untuk menerima data nirkabel dalam format HTTPSJavaScript
Tempelkan ini ke Script Editor spreadsheet Google Anda untuk menerima data nirkabel Anda. Ingat itu harus dalam format HTTPS terenkripsi/sertifikat keamanan, itulah mengapa saya menggunakan PushingBox
//----------------------------------------------- //Originally published by Mogsdad@Stackoverflow //Modified for jarkomdityaz.appspot.com //Modified for Hackster.io by Stephen Borsay //----------------------------------------------- /* GET request query: https://script.google.com/macros/s/<gscript id>/exec?celData=data_here ---------------------------------------------------------------------- GScript, PushingBox and Arduino/ESP8266 Variables in order: humidityDat celData fehrData hicData hifData ---------------------------------------------------- */ /* Using spreadsheet API */ function doGet(e) { Logger.log( JSON.stringify(e) ); // view parameters var result = 'Ok'; // assume success if (e.parameter == undefined) { result = 'No Parameters'; } else { var id = '<YOUR_SPREADSHEET_URL_HERE';//docs.google.com/spreadsheetURL/d var sheet = SpreadsheetApp.openById(id).getActiveSheet(); var newRow = sheet.getLastRow() + 1; var rowData = []; //var waktu = new Date(); rowData[0] = new Date(); // Timestamp in column A for (var param in e.parameter) { Logger.log('In for loop, param='+param); var value = stripQuotes(e.parameter[param]); //Logger.log(param + ':' + e.parameter[param]); switch (param) { case 'humidityData': //Parameter rowData[1] = value; //Value in column B break; case 'celData': rowData[2] = value; break; case 'fehrData': rowData[3] = value; break; case 'hicData': rowData[4] = value; break; case 'hifData': rowData[5] = value; break; default: result = "unsupported parameter"; } } Logger.log(JSON.stringify(rowData)); // Write new row below var newRange = sheet.getRange(newRow, 1, 1, rowData.length); newRange.setValues([rowData]); } // Return result of operation return ContentService.createTextOutput(result); } /** * Remove leading and trailing single or double quotes */ function stripQuotes( value ) { return value.replace(/^["']|['"]$/g, ""); }
String URL PushingBox (untuk perekat HTTPS)HTML
Ini adalah string Anda untuk menghubungkan nama variabel Arduino/MKR1000 yang ditransmisikan ke Google Sheets dengan nama yang sama persis. Menggunakan PushingBox sebagai perantara yang mengaktifkan keamanan RESTfully.