Hi BDx-ian!
Tutorial kali ini kita akan belajar hantar jarak dari ultrasonic sensor ke Google Sheets menggunakan NodeMCU ESP8266. Data jarak dan timestamp akan dipaparkan pada spreadsheet.
Google Sheets
1. Cipta spreadsheet pada Google Sheets
Pergi ke Google Drive -> Tekan New -> Tekan Google Sheets -> Tekan Blank spreadsheet -> Letakkan nama data.
2. Simpan URL spreadsheet.
Copy URL spreadsheet yang anda cipta tadi kerana URL ini diperlukan untuk kegunaan Google Apps Script selepas ini
Google Apps Script
1. Cipta projek pada Google Apps Script
Pergi ke Google Drive -> Tekan New -> Tekan More -> Tekan Google Apps Script.
2. Code Apps Script
Copy dan Paste code pada Apps Script.
function doGet(e) {
var ss = SpreadsheetApp.openByUrl("URL Google Sheets Anda"); var sheet = ss.getSheetByName("Sheet1");
addData(e,sheet); }
function doPost(e) { var ss = SpreadsheetApp.openByUrl("URL Google Sheets Anda"); var sheet = ss.getSheetByName("Sheet1");
addData(e,sheet); }
function addData(e,sheet) { var distance = e.parameter.distance ; var timestamp = Utilities.formatDate(new Date(), "Asia/Kuala_Lumpur", "yyyy-MM-dd HH:mm:ss");
sheet.appendRow([timestamp, distance]); } |
Anda perlu tukar maklumat berikut pada code Apps Script.
- Tukar nama data pada addData dengan data mengikut spreadsheet anda.
- Paste link URL spreadsheet pada doGet dan doPost.
- Tukar nama sheet pada doGet dan doPost dengan sheet yang aktif mengikut spreadsheet anda.
3. Save & Deploy Apps Script
Tekan deploy -> Tekan New Deployment.
Pergi ke Configuration button ->Pilih Web App.
Pilih ‘Anyone’ pada ‘Who has Access’ -> Tekan Deploy.
Tekan Authorize access -> Pilih Google Account yang akan digunakan bersama App Script.
Window Google Verification akan pop-up-> Tekan Advanced -> Tekan “Go to <Nama App Script> (unsafe)”.
Tekan Allow.
4. Simpan Deployment ID
Copy Deployment ID kerana ia akan digunakan dalam code Arduino IDE.
Komponen
Komponen yang diperlukan
- Ultrasonic Sensor
- NodeMCU ESP8266 dan USB
- Breadboard
- Jumper wire
Litar
- VCC → pin Vin ESP8266
- TRIG → pin D7 ESP8266
- ECHO → pin D8 ESP8266
- GND → GND ESP8266
Code
#include <ESP8266WiFi.h> #include <WiFiClientSecure.h>
const char* ssid = "Nama wifi anda"; //tukar const char* password = "Password wifi anda"; //tukar const char* host = "script.google.com"; String SCRIPT_ID = "Deployment ID spreadsheet anda"; //tukar
int triggerPin = 13; int echoPin = 15; int duration, distance; String timestamp; unsigned long dataMillis = 0;
WiFiClientSecure client;
void setup() { //SETUP SERIAL MONITOR COMMUNICATIONS Serial.begin(115200);
pinMode (triggerPin, OUTPUT); pinMode (echoPin, INPUT);
//SETUP WIFI CONNECTION Serial.println(); Serial.print("Connecting to WiFi "); Serial.println(ssid);
//INITIALIZE WIFI RADIO WiFi.mode(WIFI_STA); WiFi.begin(ssid, password);
//CONNECT WIFI while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP());
}//END VOID SETUP
void loop() {
getDistance();
//DELAY UNTUK TIDAK FLOODING SERVER if (millis() - dataMillis > 5000) { dataMillis = millis();
sendData(); } }
void getDistance(){ digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2)/29.1;
Serial.print(distance); Serial.println(" cm"); }
void sendData(){ /*************PENGHANTARAN DATA*****************/ //SET CONNECTION TO INSECURE HTTPS client.setInsecure();
//CONNECT TO HOST SERVER Serial.print("Connecting to "); Serial.println(host);
if (!client.connect(host, 443)) { // HTTPS Connection pada Port 443 Serial.println("Connection failed"); return; //Stop Process jika connection failed } delay(10);
//SET STRING UNTUK DATA String data1 = String(timestamp); String data2 = String(distance); //convert distance kepada format data String
//KOMBINASI SEMUA DATA DALAM 1 STRING String data = "timestamp="+data1+"&distance="+data2;
//SET STRING URL UNTUK REQUEST String url = "/macros/s/" + SCRIPT_ID + "/exec?" + data; Serial.print("Requesting URL: "); Serial.println(url);
//HANTAR GET API Request client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: ESP8266-Saya\r\n" + "Connection: close\r\n\r\n");
Serial.println("Request sent"); delay(300);
//VARIABLE MENYIMPAN SERVER REPLY String fullResponse; String htmlResponse; String responseHeader; String responseBody;
//WHILE/TUNGGU REPLY CONTENT DARI SERVER while (client.connected()) { //Response Code htmlResponse = client.readStringUntil('\r'); //Simpan Reply dalam String "line" break; //fullResponse = client.readString(); //Uncomment untuk lihat semua HTTP Response }//end While Client
while (client.connected()) { //Response Header String responseHeader = client.readStringUntil('\n'); if(responseHeader == "\r"){ //Serial.println("Header diTerima"); break; } } responseBody = client.readStringUntil('<'); //Response Body
//CHECK/SEMAK RESPONSE CODE if(htmlResponse == "HTTP/1.1 200 OK"){ Serial.println("Request diTerima Server"); } else{ Serial.println("Request ERROR"); }
client.stop(); //DISCONNECT HTTPS connection (Wajib Disconnect) } |
Peringatan
Tukarkan maklumat di bawah
const char* ssid = "Nama wifi anda"; //tukar const char* password = "Password wifi anda"; //tukar String SCRIPT_ID = "Deployment ID spreadsheet anda"; //tukar |
Output
Setelah code diupload, output Serial Monitor memaparkan ESP8266 connect dengan WiFi dan Apps Script.
Output pada Serial Monitor
Apabila data jarak dihantar, output pada Google Sheets memaparkan timestamp dan jarak, manakala output pada Serial Monitor memaparkan data jarak.
Output pada Google Sheets
Output pada Serial Monitor
Jika anda suka dengan perkongsian tutorial dalam blog kami ni, jangan lupa untuk follow Facebook dan Instagram kami, kat situ ada bermacam info dan update terkini yang akan kami kongsikan kepada anda. Itu sahaja untuk tutorial kami. Stay update dan selamat mencuba!