Ultimamente no he visto gran desarrollo sobre este tipo de aplicaciones en Microchip (ENC28J60), no se si estoy este fuera de moda o existan otro tipo de implementaciones mas efectivas, economicas y faciles....
Este proyecto que se encuentra en una etapa inicial comprende el control y verificacion de equipos por medio de un web server asi como el envio de un correo en caso de presentarse una alarma en el equipo, envio de una posible base de datos de X parametro, corriente, velocidad...etc al mismo correo como un archivo adjunto. Sobre esto escucho ideas para mejoraro.....
La etapa inicial V1.0 contempla las siguientes posibilidades.
- Envio de mail a correo SMTP, que no requiere el protocolo SSL.....ejemplo yahoo.com
- Acceso a web server de no mas 1500 Bytes, esta web server cuenta con diferentes paginas web X cantidad definida por el programador.
En general no creo que sea mas caracteristicas.....la verdad me a tomado mucho tiempo la depuracion del codigo.....
Considero que es hora de pasar a una version 2.0 con la libreria HTTP.C que nos entrega CCS y mas adelante a una version 3.0 con la libreria HTTP2.C de CCS.
Actualmente tengo algunas dudas que si es posible me gustaria compartir con ustedes:
Existe alguna forma de aumentar el tamaño de la pagina web a mas de 1500 bytes???
Que me recomiendan para aplicar como mejoras a mi aplicacion???
Como se realiza el manejo del protoclo SSL para correos con esta necesidad???
Adjunto codigo de aplicacion (Algunas variables no se aplican, no hay paginas web cargadas...eso lo dejo a ustedes para que ensaye sus web).
Agradezco su apoyo y si desean que siga compartiendo mis adelantos me avisan.....
PD: Alguien sabe como evolucionar a redes wireless....con enc28j60....o con el modulo wirelles de microchip....en lenguaje ccs??? gracias.
Este proyecto que se encuentra en una etapa inicial comprende el control y verificacion de equipos por medio de un web server asi como el envio de un correo en caso de presentarse una alarma en el equipo, envio de una posible base de datos de X parametro, corriente, velocidad...etc al mismo correo como un archivo adjunto. Sobre esto escucho ideas para mejoraro.....
La etapa inicial V1.0 contempla las siguientes posibilidades.
- Envio de mail a correo SMTP, que no requiere el protocolo SSL.....ejemplo yahoo.com
- Acceso a web server de no mas 1500 Bytes, esta web server cuenta con diferentes paginas web X cantidad definida por el programador.
En general no creo que sea mas caracteristicas.....la verdad me a tomado mucho tiempo la depuracion del codigo.....
Considero que es hora de pasar a una version 2.0 con la libreria HTTP.C que nos entrega CCS y mas adelante a una version 3.0 con la libreria HTTP2.C de CCS.
Actualmente tengo algunas dudas que si es posible me gustaria compartir con ustedes:
Existe alguna forma de aumentar el tamaño de la pagina web a mas de 1500 bytes???
Que me recomiendan para aplicar como mejoras a mi aplicacion???
Como se realiza el manejo del protoclo SSL para correos con esta necesidad???
Adjunto codigo de aplicacion (Algunas variables no se aplican, no hay paginas web cargadas...eso lo dejo a ustedes para que ensaye sus web).
PHP:
#include <18F4620.h>
#FUSES NOWDT, WDT128, HS, NOFCMEN, NOIESO, NOPUT, NOBROWNOUT, BORV20, NOPBADEN, NOLPT1OSC, MCLR, STVREN, NOLVP, NOXINST, NODEBUG, NOPROTECT, NOCPB, NOCPD, NOWRT, NOWRTC, NOWRTB, NOWRTD, NOEBTR, NOEBTRB
#use delay(clock=20000000)
#define PIN_ENC_MAC_SO PIN_D4 // Conectar con PIN MISO del ENC28J60.1
#define PIN_ENC_MAC_SI PIN_D3 // Conectar con PIN MOSI del ENC28J60. 0
#define PIN_ENC_MAC_CLK PIN_D2 // Conectar con PIN SCK del ENC28J60. 0
#define PIN_ENC_MAC_CS PIN_D5 // Conectar con PIN CS del ENC28J60. 0
#define PIN_ENC_MAC_RST PIN_D6 // Conectar con PIN RST del ENC28J60. 0
#define PIN_ENC_MAC_INT PIN_D1 // Conectar con PIN INT del ENC28J60. 1
#define PIN_ENC_MAC_WOL PIN_D7 // Conectar con PIN WOL del ENC28J60. 1
//Protocolos a utilizar.
#define STACK_USE_MCPENC TRUE
#define STACK_USE_ARP TRUE
#define STACK_USE_ICMP TRUE
#define STACK_USE_TCP TRUE
#define __ESMTP
#define STACK_USE_BASE64 TRUE
#define STACK_USE_DNS TRUE
#define STACK_USE_UDP TRUE
#include "tcpip/stacktsk.c"
#include "tcpip/smtp.c"
#define MY_HTTP_SOCKET 80 //puerto
void paginaweb();//CARGA LA PAGINA WEB QUE SOLICITEMOS
//variables usadas en el correo
int8 state1=0;
int8 timeoutEthernet = 0;
int1 tick =FALSE, flag_sendinMailEth =FALSE, flag_emailSent =FALSE, flag_sendmail =FALSE, flag_pass=FALSE; //banderas de email
int16 port;
char hostname[40];
char username[40];
char pwd[15];
char from[40];
char to[40];
char subject[20];
char body[70];
IP_ADDR smtpserver;
//variables usadas en funcionamiento general
int8 puerto=INVALID_SOCKET;
int16 valor=0;
//variables usadas en control de paginas
static char pagina[20],pagcons[20];
static int dirpag=0;
//variable de almaceniamiento de pagina
char content0[1500];
//variables de paginas
char mamo[30],tr[3],volt[3],kwat[4],user[10],pass[10];
float amp[20],temp[20];
int1 sta,aut,must;
// Microchip VendorID, MAC: 00-04-A3-00-00-01
void MACAddrInit(void)
{
MY_MAC_BYTE1=0x00; MY_MAC_BYTE2=0x04; MY_MAC_BYTE3=0xA3; MY_MAC_BYTE4=0x00; MY_MAC_BYTE5=0x00; MY_MAC_BYTE6=0x01;
}
void IPAddrInit(void)
{
//Direccion IP
MY_IP_BYTE1=192; MY_IP_BYTE2=168; MY_IP_BYTE3=1; MY_IP_BYTE4=20;
//Puerta de Enlace
MY_GATE_BYTE1=192; MY_GATE_BYTE2=168; MY_GATE_BYTE3=1; MY_GATE_BYTE4=1;
//Mascara de Subred
MY_MASK_BYTE1=255; MY_MASK_BYTE2=255; MY_MASK_BYTE3=255; MY_MASK_BYTE4=0;
//DNS
MY_DNS_BYTE1=8;MY_DNS_BYTE2=8;MY_DNS_BYTE3=8;MY_DNS_BYTE4=8; // DNS Necesario para determinar la ip del servidor de correo
}
void HTTPPut(char c)
{
TCPPut(puerto, c);
}
void HTTPTask(void)
{
static enum {HTTP_ST_CONNECT=0, HTTP_ST_WAIT_CONNECT=1, HTTP_ST_GET=2, HTTP_ST_PUT=3, HTTP_ST_DISCONNECT=4} state=0;
static TICKTYPE timeout_counter;
static char lc, lc2;
char c,leng[4],*ptr;
if (puerto==INVALID_SOCKET)
state=HTTP_ST_CONNECT;
else if (!TCPIsConnected(puerto))
state=HTTP_ST_WAIT_CONNECT;
else if (TickGetDiff(TickGet(), timeout_counter) > TICKS_PER_SECOND*60)
state=HTTP_ST_DISCONNECT;
switch(state) {
case HTTP_ST_CONNECT:
puerto=TCPListen(MY_HTTP_SOCKET);
if (puerto!=INVALID_SOCKET)
{
state=HTTP_ST_WAIT_CONNECT;
timeout_counter=TickGet();
}
break;
case HTTP_ST_WAIT_CONNECT:
timeout_counter=TickGet();
if (TCPIsConnected(puerto)) {
state=HTTP_ST_GET;
}
break;
case HTTP_ST_GET:
if (TCPIsGetReady(puerto))
{
dirpag=0;
while (TCPGet(puerto, &c))
{
pagina[valor]=c; //SE IDENTIFICA LA TERMINACION DE LA SOLICITUD ENVIADA DESDE EL CLIENTE
valor++;
sprintf(pagcons,"GET /");
if(strncmp(pagina,pagcons,5)==0)
{
valor=0;
}
//se define la pagina web a mostrar dependiendo de la solicitud enviada...abajo unos ejemplos de nombre
sprintf(pagcons,"index.html");
if(strncmp(pagina,pagcons,10)==0)dirpag=1;
sprintf(pagcons,"eventos.html");
if(strncmp(pagina,pagcons,12)==0)dirpag=2;
sprintf(pagcons,"configuracion.html");
if(strncmp(pagina,pagcons,18)==0)dirpag=3;
sprintf(pagcons,"reportes.html");
if(strncmp(pagina,pagcons,13)==0)dirpag=4;
sprintf(pagcons,"conectividad.html");
if(strncmp(pagina,pagcons,10)==0)dirpag=5;
sprintf(pagcons,"ingreso.html");
if(strncmp(pagina,pagcons,10)==0)dirpag=6;
if((c=='\n')&&(lc2=='\n'))
{
state=HTTP_ST_PUT;
}
lc2=lc;
lc=c;
}
}
break;
case HTTP_ST_PUT:
if (TCPIsPutReady(puerto))
{
paginaweb();
for(valor=0;content0!='\0';valor++);//se determina el tamaño de la pagina web. No mayor a 1500 Bytes
itoa(valor,10,leng);
//se almacena el texto entre comillas en la variable de tipo char contentX
printf(HTTPPut, "HTTP/1.1 200 OK\r\n");
printf(HTTPPut, "Content-Type: text/html\r\n");
printf(HTTPPut, "Content-Length: %s\r\n",leng);
//esta es la respuesta inicial que se debe enviar en una conversacion del protocolo HTTP contet-length indica la dimension del mensaje a enviar
printf(HTTPPut, "\r\n");
printf(HTTPPut, "%s", content0);
TCPFlush(puerto);
state=HTTP_ST_GET;
}
break;
case HTTP_ST_DISCONNECT:
if (TCPIsPutReady(puerto))
{
TCPDisconnect(puerto);
state=HTTP_ST_WAIT_CONNECT;
}
break;
}
}
void paginaweb()
{
switch(dirpag)
{
case 1:
sprintf(content0, "");
break;
case 2:
sprintf(content0, "");
break;
case 3:
sprintf(content0, "");
break;
case 4:
sprintf(content0, "");
break;
case 5:
sprintf(content0, "");
break;
case 6:
sprintf(content0, "");
break;
}
}
void SendMailConfig(void)
{
port = 25;
sprintf(hostname, "smtp.mail.yahoo.com");
sprintf(username, "[EMAIL="xxxx@yahoo.com.co"]xxxx@yahoo.com.co[/EMAIL]");
sprintf(pwd, "xxxx");
sprintf(from, "xxxx");
sprintf(to, "[EMAIL="xxxx@gmail.com"]xxxx@gmail.com[/EMAIL]");
sprintf(subject, "xxxx");
sprintf(body, "xxxxxx");
}
void envio_mail(void)
{
StackTask();
if(flag_sendinMailEth) SMTPTask();
switch(state1)
{
case 0:
if(!MACIsLinked())
{
if(!tick)
{
tick = TRUE;
}
}
else
{
state1++;
tick = FALSE;
}
break;
case 1:
if(!tick)
{
DNSResolve(hostname);
tick = TRUE;
}
else
{
state1++;
tick = FALSE;
}
timeoutEthernet = 0;
break;
case 2:
if(DNSIsResolved(&smtpserver))
{
timeoutEthernet = 0;
state1++;
}
else if(timeoutEthernet > 1)
{
timeoutEthernet = 0;
state1=0;
}
break;
case 3:
if(SMTPConnectAndStart(&smtpserver, port, username, pwd, from, to, subject))
{
output_high(PIN_B4);
flag_sendinMailEth=1;
state1++;
}
else
{
state1=0;
}
break;
case 4:
if (SMTPLastError())
{
state1 = 0;
}
else if (SMTPIsPutReady())
{
output_high(PIN_B5);
printf(SMTPPut, "%s", body);
SMTPDisconnect();
state1++;
}
break;
case 5:
if (SMTPIsFree())
{
if (!SMTPLastError())
{
flag_emailSent = TRUE;
flag_sendmail = FALSE;
}
else
output_high(PIN_B4);
state1=0;
}
break;
}
}
void main(void)
{
MACAddrInit();
IPAddrInit();
StackInit();
SendMailConfig();
SMTPInit();
while(TRUE)
{
StackTask();
HTTPTask();
if(flag_sendmail) envio_mail();
else if(input(PIN_D0)) //si se preciona el swicht se envia un correo a la direccion definida
{
while(input(PIN_D0));
flag_sendmail = TRUE;
}
}
}
PD: Alguien sabe como evolucionar a redes wireless....con enc28j60....o con el modulo wirelles de microchip....en lenguaje ccs??? gracias.
Última edición por un moderador: