WAP Browser berbasis MCS51: Membaca Indeks Berita Detik.com

Penginnya judul postingan kali ini adalah “Web Browser berbasis MCS51”, namun sepertinya agak susah, kecuali kalau saya menggunakan MCU 8051 yang mempunyai memori yang cukup besar. Satu halaman web http://www.detik.com saja sudah berukuran 500K lebih, padahal RAM maksimum yang bisa diakses oleh AT89S52 hanya 64 KB. Tapi untungnya saya ingat bahwa, untuk perangkat mobile (handphone), untuk mengakses internet menggunakan WAP (Wireless Application Protocol), halaman web yang lebih disesuaikan untuk perangkat mobile. Dan hampir semua web sudah mempunyai WAP.

Wap.Detik.Com

Cobalah ketik di internet browser anda wap.detik.com, klo saya coba di Chrome, akan ada file save dialog untuk menyimpan file tersebut. Simpanlah dengan ekstensi .html. Lalu coba buka dengan browser anda, hasilnya akan tampak seperti gambar berikut:

Terlihat, wap.detik.com hanya memuat breaking news dan ukuran file htmlnya pun hanya 4KB, masih memungkinkan AT89S52 untuk mengolahnya dengan tambahan memori eksternal. Nah tujuan dari proyek ini adalah membaca halaman wap.detik.com dan menampilkan breaking news atau indeks berita ke LCD.

Membaca wap.detik.com dengan SIM700

TCP/IP stack yang sudah terembedd ke dalam SIM700 akan digunakan untuk membaca halaman wap.detik.com. Prosesnya sama dengan ketika SIM700 digunakan untuk mengakses TCP server di aplikasi terdahulu. Berikut urutan2 AT commandnya:

ATE0
AT+CMGF=1
AT&W
AT+CIPSHUT
AT+CSTT="telkomsel","wap","wap123"
AT+CIICR
AT+CIFSR
AT+CDNSORIP=1
AT+CIPSTART="TCP","wap.detik.com","80"
AT+CIPSEND
GET / HTTP/1.1
Host: wap.detik.com
Connection: Keep-Alive
Accept: */*
Accept-Language: en-us

AT command yang terbaru adalah

AT+CDNSORIP=1

yang berfungsi karena kali ini akan mengakses server (wap server) menggunakan nama domain, bukan IP address.

Setelah AT+CIPSTART, server mengirim CONNECT OK, maka hal berikutnya adalah mengambil data dari server dengan perintah GET HTTP. Nah server kemudian akan mengirim data-data seperti ketika kita membuka WAP server menggunakan internet browser.

Berikut capture datanya:

Nah data-data ini kemudian disimpan ke dalam wap_buffer. Variable wap_buffer ini memiliki ukuran 10KB. Dalam proyek ini AT89S52 dihubungkan dengan memori eksternal.

XML Parser

Data yang dikirim oleh server berupa file xml. Agar bisa ditampilkan ke LCD, hal yang harus dilakukan adalah mengektrak, parsing, data-data yang kita inginkan. Dengan menggunakan algoritma sederhana, algoritma for, hal ini bisa dilakukan. Pertama carilah string Breaking News.

Breaking News</u></b></p><p><small>Kamis, 16/06/2011 13:23</small><br/><anchor>Densus 88 Tangkap Perakit Bom Berinisial S di Pemalang<br/><go href=”http://wap.detik.com/index.php?fuseaction=wap.read&amp;menugroup=&amp;idkanal=10&amp;mainmenuid=&amp;idnews=1661704&amp;idPartner=&amp;d=2011-06-16&amp;t=132338&amp;msisdn=&amp;flag=&amp;visit=&amp;fas=7&amp;op=flexi&amp;PHPSESSID=&amp;lasttime=1308205879″></go></anchor></p><p><small>Kamis, 16/06/2011 13:31</small><br/><anchor>Spartan, Proyek Rahasia Facebook dan Apple?<br/><go href=”http://wap.detik.com/index.php?fuseaction=wap.read&amp;menugroup=&amp;idkanal=317&amp;mainmenuid=&amp;idnews=1661502&amp;idPartner=&amp;d=2011-06-16&amp;t=133157&amp;msisdn=&amp;flag=&amp;visit=&amp;fas=7&amp;op=flexi&amp;PHPSESSID=&amp;lasttime=1308205879″></go></anchor></p><p><small>Kamis, 16/06/2011 13:30</small><br/><anchor>Industri Hotel dan Restoran Pasrah Harga Elpiji 50 Kg Naik<br/><go 

Kalau sudah ketemu, kemudian cari string small, kalau sudah ketemu maka kita bisa menemukan tanggal dan jam dari indeks berita yang pertama. Nah indeks beritanya akan didapat setelah menemukan string anchor. Begitu seterusnya sampai semua indeks berita terbaca.

Setelah dibaca, tinggal ditampilkan ke LCD. LCD yang digunakan adalah LCD dengan ukuran 40×4. Karena indeks berita mungkin lebih dari 40 karakter, maka harus ada fungsi scroll saat menampilkan ke LCD.

Berikut adalah video capture simulasi pakai Proteus, SIM700 terhubung ke COMPIM melalui COM1.

Catatan

Program ini khusus dibuat untuk membaca wap.detik.com, program tidak akan berjalan dengan benar untuk wap server yang lain, atau ketika Detik mengubah format xmlnya, maka program pun harus di-compile ulang. Program ini juga masih sangat sederhana, dibuat menggunakan sebuah slogan “YANG PENTING BISA, YANG PENTING JALAN“. Jadi pasti masih banyak errornya.

Semoga bermanfaat.

Download Source Code

Rieut…

Geus saminggu…can kapanggih wae carana..
Ganti ieu..ganti itu..angger keneh..
Nu acan dicoba teh ngaganti pecebena..

Ari sumberna mah ic mp3 decoderna…
tapi maenya kudu diganti?
meureun kudu mimitian deui ieu mah..
teu bisa…

Tapi pasti aya jalan kaluar…
asal tetep diteangan…
Sok atuh…

Di Jual Modul SIM700

The new EDGE module is a complete Quad-Band GSM/GPRS/EDGE solution in a compact plug-in module. Featuring an industry-standard interface, it delivers GSM/GPRS/EDGE 850/900/1800/1900MHz performance for Data, Voice, SMS, and Fax in a small form factor and with low power consumption. The leading features of the Module make it ideal for M2M applications like AMR, POS, Security and AVL etc. 

General features
  - Quad-Band GSM/GPRS/EDGE 850/900/1800/1900MHz
  - Output power:
     GMSK:
        - Class 4 (2 W @ 850/900MHz)
        - Class 1 (1 W @ 1800/1900MHz)
     8PSK:
        - Class E2 (0.5W @ GSM850/EGSM900)
        - Class E2 (0.4W @ DCS1800/PCS1900)
  - GPRS /EDGE multi-slot class 12
  - Coding scheme: CS1~4, MS1~9
  - Mobile station class B
  - Control via AT commands
     (GSM 07.07, 07.05 and SIMCOM enhanced AT Commands)
  - SIM application toolkit
  - Supply voltage range 3.4 ... 4.5 V
  - Low power consumption
  - Normal operation temperature: -30°C to +80°C
  - Restricted operation temperature: -40°C to -30°C and +80°C to +85°C
  - Storage temperature: -45°C to +90°C
  - Dimension: 45*34*3mm

Specifications for fax
  - Group 3, class 1 

Specifications for data:
  - CSD: up to 14.4Kbps, non-transparent
  - GPRS: max: 85.6Kbps
  - EDGE: DL&UL max: 236.8Kbps
  - Coding scheme: CS1~4, MCS1~9
  - Support PBCCH
  - Support USSD 

Drivers
  - Multiplexer driver for Microsoft Windows

Specifications for voice
  - Half Rate (ETS 06.20)
  - Full Rate (ETS 06.10)
  - Enhanced Full Rate (ETS 06.50 / 06.60 / 06.80)
  - Echo cancellation
  - Noise reduction
  - AMR 

Compatibility
  - AT cellular command interface 

Interfaces
  - 80-pins BTB connector
  - Power supply
  - Two analog audio channels
  - RTC backup
  - Dual - serial ports
  - USB slave
  - Antenna pad and antenna connector
  - Charge interface
  - SIM Card
  - I2 C BUS
Certifications
- CE

Bagi yang membutuhkan silakan hubungi saya:

Email/YM : u_2man@yahoo.co.id

HP/SMS : 082122735421

Harga (Modul+Connector) Rp. 650.000, belum termasuk ongkos kirim

Stock: 240 pcs

RS-485: Aplikasi Sederhana

Alhamdulillah, akhirnya selesai juga contoh aplikasi RS-485 sederhana ini.

Aplikasi ini merupakan pengembangan dari aplikasi pembacaan suhu dengan SHT11 dengan penambahan kemampuan RS-485. Protocol yang digunakan adalah protocol yang sangat sederhana sekedar menunjukan bagaimana jaringan RS-485 bekerja. Dengan memahami prinsip dasar ini, penggunaan protocol seperti Modbus, DLMS, dan lain-lain, akan terasa lebih mudah, walaupun sebenarnya saya juga belum pernah mencoba protocol-protokol tersebut.

Antarmuka Mikro dan RS-485

Untuk menghubungkan  mikrokontroler dengan jaringan RS-485 digunakan IC driver MAX487.

IC MAX487 merupakan IC driver RS-485 half-duplex. Pin kendali, terima (RE) dan kirim (DE) disatukan dan dihubungkan ke P3.2. Dengan konfigurasi ini, jika P3.2 HIGH, MAX487 dalam posisi mengirim data, sebaliknya jika P3.2,  MAX487 dalam posisi menerima data.  Untuk lebih jelasnya, silakan baca datasheet MAX487.

Posisi default adalah menerima. Ketika ada perintah dari master (PC), dan alamatnya sesuai, maka ketika harus merespon, mikro akan membuat P3.2 HIGH, lalu mengirim data. Dan mengembalikan P3.2 ke LOW setelah pengiriman selesai.

Antarmuka PC dan RS-485

Hubungan PC dengan RS-485 pada dasarnya sama dengan hubungan Mikro dan RS-485. Masalahnya, kalau di PC mungkin yang digunakan adalah dari RS-232 ke RS-485. Oleh karena itu sebelum masuk ke IC driver, level RS-232 terlebih dahulu dikonvert ke TTL. Untuk kendali driver digunakan pin RTS.

Contoh rangkaian antarmuka dan RS-485:

Dalam percobaan saya, jaringan RS-485 disimulasikan dengan Proteus. Hubungan antara Proteus dengan program aplikasi menggunakan Virtual serial port, seperti halnya contoh-contoh simulasi komunikasi serial yang ada di blog ini. Oleh karena itu agak sedikit berbeda dengan RS-485 sebenarnya.

Dalam simulasi ini, COMPIM di Proteus akan terhubung dengan salah satu port serial virtual, missal COM2, begitu juga dengan aplikasi PC, missal COM2. Nah kedua COM tersebut dihubungkan oleh Virtual Serial Port dengan koneksi sebagai berikut:

Koneksinya:

Oleh karena RTS terhubung dengan CTS, maka pengendali IC driver RS-485 akan terhubung dengan pin CTS.

Protokol Komunikasi

Seperti telah dijelaskan bahwa dalam contoh ini digunakan protocol komunikasi yang sederhana. Pada dasarnya ada 3 perintah yang digunakan

  1. Perintah pembacaan suhu dan kelembaban, menggunakan karakter ‘A’;
  2. Perintah menyalakan LED, ‘B’
  3. Perintah mematikan LED, ‘C’

Format perintahnya adalah:

ALAMAT

PERINTAH

0x0D

Alamat menggunakan 2 karakter ‘00’ – ‘FF’. Jika alamat ‘00’, ini berarti perintah broadcast, artinya semua sensor akan menjalankan perintah tersebut,namun printah broadcast hanya untuk menyalakan dan mematikan LED.

Ketika menerima perintah, hal pertama yang dilakukan oleh mikrokontroler adalah mengecek alamat tersebut, jika sesuai maka mikro akan merespon sesuai dengan perintah yang diterima:

  1. Jika perintah pembacaan, mikro akan mengirimkan data suhu dan kelembaban dengan format seperti pada contoh blog sebelumnya, misalnya “26.3C;87.3%”
  2. Jika perintah menyalakan LED, mikro akan mengirim “LED ON”
  3. Jika mematikan LED, mikro akan mengirimkan “LED OFF”
  4. Jika perintah broadcast, maka mikro tidak akan mengirimkan apapun
Program Mikro
Program mikro ini pada dasarnya hasil modifikasi dari program pembacaan SHT11 postingan sebelumnya. Setelah satu frame data serial diterima, ditandai karakter 0x0D, program pertama akan mengecek apakah alamat ditujukan untuknya atau bukan. Jika ya, langsung mengeksekusi perintah tersebut.
Ada perintah yang membutuhkan jawaban dan ada juga yang tidak, perintag broadcast. Ketika akan mengirim jawaban, sebelum mengirim data serial, pin kendali RS485, RS_485DIR, harus di-set. Setelah selesai di-clear kembali agar bisa menerima perintah selanjutnya.
Program PC
Yang terpenting dari program PC ini adalah proses pengiriman data serial:
procedure TForm1.sendrs485(command: string);
begin
if Port_State then
  with ApdComPort1 do
    begin
      RTS:=true;
      Output:=command+#13;
      while ApdComPort1.OutBuffUsed>0  do
        Application.ProcessMessages;
      RTS:=false;
    end;
end;

Sebelum ngirim, RTS dibuat true, kemudian setelah ngirim, program harus nunggu data di buffer output harus kosong, artinya data telah terkirim semua, baru RTS di-false-kan kembali agar bisa menerima data dari slave.
Simulasi Proteus
Ada yang aneh pada saat disimulasi di proteus, saya membuat 3 perangkat RS-485, saat di run, program tidak jalan! Kemudian satu perangkat saya ganti dengan program lain…dan jalan!!
Saya sudah coba di 2 PC, hasilnya sama…kemungkinan Proteus tidak bisa mensimulasi dengan benar, karena masalah memori dari PC yang digunakan..entahlah.
Semoga bermanfaat…