Варианты http – сервера на платформе Arduino

Влияние использования платформы Arduino на упрощение и ускорение создания подобных достаточно сложных проектов. Причины нестабильной работы web-сервера на W5100, пути ее оптимизации. Ограничение размера web-страницы размером поля данных пакета Ethernet.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 02.07.2018
Размер файла 902,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Варианты http - сервера на платформе Arduino

В настоящее время для управления различными устройствами (исполнительными механизмами, системами отопления, освещением и т.д.) широко используют микроконтроллеры, например ATmega. Они подключаются к соответствующим платам расширения, которые управляют исполнительными устройствами. Для программирования микроконтроллеров используют соответствующее программное обеспечение. Обычно программы пишутся на Си и Ассемблере. Однако в конце 2000 г. по инициативе итальянских инженеров был создан проект Arduino, который в настоящее время интенсивно развивается для создания законченных систем управления исполнительными устройствами. Проект состоит из аппаратной платформы на базе микроконтроллера AVR и средства разработки программ [1,2].

Плата Arduino состоит из ограниченного набора микроконтроллеров Atmel AVR (ATmega1280, ATmega328 в новых версиях и ATmega168, ATmega8 в старых) и элементной обвязки для программирования и интеграции с другими схемами. На каждой плате обязательно присутствуют линейный стабилизатор напряжения 5В и 16МГц кварцевый резонатор. В микроконтроллер предварительно прошит загрузчик, поэтому внешний программатор не используется. На концептуальном уровне все платы программируются через RS-232 интерфейс. Однако на последние варианты подключение для программирования выполняется через USB благодаря микросхеме конвертера USB-to-serial типа FTDI FT232. Платы Arduino позволяют использовать большую часть I/O выводов микроконтроллера во внешних схемах. Например, в плате Arduino Uno (ATmega328) доступно 14 цифровых вводов / выводов, в плате Arduino Mega (ATmega1280) доступно уже 54 цифровых вводов / выводов.

Интегрированная среда разработки Arduino - это кроссплатформенное приложение на Java, включающее в себя редактор кода, компилятор и модуль передачи прошивки в плату. Среда разработки основана на языке программирования Processing. Язык программирования аналогичен языку, используемому в проекте Wiring. Программы обрабатываются с помощью препроцессора (Wiring), а затем компилируется с помощью AVR-GCC.

Интенсивное развитие проекта Arduino связано с его преимуществами. Не нужен программатор. Программирование микроконтроллеров выполняется на языке высокого уровня (C++). Проект Arduino полностью открытый (можно изготавливать дополнительные платы расширения и дописывать собственные библиотеки программ). Платформа набирает популярность - появляется множество сайтов в Интернете с библиотеками, схемами и проектами. Стандартизация расположения выводов платы ввода / вывода делает привлекательной ее для других производителей - появляются новые платы расширения (Shield), которые с помощью разъемов устанавливаются на плату Arduino. Проект использует кроссплатформенную среду разработки.

Однако недостатком проекта является ориентация программной среды на ограниченное количество микроконтроллеров AVR. Ряд популярных и распространенных микроконтроллеров, например ATmega16, ATmega32, ATmega128 не описаны в среде разработки. Поэтому возникает необходимость в адаптации среды программирования в том случае, когда электронное устройство собирается из компонентов, не входящих в проект Arduino. Изучим возможность построение web - сервера двух типов. Первый - на базе микроконтроллера ATmega128L и Ethernet контроллера ENC28J60. Он должен управлять 3-мя устройствами и снимать показания с датчика температуры DS18B20. Второй сервер, построенный на стандартных контроллере Arduino UNO и Ethernet Shield w5100, должен управлять мобильным телефоном, снимать показания с датчика температуры DS18B20, а также отображать статические html документы, рисунки формата jpg, записанные на SD карте памяти. Фактически, второй сервер должен представлять собой универсальный web - сервер с функциями удаленного управления. Задачи, решаемые этими серверами, обычно рассматриваются в проекте «Умный дом».

Рассмотрим построения первого сервера. В качестве микроконтроллера используется ATmega128L, на котором реализована работа с протоколами http, tcp, ip, а также функции управления внешними устройствами. Для работы с сетью на канальном и физическом уровне использован контроллер Ethernet ENC28J60. Достоинством ENC28J60 является его возможность работы с микроконтроллером по шине SPI. На рисунке 1 представлена схема включения контроллера ENC28J60.

Рис. 1. Схема контроллера ENC28J60 с использованием разъема HR911105A

