Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Tampilkan postingan dengan label sms. Tampilkan semua postingan
Tampilkan postingan dengan label sms. Tampilkan semua postingan

Kamis, 16 Januari 2020

[Elektronika Simple] Mudahnya mengkoding pengiriman SMS melalui Mblock

Pada tahun 2013 silam saya telah menuliskan cara berkirim SMS melalui modem dan microcontroller AVR ( dapat dibaca disini ) dan begitu ringkasnya perintah AT command yg dikirimkan. Untuk merubah coding nya ke format Mblock mungkin bukan menjadi masalah besar bagi saya, cukup mengikuti alur langkah pengiriman serial. Tapi kali ini saya akan memposisikan ke kondisi dimana saya anggap yang melakukan koding adalah anak-anak. Jadi sebelumnya kita akan berkenalan dengan AT COMMAND dari modem yg kita gunakan yaitu SIM800L



Ketika barang datang mungkin kita butuh melakukan penyolderan kaki-kaki header dan antena ke board, tapi jika kamu membeli yg sudah tersolder mungkin akan lebih gampang. Jadi pertimbangan jika perkenalan koding pengiriman sms diberikan ke anak-anak maka sebaiknya dilakukan penyolderan sebelumnya dibantu oleh orang dewasa. Dengan alat tambahan USB to TTL Serial maka kita dapat melakukan perintah dasar AT command seperti pada umumnya yg telah saya bahas tahun 2013. Perintah yg umum perlu ditest melalui terminal serial / putty adalah :


ATE1 <enter>   :  untuk menampilkan penekanan keyboard
AT+IPR? <enter>   : Untuk mengetahui baudrate serial, umumnya saat datang baudrate default 115200 (pas dengan baud rate serial pada Mblock)
AT+IPR=9600 <enter>  : Jika ingin merubah baudrate ke 9600 bps , gunakan default saja karena sesuai dengan baudrate serial pada Mblock
AT&W <enter>  : Menyimpan setting ke eeprom SIM800
AT+CMGF=1  <enter>  : Mengubah SMS menjadi mode teks
AT+CMGS="081xxxxxx" <enter> : Mengirim sms ke nomer yg dituju
AT+CMGR=1  <enter>  :  membaca sms pada memori no 1

Lebih khususnya ketika kita mengirimkan AT COMMAND untuk perintah kirim SMS seperti berikut :

AT+CMGS="081xxxxxx" <enter> 

maka pada terminal akan muncul caret

> masukkan teks yang akan dikirim

lalu setelah teks di tuliskan maka harus dilakukan pengiriman tombol CTRL+Z  atau ASCII (0x1A)

Bagaimana dengan pengiriman SMS menggunakan MBLOCK ? Kita akan bahas satu persatu dengan menggabungkan project lanjutan dari pembacaan DHT11 ke LCD yang bisa dibaca terlebih dahulu disini . Kita akan mengirimkan SMS yg berisikan pesan berupa pembacaan suhu dan kelembaban.




Dari gambar diatas merupakan blocks inisialisasi setup dari perangkat yaitu berupa sensor DHT11 , dua buah variabel suhu dan humi, inisialisasi port LCD serta perintah inisialisasi modem yaitu :

AT+CMGF = 1    serta   ASCII 13  


Kita tahu AT+CMGF=1 merupakan perintah untuk merubah menjadi modem menjadi SMS format teks (bisa juga langsung disimpan saja seting nya dan modem menjadi selalu bermode SMS teks), lalu ASCII 13 itu apa? itu artinya CR (cariage return) alias enter, dimana 13 decimal dalam tabel ascii berarti CR (enter) , lalu kalau CTRL+z (0x1A) ? Kita gunakan kalkulator saja dan kita dapatkan angka desimalnya 26 dan cocok pada tabel ascii nya.



Blok diatas telah kita bahas pada pembahasan DHT11 vs LCD cuma ada perbaikan dimana nilai pembacaan data kita simpan ke variabel suhu dan humi sehingga dapat digunakan lagi (alias pembacaan sensor sekali saja dalam satu periode loop).


