Académique Documents
Professionnel Documents
Culture Documents
Nota:
Descarge desde la web del autor el material complementario a este libro,
descomprima el archivo Ejemplo_1.zip, el proyecto está ya listo para ser
compilado y programar elmicrocontrolador, también encontrará web.b y
todas las fuentes para reformar la web. No altere el proyecto hasta estar
seguro que sabe lo que hace.
/************************************************************
* Global configuration file for the Microchip TCP/IP Stack
*
*===========================================================*
#ifndef _CONFIG_H
#define _CONFIG_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define VERSION "1.0" // Firmware versión
#include "include/Hardware.h"
//***********************************************************
// TCP/IP Config
//
// Define the default values for your MAC and IP
configuration.
// Notice that the IP addresses are separated by commas and
not by the
// traditional dot in the decimal dotted notation.
//
#define DEFAULT_MAC_ADDRESS { 0x00, 0x04, 0xa3, 0x00, 0x02,
0x00 }
#define DEFAULT_IP_ADDRESS { 192, 168, 1, 201 }
// IP por defecto
#define DEFAULT_NETMASK { 255, 255, 255, 0 }
#define DEFAULT_GATEWAY { 192, 168, 1, 1 }
#define DEFAULT_NS1 { 192, 168, 1, 1 }
#define DEFAULT_NETBIOS_NAME "Firtec_TCP"
// Nombre por defecto
//***********************************************************
// Stack Modules
#define STACK_USE_ICMP
#define STACK_USE_HTTP_SERVER // HTTP server
//#define STACK_USE_IP_GLEANING
#define STACK_USE_DHCP // DHCP (Necesario con un
Router)
#define STACK_USE_FTP_SERVER
//#define STACK_USE_TCP_EXAMPLE1
#define STACK_USE_ANNOUNCE // Ethernet Device Discoverer
// server/client
//#define STACK_USE_SNTP // SNTP client
#define STACK_USE_DNS // DNS client
#define STACK_USE_NBNS // NetBIOS Name Service Server
//#define STACK_USE_UDPTEST // Enable UDP Test code
//***********************************************************
// Some time related definitions
// Define Ticks per second for the tick manager
//
#define TICKS_PER_SECOND (100) // 10ms
//#define USE_TIME // Include time
routines
#define TIME_SOURCE_TICK // Time source is Timer0
Tick counter
//#define TIME_SOURCE_32KTIMER
#define TZ_OFFSET (-3) // Time Zone offset
(negative west of GMT)
#define SNTP_UPDATE_SECS (43200) // SNTP update interval
in seconds (12hrs)
//***********************************************************
// Miscellaneous Stack Options
#define ENABLE_USER_PROCESS // Esto habilita las funciones
del Usuario!!!!!
// Define Username and Password for the FTP Server
}
}
Todo esto puede resultar bastante confuso sobre todo si pensamos que en
realidad la propia pagina que el navegador muestra sale también del
microcontrolador, en definitiva nuestro navegador solo lee lo que el servidor
web de nuestro PIC le envía.
Podemos imagina esto como un dialogo entre capas.
switch(command)
{
case CGI_CMD_DIGOUT:
var = argv[1][0] - '0';
switch(var)
{
case Boton_LED1: // Nombre = 0x00
LED1_IO ^= 1; // Cambio estado del LED
break;
case LED_2:
*val = LED2_IO ? '1':'0';
break;
Dentro del servidor HTTP hay un pequeño módulo CGI con el propósito de
que el servidor entienda estas páginas que intercambian información en
tiempo real con el microcontrolador.
Este pequeño módulo permite tener una gran cantidad de variables que
permiten interactuar con el sistema, si bien es verdad que el
microcontrolador dispone de una pequeña cantidad de memoria RAM esta
cantidad de memoria es suficiente para nuestras aplicaciones. Este módulo
permite interactuar con el usuario mediante la función GET() contenida en
los navegadores.
No vamos a desarrollar aquí como hacer CGI´s (necesitaríamos mucho,
mucho tiempo).
Nuestro propósito es aprender a utilizar los que tenemos a nuestra
disposición.
Tomemos como ejemplo una de las paginas de ejemplo del web server. En la
imagen anterior se aprecia el aspecto de una pagina vista en el navegador y
conectada a nuestro microcontrolador.
Tenemos aquí el despliegue de información proveniente del
microcontrolador, estado de los pulsadores, estado de los LED´s y el
conversor A/D. Pero como llega esta información hasta la pantalla web?
La respuesta viene con el archivo status.cgi que es el encargado de
actualizar en nuestra web la información que viene del hardware.
Las acciones ocurrirán de la siguiente forma, cuando el usurario oprima uno
de los botones en la web, esta informará del cambio a través del archivo
index.htm, el microcontrolador cambiará el estado del pin correspondiente y
le enviará a nuestra página información para que actualice los binarios de
LED´s, esto lo hace con status.cgi.