MICROCHIP TCP/IP STACK

Для разработки и изучения устройств для управления через сеть, приобрел плату PICDEM.net 2 и два модуля Wi-Fi MRF24WB0MA, MRF24WG0MA. Попробую рассказать что мне удалось узнать интересного при изучении данного девайса.

Изначально плата уже прошита демо проектом. У меня была версия 3.75. Для запуска устройства достаточно подключить питание(рекомендовано 9вольт) до 12 вольт и подключить перекрестным кабелем (оранжевый в комплекте с платой) к сетевому разъему (RJ-45) компьютера,  к разъему на плате, который находиться ближе к дисплею. Он подключен к микроконтроллеру (PIC18F97J60). Второй разъем задействован через микросхему ENC28J60. После подключения питания на дисплее отобразиться версия ПО и IP адрес устройства. В адресной строке браузера нужно набрать этот IP, и попадем на веб сайт, который зашит в eeprom запаянной на плате ( 25LC256 ). Тут можно включить светодиоды, написать что-нибудь на дисплее, отправит сообщение на электронную почту, отобразить положение потенциометра и многое другое.

tcp_1

Версия прошитого ПО оказалась довольно старой, на сайте нашел версию v5.42.08    June 2013 (microchip_solutions_v2013-06-15), для 8 разрядных контроллеров она является последней.

Для работы с платой подходит программатор PicKit2, и PicKit3, ICD3 (на чем я тестировал). подключаем его к плате так

tcp_2

или можно сделать кабель по такой схеме

tcp_3

Для работы с ПО TCPIP Stack 5.42 я использовал Mplab 8.92 и С18 версии v3.47, также нужно установить  Java.

При установке TCPIP Stack 5.42 создается папка с:\ microchip_solutions_v2013-06-15\,   открываем проект из этой папки, который находиться по этому пути с:\ microchip_solutions_v2013-06-15\ Tcpip\ Demo App\ C18-PICDN2_ETH97.mcpподключаем линкер  на PIC18F97J60. Если плата уже подключена к программатору и все сделано правильно, то на экране вывода должен вывести ID микроконтроллера.

tcp_4

Компилируем проект и загружаем в микроконтроллер, процедура достаточно долгая.

После загрузки на дисплее отобразиться версия ПО и IP адрес устройства.

tcp_5

Зайдите в папку Utilities по используя путь с:\ microchip_solutions_v2013-06-15\ Microchip\ TCPIP Stack\ Utilities. Запустите программу  TCPIP Discoverer.jar ( она запустится если установлена JAVA). Появится такое окно в котором определиться IP и MAC адреса нашей платы.

Если на компьютере включено беспроводное подключение, его нужно отключить.

tcp_6

Далее нужно загрузить Веб-страницу на устройство, это можно сделать несколькими способами. Один из них это через COM порт на плате и приложение Hyper Terminal, но для этого нужен конвертор USB — RS232, так что рассматривать его не буду. Второй способ: в адресной строке браузера пишем http://169.254.9.4/mpfsupload, с IP платы.

tcp_7

У нас появиться такая страница. Выберем файл MPFSImg2.bin  из папки из которой открывали проект, и нажмем  кнопку Upload, как только сайт будет загружен в EEPROM, будет предложено перейти на сайт. Нажав эту ссылку перейдем на сайт демо платы.

tcp_8

Третий способ: запустить MPFS2.jar из папки Utilities, откроется такое приложение.

 

tcp_9

В первом пункте настройки нужно указать путь к папке WebPages2  которая находиться в папке с проектом. Во втором пункте настройки по умолчанию BIN Image.  В третьем,  путь к папке где лежит проект. В четвертом, в настройках указать IP платы или ее имя (по умолчанию MCHPBOARD). Ну и нажать кнопу сгенерировать и загрузить. Появиться сообщение о успешной загрузке.

Набрав в браузере IP платы попадем на сайт устройства.

tcp_10