Kelanjutannya adalah blocks untuk pengiriman SMS dengan perintah yg dikirim melalui serial ke modem SIM800 yaitu : AT+CMGS ="081xxxxxx" , dan kemudian diikuti dengan penyusunan kalimat SMS berupa " saat ini suhu = (suhu dht11) celsius , kelembaban = (humi dht11) %rH. Diakhiri dengan pengiriman desimal 26 yang dalam tabel ASCII berarti CTRL+Z . Pesan SMS akan dikirimkan setiap 30 detik (LOOP FOREVER) dan hasilnya seperti dalam gambar dan video dibawah. 







Bagaimana ? Mudah bukan ?
Share:

Kamis, 30 Mei 2013

SMS Kontrol: Mengirim Perintah ke Micro-AVR Via SMS



Posting ini adalah kelanjutan dari posting terdahulu, kirim SMS via attiny intro disini dan lanjut disini, kali ini kita akan bahas mengenai mode "penerima sms" , dimana micro AVR akan menerima SMS dan melakukan keputusan atau proses berdasarkan parsing teks sms yg dikirim.

Kelemahan mode serial UART yg sebelumnya adalah bisa mengirim(banyak teks) dan menerima hanya 1 teks sebagai triger interupt.

...Bagaimana jika Teks yg ingin diparsing berupa beberapa karakter? semisal "LED1ON" ?..

Ternyata jika kita cek satu persatu per-karakter sms yg diterima maka akan muncul masalah "sms terpotong" atau timing yg kacau....Untuk itu dibutuhkan mode "FIFO" atau "circular buffering" dimana teks yg diterima oleh micro melalui UART/serial akan disimpan dalam buffer memory barulah kemudian akan diolah/parsing untuk keperluan kontrol.

Setelah mencoba beberapa library , yang paling pas adalah pfleury uart library penjelasan disini dan download disini. Silahkan baca terlebih dahulu dan ternyata cukup mudah dan simple.

Selanjutnya kita ingat dulu AT command dari modem yg kita gunakan yaitu Wavecom. Beberapa command yg penting adalah :

AT+IFC=0,0 : Agar mode serial control = none

ATE0 : Agar karakter yg dikirim tidak di echo/kembalikan
AT+CMGF=1 : mode sms "teks"

dan yang baru adalah :

AT+CNMI=2,2 : mode SMS terima langsung tampil teksnya

jika sms diterima dengan mode diatas, maka ketika sms diterima akan muncul seperti ini di modem :


+CMT :"+628155555555","11/10/01,12 :30 :00+00",
pesan sms disini
dan dari teks sms yg diterima kemudian diolah oleh micro (parsing) untuk melakukan keputusan yg diinginkan.

Lanjut kita ke proyek sebenarnya, kali ini kita menggunakan micro ATMEGA 8515 dengan circuit seperti berikut (micro lain menyesuaikan aja):


(klik untuk memperbesar skematik)

*) modem wavecom memiliki mode komunikasi serial yg "cross" jadi jangan lupa untuk melakukan cros TX & RX (pin 2 vs pin 3 dari DB9)

selanjutnya kita akan bahas scriptnya

-Inisialisasi

kita akan menggunakan library uartnya si pleury, dengan mengcopy "uart.h" serta "uart.c" ke folder avr studio dan menambah source uart.c dan include uart.h


#define F_CPU 7372800UL //xtal yg digunakan biar error 0%
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> 

#include "uart.h"  //pastikan sudah tersedia di folder program

//definisi baudrate RS232

#define UART_BAUD_RATE 9600 


char buffer[10];  //definisi buffer teks
int indexbuf=0;

cara menambahkan uart.c :



- Inisialisasi I/O port dan modem wavecom



