Mempublikasikan hasil pembacaan sensor BME280 ke G-Sheets menggunakan ESP32

Halo teman-teman semua !!!
Kembali lagi bersama aku dalam blog pendidikan ini. Kali ini aku akan membahas mengenai bagaimana sih cara mempublikasikan hasil yang kita dapat dari sensor BME280 ke dalam Google Sheets. Jadi nanti didalam Google Sheets akan otomatis tertulis hasil dari sensor ini. Dan tentunya dalam pengerjaan proyek ini kita menggunakan ESP32 sebagai platformnya. Aku berterima kasih kembali kepada website www.randomnerdtutorials.com karena telah membantuku dalam pengerjaan tugas ini. Beruntungnya aku, aku langsung berhasil dalam percobaan pertama dalam pembuatan proyek ini. Hal ini terjadi karena penjelasan yang diberikan dalam website tersebut sangat jelas dan dapat membuat saya langsung mengerti. Baiklah teman-teman tanpa banyak berbasa basi langsung saja kita ke pembahasan bagaimana cara membuatnya. Cekidot !!!

Membuat Akun IFTTT

Dalam proyek ini kita menggunakan IFTTT untuk mengintegrasikan hasil pembacaan ke Google Sheets. Jadi, langkah awal dalam proyek ini adalah membuat akun IFTTT jika kalian belum punya. Kalian tinggal masuk ke halaman : ifttt.com. Lalu, masukkan email pribadi kalian di kolom yang tersedia dan klik "Get Started" untuk masuk ke akun kalian.

Membuat Applet

Langkah selanjutnya adalah kalian perlu  membuat sebuah applet di dalam akun kalian tersebut. Berikut adalah langkah - langkah pembuatannya.

1.  Klik profil kalian yang berada di sudut kanan atas halaman dan pilih "Create".


2. Klik tulisan ""this" seperti yang tertera pada gambar berikut.


3. Pada kolom pencarian yang tersedia, ketikkan "Webhooks" dan klik kotak webhooks tersebut.


4. Pilih trigger "Receive a web request".


5. Beri nama untuk eventnya nanti di dalam Google Sheets. Disini aku pakai nama                    Hasil_Sensor_BME280. Setelah itu klik "Create trigger".


6. Klik kata "that" untuk melanjutkan.


7. Pada kolom pencarian yang tersedia cari "Goole Sheets" dan klik ikonnya.


8. Jika kalian belum pernah terhubung ke servis Google Sheet, kalian perlu mengklik tombol "Connect"


9. Pilih aksi "Add row to spreedsheet".


10. Ketik nama File Spreedsheet pada kolom pertama. Kolom yang lain biarkan saja secara default terisi. Pada kolom path, kalian boleh menentukan path untuk menentukan letak file Spreedsheet didalam Google Drive kalian. Jika dibiarkan secara default, maka file spreedsheet akan disimpan di dalam folder baru bernama IFTTT di dalam Google Drive kalian.


11. Applet kalian akan selesai terbentuk dengan mengklik tombol "Finish" seperti di bawah ini.

Test Applet

Setelah selesai membuat applet, alangkah baiknya untuk kita melakukan test terhadap applet tersebut agar semuanya proyek ini berjalan dengan lancar. Berikut adalah langkah pengetesannya. 

1. Pergi ke halaman Webhooks Service Page, dan klik tombol "Documentation".


2. Di halaman ini, akan tersedia API Key kalian. API Key ini unik dan jangan sebarkan kepada orang lain. Isi kolom - kolom yang kosong sesuai dengan gambar berikut.


3. Ketika berhasil melakukan trigger, akan muncul kotak hijau pada bagian atas halaman ini.

4. Pergi ke google drive kalian sesuai dengan email yang kalian masukkan di awal tadi. Disitu, akan ada folder tempat spreedsheet dan di dalam folder tersebut terdapat spreedsheet yang telah kalian buat tadi.


5. Buka spreedsheet tersebut. Kalian akan melihat isinya sama dengan data nilai yang kalian masukkkan sebelumnya dalam pengetesan appletnya. Jika ini terjadi, maka applet kalian telah berhasil dites.


Setelah langkah - langkah di atas selesai, buat kembali rangkaian BME280 dengan ESP32 yang telah tersedia pada artikel sebelum artikel ini. Silahkan teman - teman lihat disana. Lalu, sambungkan ESP32 kalian ke PC dan kita masuk ke bagian codenya.

Code

Silahkan salin kode berikut ke dalam aplikasi Arduino IDE milik kalian, tetapi jangan langsung upload karena ada bagian yang harus kalian edit sendiri.

/*
 * Rui Santos 
 * Complete Project Details https://randomnerdtutorials.com
 */
 
#ifdef ESP32
  #include <WiFi.h>
#else
  #include <ESP8266WiFi.h>
#endif

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Replace with your SSID and Password
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Replace with your unique IFTTT URL resource
const char* resource = "REPLACE_WITH_YOUR_IFTTT_URL_RESOURCE";

// How your resource variable should look like, but with your own API KEY (that API KEY below is just an example):
//const char* resource = "/trigger/bme280_readings/with/key/nAZjOphL3d-ZO4N3k64-1A7gTlNSrxMJdmqy3";

// Maker Webhooks IFTTT
const char* server = "maker.ifttt.com";

// Time to sleep
uint64_t uS_TO_S_FACTOR = 1000000;  // Conversion factor for micro seconds to seconds
// sleep for 30 minutes = 1800 seconds
uint64_t TIME_TO_SLEEP = 1800;

// Uncomment to use BME280 SPI
/*#include <SPI.h>
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

void setup() {
  Serial.begin(115200); 
  delay(2000);

  // initialize BME280 sensor
  bool status;
  status = bme.begin(0x76);  
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  initWifi();
  makeIFTTTRequest();
    
  #ifdef ESP32
    // enable timer deep sleep
    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);    
    Serial.println("Going to sleep now");
    // start deep sleep for 3600 seconds (60 minutes)
    esp_deep_sleep_start();
  #else
    // Deep sleep mode for 3600 seconds (60 minutes)
    Serial.println("Going to sleep now");
    ESP.deepSleep(TIME_TO_SLEEP * uS_TO_S_FACTOR); 
  #endif
}

void loop() {
  // sleeping so wont get here 
}

// Establish a Wi-Fi connection with your router
void initWifi() {
  Serial.print("Connecting to: "); 
  Serial.print(ssid);
  WiFi.begin(ssid, password);  

  int timeout = 10 * 4; // 10 seconds
  while(WiFi.status() != WL_CONNECTED  && (timeout-- > 0)) {
    delay(250);
    Serial.print(".");
  }
  Serial.println("");

  if(WiFi.status() != WL_CONNECTED) {
     Serial.println("Failed to connect, going back to sleep");
  }

  Serial.print("WiFi connected in: "); 
  Serial.print(millis());
  Serial.print(", IP address: "); 
  Serial.println(WiFi.localIP());
}

// Make an HTTP request to the IFTTT web service
void makeIFTTTRequest() {
  Serial.print("Connecting to "); 
  Serial.print(server);
  
  WiFiClient client;
  int retries = 5;
  while(!!!client.connect(server, 80) && (retries-- > 0)) {
    Serial.print(".");
  }
  Serial.println();
  if(!!!client.connected()) {
    Serial.println("Failed to connect...");
  }
  
  Serial.print("Request resource: "); 
  Serial.println(resource);

  // Temperature in Celsius
  String jsonObject = String("{\"value1\":\"") + bme.readTemperature() + "\",\"value2\":\"" + (bme.readPressure()/100.0F)
                      + "\",\"value3\":\"" + bme.readHumidity() + "\"}";
                      
  // Comment the previous line and uncomment the next line to publish temperature readings in Fahrenheit                    
  /*String jsonObject = String("{\"value1\":\"") + (1.8 * bme.readTemperature() + 32) + "\",\"value2\":\"" 
                      + (bme.readPressure()/100.0F) + "\",\"value3\":\"" + bme.readHumidity() + "\"}";*/
                      
  client.println(String("POST ") + resource + " HTTP/1.1");
  client.println(String("Host: ") + server); 
  client.println("Connection: close\r\nContent-Type: application/json");
  client.print("Content-Length: ");
  client.println(jsonObject.length());
  client.println();
  client.println(jsonObject);
        
  int timeout = 5 * 10; // 5 seconds             
  while(!!!client.available() && (timeout-- > 0)){
    delay(100);
  }
  if(!!!client.available()) {
    Serial.println("No response...");
  }
  while(client.available()){
    Serial.write(client.read());
  }
  
  Serial.println("\nclosing connection");
  client.stop(); 
}
Bagian yang harus kalian edit adalah Network kalian (SSID dan Password) dan juga link sumber IFTTT kalian. Berikut gambarnya agar lebih jelas.

// Replace with your SSID and Password
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Replace with your unique IFTTT URL resource
const char* resource = "REPLACE_WITH_YOUR_IFTTT_URL_RESOURCE";
Jika kalian bingung yang mana link ifttt kalian, silahkan lihat langkah 2 pada bagian Test Applet. Di gambar itu, pada bagian bawah ada link. Link saya adalah sebagai berikut :

/trigger/Hasil_Sensor_BME280/with/key/cs2dHTKXcJ1dixAiICdF2p

Demonstrasi

Setelah mengganti bagian penting tadi sesuai dengan milik kalian, upload kodenya ke dalam ESP32 milik kalian. Lalu lihat Spreedsheet tadi. Disitu akan tertera hasil pembacaan sensor BME280 nya yaitu mulai suhu, tekanan, dan kelembaban. Hasilnya akan muncul setiap 30 menit. Silahkan amati hasil milik kalian sendiri. Jika setiap sekitar 30 menit, muncul hasil pembacaan baru secara otomatis pada spreedsheet kalian, artinya kalian telah berhasil membuat proyek ini. Yeayyy!!!
Berikut adalah hasil milikku.

Penutup

Demikianlah penjelasan saya mengenai proyek ini. Jika teman - teman memiliki pertanyaan, bisa menuliskannya di kolom komentar dan saya akan berusaha untuk membalasnya secepat mungkin. Atas kunjungan dan perhatian teman - teman, aku ucapkan terimakasih dan sampai jumpa di artikel blog berikutnya yang pastinya bermanfaat. Bye!!!

Komentar

Postingan populer dari blog ini

Weather Station Visualization with ESP32

Membuat LED Blink pada ESP32

Cara Menggunakan I2C Display dengan ESP32