Loading...
OUR BLOG

Hantar data ke Google Sheets menggunakan Ultrasonic Sensor dan NodeMCU ESP8266

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.

 

 

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

 

Litar

 

 

 

 

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!

 

 

 

Unsure Whether You Need Our Help?

Have you got an awesome new idea or project that you want to talk about? We're here to talk you through it. Flick us an email or give us a call to get started.