int main(void)
{  

   DDRA  |= (1<<PA6)|(1<<PA7); //port yg digunakan PA6 & PA7
    
  unsigned int c;
  uint8_t a;

   //inisialisai UART dari library pfleury

    uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
    sei(); // mode receive interupt

   
    uart_puts_P("ATE0\r");   // biar tidak memenuhi buffer
   _delay_ms(500);
    uart_puts_P("AT+CMGF=1\r"); //mode smsteks
   _delay_ms(500);
    uart_puts_P("AT+CNMI=2,2\r"); // mode langsung baca sms
sebelumnya agar diingat untuk mengedit uart.h dibagian dibawah ini, sesuaikan dengan panjang sms teks yg diterima
Code:
/** Size of the circular receive buffer, must be power of 2 */
#ifndef UART_RX_BUFFER_SIZE
#define UART_RX_BUFFER_SIZE 64
#endif
/** Size of the circular transmit buffer, must be power of 2 */
#ifndef UART_TX_BUFFER_SIZE
#define UART_TX_BUFFER_SIZE 64
#endif

- Parsing SMS

Kita lanjut dengan Parsing SMS yg masuk, dimana akan meng-ON/OFF Led di port A6 & A7. Untuk mepermudah parsing, kita gunakan trigger karakter khusus sehingga dapat menandai SMS yg akan diparsing ( kali ini menggunakan " $ ")


PORTA &= ~_BV(PA6) & ~_BV(PA7);


   while(1)

   {   


        c = uart_getc();
        if ( c & UART_NO_DATA ) // jika ga ada data masuk
        {

        }
        else
        {
 
         if( c == '$') indexbuf=0;  //jika triger $, maka mulai parsing (index aray buffer = 0 )
  
     

   buffer[indexbuf] = c; //masukkan teks sms ke buffer

   indexbuf++; //index array ditambah 
    

        }
    
   // Jika yg diterima sms "$LED1ON", maka Led di PA6 akan hidup
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='1' &&
        buffer[4]=='O' &&  buffer[5]=='N')

       { PORTA |= _BV(PA6); 
    
      for(a=0;a<10;a++) buffer[a]=0; // bersihkan buffer
    
    
    }

   // Jika yg diterima sms "$LED2ON", maka Led di PA7 akan hidup
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='2' &&
        buffer[4]=='O' &&  buffer[5]=='N')

       { PORTA |= _BV(PA7); 
    
      for(a=0;a<10;a++) buffer[a]=0; // bersihkan buffer
    
    
    }

   // Jika yg diterima sms "$LED1OFF", maka Led di PA6 akan mati
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='1' && 
             buffer[5]=='O' &&  buffer[6]=='F' &&  buffer[7]=='F')

       { PORTA &= ~_BV(PA6); 
    
      for(a=0;a<10;a++) buffer[a]=0; // bersihkan buffer
    
    
    }

   // Jika yg diterima sms "$LED2OFF", maka Led di PA7 akan mati
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='2' && 
             buffer[5]=='O' &&  buffer[6]=='F' &&  buffer[7]=='F')


       { PORTA &= ~_BV(PA7); 
    
      for(a=0;a<10;a++) buffer[a]=0;// bersihkan buffer
    
    
    }
  
 }

   


}


Cara parsing pada script diatas masih menggunakan logika sederhana seperti penjelasan berikut :

1. Format SMS dimulai dengan karakter '$', sehingga parsing akan menunggu karakter ini muncul lalu kemudian diarahkan menuju posisi array buffer 0
2. Tiap array buffer kemudian di cek satu per satu sampai menemukan format kata sesuai keinginan, seperti contoh yg digunakan berupa kata $LED1ON :

  if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
      buffer[3]=='D' && buffer[4]=='1' &&
      buffer[4]=='O' &&  buffer[5]=='N')


       { PORTA |= _BV(PA6); 
                  }

3. Diakhiri dengan pembersihan isi buffer agar bisa digunakan selanjutnya.



Kontrol micro via sms ini memiliki banyak kemungkinan aplikasi sesuai kreativitas diantaranya :

