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!

29 Komentar

  1. HI, IF APN HAVE USER AND PASS??? HOW???

    BalasHapus
    Balasan
    1. Hi gonzalo, by default command format for write CSTT is AT + CSTT = , ,
      you can edit with this-> SIM800L.println("AT+CSTT=\""+apn+"\",\"username\",\"password\"");

      Hapus
  2. Thanks, but now cipsend=error, anything idea

    BalasHapus
    Balasan
    1. There are several possibilities:Make sure write api key matches what is on your channel. Also make sure the data writing format (via get) is appropriate. example => https://api.thingspeak.com/update.json?api_key=&field1=123&field2=456

      Hapus
  3. kalau utk provider lain ada ga mas source code nya? spt telkomsel

    BalasHapus
    Balasan
    1. Untuk telkomsel silahkan ganti apn nya menjadi "Internet"

      Hapus
  4. Mas itu pengiriman ke thingspeak nya setiap berapa menit mas?
    Kok ketika saya run di thingspeak nya cuma 1 titik terus yang muncul, gak berkelanjutan seperti pada gambar hasil(?)
    terima kasih

    BalasHapus
    Balasan
    1. untuk contoh diatas pengirimannya setiap 1 menit ya... di hitung dari tital delay dari fungsi main loop

      Hapus
  5. SIM800L.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\""); maksudnya apa ka

    BalasHapus
    Balasan
    1. perintah AT command untuk koneksi TCP/IP. formatnya AT+CIPSTART="TCP","alamat server","nomor port"

      Hapus
  6. kalau membaca hasil send url nya gimana min?

    BalasHapus
    Balasan
    1. maksudnya read respond servernya

      Hapus
    2. setelah melakukan perintah pengiriman data terus dilanjutkan fungsi monitor pada data serial
      ShowSerialData()

      Hapus
  7. ka, kalau misalkan cipsend error pada thingspeak data tidak terbaca. itu dipengaruhi apa ya ka? terimakasih

    BalasHapus
    Balasan
    1. pada bagian:

      String str="GET https://api.thingspeak.com/update?api_key="+Write_API_key+"&field1=" + String(suhu) +"&field2="+String(kelembaban);

      Pastika alamat web API dapat diakses.coba dicek lagi penulisan alamat web API untuk proses update apakah sudah sesuai atau belum (write key, value dari field 1 atau field 2)

      Hapus
  8. permisi gan mau tanya saya pakai telkomsel sudah setting APN dengan command AT+CSTT="internet"
    tapi ketika saya lakukan command "AT+CIICR" dapatnya +PDP: DEACT ERROR
    ini gimana ya gan?

    BalasHapus
    Balasan
    1. silahkan ganti String apn = "3gprs"; menjadi String apn = "internet";
      atau silahkan dicoba cara yang kedua

      Hapus
  9. Hello, I have a problem on the line:
    AT+CIICR
    +PDP: DEACT
    always show me this.
    can you help? someone know the problem.

    BalasHapus
    Balasan
    1. THIS IS THE EXAMPLE:

      AT
      OK
      AT+CPIN
      ERROR
      AT+CIPSHUT
      SHUT OK
      AT+CSTT="internet.itelcel.com","usuario","contraseña"
      OK
      AT+CIICR
      +PDP: DEACT
      ERROR

      Hapus
    2. Hello Miguel,
      AT+CIICR command brings up the GPRS or CSD call depending on the configuration previously set by the AT+CSTT command. In the case that you are showing, there might be an error in the APN settings. make sure the username and password you enter is in accordance with the instructions from the mobile operator
      maybe this will help: https://www.apnsettings.org/mexico/telcel-mx/

      Hapus
  10. Halo kak , buat nyambungin ke thingspeak si gsm ini pakek pulsa ya? Atau internet

    BalasHapus
    Balasan
    1. menggunakan internet ya, jadi pastiin ada paket internetnya

      Hapus
  11. kalo mau testing AT-CIMI gimana ya kak? mau tau output nya gimana

    BalasHapus
  12. Terimakasih ilmunya mas
    Itu setelah berhasil kirim data kenapa harus disconnect gprsnya mas?
    bukannya untuk reconnect setiap menit malah takutnya ga bisa konek lagi

    BalasHapus
  13. Kalau dari thingspeak request data ke device gimana gan caranya?

    BalasHapus
    Balasan
    1. maksud/contohnya gmn gan?
      klo setau aku sih masih hal tsb belom bisa dilakukan

      Hapus
  14. Bang mau tanya..kalo problem to initialize AT command itu apanya ?

    BalasHapus