На этой странице отображается состояние светодиодов, кнопок и значение с потенциометра. Слева находятся ссылки с демонстрацией других приложений: E-mail, идентификация и др. В этой версии TCPIP Stack, реализована технология AJAX  ( WEB страницу не нужно обновлять для получения текущих значений с платы, это происходит автоматически ).

Что бы задействовать микросхему ENC28J60, нужно выбрать проект C18-PICDN2_ENC28.mcp и переключить сетевой кабель в соседнее гнездо на плате.

Реализация WI-FI.

Реализовать связь по Wi Fi с модулем MRF24WB0MA у меня не получилось, DHCP сервер не давал модулю IP и на дисплее отображался установленный по умолчанию169.254.1.1. С модулем MRF24WG0MA  все сразу заработало.

tcp_11

Модуль MRF24WG0MA в отличие от PIC18F97J60 имеет уникальный MAC адрес.

Для реализации этого демо проекта, нужно открыть из той же папки, где лежат два предыдущих проекта, открыть  C18-PICDN2_MRF24WG.mcp, для модуляMRF24WG0MA.

По умолчанию проект настроен на открытую не защищенную сеть.

Первый вариант: настроить роутер под плату, для этого надо поменять в нем имя сети наMicrochipDemoAP  и установить открытую не защищенную сеть.

 

Второй вариант: настроить плату под вашу домашнюю сеть. Для этого нужно открыть файл WF_Config.h, и в 102 строке указать имя вашей домашней беспроводной сети, по умолчанию указана сеть MicrochipDemoAP:

#define MY_DEFAULT_SSID_NAME              «my» //»MicrochipDemoAP»

Также указать тип шифрования в 98 строке.

#define MY_DEFAULT_WIFI_SECURITY_MODE  WF_SECURITY_WPA2_WITH_PASS_PHRASE  // защищенная WPA2

  // WF_SECURITY_OPEN    // незащищенная сеть

tcp_12

А так же ключ доступа к сети в 206 строке

tcp_13

#define MY_DEFAULT_PSK_PHRASE              «1177889900»

                       // «Microchip 802.11 Secret PSK Password» //  по умолчанию

Компилируете и загружаете проект в микроконтроллер. После включения если у вас WPA2, где то через тридцать секунд  IP 169.254.1.1.    установленный по умолчанию сменится на полученный от DHCP сервера. Зайдите по этому IP адресу на веб сайт устройства.

 

Программное обеспечение.

Для создания своего проекта потребуются только изменить  MainDemo.c иCustomHTTPApp.c, а также настроить  файлы WF_Config.h — конфигурация сети, TCPIPMRF24W.h — включение модулей которые мы хотим использовать и др.  иHardwareProfile.h — какие входа/выхода  как будем использовать.

 

  Пример:

На демо плате имеется аналоговый температурный датчик, если поменять код процедурыHTTPPrint_pot  в файле CustomHTTPApp.c на такой

 

void HTTPPrint_pot(void)

{

char AN0String[8];

WORD ADval;

WORD temp;

 

// Wait until A/D conversion is done

 

ADCON0bits.CHS0 = 1;

ADCON0bits.CHS1 = 1;

ADCON0bits.CHS2 = 0;

ADCON0bits.CHS3 = 0;

 

ADCON0bits.GO = 1;

while(ADCON0bits.GO);

 

// Convert 10-bit value into ASCII string

ADval = (WORD)ADRES;

// Convert 10 Bit AD value to Celcius

temp = ((ADval — 151) * 340)>>10;

 

uitoa(temp, AN0String);

 

TCPPutArray(sktHTTP,(void *)AN0String, strlen((char*)AN0String));

return;

}

В место значения положения потенциометра будет отображаться значение температуры с этого датчика.

 

Создание проекта.

На примере начнем создание проекта с создания веб страницы.

 

1. Создание веб-страницы

Демо веб страница находиться в папке WebPages2,  она состоит из файлов с расширением HML,  CGI, XML, CSS, Js, Inc.