1. Menghidupkan Lampu otomatis via SMS
2. Membaca data suhu atau kondisi on/off setelah sms dikirim (tanpa harus menerima report terus menerus seperti contoh sebelumnya)
3. Trigger BO** .....duhhh jangan yaaa....INGAT ! Pisau didapur bisa bikin masakan enak, tapi ditangan orang tidak bertanggung jawab maka pisau dapur bisa menjadi alat pembunuh...


SELAMAT MENCOBA
Share:

SMS KONTROL: Kirim SMS dengan AVR ATTiny 2313



  


Pada praktek kali ini kita akan memanfaatkan ATtiny 2313 sebagai controller untuk mengirim sms ketika tombol ditekan


Baud rate untuk komunikasi RS232 adalah 9600, sehingga sebelum menggunakan modem (modem yg dipake modem wavecom dengan port rs232) perlu diset baud rate nya 9600 dengan AT command melalui PC dengan software terminal seperti hyperterminal atau putty. Ingat secara default modem wavecom memiliki baudrate 115200 sehingga koneksi awal menggunakan baudrate 115200. Setting juga mode control dari komunikasi serial yang hanya menggunakan 3 kabel (tx rx gnd) sehingga dipilih control mode = none.


AT+IPR=9600<enter>
OK
AT+IFC=0,0<enter>
OK
AT&W<enter>



Rangkaian elektronik nya sebagai berikut : (klik untuk memperjelas)


*) koneksi dari PORT Serial ke Serial DB9 secara cross , 1 vs 3(DB9-Rx) , 2 vs 2(DB9-Tx) , GND=5(DB9)
**) xtal yg digunakan nilainya khusus (7372800), jika menggunakan yg umum (4/8 mhz) atau default 1Mhz maka akan terjadi error 0,2%, tetapi tidak terlalu signifikan jika hanya kirim sms
***) ketika tombol ditekan maka micro akan mengirimkan perintah ke wavecom untuk mengirim sms


secara bertahap kita akan bahas programming dalam GCC-WINAVR-AVRSTUDIO




Inisialisasi Awal

Yang utama dari bagian inisialisasi adalah penulisan clock CPU yang digunakan, sebaiknya membaca datasheet dibagian BAUD RATE dan hubungannya dengan persentase error akibat pembagian clock yang tidak bulat.

#define F_CPU 7372800UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> 

//definisi baudrate RS232

#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)


Inisialisasi command2 AT COMMAND sebagai variabel constant



//ganti nomer HP 
const char sms[] PROGMEM=  "AT+CMGS=0812345678\r test dari micro";

const char smsend[] PROGMEM= {0x1A}; // ascii dari CTRL+Z

Routine untuk inisialisasi USART


void init_usart(void)
{


   UCSRB |= (1 << RXEN) | (1 << TXEN);   
   UCSRC |= (1 << UCSZ0) | (1 << UCSZ1); 
   UBRRL = BAUD_PRESCALE; 
   UBRRH = (BAUD_PRESCALE >> 8);
   UCSRB |= (1 << RXCIE);  //interupt serial usart

  }


Routine untuk kirim karakter melalui RS232



void USART_Tx(unsigned char data)
{   
    
   while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
    UDR = data; // Send data to the computer
}

void kirim_text(const char *data)
{
   while (pgm_read_byte(data) != 0x00)
     USART_Tx(pgm_read_byte(data++));
}

Routine interupt untuk membaca tombol dan kirim sms



SIGNAL (SIG_INT0)
{

kirim_text(sms);
kirim_text(smsend); 
}
Routine main program


int main(void)
{
   GIMSK |= (1<<INT0) ; // tombol interupt  0
   MCUCR |= (1<<ISC01)| (1<<ISC00); //rising edge interupt

   init_usart(); // inisialisai komunikasi usart
 
   sei(); //hidupkan interupt


while(1)

   {
   }


}

Jika menggunakan clock external / xtal , jangan lupa untuk mengaktifkan clock external dari Attiny di fusebit/CKSEL, pilihlah frek yg high. 




