WEB Server на Arduino + ENC28j60

4
5560
WEB Server на Arduino + ENC28j60
Aliexpress WW
 Всем привет. Как многие слышат, что нужно создать WEB Server на Arduino + ENC28j60 сразу становится не по себе, всячески пытаются отойти от этой темы применив другие варианты управления и мониторинга своих устройств. Но ведь интернет и сеть есть уже почти в каждом устройстве. Так чем Ваше творение хуже?
 Так что Если Вам интересен WEB Server на Arduino– идем дальше. Не так страшен Волк, как его рисуют. Среди Нас много специалистов, но и много новичков. Учится никогда не поздно, я сам многому учусь, и многое познаю в практике. Надеюсь, эта статья поможет начинающим или освежит память начавшим.
 За основу взят популярный модуль с контроллером ENC28j60.

arduino ethernet enc28j60 web server

 А также я взял Arduino UNO(также можно Nano или Arduino Pro Mini). Все они работают на ATmega328. В этой статье я покажу основы создания WEB сервера на самых простых библиотеках.
 В данном случае: #include «etherShield.h» #include «ETHER_28J60.h»
 Они просты для понимания – но и возможностей тоже меньше. Для обычного мониторинга и управления нагрузками – более чем достаточно.
 Давайте рассмотрим, что нам нужно для этого.

arduino ethernet enc28j60 web server

 Для начала идет инициализация библиотек. Далее я указал пины для подключения модуля с контроллером ENC28j60. Так же Нам необходимо указать параметры нашего сетевого устройства. Для этого указываем MAC адрес –помните он не должен совпасть с MAC адресом Ваших сетевых устройств. Так же и IP Адрес – должен быть индивидуальным – но находиться в Вашей подсети.
 К примеру, у Вас роутер(192,168,0,1), Ваш ПК(192,168,0,5) то Ваше устройство может быть(192,168,0,100). К примеру, у Вас роутер(192,168,4,1), Ваш ПК(192,168,4,10) то Ваше устройство может быть(192,168,4,100).
 Далее нужно указать порт. По умолчанию 80 – так как Веб браузеры по умолчанию опрашивают именно его(смотрите тест изменения порта в видео ниже).
 Далее ETHER_28J60 ethernet; — указываем на имя объекта для обращения(ethernet), ниже в программе мы будем обращаться по этому имени. Далее Нам необходима инициализация сетевого контроллера – применяем все установки адресов и портов. Ну тут думаю самое сложное и не интересное закончилось …
 Далее в основном цикле программы мы должны поставить условие которое будет проверять, есть ли запрос по нашему IP адресу?.. Если есть, то отправить строчки нашей странички, а браузер уже придаст ей привычный нам вид. Давайте посмотрим пример:

arduino ethernet enc28j60 web server

 Выделенная строка создает крупный тест на страничке, его легко редактировать и таких строчек можно добавлять по необходимости(но все упирается в количество Flash памяти контроллера). Команда ethernet.respond(); отправляет все наши строчки сайта на браузер с которого сделали запрос на сайт(в данном случае 192.168.0.100). Но если Вы заметили то названия у этого сайта нет(просто IP адрес).Не волнуйтесь, это поправимо, если добавить одну строчку:

arduino ethernet enc28j60 web server

 Вот… теперь уже лучше. Далее добавляя, строчки мы будем добавлять объекты на страничке которые помогут нам отображать информацию или управлять нею.
 Начнем с ссылки, при нажатии на которую, мы отправим на контроллер запрос с тестом (который нужен будет нам позже для обработки).

arduino ethernet enc28j60 web server

 Красной стрелкой название кнопки, а синей мы указываем на текст в запросе при нажатии на ссылку. Значит, если Мы нажмем на ссылку «Стоп» то отправим запрос на наш сервер: «192.168.0.100/stop» — где «stop» будет текст запроса. Далее рассмотрим такой же вариант только с кнопкой:

arduino ethernet enc28j60 web server

 Добавились атрибуты необходимые для отображения браузером кнопки. При нажатии, на которую, уже отправится запрос с тестом «start». Думаю здесь все понятно. Для любителей красоты можно добавить параметры и создать интересную кнопку:

arduino ethernet enc28j60 web server

 Для следующего варианта нам понадобятся переменные, добавим их в начале скетча:

arduino ethernet enc28j60 web server

 Сейчас отобразим на Нашей страничке таблицу:

arduino ethernet enc28j60 web server

 Для обозначения объекта таблица используется атрибут table. Далее я красным подчеркнул ( tr ) внешние границы таблицы и синим — внутренние рамочки. Обратите внимание что они попарно, а в центре пары Ваше значение или переменная(к примеру ves1 или ves2). Так же вы можете заметить что пара создает жирный текст а обычный текст. В конце объект таблица завершается /table. Думаю с отображением объектов на странице достаточно для создания не сложных WEB страниц(более подробно и наглядно вы можете увидеть ниже в видео уроках для начинающих). Но как же обработать запрос – для этого немного модифицируем наше условие с самого начала, добавив при этом переменную для строки. Так же создадим для примера два условия обработки запросов: 1-е это пустой запрос (192.168.0.100); 2-е это запрос с текстом «start»(192.168.0.100/start)

arduino ethernet enc28j60 web server

 В зависимости от поданного запроса на сервер, на браузере сайт будет отображаться согласно указанным строкам:

arduino ethernet enc28j60 web server

 Вот так можно делать динамические станицы, которые будут меняться, и отображать различную информацию в зависимости от параметров переменных или запросов от ссылок и кнопок.
 Более детально и наглядно можно увидеть все, выше упомянутое, в Видео уроках для начинающих:
 Ссылки на скетчи с примерами(В первом примере библиотека):

Web_urok_01.rarWeb_urok_02.rarWeb_urok_03.rar.

 Старался изложить материал доступными словами не используя сложные термины. Надеюсь, эта статья поможет многим начинающим создать свой web сервер. Для более продвинутых будут видео по другим библиотекам … более сложным.
 Ссылки на модули: Ethernet ENC28J60Arduino Pro Mini.

4 КОММЕНТАРИИ

  1. Помогите пожалуйста:

    Arduino: 1.8.5 (Windows 8.1), Плата:»Arduino/Genuino Uno»

    In file included from C:\Program Files\Arduino\libraries\etherShield/etherShield.h:25:0,

    from C:\Users\123\Desktop\web_variant1_02\web_variant1_02.ino:1:

    C:\Program Files\Arduino\libraries\etherShield/ip_arp_udp_tcp.h:32:66: error: ‘prog_char’ does not name a type

    extern uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s);

    ^

    In file included from C:\Users\123\Desktop\web_variant1_02\web_variant1_02.ino:1:0:

    C:\Program Files\Arduino\libraries\etherShield/etherShield.h:34:65: error: ‘prog_char’ does not name a type

    uint16_t ES_fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s);

    ^

    exit status 1
    Ошибка компиляции для платы Arduino/Genuino Uno.

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    «Показать подробный вывод во время компиляции»