index.htm — главная страница,

header.inc — вставка заголовка во все HTM страницы.

mchp.js — реализована функция  AJAX которая осуществляет запрос к серверу без перезагрузки страницы.

status.xml — содержит динамические переменные

mchp.css — файл  стилей.

Для разработки веб лучше использовать редактор который не создает  избыточного кода, я пользуюсь NOTEPAD++

Динамические переменные.

При разработке веб приложения для устройства надо создать динамические переменные, которыми будет обмениваться веб с устройством в соответствующих методах.  Динамические переменные выделяется знаками тильда ~variable~.

 

Метод POST:

<form method=»post» action=»index.htm»>

<BR>

<input id=»znah_1″ size=»4″ name=»Perem_1″ value=»~Perem_1~» >

<colspan=»2″ align=»center»><input type=»submit» value=»ОК»  />

</form>

<!—  ————————————  —>

 

Метод GET:

<form method=»get» action=»index.htm»>

<input type=»radio» name=»Auto» value=»on» ~LED(1)~ /> On

<input type=»radio» name=»Auto» value=»off» ~LED(0)~ /> Off

<input type=»submit» class=»btn» value=»ОК»/>

</form>

 

Созданную веб страницу со всеми сопутствующими файлами помещают в отдельную папку в папку проекта. При помощи утилиты MPFS2 сгенерируйте файл с расширением.BIN , это сжатая веб страница, этот файл потом нужно будет загрузить в EEPROM, по размеру он не должен превышать объем вашей EEPROM. На демоплате PICDEM.net 2установлена микросхема  25LC256, соответственно этот файл не должен превышать 32 кб, если установлена микросхема 25LC1024, то размер файла должен быть больше 128 кб.

При генерации файла веб страницы утилита MPFS2 также индексирует динамические переменные обнаруженные на веб странице и корректирует HTTPPrint.h в связи с этими индексами.

 

Приложение в MPLAB.

HTTPPrint.h находиться в папке проекта.

Этот файл генерируется автоматически утилитой MPFS2. Он индексирует все динамические переменные и обеспечивает связь между переменными расположенными на веб страницах и устройством. Этот файл не требует модификации программиста.

В нем прописаны функции с названиями динамических переменных

 

void HTTPPrint(DWORD callbackID);

void HTTPPrint_Perem_1(void);

void HTTPPrint_LED(WORD);

 

void HTTPPrint(DWORD callbackID)