Aplikasi pada contoh praktek kali ini dapat digunakan juga dalam berbagai keperluan, diantaranya:


- Alarm (contoh pintu terbuka langsung kirim sms, sensor menggunakan limit switch)
- Deteksi level tegangan AC jika drop langsung kirim sms (sensor menggunakan komparator)
- Deteksi level air, misal untuk pendeteksi banjir maka otomatis mengirim sms (sensor level air sederhana menggunakan transistor FET)

- dsb

SELAMAT MENCOBA
Share:

Senin, 27 Agustus 2012

SMS via AT COMMAND - Long (concatenate) SMS



Bagaimana jika sms yang akan dikirim melebihi 160 karakter ? Ya kita pecah aja SMS nya...dikirimnya 3 bagian. Tapi ntar yg baca bingung mana yg no 1 2 3 dst ...tenang, para engineer GSM menciptakan system SMS long / concatenate / bersambung , dimana tiap sms tetap dikirim perbagian  dengan tambahan header "UDH" yang menyatakan sms yg dikirim ini merupakan bagian dari ke berapa dari SMS yg panjang tadi.

Hal yg paling pertama menandakan bahwa SMS ini long sms adalah pada octet ke -2, yang pada sms biasa bernilai "11" dan pada long sms memiliki type "41". Kemudian 2 octet setelah nomer tujuan terdapat octet UDL (userdata length) dilanjutkan octet UDHL (header length, nilai selalu "05") + UDH sebanyak 5 octet

UDL adalah jumlah karakter(septet) yg dikirim, tapi  karena ada 7 octet tambahan maka maksimum karakter adalah 153 ( 160 = 153septet karakter + 7 header)

UDH terdiri dari 5 octet sebagai berikut :

00IEI -  Information element identifier , nilainya selalu 00
03IEDL - Information element data length, nilainya selalu 03
ABReference number, dimana SMS yg dipotong memiliki nilai yg sama, akan tetapi tidak boleh sama dengan bagian LONG SMS yang lainnya, sehingga sebaiknya nilainya di random untuk sms lainnya
02Octet yang menyatakan jumlah pemotongan SMS . 02 berarti sms ini memiliki 2 bagian
01Octet yang menunjukkan bagian / nomer urutan dari SMS. 01 berarti sms ini merupakan sms ke-1

selanjutnya diikuti oleh OCTET user data / SMS

Karena terjadi nilai start septet user data yg tidak genap pada bit ke 49 / 56 akibat jumlah octet dari UDHL+UDH = 6 * 8bit = 48 bit , maka perlu dilakukan proses PADDING 1 BIT ....nah loo ribet lagi nehh...tenang .... POLA nya seragam juga kok ....

Masih ingat dengan "hellohello" diubah menjadi bentuk PDU : E8 32 9B FD 46 97 D9 EC 37
Kemudian kita padding 1 bit ....apaan sih padding ? pokoknya geser2 deh..liat yang berikut :


(klik biar jelas)


Jadi logikanya seperti ini :

1. Ambil nilai dari konversi septet  gsm 7-bit ke Octet
2. Pasangan Octet pertama diambil bit ke 6 - 0 dan turunkan kebawah, karena octet pertama maka tambahkan dengan "0" pada akhir octet
3. Bit ke 7 (MSB) pasangan pertama kemudian digunakan sebagai "EKOR" pada hasil "pergeseran" pasangan berikutnya ...begitu selanjutnya sampai selesai.
4. Jika sisa MSB pasangan terakhir  =1, maka tambahkan octet "01" diakhir deretan octet. Jika sisa MSB pasangan terakhir adalah  0 dan jumlah SEPTET / KARAKTER/HURUF habis dibagi 8 (kelipatan 8) maka rangkaian octet perlu ditutup dengan octet "00". Tujunnya untuk menggenapkan perhitungan septet-octet


Action scriptnya seperti berikut :

