Sie sind auf Seite 1von 17

mc electronics

ETHERNET Y WI-FI EMBEBIDO CON PIC


TELEMETRA Y CONTROL REMOTO A TRAVS DE ETHERNET CON EL STACK TCP/IP DE MICROCHIP.

Ing. Alejandro Airoldi Ing. Fernando Tagliaferri

RECURSOS ON-LINE
MPLAB www.microchip.com/mplab C18 www.microchip.com/c18 MAL (Ethernet) www.microchip.com/mal

PIC16F887 PIC18F14K50 PIC18F2550 PIC18F26J50 PIC18F97J60

SPI I2C USART

SPI I2C USART USB SPI I2C USART ETHERNET

PIC18F97J60
3.3V

SPI I2C USART ETHERNET

PIC18F97J60

TX+ TXRX+ RX-

RJ-45

TC1262-3.3

LDO (200mV)

XTAL

25 MHz

VIN GND Vout 6V 3.3V

PIC18F4620 + ENC
5V ENC28J60

PIC18F4620

SPI

TX+ TXRX+ RX-

RJ-45

XTAL XTAL 10 MHz

25 MHz

MPFS
web
.html .jpg .gif .css .fla

MPFS

Eeprom?
NO .C

SI

.BIN

MPLAB

C:\Microchip Solutions\Microchip\TCPIP Stack\Utilities\MPFS2.jar

Maindemo.c TCPIPConfig.h CustomHTTPApp.c

Variables dinamicas
PIC TCP STACK HTTPPrint.h web
Variables dinamicas

Funciones Callback CustomHTTPApp.c void HTTPPrint_HOSTNAME (void) { TCPPutString(sktHTTP, variable) }

Variables dinamicas nombre ~ HOSTNAME ~

Pasos para compilar 1 - Modificar el Stack (MPLAB) 2 - Modificar la web (notepad) 3 - Compilar la web (MPFS) 4 - Compilar el stack (MPLAB+C18) 5 - Cargar el .hex en el PIC 6 - Cargar la web (mpfsupload)

Preguntas
Estimado profesor Airoldi. 1.- Queria consultarle acerca de como puedo crear un proyecto desde cero importando todas las librerias de Microchip. Lo que sucede es, como menciono anteriormente, puedo copiar la siguiente estructura de carpetas proveniente de "Microchip Solutions" y eliminar los proyectos de otros microcontroladores que no necesito. -Microchip --- TCPIP Stack -TCPIP --- DemoApp Lo anterior funciona bien, pero si yo quiero crear una carpeta con mi aplicacin y luego dentro de esta copiar la carpeta "TCPIP stack", no funciona. - MiDemoApp ---TCPIP Stack. En resumen Debo seguir la forma en la que estructura las carpetas "Microchip solutions" o si se puede crear un proyecto desde cero importando las librerias? Los 2 primeros son particulares sobre mi Hardware 1) tengo una PLACA MICROCHIP EXPLORER18, y el mdulo de microchip Ethernet a 100Mbps. Y no consigo hacer funcionar el ejemplo ya que a pesar de que el programa parece funcionar, no consigo ver nada en el LCD (y por tanto no puedo saber que direccin IP me asigna el router...). No s si habeis tenido este problema? y sabeis de alguna solucin rpido, no s si el problema es que tanto el LCD como la placa Ethernet van con SPI, y puede estar generando conflicto ahi.. 2) Tampoco consigo programar la explorer18 con el MPLABX, con el PIckit3 y tengo que programarla desde un programa externo versin beta (parecido al q existia antes para el pickit2. Alguien ha tenido ese problema? Si te sirve de dato mi maquina usa un windows7 a 64bits. Duda ms genrica sobre Ethernet 3) Creo que algo se me escapa porque no entiendo exactamente por qu siempre es necesario almacenar la pgina web en una memoria en nuestro PCB... ya que esto nos limita bastante la apariencia de la web... es decir... No es posible que si tenemos nuestro micro conectado a internet, que se conecte a una web alojada en otro lugar??, y envie y reciba los datos necesarios para que la placa realice las acciones necesarias??

181.28.150.210/mpfsupload
html
<div class="productname">~name(0)~</div> <div class="bar-out" style="width: ~stock(0)~em"> <div class="bar-in-~status(0)~">~stock(0)~</div> ~status(0)~ = low ~status(0)~ = ok CustomHTTPApp.c
void HTTPPrint_status(WORD item) { if(Products[item].stock < 10) TCPPutROMString(sktHTTP, (ROM BYTE*)"low"); else TCPPutROMString(sktHTTP, (ROM BYTE*)"ok"); }

181.28.150.210/mpfsupload
Control con GET
CustomHTTPApp.c
HTTP_IO_RESULT HTTPExecuteGet(void) { BYTE *ptr; BYTE filename[20]; MPFSGetFilename(curHTTP.file, filename, 20); if(!memcmppgm2ram(filename, "lights.htm",10)) { ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE*) "lights"); if(ptr) LED4_IO = (*ptr==1); } } return HTTP_IO_DONE;

#if defined(HTTP_USE_POST)

WI-FI Consideraciones importantes

NO COMPONENTES

PCB

SMTP Envio de emails


SMTPBeginU sage()
Setear los parametros del mensaje

Setear Headers del mensaje Escribir el mensaje

SMTPSendMail()

SMTPEndUsa ge()

NO
SMTPisBusy()

done

SMTP Envio de emails


if(SMTPBeginUsage()) { // Note that these strings must stay allocated in // memory until SMTPIsBusy() returns FALSE. To // guarantee that the C compiler does not reuse this // memory, you must allocate the strings as static. static BYTE RAMStringTo[] = soporte@mcelectronics.com.ar"; //static BYTE RAMStringCC[] = "foo@picsaregood.com, \"Jane Smith\" //static BYTE RAMStringBCC[] = ""; static BYTE RAMStringBody[] = "Message generated by stack " TCPIP_STACK_VERSION " RAMStringBody[sizeof(RAMStringBody)-2] = '0' + BUTTON0_IO; RAMStringBody[sizeof(RAMStringBody)-3] = '0' + BUTTON1_IO; RAMStringBody[sizeof(RAMStringBody)-4] = '0' + BUTTON2_IO; RAMStringBody[sizeof(RAMStringBody)-5] = '0' + BUTTON3_IO; SMTPClient.Server.szROM = (ROM BYTE*)smtp.mcelectronics.com.ar"; SMTPClient.ROMPointers.Server = 1; //SMTPClient.Username.szROM = (ROM BYTE*)" info@mcelectronics.com.ar "; //SMTPClient.ROMPointers.Username = 1; //SMTPClient.Password.szROM = (ROM BYTE*)123456"; //SMTPClient.ROMPointers.Password = 1; SMTPClient.To.szRAM = RAMStringTo; SMTPClient.From.szROM = (ROM BYTE*)"\"SMTP Service\" SMTPClient.ROMPointers.From = 1; SMTPClient.Subject.szROM = (ROM BYTE*)Mensaje desde el stack !"; SMTPClient.ROMPointers.Subject = 1; SMTPClient.Body.szRAM = RAMStringBody; SMTPSendMail(); MailState++;

<jane.smith@picsaregood.com>"; \r\n\r\nButtons: 3210";

// SMTP server address

<mchpboard@picsaregood.com>";

DNS
http://WEBSERVER.DYNDNS.ORG
PC

INTERNET

DYNDNS.COM 181.28.150.210 WEBSERVER

181.28.150.210

ROUTER
192.168.1.100
WEBSERVER

DMZ