Upload Data ThingSpeak menggunakan modul GSM SIM800L

Upload Data ThingSpeak menggunakan modul GSM SIM800L
Mulai dari post ini saya akan share mengenai modul GSM SIM800L. Modul ini memiliki beberapa fitur selayaknya pada HP jaman dulu (SMS, Voice, Koneksi GPRS). Dalam era IoT ini ada kalanya device kita jauh dari jangkauan Wifi. Sebagai opsi lainnya maka kita dapat menggunakan koneksi jaringan GSM ini untuk tetap terhubung ke internet. Monitoring maupun kontrol tetap bisa dilakukan via koneksi internet menggunakan modul ini. Secara udah gak jaman mainan SMS (tarifnya lebih mahal dari paket kuota internet 😊). Untuk referensi, saya akan berikan gambaran penggunaan modul GSM SIM800L dengan Arduino untuk mengirim data ke channel ThingSpeak untuk kegiatan Monitoring. Sensor yang digunakan dalam contoh ini adalah sensor suhu/kelembaban DHT22. Silahkan untuk sensor yang lainnya dapat menyesuaikan.


A. Wiring
Beberapa perangkat dan sensor yang digunakan dalam tutorial ini adalah:
  • Arduino Uno
  • Modul GSM SIM800L (kayak gini)
  • Modul LM2596 DC-DC Stepdown (kayak gini)
  • Kabel-kabel atau perangkat penyambung lainnya (Proto board, Bread board, dll)
Sebelum sambung menyambung perhatikan dan cermati dulu pinout dari modul SIM800L nya
Upload Data ke ThingSpeak menggunakan modul SIM800L
Sebagaimana info dari datasheet SIM800L tegangan kerja untuk modul versi ini adalah 3.4V-4.4V, sementara apabila mau mensupply modul ini dari Arduino terpaksa harus melakukan step down dari pin power 5V. Oleh sebab itu maka diperlukan modul LM2596 DC-DC Stepdown yang dapat diatur keluarannya via trimmer potensiometer. Sebelum menghubungkan tegangan output ke pin VCC modul SIM800L, pastikan diukur terbelih dahulu. Jangan sampai tengangannya berlebih (Kasih tegangan aman di 3.7V saja).
Arduino modul GSM SIM800L thingspeak

Setelah setting tegangan output modul LM2596 di set sesuai spesifikasi, silahkan dilanjut untuk sambung menyambung dengan modul SIM800L dan arduino. Pin RXD terhubung ke arduino pin 7, sedangkan pin TXD terhubung ke arduino pin 6. Sementara untuk pin data  dari sensor DHT 22 (pin 2) terhubung ke arduino pin 5.
Arduino modul GSM SIM800L thingspeak

B. Kode Program
Karena ada hubungannya dengan ThingSpeak sebagai tempat menyimpan data pemantauan, maka disiapkan terlebih dahulu channel yang akan menampung data tersebut. Sebagai contoh seperti berikut ini.


Selanjutnya, untuk proses menulis data dibutuhkan Write API key (lihat pada tab menu API Keys) yang secara langsung dapat diakses via GET request dengan format berikut:

https://api.thingspeak.com/update?api_key=WRITE API KEY CHANNEL KAMU &field1=NILAI SUHU&field2=NILAI KELEMBABAN

Koneksi antara arduino dengan modul SIM800L adalah menggunakan komunikasi serial. Dalam program, akan dilakukan melalui software serial menggunakan pin 6 (RX) dan 7(TX). Perintah yang digunakan untuk mengoperasikan modul SIM800L adalah dengan struktur AT Command. Nah untuk memahami AT Command yang digunakan untuk modul SIM800L silahkan dapat dipelajari di Manual AT Command SIM800L.
Pastikan sudah install library DHT by adafruit terlebih dahulu. Library ini mempersyaratkan library lainnya yaitu Adafruit Unified Sensor. Versi library sesuai dengan yang digambar bawah ini.
ThingSpeak data upload with SIM800L module
ThingSpeak data upload with SIM800L module

Apabila sudah siap semua, maka dapat dicoba untuk program berikut dibawah ini. Hal yang perlu diperhatikan adalah Write API key dari channel ThingSpeak yang dibuat, dan APN dari kartu provider yang digunakan (saya menggunakan kartu 3 (APN=3gprs))

#include <SoftwareSerial.h>
#include <String.h>
#include <DHT.h> 
 
#define DHTPIN 5

SoftwareSerial SIM800L(6,7);                //Serial SIM800L pin
DHT dhtSensor(DHTPIN, DHT22); 
String Write_API_key = "AAAAAAAAAAVTZZZAHAHAA";  //Thingspeak Write API Key
String apn = "3gprs";   
float kelembaban;
float suhu; 
void setup(){
  Serial.begin(115200); 
  SIM800L.begin(9600);      
  dhtSensor.begin();
  Serial.println("SIM800L GPRS Test");
  delay(2000);
}
 
void loop(){
  SetupModule();
  SIM800L.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");
  delay(3000);
  ShowSerialData();
 
  SIM800L.println("AT+CIPSEND");
  delay(2000);
  Serial.println();
  ShowSerialData();
  ReadSensor();
  String str="GET https://api.thingspeak.com/update?api_key="+Write_API_key+"&field1=" + String(suhu) +"&field2="+String(kelembaban);
  Serial.println(str);  delay(2000);
  SIM800L.println(str); delay(4000);
  ShowSerialData();
 
  SIM800L.println((char)26); delay(4000); 
  SIM800L.println();
  ShowSerialData();
  SIM800L.println("AT+CIPSHUT");//close the connection
  delay(500); 
  ShowSerialData();
  str="";
  
  //total delay looping 50s
  delay(10000); //add 10s for 60s total delay looping 
} 

void ReadSensor(){
  kelembaban = dhtSensor.readHumidity();
  suhu = dhtSensor.readTemperature(); 
  delay(500); 
  Serial.println();    
  Serial.print("Temperature = ");Serial.print(suhu); Serial.print(" °C");
  Serial.print("\t");
  Serial.print("Humidity = ");Serial.print(kelembaban);Serial.println(" %");    
  
}

void SetupModule(){  
  if (SIM800L.available())Serial.write(SIM800L.read());
  SIM800L.println("AT"); delay(1000);
  SIM800L.println("AT+CPIN?"); delay(1000);
  SIM800L.println("AT+CREG?"); delay(1000);
  SIM800L.println("AT+CGATT?"); delay(1000);
  SIM800L.println("AT+CIPSHUT");delay(1000);
  SIM800L.println("AT+CIPSTATUS"); delay(2000);
  SIM800L.println("AT+CIPMUX=0");  delay(2000);

 //setting the APN,
  SIM800L.println("AT+CSTT=\""+apn+"\"");delay(1000);
  ShowSerialData();
  SIM800L.println("AT+CIICR");    delay(2000);
  ShowSerialData();
  
  //get local IP adress
  SIM800L.println("AT+CIFSR");    delay(2000);
  ShowSerialData();
  
  SIM800L.println("AT+CIPSPRT=0");delay(2000);
  ShowSerialData();
}

void ShowSerialData(){
  while(SIM800L.available()!=0)
  Serial.write(SIM800L.read());
  delay(2000); 
}

C. Hasil
Setelah program di berhasil upload, maka proses dapat dilihat pada serial monitor. Apabila proses GET request berhasi, maka akan diperoleh keterangan SEND OK dan pesan feedback dari ThingSpeak berupa nomor entry id.
ThingSpeak data upload with SIM800L module

ThingSpeak data upload with SIM800L module


Cara Lain
Kalau yang diatas adalah cara native/dasar menggunakan komunikasi via protokol AT Command secara langsung, ada juga beberapa cara lain seperti menggunakan library agar fungsi-fungsinya menjadi lebih sederhana. Nah di bawah ini adalah contoh menggunakan library SIM800L HTTP Connector. Ada penambahan di skematiknya yaitu dengan menambahkan wiring ke pin Reset Modul SIM800L.

Selanjutnya install library SIM800L HTTP connector. Saya menggunakan versi 1.11.0
Untuk kode program arduinonya, dapat dicopas dibawah ini 




Ok, Selamat mencoba dan berkreasi. Semoga bermanfaat. Salam!