function konversi(textnya:String, tipe:Number):String
{
var textbaru:String = new String; // sms < 160 karakter
var textbaru2:String = new String; //long sms
var hasil:Number;
var hasil2:Number;
var char1:Number;
var char2:Number;
var septet:Number=1;
var sisa:Number=0; //sisa = MSB / bit ke 7 

for(b=0 ; b< textnya.length ; b++)
{
char1=textnya.charCodeAt(b+1);
char2=textnya.charCodeAt(b);

//rumus mencari PDU SMS biasa
hasil=( ((0x7F >> (7 - septet)) & char1 ) <<(8 - septet) ) + (char2 >> (septet - 1)) ;

if(hasil< 16 ) textbaru+="0";
textbaru+=hasil.toString(16).toUpperCase();

// rumus padding 1 bit untuk long SMS
hasil2=sisa + ( (hasil & 0x7F) << 1) ;
sisa= hasil >> 7;

if(hasil2< 16 ) textbaru2+="0";
textbaru2+=hasil2.toString(16).toUpperCase();
trace("sisa= "+ sisa + " b= " + b + "septetne :" + septet);

// rumus untuk sms biasa, di skip septet ke 8
if(septet == 7) { 
septet = 1;
b++;
}
else septet++;
}

//rumus penggenap sisa diakhir octet
                     if(sisa == 1) textbaru2+="01";
if(sisa == 0 && ( (textnya.length) % 8) == 0)textbaru2+="00";


//tipe 0= sms biasa, 1= LONG/CONCATENATE SMS
                      if(tipe == 0) return textbaru;
 else return textbaru2;

}

Jika ingin kirim SMS Proklamasi Indonesia 17 agustus ....

 Kami bangsa Indonesia dengan ini menjatakan kemerdekaan Indonesia.
Hal-hal jang mengenai pemindahan kekoeasaan d.l.l., diselenggarakan
dengan tjara seksama dan dalam tempo jang sesingkat-singkatnja.
Djakarta, hari 17 boelan 8 tahoen 05
Atas nama bangsa Indonesia.
Soekarno/Hatta 

bagian pertama:


AT+CMGS=153<enter> 
0041000B818051757367F60000A0050003BF020196E1761A240EBBCFF33028E926BFDDE5793A0C2297DDE7B01B9476A741EDB25B1DA687D76137685D6E97E5E4F23A1C7683926EF2DB5D9EA7C3AE0632CC6EA1C36C903AEC3E83DA65F7B9EC0EA741F0723BED2687D16137685D5EBFCBE17938EC06915D6C17DBC50291D3F332BBEC3E9FC3F2F03AEC6E90CBEE73D80DA2ABC3F230685E5ECFC3<ctrl+z> 

bagian kedua:


AT+CMGS=129<enter> 
0041010B818051757367F6000084050003BF0202DA611039EC0691C3EC701B442FB7E16F903AEC3E83E6E579DA7D5E87E9AD79DA7D5E87E96E75D8D520AAC3EBB09C1E6681D061791A14BB81C4EF323BEC06E140F430FA5D768360B546901E9E83DCE17618240EBBCFF33028E926BFDDE5793AEC6A4CDFE57558EE7EBF90613A3D0C<ctrl+z> 




Ingat...jika mencoba, harap nomer telpon tujuan diganti, dan nilai yg highlight warna merah harus sama di kedua bagian, tapi jika ingin mengirim sms yg sama ke nomer yg sama pula, maka nilainya harus berbeda.
Bagian UDL (userdata length) yang warna merah backgound biru merupakan jumlah  karakter yg dikirim + 7 header, sehingga jika karakter sms /spetet = 153 maka nilainya adalah 153+7 = 160 = 0xA0.

Untuk mempermudah proses belajar AT COMMAND - LONG SMS, saya telah buatkan konverter yg dapat diunduh di :

http://www.4shared.com/document/pl1jcZJw/pdu.html

SELAMAT MENCOBA
Share:

SMS via AT COMMAND - PDU mode



Nah...bagaimana jika modem/HP ga support teks mode ?


AT+CMGF=1<enter>
ERROR


AT+CMGF=0<enter>
OK



Maka kita perlu merubah modenya menjadi Mode PDU. Mode ini merupakan cara pengiriman sms "Irit bit" , dimana ketika diciptakan mungkin saja resource dari system GSM masih sedikit. Mungkin jika diciptakan jaman 2000an hal ini akan tidak dilakukan. Mari kita bahas secara pelan-pelan.

Pertama kita perlu mengenal istilah "OCTET" dan "SEPTET" . Octet merupakan mode 8 bit, sedangkan Septet merupakan mode data 7bit. Data yg dikirimkan semuanya memakai mode OCTET, sedangkan SEPTET merupakan system penghematan karakter ASCII yg 8 bit menjadi 7 bit. Pola karakter 7-bit GSM hampir mirip ASCII tetapi diadakan beberapa penyesuaian untuk symbol khusus (baca lebih lanjut disini).

sebaiknya kita bahas dulu perubahan karakter 7-bit  (SEPTET) menjadi OCTET. Kita ambil contoh sebuah kalimat "hellohello"


courtesy of www.dreamfabric.com

hellohello
104101108108111104101108108111
1101000110010111011001101100110111111010001100101110110011011001101111
1101000
1100101
1101100
1101100
1101111
1101000
1100101
1101100
1101100
1101111

kalimat "hellohello" terdiri dari 10 SEPTET , dan sesuai tabel (perhatikan highlight berwarna kuning), kita ambil secara bertahap bit terakhir (warna kuning) dan kemudian ditaruh di awal dari SEPTET sebelumnya sehingga membentuk OCTET seperti berikut :

11101000
00110010
10011011
11111101
01000110
10010111
11011001
11101100
110111
E8329BFD4697D9
EC37


Njlimet ? ndak juga ....kalo dibuat dalam actionscript seperti ini codingnya :

function konversi(textnya:String):String
{
var textbaru:String = new String;
var hasil:Number;
var char1:Number;
var char2:Number;

for(b=0 ; b< textnya.length ; b++)
{
char1=textnya.charCodeAt(b+1);
char2=textnya.charCodeAt(b);

hasil=( ((0x7F >> (7 - septet)) & char1 ) <<(8 - septet) ) +(char2 >> (septet - 1)) ;

if(hasil< 16 ) textbaru+="0";
textbaru+=hasil.toString(16).toUpperCase();


}
return textbaru;

}

 Selanjutnya kita akan menambahkan beberapa header sebagai pelengkap pengirim sms seperti berikut:

Octet Penjelasan
00Panjang dari SMSC operator, kita gunakan "00" jika menggunakan SMSC default yg ada pada modem
11Artinya SMS SUBMIT / kirim sms
00Nomer referensi dari SMS yg dikirim, biarkan nilainya "00" agar ditentukan oleh operator
0BPanjang nomer tujuan 
81Format nomer tujuan, untuk mode sms local indonesia gunakan nilai 81
8051757367F6Nomer telepon yg ditulis sebagai semioctet, dimana jika jumlah nomer ganjil maka tambahkan karakter F dibelakang. Semioctet yg dimaksud adalah pola membalik 2 pasang angka, jika nomer 08 15 57 37 76 6F akan menjadi  80 51 75 73 67 F6
00TP-PID. Protocol identifier , biarkan nilainya "00"
00TP-DCS. Data coding scheme. Untuk kirim sms biasa gunakan 00
AATP-Validity-Period. "AA" berarti sms berlaku maksimal 4 hari
0APanjang septet atau panjang karakter, jadi karena panjang "hellohello" 10 septet, jadi nilainya 0A
E8329BFD4697D9EC37TP-User-Data. Octet berikut adalah hasil konversi septet yg dibahas diatas.

