Wheater Station — Data Logging
16 April 2020.
Halo! Selamat datang kembali di medium gue huehuehue. Tumbenan banget ya gue kemarin baru ngepublish tulisan, eh hari ini ngepublish lagi wkwk. Yaa begitulah kalo project-nya udah dikerjain dan tinggal ditulisin ke medium :).
Sama seperti yang udah gue jelasin di tulisan sebelumnya, project ini sebenarnya gue kerjain pada hari yang sama setelah project “Wheater Station — Data Visualization” selesai gue kerjain juga. Dan sama seperti di tulisan sebelumnya juga, project ini gue kerjain bersama kelompok gue via google meet. Well, basically, gue yang ngerjain sih tapi ya di livestream gitu lah jdnya wkwk. Tapi gapapa, seenggaknya gue ada temennya waktu ngerjain project ini wkwk.
Sama seperti tulisan gue yang sebelumnya juga, karena langkah-langkah untuk mengerjakan project kali ini cukup sulit menurut gue, dan gue takut salah dalam menyampaikann tutorialnya, maka pada tulisan ini gue gak akan nulisin tutorialnya secara jelas, namun lebih ke garis besar dan experience yang gue dapetin ketika ngerjain project ini. Tapi tenang aja. Kalo kalian emang mau ngerjain project ini dan mau liat tutorialnya, kalian bisa baca di “ESP32 Publish Sensor Readings to Google Sheets (ESP8266 Compatible)”. Oke sekarang kita langsung aja deh huehue.
Overview
Gambar dibawah merupakan gambaran besar yang akan kita lakukan pada project kali ini.
- Pertama, hubungkan ESP32 dengan WiFi.
- Sensor DHT menerima hasil bacaan temperature dan humidity.
- ESP32 akan berkomunikasi dengan IFTTT Webhooks service yang mencetak hasil pembacaan pada Google Sheets yang telah disimpan pada folder Google Drive
- Setelah mencetak hasil bacaan pada Google Sheets, lalu ESP akan ‘sleep’ sesuai dengan konfigurasi waktu yang ada pada kode program
- Setelah waktu ‘sleep’ habis, maka ESP akan ‘awake’ kembali.
- Setelah itu ESP akan terhubung kembali dengan WiFi dan proses diatas akan diulangi.
Alat dan Bahan
Nah sebelum ngerjain project gue kali ini, berikut adalah alat-alat yang akan gue gunakan:
1. Laptop
2. ESP32
3. DHT11/22
4. Arduino IDE
5. Kabel jumper
6. Kabel micro USB
7. Breadboard
Berikut penampakannya:
Skema Rangkaian
Sama sseperti project sebelumnya, pada project ini, skema rangkaian yang gue gunakan mirip seperti skema rangkaian pada project gue yang bisa dilihat di “Web Server Arising”. Berikut adalah skemanya:
Dokumentasi:
Kode Program
Pada projcet ini, kurang lebih langkah-langkkah yang gue lakukan sama dengan langkah-langkah yang ada pada tulisan di “ESP32 Publish Sensor Readings to Google Sheets (ESP8266 Compatible)”, termasuk dengan kode programnya. Hanya saja karena pada blog tersebut tutorial yang diberikan adalah untuk sensor BME280, sedangkan sensor yang gue gunakan DHT11, maka gue harus memodifikasi beberapa langkah serta kode program yang akan gue gunakan.
/*
* 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 <DHT.h>
#include <Adafruit_BME280.h>#define DHTPIN 32 // Digital pin connected to the DHT sensor#define DHTTYPE DHT11 // DHT 11DHT dht(DHTPIN, DHTTYPE);// Replace with your SSID and Password
const char* ssid = "Gedung_B1";
const char* password = "Putra123";// Replace with your unique IFTTT URL resource
const char* resource = "/trigger/dht_readings/with/key/bBUy3MFpC1x0Ow3cH1HdCNyGSBdos10A2qFU_9fZOjd";// 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 3 seconds
uint64_t TIME_TO_SLEEP = 3;// 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 SPIvoid setup() {
Serial.begin(115200);
delay(2000);// initialize DHT Sensor
dht.begin();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\":\"") + dht.readTemperature() + "\",\"value2\":\"" + dht.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();
}
Kode diatas merupakan hasil dari modifikasi kode dari potongan kode yang digunakan logika ESP pada “ESP32 Publish Sensor Readings to Google Sheets (ESP8266 Compatible)”.
Dokumentasi:
Testing
Setelah mengatur skema dan kode yang akan digunakan telah siap, maka selanjutnya kita dapat mencoba menjalankan program tersebut dengan menguploadnya ke ESP32. Selanjutnya jika berhasil, maka pada serial monitor akan ditampilkan pesan sebagai berikut:
Jika tampilan pada serial monitor seperti pada gambar diatas, artinya kita telah berhasil melakukan pencetakan hasil bacaan sensor ke Google Sheets.
Lalu, Voila! Selanjutnya kalo di program gue setiap 3 detiknya (Sesuai konfigurasi pada kode) ESP akan ‘awake’ dan akan mencetak hasil bacaan baru pada Google Sheets.
Pada awalnya, gue sempet ngerjain project ini lumayan susah sih karena ngerasa beda aja cara ngerjain project kali ini. Kalo biasanya kode yang ada di sketch-nya tinggal langsung upload, di project kali ini gue harus ngegunain beberapa tools seperti IFTTT, Google Sheets, serta Google Drive terlebih dahulu yang nantinya bakal ngebantu kita buat nge-publish hasil bacaan sensor ke Google Sheets.
Yang sempet bikin lama pada saat pengerjaan project ini itu yaa pada saat menggunakan IFTTT-nya. Karena belom pernah menggunakan dan emang asing banget gue baru tau sekarang soal tools tersebut, jadinya butuh waktu buat memahami cara kerja si IFTTT ini huehue.
Selain itu, berikut ada dokumentasi proses pengerjaan project kali ini bersama kelompok gue:
Selesai deh project kali ini huehue.
Semoga tulisan ini bermanfaat, Semoga sehat selalu,
Enjoy!