Full width home advertisement

Arduino Simulation

Post Page Advertisement [Top]

Arduino TutorialDHT22Internet of ThingsSIM800LThingSpeak

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.
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


Ok, demikian tesing hari ini, semoga bermanfaat. Berikutnya akan saya coba share mengenai sistem control dengan fasilitas internet dari modul SIM800L ini.

17 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

Bottom Ad [Post Page]

| Designed by Colorlib