{

            switch(callbackID)

            {

        case 0x00000000:

                                   HTTPPrint_Perem_1();

                                   break;

        case 0x00000006:

                                   HTTPPrint_LED(1);

                                   break;

        case 0x00000007:

                                   HTTPPrint_LED(0);

                                   break;

 

Все сгенерированные функции в файле HTTPPrint  должны быть расписаны в файлеCustomHTTPApp.c, что с ними делать.

 

Ниже в примере код где эти переменные передаются с устройства на веб страницу.

 

void HTTPPrint_LED(WORD on)

{

            if(LED1_IO == on)

                        TCPPutROMString(sktHTTP, (ROM BYTE*)»checked»);

}

 

//**********************************/

 

void HTTPPrint_Perem_1(void)

{ char str[7];

    ultoa( out1, str );     // convert timer to string

            TCPPutString(sktHTTP, str);}

 

//**********************************/

 

Для приема переменных устройством с веб страницы в том же файле CustomHTTPApp.cиспользуются функции HTTP_IO_RESULT HTTPExecuteGet и HTTP_IO_RESULT HTTPExecutePost .

Когда код обработки этих функций написан, проект компилируется и загружается на микроконтроллер.

На PICDEM.NET 2 установлен символьный дисплей, и небольшая по объему памяти eeprom, что очень не удобно для разработки приложений с большим количеством динамических переменных.

Поэтому пришлось изготовить свою плату, с графическим дисплеем. В ней используется контроллер PIC18F87J60 и eeprom 25LC1024.

tcp_14

Схему и разводку платы в протеусе можно скачать в конце статьи.

фото платы.

?

Платы в сборе.

На этом графическом дисплее так же оказалось мало места, пришлость взять еще больше.

tcp_16

Прошивку HEX проекта с выводом данных на дисплей, также можно скачать в конце.

 

Это ip действующего проекта, находящегося в разработке http://78.159.233.204:7775/

 

Варианты удаленного доступа.

Аналогично настраиваются IP камеры.

1. вариант: У вас есть выделенный IP адрес.

В роутере отключаем DHCP.

tcp_17

Прописываем в приборе IP адрес по умолчанию, из диапазона указанного в роуторе ( выше на картинке ).

Отключаем модули в контроллере  STACK_USE_AUTO_IP, STACK_USE_DHCP_CLIENT,  STACK_USE_DHCP_SERVER.

На роутере делаем проброс портов.

tcp_18

Если работаем через модуль MRF24WG0A, то настраиваем безопасность.

tcp_19

2. вариант если у вас нет выделенного IP, то без проблем можно настроить подключение через DDNS.

Для этого нужно зарегистрироваться на сайте https://www.noip.com, и получить имя, по которому можно будет  управлять контроллером. В демо примере есть несколько вариантов, но они платные, кроме этого.

Хэлп по настройке этого сервиса, есть на сайте.

Вкратце, прибор регистрируем на сайте noip.com под каким ни будь именем ( например «Registrator_1».  Подключаем модуль STACK_USE_DYNAMICDNS_CLIENT в проекте» Demo App «.

Прибор начинает периодически отсылать свой IP адрес на этот сервис, и при запросе в браузере ( в адресной строке) под именем Registrator_1 вас этот сервис пере направляет на последний полученный IP адрес вашего устройства.

 

3. вариант: не проверен. Можно использовать роутер с возможностью подключения 3G/4G модема. То есть роутер настраиваем на работу с 3G/4G модемом, с прибором настраиваем связь с устройством либо по шнурку, либо через WIFI.

С оператором «Мегафон» связь по 3G наладить не удалось, не было доступа из внешней сети.

По информации полученной от операторов связи, индивидуальные IP адреса»Мегафон» дает только юридическим лицам. А Билайн и МТС, дают физическим лицам IP  за 100 — 150 руб. в месяц. Пока не проверил, надо ехать в центральные офисы, в павильонах ни чего  об этом не знают. Да, и еще у провайдера Dom.ru, что бы получить доступ из внешней  сети, надо в личном кабинете отключить функцию NAT.

После нехватки места на дисплее, также не хватает места и удобства для управления контроллером через его сайт который находиться на eeprom, и для того чтобы реализовать более удобный интерфейс пользователя, создать простейшую SCADA систему совместно с одной компанией пытаемся реализовать облачный сервис. У Микрочипа есть отладачная плата » Wi-Fi Client Module Development Kit (DM182020)» которая позволяет с легкостью создавать демонстрационное приложение, которое может подключаться и вести обмен данными с сервисом Amazon Elastic Compute Cloud (Amazon EC2) — веб-сервисом, предоставляющим вычислительные мощности в облаке.

 

Тут несколько переводов которые сделал при помощи Гугла, если захотеть, разобраться можно, может кому пригодиться.

AN833c

TCPIP_Stack_Help

библиотеки С18

c18_Libraries

описание платы PICDEM.NET2

PICDEM_NET_2

Лабораторные работы исходники для которых находятся в папке » WebVend» проекта» Demo App «.

ETH_Labs

Исходники и другую интересующую информацию могу выслать по email.

Прога подключения через кабель ( для платы с графическим дисплеем).

Прога подключения через WI FI ( для платы с графическим дисплеем).

Программа не выводит данные на дисплей. Папку с исходником нужно положить в с:\ microchip_solutions_v2013-06-15\ Tcpip\.