Для подключения к Ethernet используется разъём HR911105A с встроенным трансформатором и светодиодами. Причем полярность включения желтого светодиода определяет режим работы контроллера ENC28J60 - полу дуплекс или полный дуплекс[3].

На схеме (рис. 1) заслуживает внимание резистор R13. В описании на ENC28J60 он указан с номиналом 2kОм. Однако у разных ревизий ENC28J60 существуют оптимальные значения этого резистора. Так для ревизии 1 и 4 резистор должен иметь значение 2,7кОм, а для ревизии 5 и 7 - 2,32кОм. Определяется ревизия чтением соответствующего регистра. Практически, установка номинала резистора R13 - 2,0кОм обеспечивает работоспособность схемы на рис. 1, однако может снизиться дальность работы, но это приемлемо для условий офиса. Для бюджетных устройств возможна безтрансформаторная схема включения, которая представлена на рисунке 2. Но в этом случае ближайшее коммутационное устройство должно находиться в непосредственной близости. При такой схеме подключения стандарт IEEE 802.3 не выполняется, но устройство работает. Светодиоды должны быть установлены.

Рис. 2. Безтрансформаторная схема подключения

На рисунке 3 представлена схема подключения ATmega128L к температурному датчику, двум светодиодам и шине SPI, которая используется для работы с сетевым модулем ENC28J60.

Рис. 3. Схема подключения ATmega128L

Несмотря на то, что при последовательном программировании ATmega128L используется тот же модуль SPI что и при обычной работы микроконтроллера, имеется одно важное отличие: выводы MOSI/MISO модуля ввода-вывода SPI, которые совмещены с PB2 и PB3, не используются при программировании. Вместо них при последовательном программировании используются PE0 и PE1 для ввода и вывода данных[4]. Поэтому на рис. 3 отдельно представлена шина для программирования (Serial programming). Шина, обозначенная на рис. 3 как SPI ENC28J60 подключается к модулю с чипом ENC28J60, схема которого представлена на рисунке 1.

Программирование устройства выполнялось с помощью интегрированной среды разработки Arduino. Достоинство ее в том, что в ней находится много полезных библиотек, в частности для работы с шиной OneWire (для DS18B20) и чипом ENC28J60.

Как отмечалось, в программной среде Arduino описаны порты ввода-вывода для ограниченного числа микроконтроллеров. Поэтому проблема состоит в том, чтобы описать расположение выводов контроллера ATmega128L в самой среде разработки так и в библиотеке для чипа ENC28J60. Для этого корректируем файл

d:\arduino-1.0.3\hardware\arduino\variants\standard\pins_arduino.h.

Вместо

static const uint8_t SS = 10; static const uint8_t SS = 8;

static const uint8_t MOSI = 11; записываем static const uint8_t MOSI = 10;

static const uint8_t MISO = 12; static const uint8_t MISO = 11;

static const uint8_t SCK = 13; static const uint8_t SCK = 9;

В файле d:\arduino-1.0.3\libraries\etherShield\enc28j60.c библиотеки ENC28J60 также выполняем исправления. Должны быть следующие изменения:

#define ENC28J60_CONTROL_CS 8

#define SPI_MOSI 10

#define SPI_MISO 11

#define SPI_SCK 9

Ниже в качестве примера приведена программа для управления тремя светодиодами (исполнительными механизмами) и считывания температуры с датчика DS18B20 по шине OneWire. Следует обратить внимание, что по сравнению с рис. 3 программа расширена до 3-х светодиодов. Они подключены к выводам микроконтроллера 28, 30, 32.

#include «etherShield.h»

#include «ETHER_28J60.h»

#include <OneWire.h>

#include <stdio.h>

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};

static uint8_t ip[4] = {192, 168, 1, 100}; static uint16_t port = 80;

ETHER_28J60 e; OneWire ds(6); char buf[30];

void setup()

{e.setup (mac, ip, port); pinMode (3, OUTPUT);

pinMode (5, OUTPUT); pinMode (7, OUTPUT);}

float temp()

{byte i; byte data[10]; byte addr[8]; float celsius;

ds.search(addr); ds.reset(); ds.select(addr);

ds.write (0x44,1); // start conversion, with parasite power on at the end

delay(800); ds.reset(); ds.select(addr);

ds.write(0xBE); // Read Scratchpad

for (i = 0; i < 9; i++) { // we need 9 bytes

data[i] = ds.read();} int raw = (data[1] << 8) | data[0];

unsigned char t_mask[4] = {0x7, 0x3, 0x1, 0x0};

byte cfg = (data[4] & 0x60)>>5; raw &= ~t_mask[cfg]; celsius=(float) raw/16;

return celsius;}

void loop()

{char* buffer; if (buffer = e.serviceRequest())

{e.print («<FONT size=5 color=green>Web - сервер на базе

<font color=red>ATmega128L</FONT> и контроллера

<font color=blue> ENC28J60</font></FONT><BR>»);

e.print («<hr>»); char r=buffer[3]; char g=buffer[7]; char b=buffer[11];

if (r==0x31) digitalWrite (3, HIGH); if (r==0x30) digitalWrite (3, LOW);

if (g==0x31) digitalWrite (5, HIGH); if (g==0x30) digitalWrite (5, LOW);

if (b==0x31) digitalWrite (7, HIGH); if (b==0x30) digitalWrite (7, LOW);

e.print («<FORM action=''>»);

e.print («<FONT size=4 color=red>Красный светодиод:</FONT><BR>»);

e.print («<INPUT type='radio' name='r' value='1'>ON<br>»);

e.print («<INPUT type='radio' name='r' value='0'CHECKED>OFF<br><br>»);

e.print («<FONT size=4 color=green>Зеленый светодиод:</FONT><BR>»);

e.print («<INPUT type='radio' name='g' value='1'>ON<br>»);

e.print («<INPUT type='radio' name='g'

value='0'CHECKED>OFF<br><br>»);

e.print («<FONT size=4 color=blue>Синий светодиод:</FONT><BR>»);

e.print («<INPUT type='radio' name='b' value='1'>ON<br>»);

e.print («<INPUT type='radio' name='b' value='0'CHECKED>OFF<br>»);

e.print («<INPUT type='submit' value='Ввести'></FORM>»);

float aa=temp(); dtostrf (aa, 5,2, buf);

e.print («<FONT size=4 color=red>Температура в градусах:</FONT><BR>»); e.print(buf); e.print («<br>»); if (digitalRead(3)) {e.print («<font size=4 color=red>

Красный светодиод ВКЛЮЧЕН</font><br>»);}

else {e.print («<font size=4 color=red>Красный светодиод

ВЫКЛЮЧЕН</font><br>»);}

if (digitalRead(5)) {e.print («<font size=4 color=green>

Зеленый светодиод ВКЛЮЧЕН</font><br>»);}

else {e.print («<font size=4 color=green>Зеленый светодиод

ВЫКЛЮЧЕН</font><br>»);}

if (digitalRead(7)) {e.print («<font size=4 color=blue>Синий

светодиод ВКЛЮЧЕН</font><br>»);}

else {e.print («<font size=4 color=blue>Синий

светодиод ВЫКЛЮЧЕН</font><br>»);}

e.print («<hr>»); e.print («Free SRAM:»); e.print (freeRam()); e.respond();}

delay(1);}

Для снятия данных с температурного датчика дополнительно используется библиотека OneWire. По опыту работы библиотеки etherShield и ETHER_28J60 позволяют на запрос от клиента отправить только один пакет. Поэтому если создать страничку, размер которой не укладывается в один пакет Ethernet (примерно 1500 байт), то это может привести к дополнительным сложностям в написании программы. Также в памяти микроконтроллера необходимо зарезервировать дополнительный буфер объемом 1500 байт. Для того чтобы заработала программа для управления 3-мя светодиодами, в файле ETHER_28J60.cpp библиотеки ETHER_28J60 внесено изменение:

#define BUFFER_SIZE 1500

В противном случае web - сервер зависал.

Ethernet модуль на базе чипа W5100 и библиотеки Ethernet от Arduino позволяет обмениваться неограниченным количеством пакетов, поэтому на его основе возможно создание простого универсального web - сервера. В связи с этим рассмотрим построения второго сервера.

Выше было отмечено, что в отличие от первого сервера, второй построен на стандартных контроллере Arduino UNO R3 и Ethernet Shield w5100 (рис. 4).

Рис. 4. Web - сервер на Arduino UNO и W5100

Контроллер Ethernet Shield W5100 устанавливается с помощью разъемов на плате Arduino. Он основан на Ethernet - микросхеме Wiznet W5100, которая поддерживает также и стек TCP/IP. Для создания программ, которые подключают Arduino и Ethernet Shield W5100 к сети, используется библиотека Ethernet программной среды Arduino. Кроме стандартного сетевого разъёма RJ-45, контроллер Ethernet Shield W5100 имеет разъём для карт памяти типа micro-SD, которая используется для хранения файлов web - сервера. Разъем micro-SD доступен при помощи библиотеки SD.

Arduino осуществляет связь с W5100 и картой SD посредством шины SPI. При использовании библиотек Ethernet и SD вывод №10 платы Arduino (формирует сигнал SS шины SPI) используется для выбора W5100, а ввод №4 - карты SD. Эти выводы не могут быть использованы для другого ввода-вывода. Необходимо учитывать, что на плате Arduino Mega, аппаратный вывод SS №53, не используется для выбора ни W5100, ни карты SD, но он должен быть сконфигурирован как вывод, иначе интерфейс SPI не будет работать.

Микросхема W5100 и карта SD разделяют шину SPI, поэтому одновременно они работать не могут. Если используются оба этих периферийных устройства в программе, следует использовать соответствующие им библиотеки. Однако если не используется ни одно из этих периферийных устройств, следует явно отключить их. Чтобы это сделать, необходимо сконфигурировать вывод платы №4 для SD как выход и записать в него «1». Для W5100 необходимо сделать то же самое но для вывода №10.

В работе разработана и отлажена устойчиво работающая программа универсального web - сервера, которая отображает web - страницы с иллюстрациями и аппаратно с помощью реле сбрасывает сама себя примерно каждые две минуты, выполняет дозвон и считывает показания температурного датчика. Сброс необходим для выхода из «зависаний», которые наблюдаются при интенсивном обращении со стороны одного или нескольких клиентов. Такие «зависания» замечены на платах Arduino UNO и Arduino Mega. Если web - страничка имеет размер в пределах одного Ethernet пакета, «зависаний» не наблюдалось. Анализ показал, что проблемы создаются контроллером Ethernet Shield W5100. Для обеспечения устойчивой работы сервера была использована библиотека VEduino[5] предназначенная для программирования счетчиков - таймеров. Согласно программе через определенный интервал времени выполнялось прерывание от таймера - счетчика 1. Управление передавалось функции обработки прерывания ISR (TIMER1_COMPA_vect). Каждое обращение к этой функции приводило к увеличению на единицу переменной s. Как только ее значение превышало 500, на 7-м выводе платы Arduino устанавливался высокий уровень, сигнал поступал на базу транзистора, который с помощью реле замыкал RESET микроконтроллера на «землю» (рис. 5). В этом случае происходил аппаратный сброс всего устройства и если контроллер до этого «зависал», то после RESET работа всего устройства возобновлялась.

Сервер также с помощью датчика DS18B20 определяет температуру в помещении и передает ее браузеру после нажатия на ссылку «информация». При замыкании концевого выключателя, например при открывании входной двери, на выводе 5 платы Arduino дважды устанавливается высокий уровень, поступающий на вход транзистора, замыкающего реле дозвона два раза (рис. 5). Контакты реле подключены к кнопке мобильного телефона «поднять трубку», после чего телефон звонил по последнему номеру, по которому он дозванивался ранее. Программа сервера также дает возможность принудительно выполнить дозвон при условии подключения к нему по адресу: http:// 192.168.1.100/tele.

Рис. 5. Схема подключения к Arduino

Текст программы, реализующей работу электронного устройства в качестве web - сервера из-за ограничений, накладываемых на размер статьи здесь не представлен. Эта программа с подробными комментариями приведена в работе[6], поэтому дополнительного описания не требует. В работе ip - адреса рассмотренных серверов в программе представлены, как локальные (192.168.1.100). Для подключения к ним через Интернет, необходимо выполнить настройки, представленные в источнике [7].

Выводы

1. Показана возможность на базе платформы Arduino построение универсальных http - серверов, позволяющих не только отображать достаточно большие объёмы информации, но и выполнять управление устройствами по TCP/IP сети, что характерно для микроконтроллеров.

2. Использование платформы Arduino значительно упрощает и ускоряет создание подобных достаточно сложных проектов из-за наличия увеличивающегося набора библиотек и достаточно дешёвых плат Arduino с минимальным набором электронных компонентов.

3. Обнаруженным существенным недостатком является нестабильная работа представленного здесь web - сервера на W5100, который периодически «виснет» при интенсивном к нему обращении через канал Интернет. Анализ показал нестабильность работы набора библиотек для Ethernet Shield W5100.

4. Недостатком также является довольно медленная совместная работа по шине SPI памяти SD и контроллера W5100. Несмотря на использовании в программе блочного способа чтения данных с SD, скорость передачи данных по сети не превышала 17.5Кбайт/с.

5. Несмотря на стабильность работы web - сервера, построенного на контроллере ENC28J60, его существенным недостатком является ограничение размера web - страницы размером поля данных пакета Ethernet при использовании наиболее распространенных библиотек программной платформы Arduino - etherShield и ETHER_28J60.

Литература

платформа сервер ethernet arduino

1. Arduino. [Electronic resource]. - Mode of access: http://www.arduino.cc/, 2013.

2. Проект CraftDuino. [Electronic resource]. - Mode of access: http://www.robocraft.ru/page/summary/, 2013.

3. Мясищев А.А. Web-сервер на ENC28J60 и микроконтроллере AVR для управления устройствами по TCP/IP сети. Materiбly IX mezinбrodnн vмdecko - praktickб conference «Pшednн vмdeckй novinky - 2013». - Dнl 9. Modernн informaиnн technologie. Matematika. Fyzika. Tмlovэchova a sport: Praha. Publishing House «Education and Science» s.r.o - 64 stran.

4. ATmega128/L Datasheet. [Electronic resource]. - Mode of access:

http://www.atmel.com/Images/doc2467.pdf, 2011.

5. Библиотека VE_AVR. [Electronic resource]. - Mode of access:

https://sites.google.com/site/vanyambauseslinux/biblioteka-ve_avr, 2013.

6. Мясищев А.А. О возможности построения универсального Web-сервера на Arduino для отображения информации и управления по TCP/IP сети. [Electronic resource]. - Mode of access: http://host56.no-ip.biz/web_1 b.htm, 2013.

7. Мясищев А.А. Подключение миниатюрных web - серверов к Интернет для создания к ним удаленного доступа. [Electronic resource]. - Mode of access: http://host56.no-ip.biz/web_5.htm, 2013.

Размещено на Allbest.ru


Подобные документы

  • Представление о системе Arduino. Структура платформы Android. Выбор средств разработки. Разработка структур данных и алгоритмов. Характеристика Bluetooth модуля, блок реле, резисторов, диодов. Графический интерфейс приложения. Написание кода программы.

    дипломная работа [4,0 M], добавлен 19.01.2017

  • Анализ GPS-навигаторов для животных. Использование плат и среды программирования Arduino для разработки ошейника с GPS-навигатором для отслеживания маршрута, проделанного животным, и уведомления об этом пользователя. Выбор модели микроконтроллера.

    курсовая работа [2,4 M], добавлен 18.10.2015

  • Компоненты вычислительной системы, предоставляющие клиенту доступ к определенным ресурсам и обмен информацией. Функциональные возможности ядра веб-сервера Apache. Механизм авторизации пользователей для доступа к директории на основе HTTP-аутентификации.

    курсовая работа [105,6 K], добавлен 07.06.2014

  • Возможности платформы Arduino. Загрузка микроконтроллера прерываниями. Подтягивающие (нагрузочные) резисторы. Аналого-цифровой преобразователь, цоколевка. Прерывание по таймеру, память. Библиотеки Servo, SPI, Stepper. Комбинация фазы синхронизации.

    курсовая работа [53,4 K], добавлен 23.12.2014

  • Организация корпоративного файлового сервера, выполняющего функции прокси-сервера на базе ОС Linux. Процесс его реализации. Выбор оптимальной аппаратно-программной платформы. Расчёт сметы затрат на выполнение объёма работ по созданию FTP-сервера.

    дипломная работа [2,0 M], добавлен 06.07.2012

  • Создание баз данных и таблиц. Ограничение доступа для пользователей. Хранимая процедура, доступная всем пользователям. Скрипты для проверки ограничений. Методы обеспечения безопасности сервера базы данных. Чтение, изменение и добавление данных.

    лабораторная работа [1,4 M], добавлен 23.07.2012

  • Общее понятие, основные компоненты и функции операционной системы. Порядок установи операционной системы UbuntuLinux. Особенности инсталляции веб-сервера Nginx для передачи данных по протоколу HTTP. Установка системы управления базами данных MongoDB.

    курсовая работа [2,3 M], добавлен 11.06.2014

  • Требования, предъявленные к полноценному локальному чату. Протокол передачи данных TCP. Описание программы сервера. Этапы разработки программного продукта. Функция приема сообщений от сервера. Принятие и отправка сообщений всем пользователям чата.

    курсовая работа [447,0 K], добавлен 21.01.2016

  • Спецификация организации службы Short Message Service. Алгоритм работы сервера и возможность расширения функциональных возможностей. Реализация проекта на языке высокого уровня С++ на платформе Linux. Расчет себестоимости и цены программного продукта.

    дипломная работа [168,6 K], добавлен 19.01.2014

  • История и основные сведения о сервере. Классификация и ресурсы серверов. Важность системы охлаждения для сервера. Выбор компонентов для сборки сервера. Основные неисправности и способы их устранения. Проведение технического обслуживания и ремонта сервера.

    дипломная работа [2,1 M], добавлен 24.06.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.