Internet Embarcada Com Microcontroladores PIC
Internet Embarcada Com Microcontroladores PIC
Internet Embarcada Com Microcontroladores PIC
Captulo
15
Internet Embarcada em Microcontroladores PIC
Rodrigo M. Bacurau, Brauliro G. Leal e Felipe P. Correia
Abstract Since Internet inception, many adaptations have been done in order to make it more versatile and affordable. Nowadays, Embedded Internet has provided the power of connectivity to a variety of embedded devices, such as appliances, handheld devices, industrial machinery, among others. In response to this demand, this course presents an introduction to Embedded Internet technology for Microchip PIC microcontrollers using MPLAB IDE, MPLAB C30 compiler and Proteus ISIS electronic circuits simulator. Stepby-step, we show how to configure Microchip TCP/IP stack. At the end of this course, students will have learnt how to build and simulate an embedded HTTP server using 24FJ128GA006 PIC microcontrollers. Resumo Desde sua criao, a Internet vem passando por uma srie de transformaes que a torna mais verstil e acessvel. Atualmente, por meio da tecnologia denominada Internet embarcada, o poder de conectividade a rede mundial de computadores vem sendo estendido a uma variedade praticamente ilimitada de dispositivos embarcados como eletrodomsticos, dispositivos portteis, mquinas industriais, entre outros. Em resposta a essa demanda, este minicurso apresenta uma introduo tecnologia de Internet embarcada para os microcontroladores PIC da Microchip, utilizando a IDE MPLAB, o compilador MPLAB C30 e o simulador de circuitos eletrnicos Proteus-ISIS. Nele ser demonstrado passo-a-passo como configurar a Pilha TCP/IP da Microchip. Espera-se que ao final do curso os estudantes tenham adquirido conhecimentos bsicos para construir e simular um servidor HTTP embarcado utilizando um microcontrolador PIC 24FJ128GA006.
No permitido fazer cpia integral ou parcial deste trabalho visando o lucro ou vantagem comercial. Este trabalho foi publicado nos Anais da XII Escola Regional de Computao dos Estados da Bahia, AlagoaseSergipe,emabrilde2012UNIVASFwww.erbase2012.univasf.edu.brISSN21774692.
439
440
Componentes Necessrios: nesta seo sero apresentados os principais componentes constituintes de um sistema de internet embarcada: pilha TCP/IP, controlador ethernet, interface de rede e microcontrolador. Introduo Pilha TCP/IP da Microchip: nesta seo sero apresentadas as caractersticas e funcionalidades da Pilha TCP/IP da Microchip. Softwares teis: nesta seo sero apresentados os softwares necessrios para desenvolver um projeto utilizando a soluo de internet embarcada da Microchip, como instal-los e configur-los. Sero utilizados os seguintes softwares: o MPLAB IDE (v. 8.56): Ambiente de desenvolvimento integrado para microcontroladores PIC; o MPLAB C30 (v 3.24 Lite): Compilador para microcontroladores PIC24; o PILHA TCP/IP MICROCHIP (v. 5.25): API fornecida pela Microchip para o desenvolvimento de aplicaes de Internet Embarcada; o PROTEUS ISIS (v. 7.6): Simulador de sistemas microcontrolados; o WinPcap (v. 4.1.2): programa para anlise de rede e captura de pacotes para plataforma Windows. Configurao da Pilha TCP/IP: nesta seo ser apresentada a estrutura de diretrios da Pilha TCP/IP da Microchip, exemplos de projetos utilizando essa API, exemplos de simulao no Proteus-ISIS de placas de desenvolvimento da Microchip, a funcionalidade de cada arquivo da Pilha TCP/IP Microchip e como configur-los. A partir de um projeto base ser desenvolvido um projeto simples utilizando cooperativismo multitarefa. Monitoramento Web: nesta seo ser desenvolvido um sistema web para monitoramento do estado de LEDs, botes, chaves e IP de um circuito eletrnico conectado a uma rede TCP/IP. Controle Web: nesta seo, o sistema construdo anteriormente ser incrementado, permitindo controlar, via web, o acionamento dos LEDs e o envio de mensagens de texto para um display de um circuito eletrnico conectado via rede TCP/IP. 15.2.1. Introduo Internet Embarcada Vrias redes de comunicao, como a TV, o rdio e at mesmo algumas tecnologias usadas na automao industrial so analgicas. Porm, devido s inmeras vantagens da tecnologia digital, a tendncia que todas essas redes migrem para esta tecnologia. As redes digitais possuem inmeras vantagens quando comparadas com as analgicas, tais como: suportam maior trfego de dados, necessitam de menos cabos e so mais robustas (BALTAZAR, 2008). As vantagens de se usar comunicao digital se ampliam quando utilizado o protocolo de comunicao TCP/IP para a comunicao de dispositivos embarcados. Tal tecnologia denominada Internet embarcada. A Internet embarcada uma tecnologia que permite a conexo de sistemas embarcados Internet, especialmente sistemas microcontrolados e constitudos por DSPs (Digital Signal Processors) (SANTOS, 2009). Na Figura 15.22 mostrada algumas placas que utilizam a tecnologia de Internet embarcada.
441
A tecnologia de Internet embarcada possui as seguintes vantagens com relao s demais tecnologias de comunicao digital: Permite a utilizao dos mesmos equipamentos utilizados para compor as redes de computadores, como switches e roteadores. Esses equipamentos j esto no mercado h bastante tempo, possuem tecnologia bem consolidada e preo reduzido quando comparado a tecnologias similares; Permite a utilizao da rede mundial de computadores, a Internet, para controle a distncia, dispensando a criao de redes privadas; uma tecnologia bastante consolidada. Existe uma srie de protocolos bem definidos para as mais diversas necessidades de comunicao utilizando essa tecnologia; Possui boa escalabilidade, ou seja, permite a expanso da rede com a conexo de novos ns sem que seja necessrio mudar a estrutura da rede existente; Possui a caracterstica de interoperabilidade, ou seja, equipamentos de diversos fabricantes comunicam-se entre si, podendo ser usados para compor uma rede. Essa caracterstica facilitada pela definio bem definida dos protocolos TCP/IP.
A tecnologia de Internet embarcada muito utilizada para possibilitar o monitoramento e acionamento remoto. Para tal, utiliza-se um hardware embarcado conectado rede, o qual oferece uma interface HTML, por exemplo, e permite tanto a aquisio de dados do sistema embarcado quanto o envio de comandos. Tambm usada para automao industrial, IPTV, VOIP, domtica e inmeras outras aplicaes. Antigamente, para fazer monitoramento ou acionamento remoto, utilizava-se um computador e uma placa de aquisio de dados. Esse modelo pode ser visto na Figura 15.23. Atravs do mesmo possvel realizar acionamento/monitoramento, tanto em uma rede local quanto na Internet.
442
Figura 15.23. Infraestrutura tradicional para um sistema de acionamento ou monitoramento via web (SANTOS, 2009).
No modelo tradicional necessrio um computador para prover a interface de comunicao com a rede TCP/IP. O computador conectado na rede atravs de Wi-Fi ou de um conetor RJ-45e comunica-se com o sistema embarcado atravs de uma conexo RS232 ou USB, por exemplo. No computador configurado um servidor web utilizado para publicar pginas HTML na Internet que fornecero a interface para o usurio interagir com a placa. Quando se utiliza Internet embarcada para fazer monitoramento ou acionamento, o modelo modificado e o servidor dedicado no mais necessrio. O prprio circuito embarcado contm todos os componentes necessrios para comunicao via rede TCP/IP. Esse modelo pode ser visto na Figura 15.24.
Figura 15.24. Infraestrutura de Internet Embarcada para um sistema de acionamento ou monitoramento via web (SANTOS, 2009).
No modelo da Figura 15.24, as pginas HTML do sistema esto armazenados na prpria placa onde est implementado um servidor web. Esse modelo possibilita que
443
monitoramento e acionamento possam ser realizados a partir de uma rede local ou da Internet, utilizando um dispositivo dedicado e de baixo custo. 15.2.2. Componentes Necessrios Para que um sistema embarcado possa conectar-se Internet, o mesmo deve possuir os seguintes componentes (SANTOS, 2009): Interface de rede: necessria para realizar a conexo fsica do sistema embarcado com a rede. O padro mais utilizado o RJ-45; Controlador Ethernet: responsvel por codificar, no padro Ethernet, as informaes recebidas/enviados do microcontrolador ou DSP; Implementao do protocolo TCP/IP: software embarcado no microcontrolador que implementa os protocolos de comunicao, a fim de estabelecer a conexo lgica com uma mquina remota em um determinado segmento de rede.
Os principais componentes fsicos de um sistema de Internet embarcada esto apresentados na Figura 15.25.
15.2.2.1. Interface de Rede Para prover a comunicao com o ambiente externo ao sistema embarcado necessria uma interface de rede. Deve ser usada uma interface de rede 100/10 Base-TX RJ45 com transformador isolador interno e compatvel com o padro 802.3 (Ethernet). A interface de rede similar vista na Figura 15.26.
444
15.2.2.2. Controladores Ethernet Um controlador Ethernet tem a funo de receber uma informao e gerar como resultado um dado equivalente codificado no padro IEEE 802.3 (Ethernet) (SANTOS, 2009). Neste minicurso ser utilizado o controlador Ethernet da Microchip Technology ENC28J60 (MICROCHIP, 2008a). O ENC28J60, Figura 15.27, um controlador Ethernet stand-alone, com o padro industrial SPI para comunicao serial com outros dispositivos.
O ENC28J60 rene todas as especificaes IEEE 802.3 e incorpora um conjunto de esquemas de filtros de pacote para limitar a quantidade de pacotes que realmente necessitam ser processados. Alm disso, o mesmo possui um mdulo de DMA (Direct Memory Access) dedicado, para permitir uma maior vazo de dados e uma unidade de hardware dedicada para clculo do checksum, que uma informao para deteco de erro utilizada em diversos protocolos de rede. A comunicao com um controlador host (e.g. um microcontrolador) implementada via pino de interrupo e interface SPI a uma velocidade superior a 20 MHz. Dois LEDs so utilizados para indicar a atividade de rede (MICROCHIP, 2008a). O diagrama de blocos simplificado desse controlador Ethernet pode ser visto na Figura 15.28.
445
Figura 15.28. Diagrama de blocos simplificado do controlador Ethernet ENC28J60 (MICROCHIP, 2008a).
O ENC28J60 formado por sete blocos funcionais (MICROCHIP, 2008a): Uma interface SPI que permite a comunicao do controlador host com o ENC28J60; Registradores de controle que so utilizados para controle e monitoramento do ENC28J60; Dual Port RAM buffer para transmisso e recepo de pacotes de dados; rbitro para controlar o acesso ao buffer RAM quando requisies so feitas simultaneamente pela DMA e pelos blocos de transmisso e recepo; Uma interface de barramento que interpreta dados e comandos recebidos via interface SPI; Mdulo, ou camada, MAC (Medium Access Controller) que implementa o padro IEEE 802.3; Camada fsica (PHY) que codifica e decodifica o dado analgico presente na interface de par tranado.
Esse controlador Ethernet tambm suporta outros blocos, como oscilador, regulador de tenso on-chip, transformadores de nvel de tenso para prover tolerncia de E/S de 5 V, entre outros (MICROCHIP, 2008a). Um circuito genrico utilizando o ENC28J60 pode ser visto na Figura 15.29. Alm do controlador, um transformador e alguns componentes passivos so necessrios para conectar um microcontrolador a uma rede Ethernet.
446
Para estabelecer uma interface Ethernet de fato, o ENC28J60 necessita de um conjunto de componentes padronizados, que devem ser instalados externamente. Esses componentes devem ser conectados como na Figura 15.30.
Figura 15.30. Componentes padronizados necessrios para estabelecer uma interface Ethernet (MICROCHIP 2008a).
Os circuitos analgicos internos do mdulo PHY necessitam de um resistor externo de 2,32 k 1% anexado do RBIAS referncia de terra. Esse resistor influencia na amplitude dos sinais TPOUT+ / TPOUT-. Dessa forma, esse resistor deve ser colocado o mais prximo possvel do controlador, mas afastado das demais trilhas da placa de circuito impresso, a fim de evitar rudo capacitivo que pode afetar o sinal de transmisso. Alm disso, alguns dispositivos (ou componentes) de lgica digital internos ao controlador operam na tenso de 2,5 V. O prprio controlador possui um regulador de tenso interno para gerar essa voltagem. O nico componente externo necessrio um filtro capacitivo, conectado do Vcap referncia de terra. Um transformador de pulso 1:1 com tap central necessrio nos pinos TPIN+/TPIN- e TPOUT+/TPOUT- para a operao Ethernet. 15.2.2.3. Pilha TCP/IP da Microchip
447
Existem inmeras implementaes comerciais e no comerciais do protocolo TCP/IP para microcontroladores PIC. A Microchip fornece gratuitamente uma implementao, denominada Pilha TCP/IP Microchip. A Pilha TCP/IP da Microchip consiste em um conjunto de programas que provm servios para as aplicaes padres baseadas no protocolo TCP/IP, como: servidor HTTP, cliente email SMTP, protocolo SNMP, Telnet, TFTP entre outros (MICROCHIP, 2008b). As principais caractersticas da Pilha TCP/IP da Microchip so: constituda de forma modular; Escrita em linguagem C; Compatvel com os microcontroladores PIC18 (MPLAB C18 e Hi-Tech PICC-18), PIC24 (MPLAB C30) e PIC32(MPLAB C32); Independente de Sistemas Operacionais (SOs); Suporte a Sockets TCP e UDP.
A pilha TCP/IP da Microchip similar a uma pilha TCP/IP tradicional usada nos microcomputadores, porm no implementa todos os mdulos. Ela foi desenvolvida levando em considerao todas as especificaes contidas nas RFCs de cada um dos protocolos que ela implementa, j que o objetivo da mesma permitir a conexo de microcontroladores Internet de forma transparente, como se fosse um host qualquer, ou seja, o fato de ser um dispositivo microcontrolado e no um computador, por exemplo, no percebido. A maioria das implementaes TCP/IP seguem o Modelo de Referncia TCP/IP. Este modelo de referncia implementa os protocolos em camadas, as quais so empilhadas umas sobre as outras (da o nome pilha TCP/IP). Cada camada acessa os servios de uma ou mais camadas diretamente abaixo (MICROCHIP, 2008b). Na Figura 15.31 ilustrado um modelo simplificado da pilha TCP/IP, o qual implementado pela Microchip. Alguns servios implementados pelas verses mais recentes da Pilha TCP/IP da Microchip no esto apresentados nesta figura, principalmente os servios da camada de aplicao.
A Pilha TCP/IP da Microchip dividida em vrias camadas escritas em linguagem de programao C para os compiladores Microchip HI-TECH, PICC-18, C18, C30 e C32.
448
A implementao de cada uma das camadas feita em arquivos separados, enquanto que os servios e a API so definidas atravs de arquivos header/include (MICROCHIP, 2008b). A pilha TCP/IP da Microchip chamada de pilha viva, isto , algumas camadas podem executar operaes de forma assncrona. Para permitir essa caracterstica e ainda estar relativamente independente da aplicao principal que utiliza seus servios, a pilha TCP/IP da Microchip utiliza uma tcnica largamente conhecida, chamada de cooperativismo multitarefa. Em um sistema cooperativo multitarefa as tarefas so executadas sequencialmente e de modo independente. O programa principal envia cada tarefa para ser processada e, ao final da sua execuo, o controle retorna ao programa principal e s ento a prxima tarefa fica apta a ser executada (MICROCHIP, 2008b). Geralmente o cooperativismo multitarefa implementado pelo sistema operacional ou pela prpria aplicao principal. A pilha TCP/IP da Microchip foi desenvolvida para ser independente de qualquer sistema operacional e, por isso, ela implementa seu prprio mecanismo cooperativo multitarefa. Dessa forma, ela pode ser utilizada em qualquer sistema, independente se o mesmo utiliza o sistema cooperativo multitarefa ou no. De qualquer forma, uma aplicao que utiliza a pilha TCP/IP da Microchip deve tambm utilizar o mtodo cooperativo multitarefa. Isso feito atravs da diviso de um programa em mltiplas tarefas, ou organizando o programa principal como uma mquina de estados finita (FSM) e dividindo um programa grande em diversos programas pequenos (MICROCHIP, 2008b). 15.2.2.3.1. Servidor HTTP da Microchip O servidor HTTP2 includo na pilha TCP/IP da Microchip implementando como uma tarefa cooperativa que coexiste com a pilha TCP/IP e a aplicao do usurio. A implementao desse servidor feita no arquivo HTTP2.c, com a aplicao do usurio sendo responsvel pela implementao de duas funes do tipo callback, ou seja, funes que so chamadas automaticamente pelo servidor HTTP e que devem executar alguma tarefa a ser definida pelo usurio (MICROCHIP, 2008b). Esse servidor no implementa todas as funcionalidades HTTP. Na verdade, o servidor HTTP uma implementao mnima para sistemas embarcados, que leva em considerao as caractersticas e limitaes dos mesmos. Mas, de acordo com a Microchip, o usurio pode realizar implementaes de outras funcionalidades e/ou recursos definidos pela RFC do protocolo. Algumas funcionalidades do servidor HTTP podem ser vistas a seguir (MICROCHIP, 2008b): Suporte a mltiplas conexes HTTP; Dispe de um sistema de arquivos prprio (MPFS2); Suporta pginas web localizadas na memria de programa do microcontrolador ou em memria EEPROM serial externa;
449
Suporta os mtodos de envio GET e POST (outros mtodos podem ser adicionados); Suporta um tipo de CGI (Common Gateway Interface) para executar funcionalidades pr-definidas a partir de um navegador remoto; Suporta gerao dinmica de contedo de pginas web.
15.2.2.3.2. Microchip File System 2 (MPFS2) O servidor HTTP da Microchip utiliza um sistema de arquivos simples, o MPFS2 (Microchip File System 2) para armazenar as pginas web no microcontrolador. A imagem do sistema de arquivos MPFS2 pode ser armazenada na memria de programa do microcontrolador ou em uma memria externa serial do tipo EEPROM. O MPFS2 segue um formato especial para armazenar mltiplos arquivos em uma unidade de armazenamento (MICROCHIP, 2008b). Esse formato pode ser visto na Figura 15.32.
O tamanho do bloco denominado Reserved Block definido pela macro MPFS_RESERVE_BLOCK, que pode ter seu valor alterado, se o usurio assim desejar. Esse bloco reservado pode ser utilizado pela aplicao principal para armazenar dados de configurao. O MPFS2 inicia com uma ou mais entradas MPFS FAT (File Allocation Table), seguida de um ou mais arquivos de dados. A entrada FAT descreve o nome do arquivo, localizao e seu estado. O formato da entrada FAT apresentado na Figura 15.33.
Figura 15.33. Formato da entrada FAT utilizada pelo MPFS2 (MICROCHIP, 2008b).
450
O byte de flag indica se a entrada atual est sendo utilizada, foi apagada ou est no fim da FAT. Cada entrada FAT contm 16 ou 24 bits de endereamento. O tamanho do endereamento determinado pelo tipo de memria utilizada, bem como o modelo de tamanho de memria (large ou small com 16 e 24 bits respectivamente). Sempre que uma memria serial externa EEPROM utilizada, o endereamento de 16 bits utilizado, independente do modelo de tamanho de memria utilizado. Isso implica em uma imagem do MPFS2 de no mximo 64 Kb para a memria externa (MICROCHIP, 2008b). O campo de endereo em cada entrada FAT contm uma referncia para um bloco de dados que contm os dados do arquivo em questo. O formato do bloco de dados pode ser visto na Figura 15.34. O bloco terminado com um bit de flag especial de 8 bits chamado EOF (End Of File), seguido do valor FFFF (para endereamento de 16 bits) ou FFFFFF (para endereamento de 24 bits). Se a parte de dados do bloco contm um caractere EOF, o mesmo preenchido por um caractere de escape.
O MPFS2 utiliza nomes pequenos para os arquivos: 8 bits para o nome dos arquivos e 3 bits para a extenso, por exemplo: NNNNNNNN.EEE. Um endereo de 16 bits indica o incio do primeiro arquivo do bloco de dados. Todos os nomes de arquivo so armazenados em letra maiscula para facilitar o processo de comparao dos nomes. 15.2.3. Softwares teis Nesta seo so apresentadas de forma breve as principais ferramentas utilizadas neste minicurso. 15.2.3.1. MPLAB IDE O MPLAB um IDE (Ambiente de Desenvolvimento Integrado) gratuito desenvolvido pela Microchip para seus microcontroladores PIC. O MPLAB disponvel somente para plataforma Windows 32 bits. Ele dispe de um conjunto de ferramentas (editor, simulador, gravador, depurador e compilador) para o desenvolvimento de aplicaes embarcadas, baseadas nos microcontroladores da linha PIC e DsPIC da Microchip. O MPLAB de fcil utilizao e possui um conjunto de aplicativos para desenvolvimento e depurao de forma rpida e gil de aplicaes embarcadas baseadas nos produtos da Microchip (MICROCHIP, 2008c). Uma tela do MPLAB apresentada na Figura 15.35. Neste minicurso ser usada a verso 8.56 desse software.
451
15.2.3.2. Compilador MPLAB C30 para microcontroladores PIC24 MCUs e dsPIC DSCs O MPLAB C30 um compilador comercial completo para a linguagem de programao C ANSI, desenvolvido para as linhas de microcontroladores PIC24, dsPIC30 e dsPIC32 da Microchip. O MPLAB C30 executa como aplicativo console de 32 bits no sistema operacional Microsoft Windows e integra-se com o MPLAB IDE, permitindo depurao em nvel de cdigo com o software MPLAB e em nvel de hardware com depuradores como o ICD2BR. A organizao do projeto, opes de compilao e customizao de arquivos linker pode ser toda feita pelo MPLAB IDE, que disponibiliza uma interface grfica amigvel para o compilador. As principais caractersticas do compilador MPLAB C30 so: Compatibilidade com C ANSI 89; Integrao com o MPLAB IDE a fim de facilitar a gerncia de projeto e a depurao em nvel de cdigo-fonte; Compatibilidade com o assembler MPASM, o que permite total liberdade para integrao de cdigo C e Assembly; Eficiente gerao de cdigo com mltiplos nveis de otimizao; Disponibilidade de uma verso gratuita para estudantes. Neste minicurso ser usada a verso 3.24 Lite desse software.
452
15.2.3.3. PROTEUS VSM O Proteus um conjunto de programas para o desenvolvimento de sistemas eletrnicos. Ele possui ferramentas para projeto de placas de circuito impresso (ARES), para criao de prottipos de circuitos (ISIS) e simulao animada de circuitos (VSM). O Proteus permite co-simulao de sistemas microcontrolados, tanto em alto nvel quanto em baixo nvel integrado com o simulador de circuitos SPICE. A princpio, possvel desenvolver e testar um projeto utilizando o Proteus VSM antes mesmo de o prottipo fsico estar construdo. Isso possvel porque o Proteus VSM simula, atravs de animao em tempo real (ou bem prximo disso), a integrao e funcionamento de todos os componentes de um projeto e oferece instrumentos virtuais (Osciloscpio, Multmetro, Analisador lgico, dentre outros) para depurao dos circuitos. Na Figura 15.36 pode ser vista a placa PICDEM2+, desenvolvida pela Microchip, para treinamento e desenvolvimento de sistemas baseados nos microcontroladores da famlia PIC 18F. Na Figura 15.37 pode ser vista a mesma placa simulada no Proteus VSM.
453
Figura 15.37. Placa PICDEM2+ no ambiente ISIS simulada atravs do Proteus VSM.
Neste minicurso ser usada a verso ser usada a verso 7.6 do Proteus. 15.2.3.4. WinPcap WinPcap uma biblioteca para monitoramento de trfego de dados de redes, importante para o funcionamento de uma srie de programas e utilitrios. A biblioteca ainda oferece funes excelentes para a captura de pacotes, independente da estrutura de rede ou plataforma que esteja em uso. Assim, WinPcap utilizado como interface de rede de vrias ferramentas, como protocolos de anlise, monitoramento de redes e sistemas de deteco de rede e trfego. O usurio necessita executar e instalar este componente para ento utilizar tranquilamente qualquer programa que utilize o WinPcap. Neste minicurso o WinPcap ser utilizado como plug-in para o Proteus ISIS, necessrio para a simulao da conexo TCP/IP da interface de rede do sistema embarcado construdo e simulado no Proteus ISIS. Neste minicurso usamos a verso 4.1.2 desse software. 15.2.4. Utilizao da Pilha TCP/IP
454
Nesta seo ser discutida a organizao e configurao da pilha TCP/IP da Microchip. Caso precisem de suporte e documentao complementar, recomendo buscarem nos seguintes meios: Suporte Microchip: http://support.microchip.com Frum Microchip: http://forum.microchip.com Application Note AN833 The Microchip TCP/IP Stack: http://ww1.microchip.com/downloads/en/AppNotes/00833c.pdf Microchip TCP/IP Help: C:\Microchip Solutions v2010-08-04\Microchip\Help (Diretrio da instalao padro da Pilha)
15.2.4.1. Estrutura de Diretrio No diretrio de instalao da Pilha TCP/IP da Microchip ser encontrada a estrutura de diretrios apresentada na Figura 15.38. Os principais subdiretrios so: Pasta Microchip: contm os arquivos fonte da pilha e componentes; Subpasta Include: contm os cabealhos (.h) das bibliotecas. Subpasta TCPIP Stack: contm os arquivos C, documentao e utilidades (softwares). Subpasta TCPIP Demo App: contm projetos exemplos de utilizao da pilha TCP/IP nas placas de desenvolvimento da Microchip.
455
15.2.4.2. Softwares Utilitrios Junto com a instalao da Pilha vem uma srie de softwares utilitrios para auxiliar o desenvolvimento de sistemas embarcados. Esses aplicativos podem ser encontrados no diretrio: C:\Microchip Solutions v2010-08-04\Microchip\TCPIP Stack\Utilities, ou em Menu Iniciar/Todos os Programas/Microchip/TCPIP Stack v5.25, so eles: TCP/IP Configuration Wizard: Permite configurar os parmetros da Pilha atravs de um aplicativo grfico; MPFS2 Utility: Utilizado para armazenar as pginas web no sistema embarcado; Microchip Web Preview Tool: Permite visualizar as pginas web da forma que sero mostradas pelo sistema embarcado sem que seja necessrio carreg-las nele; Hash Table Filter Entry Calculator: Esse software executa o clculo CRC sobre seis bytes do endereo de destino em um pacote recebido, em seguida, usa esse valor como um ponteiro para os registradores EHT0-EHT7; Ethernet Device Discoverer: Ajuda a descoberta de dispositivos conectados na rede atravs do protocolo Anounce; MCHPDetect: Precursor do Ethernet Device Discoverer.
Neste minicurso usaremos apenas o TCP/IP Configuration Wizard, MPFS2 Utility e Microchip Web Preview Tool. Ser apresentado passo-a-passo como usar cada um desses aplicativos.
456
15.2.4.3. Consumo de Memria Cada protocolo da Pilha requer certa quantidade de memria de dados e ocupa certa quantidade de memria de programa. Desta forma, de acordo com os protocolos utilizados, podem ser adequados diferentes microcontroladores, com diferentes quantidades de memrias. Na Figura 15.39 apresentada a quantidade de memria necessria para cada bloco, de forma que o projetista do sistema possa ter uma boa estimativa da quantidade de memria necessria para o desenvolvimento do seu sistema antes de iniciar a implementao.
Figura 15.39. Quantidade de memria de programa necessria para cada protocolo utilizando o compilador MPLAB C30.
15.2.4.4. Placas de Desenvolvimento A Microchip comercializa uma srie de placas de desenvolvimento compatveis com a pilha TCP/IP. Algumas placas contm controladores Ethernet e esto prontas para receber o firmware, outras precisam de Placas Filhas para prover essa funcionalidade.
457
Nas Figura 15.40, Figura 15.41, Figura 15.42 e Figura 15.43 so mostradas algumas placas de desenvolvimento da Microchip e algumas placas filhas que podem ser conectadas s placas de desenvolvimento para prover interfaces TCP/IP adicionais.
458
Junto com a pilha TCP/IP vem uma srie de projetos exemplos usando as placas de desenvolvimento da Microchip (C:\Microchip Solutions v2010-08-04\TCPIP Demo App). Neste diretrio existe o arquivo TCPIP Demo App-C30 EXPLORER_16 24FJ128GA010 ENC28J60.hex gerado a partir da compilao do projeto TCPIP Demo App-C30. O Proteus ISIS vem com um conjunto de exemplos de placas, entre elas a placa PIC 16 Explorer, apresentada na Figura 15.44. A partir deste projeto, pode-se carregar o arquivo TCPIP Demo App-C30 EXPLORER_16 24FJ128GA010 ENC28J60.hex e observar a simulao desta placa.
459
460
O sistema desenvolvido no Projeto Base capaz de monitorar uma chave, um boto e dois potencimetros, exibindo seus valores na Web. O sistema tambm equipado com quatro LEDs, um vermelho, um amarelo e dois verdes. O LED vermelho aceso quando a chave fechada e o boto pressionado, o LED amarelo aceso quando o valor do potencimetro 1 ultrapassa 50%. A placa tambm equipada com um display LCD de duas linhas e dezesseis colunas que exibem mensagens enviadas pela Web, o valor do boto, da chave e dos potencimetros. O cdigo fonte do firmware do projeto base pode ser encontrado no seguinte diretrio do CD do minicurso: Projeto Base\Firmware\Projeto Base\TCPIP Demo AppC30. Neste projeto esto contidos os seguintes arquivos da Pilha TCP/IP Microchip: TCPIP.h: Controla todo o funcionamento dos protocolos pilha TCP/IP; IP.c e IP.h: Implementao do protocolo IP; TCP.c e TCP.h: Implementao do protocolo TCP; MAC.h: Implementao do protocolo MAC; ARP.c e ARP.h: Implementao do protocolo ARP; Tick.c e Tick.h: Define a referncia de temporizao da pilha; Delay.c e Delay.h: Implementao dos temporizadores usados pela pilha; Helpers.ceHelpers.h: Vrias funes auxiliares usadas pela pilha; StackTsk.c e StackTsk.h: Coordena a chamada das tarefas da pilha; MainDemo.c e MainDemo.h: Implementao das funcionalidades do sistema embarcado (leitura de sensores e botes, exibio de informaes em display etc); HardwareProfile.h: Configurao do Hardware do sistema. Neste arquivo, as seguintes atividades so realizadas: a configurao dos mdulos do microcontrolador (watchdog, osciladores, JTAG, etc), a definio do clock do sistema, a definio dos pinos de conexo do controlador Ethernet, da memria EEPROM e do display LCD e a configurao dos pinos de entrada e sadas analgicas e digitais; TCPIPConfig.h: Configurao da pilha TCP/IP. Neste arquivo, so definidos: os protocolos usados (ICMP, HTTP, SMTP, etc.); onde ser feito o armazenamento de dados (memria EEPROM ou memria Flash); o sistema de arquivos usado (MPFS ou MPFS2); IP, Mscara, Gateway, DNS e hostname; endereo MAC; opes da camada de transporte (TCP e UDP); configuraes especficas das aplicaes; MPFS2.c e MPFS2.h: Implementao do sistema de arquivos da Microchip para microcontroladores PIC; HTTP2.c e HTTP2.h: Implementao do servidor HTTP; ICMP.c e ICMP.h: Implementao do protocolo ICMP, usado para responder ao comando PING;
461
DHCP.c e DHCP.h: Implementao do protocolo DHCP, usado para a definio automtica do IP, mscara de rede, gateway e servidores DNS de cada estao. HTTPPrint.h: Definio das variveis dinmicas das pginas web; CustomHTTPApp.c: Impelmentao das funes de retorno das variveis dinmicas das pginas web exibidas pelo servidor HTTP2 e implementao da funo de retorno GET.
No desenvolvimento de sistemas embarcados simples os nicos arquivos dentre os listados que precisam ser alterados so: HardwareProfile.h, TCPIPConfig.h e main.c. 15.2.4.5.1. HardwareProfile.h Neste arquivo feita toda a configurao de hardware do sistema. Na Figura 15.46 apresentado a primeira parte desse arquivo. Neste trecho so definidas as configuraes de hardware como: tipo de oscilador, ativao de perifricos e funcionalidades como o watchdog, entre inmeras outras opes. Nas linhas 30, 31 e 32 definida a frequncia de clock, usada como base de temporizao para toda a Pilha TCP/IP.
No arquivo HardwareProfile.h tambm so definidos pinos do microcontrolador que sero conectados ao controlador Ethernet ENC28JC, memria EEPROM 25LC256, e ao display LCD 2x16. Os cdigos que descrevem essas ligaes so exibidos nas Figura 15.47, Figura 15.48 e Figura 15.49.
462
No arquivo HardwareProfile.h tambm so definidos os pinos de estrada e sada dos perifricos. Nas Figura 15.50 exibido o cdigo que define os pinos de entrada para dois botes, uma chave e dois potencimetros. Na Figura 15.51 exibido o cdigo que define os pinos de sada para 4 LEDs. Para fazer uma modificao, o nico trecho de cdigo que precisa ser modificado o que contm os defines que definem os pinos de entrada de sada, desde que a conexo do controlador ethernet, memria EEPROM e display LCD mantenham-se inalterados.
463
15.2.4.5.2. TCPIPConfig.h Neste arquivo feita a configurao da pilha TCP/IP da microchip, na qual so definidos: Os protocolos usados (ICMP, HTTP, SMTP, etc.); Onde ser feito o armazenamento de dados (memria EEPROM ou memria Flash); Sistema de arquivos usado (MPFS ou MPFS2); IP, Mscara, Gateway, DNS, hostname; MAC; Opes da camada de transporte (TCP e UDP); Configuraes especficas das aplicaes.
Nas Figura 15.52, Figura 15.53, Figura 54 apresentado o cdigo do arquivo TCPIPConfig.h. Para facilitar a configurao deste arquivo pode ser usado o aplicativo TCP/IP Configuration Wizard. Ele fornece uma interface grfica simples que permite a seleo e configurao dos protocolos desejados. Alm disso, ele gera o arquivo TCPIPConfig.h.
464
Figura 15.52. TCPIPConfig.h, habilitao dos Mdulos (HTTP, ICMP, DHCP etc).
15.2.4.5.3. Main.c O arquivo main.c constitudo basicamente de duas partes, Inicializao e Loop. Na inicializao feita todas as configuraes do hardware e da Pilha, seguindo a seguinte sequncia:
465
1. Configurao do Hardware (pinos de E/S, oscilador, A/D, mdulo SPI etc); 2. Inicializao do temporizador (TickInit();); 3. Inicializao do sistema de arquivos (MPFSInit();); 4. Inicializao da estrutura APP_CONFIG InitAppConfig(); 5. Inicializao dos mdulos da pilha TCP/IP (StackInit();). Aps a inicializao, o sistema entra em um loop infinito onde feito o envio e recebimento de dados via rede, leitura de dados dos botes, chaves e potencimetros, bem como o envio de dados para o display e LEDs. No Loop so feitas chamadas as seguintes funes na seguinte sequncia: 1. StackTask(): executa as operaes temporizadas e coordena o recebimento e o envio de pacotes; 2. StackApplications(): executa os mdulos carregados (Servidor HTTP2); 3. ProcessIO(): processa os dados de entrada e sada atravs da tcnica de Cooperativismo Multitarefa 15.2.4.5.3.1 Cooperativismo Multitarefa Em um sistema cooperativo multitarefa as tarefas so executadas sequencialmente e de modo independente. O programa principal envia cada tarefa para ser processada e, ao final da sua execuo, o controle retorna ao programa principal e s ento a prxima tarefa fica apta a ser executada (MICROCHIP, 2008b). Geralmente, o cooperativismo multitarefa implementado pelo sistema operacional ou pela prpria aplicao principal. A pilha TCP/IP da Microchip foi desenvolvida para ser independente de qualquer sistema operacional e, por isso, ela implementa seu prprio mecanismo cooperativo multitarefa. Dessa forma, ela pode ser utilizada em qualquer sistema, independente se o mesmo utiliza o sistema cooperativo multitarefa ou no. De qualquer forma, uma aplicao que utiliza a pilha TCP/IP da Microchip deve tambm utilizar o mtodo cooperativo multitarefa. Isso feito atravs da diviso de um programa em mltiplas tarefas, ou organizando o programa principal como uma mquina de estados finita (FSM) e dividindo um programa grande em diversos programas pequenos (MICROCHIP, 2008b). Na prtica o cooperativismo implementado da seguinte forma: na funo main as atividades a serem desenvolvidas so divididas em diversas tarefas e cada tarefa colocada em um case de um switch. A varivel de controle do switch uma varivel do tipo global e armazena o prximo estado. Aps finalizar a execuo de uma tarefa, essa varivel atualizada e a prxima tarefa ser executada na prxima execuo do loop. Na figura ilustrada a estrutura da funo main.c.
466
15.2.4.6. Monitoramento Web Nesta seo sero apresentados os passos necessrios para a construo de um servidor web embarcado para monitoramento de sensores. Este tipo de sistema pode ser usado, por exemplo, para monitorar, via web, a temperatura de uma sala, a vibrao de mquinas em uma indstria, o nvel de um reservatrio de gua, etc. Neste tipo de sistema haver uma ou mais variveis dinmicas nas pginas web do sistema embarcado. Essas variveis sero atualizadas dinamicamente pelo servidor web embarcado, permitindo o monitoramento dessas grandezas em tempo real. As variveis dinmicas so indicadas no cdigo HTML das pginas web armazenadas no servidor entre tiles. Quando uma pgina que contiver uma varivel dinmica for acessada, o sistema faz uma chamada a uma funo de retorno que substitui o nome da varivel entre tiles pelo seu valor atual. Por exemplo, para criar uma varivel dinmica chamada VAR deve-se: 1. Inserir ~VAR~ na pgina web (HTML) no local onde deseja que esse valor seja exibido; 2. Implementar a funo de retorno HTTPPrint_var() em CustomHTTPApp.c, conforme ser visto a seguir. A pgina web de monitoramento do Projeto Base, cujo circuito foi mostrado na Figura 15.45, mostrada na Figura 15.56. Na parte superior da pgina exibido o Hostname e o endereo IP da placa acessada. Em seguida, so exibidas as informaes dinmicas monitoradas (estados dos LEDs, da chave, boto e potencimetros). O cdigo HTML desta pgina de monitoramento exibido na Figura 15.57.
467
Observa-se que cada varivel dinmica possui um nome entre tiles. Para cada uma dessas variveis dinmicas deve ser criada uma funo de retorno no arquivo CustomHTTPApp.c com o nome HTTPPrint_NOME(), onde NOME deve ser substitudo pelo nome da varivel dinmica. Sendo assim, as seguintes funes devem ser criadas e implementadas: void HTTPPrint_IP(void); void HTTPPrint_HOSTNAME(void); void HTTPPrint_LED(WORD); void HTTPPrint_SWITCH(void);
468
void HTTPPrint_BUTTON(void); void HTTPPrint_POT(WORD); void HTTPPrint_LCD(void); void HTTPPrint_LCD1(void); void HTTPPrint_LCD2(void);
Segue abaixo o cdigo da funo HTTPPrint_HOSTNAME(void): void HTTPPrint_HOSTNAME(void) { TCPPutString(sktHTTP, AppConfig.NetBIOSName); } Essa funo no recebe nenhum parmetro nem retorna valor. Simplesmente feita uma chamada a funo TCPPutString, que recebe como parmetro o ponteiro do socket TCP para escrita na pgina HTML (sktHTTP) e o nome da varivel que se deseja retornar. A varivel NetBIOSName da estrutura AppConfig do tipo BYTE = unsigned char (definido no arquivo GenericTypeDefs.h). Quando se deseja substituir a varivel dinmica por uma string que no esteja armazenada em uma varivel, deve ser usada a funo TCPPutROMString em vez de TCPPutString. A string a ser enviada deve ser precedida do cast (ROM BYTE*). Na Funo HTTPPrint_BUTTON(void) podemos ver um exemplo de utilizao desta funo: void HTTPPrint_BUTTON(void){ if(!BUTTON1_IO) TCPPutROMString(sktHTTP, (ROM BYTE*)"PRESSIONADO"); else TCPPutROMString(sktHTTP, (ROM BYTE*)"LIBERADO") } Esta funo retorna a string PRESSIONADO caso o boto esteja pressionado e LIBERADO se o boto no estiver pressionado. Caso a string retornada para a varivel tenha mais de 16 caracteres outro procedimento deve ser feito. Usaremos a funo HTTPPrint_LCD, apresentada abaixo, para apresentar esse procedimento. void HTTPPrint_LCD(void) { if(strlen((char*)displayLine12)>TCPIsPutReady(sktHTTP)) {// Not enough space curHTTP.callbackPos = 0x01; return; } TCPPutString(sktHTTP, (BYTE*)displayLine12); curHTTP.callbackPos = 0x00;
469
return; } Inicialmente, testado se o tamanho da string a ser enviada, neste caso a string displayLine12, maior do que o soquete pode enviar (16 caracteres). Se o tamanho for maior, a varivel curHTTP.callbackPos atualizada com o valor 0x01, indicando que mais 2 bytes (16 caracteres) devem ser alocados para o envio da string. Em seguida, a funo ser chamada novamente, e caso haja espao suficiente a string retornada e a varivel curHTTP.callbackPos atualizada com o valor 0x00. Observa-se na Figura 15.57 que as variveis dinmicas referentes aos valores dos potencimetros e estados dos LEDs, respectivamente POT e LED, so definidas com o mesmo nome, distinguidas entre si por ndices. Neste caso, somente uma funo de retorno deve ser implementada no arquivo CustomHTTPApp.c, porm, ao contrrio das variveis no indexadas, essa funo deve receber um parmetro do tipo WORD (unsigned short int, 16 bits sem sinal). A partir do valor desse parmetro, a varivel dinmica pode ser univocamente identificada e seu respectivo valor retornado. O cdigo da funo HTTPPrint_POT, que faz uso desse artifcio, apresentado abaixo. void HTTPPrint_POT(WORD param) { BYTE String[16]; switch(param) { case 1: uitoa(potenciometer1, (BYTE*)String); TCPPutString(sktHTTP, String); break; case 2: uitoa(potenciometer2, (BYTE*)String); TCPPutString(sktHTTP, String); break; } return; } Para que o sistema funcione, alm de definir as funes de retorno no arquivo CustomHTTPApp.c, preciso definir seus prottipos em HTTPPrint.h. Este arquivo pode ser gerado automaticamente pelo software utilitrio MPFS Generator. O MPFS Generator uma aplicao grfica utilizada para construir uma imagem MPFS ou MPFS2 a ser armazenada no microcontrolador ou em uma memria externa serial EEPROM. Esta imagem obtida a partir de um conjunto de arquivos que, em geral, so pginas HTML, imagens, dentre outros. O MPFS2 Utility transforma as pginas web em um formato eficiente para armazenamento em um sistema embarcado. Desta forma, alm de gerar o arquivo de cabealho contendo os prottipos das funes de retorno, este software gera o sistema de arquivos contendo as pginas web armazenado na memria
470
EEPROM. A tela do MPFS Generator com as configuraes que devem ser executadas est apresentada na Figura 15.58.
No passo 1 deve ser selecionado o diretrio onde se encontram as pginas web. No passo 2 definido o tipo de imagem, a imagem binria deve ser selecionada. No passo 3 definido o diretrio e o nome do arquivo contendo a imagem a ser gerada. O passo 4 permite o upload das pginas geradas para o sistema embarcado, porm no utilizaremos essa funcionalidade. Ao executar todas as configuraes e clicar em Generate, a imagem contendo as pginas web ser gravada no diretrio de sada. Ns j vimos como criar as pginas web dinmicas, implementar as funes de retorno no sistema embarcado e gerar o arquivo com a imagem das pginas web. Porm como gravar esse arquivo na memria EEPROM do sistema? Via rede, acessando o endereo: http://endereco_ip/mpfsupload, no qual o endereo_ip deve ser substitudo pelo IP da placa do servidor web. A tela apresentada na Figura 15.59 ser exibida. O usurio deve clicar no boto Procurar, selecionar o arquivo gerado anteriormente pelo MPFS Generator e em seguida clicar no boto Upload. Aps o envio do arquivo, a seguinte mensagem ser exibida MPFS Image Successful.
471
472
Figura 15.60. Formulrio para envio das mensagens para os displays LCD.
Na primeira linha do cdigo HTML definido o mtodo de envio do formulrio. Neste caso, GET a ao a ser executada quando o formulrio for enviado. No campo action deve ser colocado entre aspas duplas o nome do arquivo HTML que contm o formulrio. Ao clicar no boto Enviar Mensagem as mensagens nos campos de entrada MSG1 e MSG2 so enviadas para o servidor que hospeda a pgina web. Os dados dos campos de entrada so enviados em pares nome/valor, separados por &. Se no exemplo anterior, o usurio digitar na primeira caixa de texto a string mensagem_1 e na segunda a string mensagem_2, ao clicar em enviar mensagem, os dados sero enviados pela URL da seguinte forma: /formLCD.htm?MSG1=mensagem_1&MSG2=mensagem_2. Aps a codificao dos formulrios nos arquivos HTML, deve ser implementada a funo HTTPExecuteGet() no arquivo CustomHTTPApp.c. Essa funo responsvel pelo recebimento dos dados via comando GET. Seu cdigo apresentado na Figura 15.61. O nome do formulrio que executou o envio obtido pela funo MPFSGetFilename. Por exemplo, no trecho de cdigo: MPFSGetFilename (curHTTP.file, filename, 20); o nome do formulrio que executou o envio armazenado na varivel filename. O valor de uma varivel obtido pela funo HTTPGetROMArg. Por exemplo, no trecho de cdigo ptr=HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"MSG1"); o valor da varivel MSG1 armazenado na varivel ptr.
473
474
15.3 Referncias
BALTAZAR, J. A. Acionamento de cargas e leitura de sensores utilizando redes Ethernet. Viosa, MG. Universidade Federal de Viosa. 2008. MICROCHIP. ENC28J60 Data Sheet. 2008a. Disponvel em <http://ww1.microchip.com/downloads/en/DeviceDoc/39662c.pdf>. Acessado em 10 Nov. 2010. MICROCHIP. Microchip TCP/IP Stack Application Note. 2008b. Disponvel em <http://ww1.microchip.com/downloads/en/AppNotes/00833c.pdf>. Acessado em 10 Nov. 2010. MICROCHIP. MPLAB Integrated Development Environment. 2008c. Disponvel em <http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_User_Guide_51519c.p df>. Acessado em 10 Nov. 2010. MICROCHIP. PIC24FJ128GA010 Family Data Sheet. 2009. Disponvel em <http://ww1.microchip.com/downloads/en/devicedoc/39747D.pdf>. Acessado em 10 Fev. 2010. SANTOS, J. C. S. Projeto de um sistema microcontrolado utilizando Internet embarcada para monitoramento remoto em tempo real de temperatura e disponibilizao dos dados na WEB atravs de conexo de rede. Natal, RN. Trabalho de concluso de curso. Universidade Federal do rio Grande do Norte. 2009.