Tutorial IoT - Belajar Kirim Data Ke Server Menggunakan Modul GSM SIM808 GPRS

www.tutorialiot.com

Salah satu aspek yang harus dikuasai bagi kakak yang ingin jago dalam dunia IoT (Internet of Things) adalah harus tahu bagaimana cara mengirimkan data ke web server, hal ini akan berhubungan langsung dengan sistem monitoring sehingga semua kegiatan alat dapat dipantau secara real time melalui dashboard atau aplikasi smartphone. Berikut ini adalah langkah2 bagimana kakak akan mengirimkan data ke web server dimulai dari :


1. Menyiapkan Device

- Disini saya menggunakan :
a. Arduino Mega
b. SIM808
c. Sensor SHT20
d. PZEM
e. Sensor tegangan DC
f.  Sensor arus DC 
Hubungkan semua modul yang kakak punya, tidak harus sama seperti saya (sesuai kebutuhan saja), setelah semua terhubung dengan baik bisa dilanjutkan ke langkah 2.

2. Menyiapkan Program

Berikut ini adalah program yang saya gunakan dalam project

//Sensor Suhu Sementara
#include "DHT.h"
#define DHTPIN 2 
#define DHTTYPE DHT11 
DHT dht(DHTPIN, DHTTYPE);
float h;
float t;

//Inisialiasi Sensor Arus DC
#include "ACS712.h"
ACS712 sensor(ACS712_30A, A1);
float I;
float titiknol;

//Inisialiasi Sensor Tegangan DC
float V;
float Vdc;

//Inisialisasi Sensor SHT20
#include <Wire.h>
#include "DFRobot_SHT20.h"
DFRobot_SHT20    sht20;
float temp;
float humd;

//Inisialiasi Sensor PZEM
#include <SoftwareSerial.h>
#include <PZEM004T.h>
PZEM004T pzem(11,10);
IPAddress ip(192,168,1,1);
float v;
float i;
float p;
float e;

void setup() {
    Serial.begin(9600);
    dht.begin();
    Serial.println("SHT20 Example!");
    sensor.calibrate(); // Untuk Sensor Arus DC
    sht20.initSHT20();  //Untuk Sensor Suhu                          
    delay(1000);
    sht20.checkSHT20();
    //Sensor PZEM
    Serial.println("Connecting to PZEM...");
    pzem.setAddress(ip);
    
  //Init the driver pins for GSM function
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);

  //Output GSM Timing
  digitalWrite(6, HIGH);
  delay(1500);
  digitalWrite(6, LOW);

}
void loop() {
  digitalWrite(3, LOW); //enable GSM TX、RX
  digitalWrite(4, HIGH); //disable GPS TX、RX
  send_GPRS();
  delay(240000);
 }

void send_GPRS() 
{
    humd = sht20.readHumidity();                  // Read Humidity
    temp = sht20.readTemperature();               // Read Temperature
    Serial.print("Temperature:");
    Serial.print(temp, 1);
    Serial.print("C");
    Serial.print(" Humidity:");
    Serial.print(humd, 1);
    Serial.print("%");
    Serial.println();
    h = dht.readHumidity();
    t = dht.readTemperature();
    if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
  }
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.println(t);

  //Sensor PZEM
  v = pzem.voltage(ip);
  if (v < 0.0) v = 0.0;
   Serial.print(v);Serial.print("V; ");

  i = pzem.current(ip);
   if(i >= 0.0){ Serial.print(i);Serial.print("A; "); }

  p = pzem.power(ip);
   if(p >= 0.0){ Serial.print(p);Serial.print("W; "); }

  e = pzem.energy(ip);
   if(e >= 0.0){ Serial.print(e);Serial.print("Wh; "); }

  Serial.println();

  // Get current from sensor DC
  I = sensor.getCurrentDC();
  titiknol = (I/100)+0.07;
  Serial.println(String("I = ") + titiknol + " A");

  // Get Voltage Sensor Reading
  V = analogRead(A0);
  Vdc=((V*0.00175)*5)+5.9;
  Serial.print(Vdc);
  Serial.println("Vdc");
  delay(1000);                       
  Serial.println("AT");    delay(1500);
  Serial.println("AT+CGMM");  delay(1500);
  Serial.println("AT+CREG?");  delay(1500);
  Serial.println("AT+SAPBR=2,1");  delay(1500);
  Serial.println("AT+SAPBR=1,1");  delay(4500);
  Serial.println("AT+HTTPINIT");  delay(1500);

  String data_gprs = "AT+HTTPPARA=\"URL\",\"api.thingspeak.com/update?api_key=6WRTWLLWNDBZTR93&";
  data_gprs = data_gprs + "field1=" + String(temp) + "&" ;
  data_gprs = data_gprs + "field2=" + String(humd) + "&";
  data_gprs = data_gprs + "field3=" + String(i) + "&";
  data_gprs = data_gprs + "field4=" + String(v) + "&";
  data_gprs = data_gprs + "field5=" + String(p) + "&";
  data_gprs = data_gprs + "field6=" + String(e) + "&";
  data_gprs = data_gprs + "field7=" + String(titiknol) + "&";
  data_gprs = data_gprs + "field8=" + String(Vdc) + "\"";
  Serial.println(data_gprs);     delay(2000);

  String data_CID = "AT+HTTPPARA=\"CID\",1";
  Serial.println(data_CID);  delay(1500);
  Serial.println("AT+HTTPACTION=0");  delay(1500);
  Serial.println("AT+HTTPREAD");  delay(6500);
  Serial.println("AT+HTTPTERM");    delay(1500);
}

3. Menyiapkan Web Landing

Disini saya menggunakan web landing dari Thingspeak, dimana kakak semua bisa langsung mencobanya secara free. langkah-langkahnya adalah sebagai berikut ini :
a. Sign in ke Thingspeak menggunakan akun mathworks
b. Setelah selesai klik Channels > My Channels

c. Pada halaman tersebut klik New Channel 
d. Centang seluruh field yang akan kalian gunakan, dan rename agar mudah dianalisa

e. Setelah semuanya selesai jangan lupa untuk klik save channel di bawah halaman web, maka kalian akan melihat 6 tab baru yakni : Private View, Public View, Channel Settings, Sharing, API Keys, dan Data Import/Export. 

f. Selanjutnya adalah copy API key yang terdapat pada tab API Keys dan masukkan kedalam program kalian melalui Arduino IDE

g. Copy kode diatas pada langkah ke 2 dan ganti pada bagian ini sesuai dengan keinginan kalian

Semoga tutorial diatas dapat menjawab semua masalah kakak selama ini, terimakasih 

Post a Comment

2 Comments

  1. how can i send the data read from the sensors to a mobile phone instead of website?

    ReplyDelete
    Replies
    1. You can make your own app in the app invenventor, the tutorial is ready for you, just type in the search box "app inventor", follow the instructions and i hope that will solve your problem, thanks

      Delete