Senin, 22 Agustus 2011

Tutorial Web Server NM7010A untuk Menampilkan Data Tegangan

Saya akan memperkenalkan sedikit aplikasi dengan NM7010A-LF yang dapat berfungsi sebagai Web Server, sehingga data dari mikrokontroler dapat langsung diakses pada jaringan internet dengan memanggil alamat IP dan website tanpa harus terhubung dengan komputer terlebih dahulu. Pada contoh yang akan saya jelaskan ini menggunakan metode TCP (Transmission Control Protocol) untuk pengiriman data pada jaringan.

Jika digambarkan maka blok diagramnya seperti ini:

Sensor --> Mikrokontroler <---> NM7010A <---> Internet

Pada aplikasi ini data yang akan ditampilkan pada website adalah data tegangan dari potensiometer. Rangkaian utama yang terdiri dari ATMega32, LCD 16x2, NM7010-A, potensiometer, dan 3 buah led adalah sebagai berikut:
 
Rangkaian pada modul NM7010-A adalah sebagai berikut:


Dihubungkan ke rangkaian mikro jadi bgni:

A8 - A14 terhubung dengan switch yang jika di ON kan maka akan menerima logika 0 atau terhubung dengan ground, dan jika di OFF kan maka akan menerima logika 1 atau terhubung dengan VCC dengan resistor pull-up 10k. Pada aplikasi ini A8 - A13 di ON kan dan A14 di OFF kan.

Listing programnya menggunakan Bascom AVR sebagai berikut:

'===========================================================
'Programmer: Wahyu Rahmaniar
'Company   : Technologination
'
'Aplikasi NM7010A-LF
'===========================================================

$regfile = "m32def.dat"
$crystal = 8000000

$hwstack = 80
$swstack = 80
$framesize = 120

'used constants
Const Sock_stream = $01                                    
Const Sock_dgram = $02                                     
Const Sock_ipl_raw = $03                                  
Const Sock_macl_raw = $04                                  
Const Sel_control = 0                                      
Const Sel_send = 1                                         
Const Sel_recv = 2                                         

'socket status
Const Sock_closed = $00                                    
Const Sock_arp = $01                                       
Const Sock_listen = $02                                    
Const Sock_synsent = $03                                   
Const Sock_synsent_ack = $04                               
Const Sock_synrecv = $05                                   
Const Sock_established = $06                               
Const Sock_close_wait = $07                                
Const Sock_last_ack = $08                                  
Const Sock_fin_wait1 = $09                                 
Const Sock_fin_wait2 = $0a                                 
Const Sock_closing = $0b                                   
Const Sock_time_wait = $0c                                 
Const Sock_reset = $0d                                     
Const Sock_init = $0e                                      
Const Sock_udp = $0f                                       
Const Sock_raw = $10                                       

Enable Interrupts
Config Tcpip = Int0 , Mac = 00.00.12.34.56.78 , Ip = 192.168.1.59 , Submask = 255.255.255.0 , Gateway = 0.0.0.0 , Localport = 80 , Tx = $55 , Rx = $55 , Twi = &H80 , Clock = 400000

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 16 * 2

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Config Portb = Output
Portb = 0

Led1 Alias Portb.0
Led2 Alias Portb.1
Led3 Alias Portb.2

Dim Shtml As String * 15
Dim Tempw As Word
Dim I As Byte , P As Byte
Dim S As String * 500
Dim Test(2) As String * 10

Do
   Tempw = Socketstat(0 , 0)
   If Tempw = Sock_established Then
      Tempw = Socketstat(0 , Sel_recv)
      If Tempw > 0 Then
         Do
            Tempw = Tcpread(0 , S)

            P = Split(s , Test(1) , " ")
            If Test(1) = "GET" Then
            Gosub Webpage
            End If

         Loop Until S = ""
         Tempw = Tcpwrite(0 , " ")
         Gosub Kirim_data

         Closesocket 0
      End If
   Elseif Tempw = Sock_close_wait Then
      Closesocket 0
   Elseif Tempw = Sock_closed Then
      I = Getsocket(0 , Sock_stream , 80 , 0)
      Socketlisten 0
   End If

Loop
End

Webpage:
   P = Split(s , Test(1) , " ")
   Shtml = Test(2)
Return

Kirim_data:
Dim Wsize As Word , Icount As Integer
Dim Data_adc As Word
Dim Adc_teg As Single
Dim Teg As String * 5
Dim Y As Byte , X As Byte

Start Adc

Data_adc = Getadc(0)
Adc_teg = Data_adc / 1023
Adc_teg = Adc_teg * 5
Teg = Fusing(adc_teg , "#.###")

If Shtml = "/test.htm" Then
S = "<html><head><title>Test NM7010A-LF</title></head><body><p><b>Menampilkan Data Tegangan<br><br></b>Tegangan= " + Teg + " volt" + "</p><p>&nbsp;</p><p>&nbsp;</p></body></html>"
Cls
Cursor Off
Locate 1 , 1
Lcd "Data Tegangan ="
Locate 2 , 1
Lcd Teg ; " volt"
Wait 1

Else
S = "<html><head><title>Error Loading Page</title></head><Web yang Anda pilih Salah!!!></body></html>"
Cls
Cursor Off
Locate 1 , 1
Lcd "Web Salah!!!"
Wait 1

End If
Wsize = Len(s)
Tempw = Tcpwrite(0 , S , Wsize)


Shtml = ""

   If Adc_teg >= 0 And Adc_teg < 2 Then
      Led1 = 1
      Led2 = 0
      Led3 = 0
   Elseif Adc_teg >= 2 And Adc_teg < 3 Then
      Led1 = 0
      Led2 = 1
      Led3 = 0
   Elseif Adc_teg >= 3 Then
      Led1 = 0
      Led2 = 0
      Led3 = 1
   End If
Return

Program tersebut akan menampilkan data tegangan pada website dengan alamat IP 192.168.1.59 dan web test.html. Jika NM7010A menerima data string "GET" maka data setelahnya akan ditampilkan pada website dan LCD 16x2, dan data tersebut adalah data tegangan yang berasal dari potensiometer pada PortA.0. 

Jika nilai tegangan antara 0-2 volt maka Led1 akan menyala, jika nilai tegangan antara 2-3 volt maka Led2 akan menyala, dan jika nilai tegangan lebih dari 3 volt maka Led3 akan menyala.

Jika alamat web yang dipilih salah maka pada web akan tampil tulisan "Web yang Anda pilih Salah!!!" dan pada LCD akan tampil tulisan "Web Salah!!!".

Hasil tampilan web dapat dilihat dengan mengetikkan "http://192.168.1.59/test.htm" pada browser, tampilannya akan tampak seperti ini:


Jangan lupa juga untuk memastikan jaringan telah terhubung dengan baik dengan membuka Command Prompt (window + R kemudian ketikan cmd) dan ketikkan ping -t 192.168.1.59.
Program lengkapnya dapat didownload disini

Tempat Jual Komponen dan Elektronik.

-ayuchan-