kemudian octet ini disusun dan dihitung panjangnya ( 1 octet = 2 karakter = panjang total/2) dikurangi 1 (octet "00" awal tidak dihitung), sehingga pada terminal kita inputkan seperti berikut :



AT+CMGS=23<enter> 
0011000B818051757367F60000AA0AE8329BFD4697D9EC37<ctrl+z> 



Mbulet ? Bingung ? ga juga ....semuanya ada pola yg pasti kok...lalu gimana jika ingin kirim long SMS (>160 char) ? kita akan bahas pada bagian berikutnya LONG SMS-PDU


SELAMAT MENCOBA
Share:

SMS via AT COMMAND - teks mode

Jika anda memiliki Modem/HP GSM yg bisa dijadikan Modem bisa mencoba beberapa percoban yang mengasyikkan untuk belajar proses pengiriman SMS. Wahh...pasti susah ya? sebenernya yg susah itu di proses RF / Radio nya, tapi ga usah lah sampe kesana karena kita akan bahas cara software HP mengirim SMS melalui AT COMMAND.

AT COMMAND adalah perintah console terminal yang umum dipakai pada modem telephoni. Untuk mengecek apakah modemmu support maka masuklah melalui hyperterminal/ putty/ securecrt  dan koneksikan menuju port com dari modem, dengan kecepatan bitrate umumnya adalah 9600 bps. Maka ketika koneksinya sudah benar, inputkan melalui keyboard perintah berikut:



AT <enter>
OK 


Ada 2 mode dalam bermain SMS melalui AT COMMAND , yaitu mode teks dan mode PDU (protocol description unit)

Untuk memilih mode SMS teks, maka lakukan perintah berikut:



AT+CMGF=1<enter>
OK 


Jika modem tidak support  maka modem akan mengeluarkan respon ERROR, dan berarti hanya support mode PDU.

Selanjutnya untuk mengirim SMS mode teks (maximum 160 karakter saja) caranya gampang saja, cukup mengikuti perintah berikut ini :


AT+CMGS="nomer tujuan" <enter>
>masukkan pesan <ctrl+z>
OK


Beberapa modem memerlukan tanda " (petik) diantara nomer telepon. Contoh nya seperti berikut:


AT+CMGS="08155737799"<enter>
>test sms via at command <ctrl+z>
OK


Mudah bukan? Lalu untuk membaca sms masuk bagaimana caranya ? Ikuti perintah berikut :


AT+CMGL=?<enter>
+CMGL: ("REC UNREAD", "REC READ", "STO UNSENT", "STO SENT", "ALL")

OK


REC UNREAD  = pesan masuk yg belum dibaca
REC READ       = pesan masuk yg sudah dibaca
STO UNSENT  = pesan keluar yg belum terkirim (draft)
STO SENT        = pesan keluar yang terkirim
ALL                   = semua pesan sms in dan out


Jadi jika ingin melihat semua SMS maka contohnya seperti berikut :


AT+CMGL="ALL"<enter>

+CMGL: 155,"REC READ","628185999xx",,"2012/08/16 12:39:04+28"
Hehe..aq yg bl td,sorry lupa

+CMGL: 156,"STO SENT","628185999xx",,
makan dulu sana...

+CMGL: 157,"REC READ","628185999xx",,"2012/08/16 16:30:18+28"
08888001065,10rb

+CMGL: 158,"STO SENT","628185999xx",,
ga isok...gagal.

+CMGL: 159,"REC READ","62878888333xx",,"2012/08/16 20:19:35+28"
47616E2073656C616D6174206D616C616D2C206D61752074616E7961206974752070616B6574206D6963726F636F6E74726F6C6C65726E796120756461682070616B6520696E70757420706F7274207573623F7468616E6B73

OK



wah...message paling bawah kok kode-kode aneh gitu? Tenang...kita akan bahas di pembahasan berikutnya SMS PDU


SELAMAT MENCOBA

Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (8) arduino (25) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (5) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (7) radio (15) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) transistor (2) troubleshoot (3) tulisan (92) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika