You have no items in your shopping cart.

Subtotal: 0.00

Abstract

Computer communication systems and especially the Internet are playing an important role in the daily life. Using this knowledge many applications are imaginable. Home automation, utility meters, appliances, security systems, card readers, and building controls, which can be easily, controlled using either special front-end software or a standard internet browser client from anywhere around the world.

Web access functionality is embedded in a device to enable low cost widely accessible and enhanced user interface functions for the device. A web server in the device provides access to the user interface functions for the device through a device web page. A web server can be embedded into any appliance and connected to the Internet so the appliance can be monitored and controlled from remote places through the browser in a desktop.

The aim of the project is to control the devices or equipment’s from the remote place through a web page. Here all the devices, which are to be controlled, are connected to the ARM 7 Evaluation Board. The web-server circuit is connected to LAN or Internet. The client or a person on the PC is also connected to same LAN or Internet. By typing the IP-address of LAN on the web browser, the user gets a web page on screen; this page contains all the information about the status of the devices. The user can also control the devices interfaced to the web server by pressing a button provided in the web page.

Block Diagram



Block Diagram

Concept

The aim of the project is to control the devices or equipment’s from the remote place through a web page. Here all the devices, which are to be controlled, are connected to the ARM 7 Evaluation Board. Initially connect the 9V adaptor with ARM 7 Evaluation Board and Connect the SPI Ethernet Board using 10 pin FRC cable, then Program the ARM 7 with Flash magic. Connect Ethernet cable to SPI Ethernet Board. From end user side type the IP address 192.168.1.60 and this web page will be opened. Web page is created using HTML program and the device is controlled through Ethernet, user can control the Device from kit side or from this web page

Hardware requirements

Software requirements

  • Programming Language: Embedded C
  • KEIL U Vision IDE
  • Flash magic

ARM& LPC214x

WEB SERVER

Reload

ADC

AN0 0

 

P1[31..24] 

BUTTON #0 ON
BUTTON #1 ON
BUTTON #2 ON
BUTTON #3 ON
BUTTON #4 ON
BUTTON #5 OFF
BUTTON #6 ON
BUTTON #7 ON

 

P1[23..16]

1 OFF Toggle
2  OFF Toggle
3 OFF Toggle
4 OFF Toggle
5 OFF Toggle
6 OFF Toggle
7 OFF Toggle

 

This project aims at implementing embedded web server for temperature measurement, LED and Switch control. Here the embedded microcontroller is programmed to act as the web server. The web page is designed and uploaded in the embedded microcontroller. Since, the Internet is the network of networks we can access this web server from anywhere in the world. If anyone wants to access the web server for device control automation, he has to enter the domain name of the web page in the browser of his/her PC. Each PC, which has Internet connection, is identified by the unique address called IP address. The communication within this network is established with the help of IP addresses. The Ethernet controller receives the request from the user PC. The Ethernet controller is the stand-alone device in which the function of the Ethernet protocol is written. The Ethernet controller checks whether the incoming information corresponds to it or not. If the information corresponds to it, the information is conveyed from Ethernet controller to embedded microcontroller. Otherwise it is ignored. After receiving the requisition from the user PC the web page designed in the web server is sent. So, the user can see the web page in his PC. The software model for device control automation is developed in the web page. The user can control the device control unit from his PC by accessing with web page. If the user accesses the web page the commands to control the automation unit is sent to the web server. The embedded microcontroller process the information. The embedded microcontroller controls the device control automation unit as per the command.

Basics of TCP/IP, cables and connectors

TCP/IP Protocol Suite

The Ethernet system is also referred to as the TCP/IP protocol suite, which is named after two of the most important protocols in it: the Transmission Control Protocol (TCP) and the Internet Protocol (IP), which were also the first two networking protocols defined. The TCP/IP protocol suite is layered protocol with four layers.



TCP/IP Protocol Suite

  • Lowest Level Protocol – “Sending & Receiving Data” – any data-using specific network hardware.
  • Top Level Protocol – Designed specifically for tasks like “Transferring files or delivering emails”.
  • In – between Protocols – Concerned with “Routing & Reliability”.

Connectors and Cables

  • Color-coding is used to fit the cables properly
  • PC to PC - crossed wiring (TX+ is connected with TX+ and TX- is connected with TX-)
  • PC to Hub/Hub to PC - Straight wiring is used (TX+ is connected with RX+ and TX- is connected with RX-)



Connectors and Cables

Pin Number Color Code Specification

1 White/Orange TX+
2 Orange/White TX-
3 White/Green RX+
4 Blue/White NC
5  White/Blue NC
6 Green/White RX-
7 White/Brown Power Over Ethernet
1 Brown/White Power Over Ethernet


Data Format

A frame sent on the cable has eight different fields. Except the data and pad fields, the lengths of fields are fixed. The first field, preamble, is sent at the beginning of every frame. It synchronizes the receiving devices in every MAC unit before the important frame contents are received. The bit pattern of the preamble field is just 7 bytes of the pattern 10101010. The start-Of-frame delimiter (SFD) is the single byte 10101011 which follows the preamble and indicates the start of a valid frame. The destination and source addresses indicate the addresses of the DTEs that the packet is going to and coming form. Each address field can be either 16 or 48 bits, depending on the installation of the LAN. The first bit of the destination address field denotes whether the address is an individual address or a group address. The length indicator field is 2 bytes that informs about the number of bytes in the data field. The data field contains the data to be sent. If the length of the data field is less than the lower limit, sequences of bytes are added as the pad field. Lastly, the frame check sequence (FCS) field contains a four byte CRC value that is used for error detection.


 Data Format

Source Code

/* Project name:
 DEMO (Ethernet controller ENC28J60 mini library)
 * Description:
        This library is designed to embed tiny servers.
        No Ethernet knowledge is necessary to use it.
        It has a very small footprint.
 
        Features:
                Driver for ENC28J60 Microchip SPI Ethernet controller
                Supports IPV4 protocol
                Does not support fragmented packets
                Replies to :
                        - ARP requests
                        - ICMP echo requests
                        - UDP requests
                        - TCP requests (no stack, no packet reconstruction)
 * Test configuration:
     MCU:             LPC21xx
     Oscillator:      12.0 MHz (cclk = 60.0 MHz, Fcco = 240.0 MHz)
     SW:              KEIL uVision3 v3.50
     
 * BOARD NOTES:
     - Setup PC Ethernet Card "Speed and Duplex" to 10Mb/s Full Duplex
      (P0.7/SSEL0 must be high for SPI to operate)
     - From Command prompt try to ping IP address defined below (deault 192.168.20.60)
     - In web browser type URL http://192.168.20.60
*/
 
/********************************************************************************/
//                                                          Hardware settings (ADK Board)
/********************************************************************************/
//
// CN4 (LED)    - Connector (JP8) to LED Output    --> Port1 (P1.16 to P1.23)
// CN2(Switch) - Connector (JP12) to Switch Input -->  Port1(P1.24 to P1.31)
//
// SW33 - DIP Switch
// ==================
// Turn On - SCK, MISO, MOSI   (SPI Communication)
//
// SW34 - DIP Switch
// ==================
// Turn On - ETHR.CS, ETHR.RST, ETHR.INT, ETHR.WOL (Ethernet ENC28j60)
//
/********************************************************************************/
//                    In web browser type URL http://192.168.1.60
/********************************************************************************/
 
#include
#include "string.h"
 
#include "ENC28J60.h"
#include "c_ctype.h"
#include "conv.h"
#include "Utility.h"
 
#define ENC28J60_HALFDUPLEX                0
#define ENC28J60_FULLDUPLEX                1
 
/************************************************************
 * ROM constant strings
 */
const unsigned char httpHeader[] = "HTTP/1.1 200 OK\nContent-type: ";          // HTTP header
const unsigned char httpMimeTypeHTML[] = "text/html\n\n";    // HTML MIME type
const unsigned char httpMimeTypeScript[] = "text/plain\n\n";    // TEXT MIME type
unsigned char httpMethod[] = "GET /";
/*
 * this HTML page calls the boards to get its status, and builds itself with javascript
 */
const char *indexPage = "\

ARM& LPC214x

WEB SERVER

\Reload\

\\\\
ADC
AN0
AN1
\\\
P1[31..24]
\\\\
P1[23..16]
\ This is HTTP request #\ "; 
/*********************************** * RAM variables */ 
unsigned char myMacAddr[6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f}; 
// my MAC address unsigned char myIpAddr[4] = {192, 168, 1, 60} ;
// my IP address unsigned char getRequest[15]; 
// HTTP request buffer unsigned char dyna[31]; 
// buffer for dynamic response unsigned long httpCounter = 0; 
// counter of HTTP requests /******************************************* 
* functions */ /* * put the constant string pointed to by s to the ENC transmit buffer */
 unsigned long putConstString(const char *s)
 { 
 unsigned long ctr; ctr = 0; 
 while(*s) 
 { 
 ENC28J60_putByte(*s++); 
 ctr++;
 } return(ctr); 
 } 
 /* * put the string pointed to by s to the ENC transmit buffer */ 
 unsigned long putString(char *s) 
 { 
 unsigned long ctr; 
 ctr = 0; 
 while(*s) 
 { ENC28J60_putByte(*s++); 
 ctr++; 
 } 
 return(ctr); 
 } 
 /* * this function is called by the library 
 * the user accesses to the HTTP request by successive calls to ENC28J60_getByte() 
 * the user puts data in the transmit buffer by successive calls to ENC28J60_putByte() 
 * the function must return the length in bytes of the HTTP reply, or 0 if nothing to transmit 
 * * if you don't need to reply to HTTP requests, 
 * just define this function with a return(0) as single statement 
 * */ unsigned long ENC28J60_userTCP(unsigned char *remoteHost, unsigned long remotePort, unsigned long localPort, unsigned long reqLength) 
 { 
 unsigned long len, 
 // my reply length i, 
 // general purpose integer bitMask; 
 // for bit mask // 
 for parameters that are not used, skip compiler warnings "unreferenced parameter" i = (unsigned long) remoteHost;
 i = remotePort; 
 i = reqLength; 
 len = 0; 
 bitMask = 0;
 if (localPort != 80) // I listen only to web request on port 80 return(0) ;
 // get 10 first bytes only of the request, the rest does not matter here for (i = 0; i < 10; i++) getRequest[i] = ENC28J60_getByte();
 getRequest[i] = 0;
 if (memcmp(getRequest, httpMethod, 5)) // only GET method is supported here return(0); httpCounter++;
 // one more request done if (getRequest[5] == 's') // if request path name starts with s, store dynamic data in transmit buffer 
 { 
 // the text string replied by this request can be interpreted as javascript statements by browsers len = putConstString(httpHeader);
 // HTTP header len += putConstString(httpMimeTypeScript); 
 // with text MIME type // add AN0 value to reply IntToStr(0, dyna); len += putConstString("var AN0=");
 len += putString(dyna); 
 len += putConstString(";"); 
 // add AN1 value to reply IntToStr(0, dyna); 
 len += putConstString("var AN1="); 
 len += putString(dyna); 
 len += putConstString(";"); 
 // add PORT1[31..24] value (buttons) to reply len += putConstString("var PORT1_31_24="); 
 IntToStr(((IOPIN1 >> 24) & 0xFF), dyna);
 len += putString(dyna); 
 len += putConstString(";"); 
 // add PORT1[23..16] value (LEDs) to reply len += putConstString("var PORT1_23_16=");
 IntToStr(((IOPIN1 >> 16) & 0xFF), dyna); len += putString(dyna);
 len += putConstString(";"); 
 // add HTTP requests counter to reply IntToStr (httpCounter, dyna); 
 len += putConstString("var REQ="); 
 len += putString(dyna); len += putConstString(";");
 } 
 else if (getRequest[5] == 't') 
 // if request path name starts with t, toggle LED bit number that comes after 
 {
 if (isdigit(getRequest[6])) 
 // if 0 <= bit number <= 9, bits 8 & 9 does not exist but does not matter
 { 
 bitMask = getRequest[6] - '0'; 
 // convert ASCII to integer bitMask = 1 << (bitMask + 16); 
 // create bit mask if ((IOPIN1 & bitMask) != 0) // Toggled LED IOCLR1 |= bitMask;
 else IOSET1 |= bitMask; 
 } 
 } 
 if (len == 0) 
 // what do to by default
 { 
 len = putConstString(httpHeader);
 // HTTP header len += putConstString(httpMimeTypeHTML); 
 // with HTML MIME type len += putConstString(indexPage); 
 // HTML page return (len); 
 // return to the library with the number of bytes to transmit 
 } 
 /* * this function is called by the library * the user accesses to the UDP request by successive calls to ENC28J60_getByte() 
 * the user puts data in the transmit buffer by successive calls to ENC28J60_putByte() 
 * the function must return the length in bytes of the UDP reply, or 0 if nothing to transmit 
 * * if you don't need to reply to UDP requests, 
 * just define this function with a return(0) as single statement 
 * */ unsigned long ENC28J60_userUDP(unsigned char *remoteHost, unsigned long remotePort, unsigned long destPort, unsigned long reqLength) 
 { unsigned long len; 
 // my reply length unsigned char *ptr; 
 // pointer to the dynamic buffer 
 // reply is made of the remote host IP address in human readable format ByteToStr(remoteHost[0], dyna);
 // first IP address byte dyna[3] = '.';
 ByteToStr(remoteHost[1], dyna + 4); 
 // second dyna[7] = '.';
 ByteToStr(remoteHost[2], dyna + 8); 
 // third dyna[11] = '.';
 ByteToStr(remoteHost[3], dyna + 12); 
 // fourth dyna[15] = ':'; 
 // add separator // 
 then remote host port number IntToStr(remotePort, dyna + 16); dyna[22] = '['; 
 IntToStr(destPort, dyna + 23); 
 dyna[29] = ']'; 
 dyna[30] = 0; 
 // the total length of the request is the length of the dynamic string plus the text of the request len = 30 + reqLength; 
 // puts the dynamic string into the transmit buffer ptr = dyna; 
 while (*ptr) ENC28J60_putByte(*ptr++); 
 // then puts the request string converted into upper char into the transmit buffer while (reqLength--) ENC28J60_putByte(toupper(ENC28J60_getByte())); 
 return (len); 
 // back to the library with the length of the UDP reply
 } 
 /* * main entry */ 
 int main 
 (void) 
 {
 PINSEL0 = 0; 
 PINSEL1 = 0;
 PINSEL2 &= 0x0000000C; 
 delay_Nx10cyc(599999);
 // Delay 0,1s IODIR1 &= 0x00FFFFFF;
 // Set P1[31..24] as inputs for buttons IODIR1 |= 0x00FF0000;
 // Set P1[23..16] as outputs for LED IOCLR1 |= 0x00FF0000; 
 // Turn off LEDs // starts ENC28J60 with : RST bit on IOPIN0.13, CS bit on IOPIN0.12, my MAC & IP address, full duplex ENC28J60_Init(&IOPIN0, 13, &IOPIN0, 12, myMacAddr, myIpAddr, ENC28J60_FULLDUPLEX) ;
 while (1) { ENC28J60_doPacket();
 // process incoming Ethernet packets /* * add your stuff here if needed 
 * ENC28J60_doPacket() must be called as often as possible * otherwise packets could be lost 
 */
 } 
 }
 

Conclusion

A web server in the device provides access to the user interface functions for the device through a device web page. A web server can be embedded into any appliance and connected to the Internet so the appliance can be monitored and controlled from remote places through the browser in a desktop. We think this product have high potential for marketing in the future.