Arduino pro mini и ethernet enc28j60 напряжение. Отправка данных с Arduino на сервер (ENC28J60) GET запросом. Краткое описание NETAlarm

Уже давно был сделан Ethernet модуль, но все валялся в ящике. Никак руки не доходили.

Вот, наконец, собрался. Проверил на примерах от — работает.



В качестве микрухи используется ENC28J60 в SSOP28 корпусе. Бывает также в DIP28 и QFN корпусе. В общем, на любой вкус.

Схемотехника
Схема типейшая, по даташиту. Никаких заморочек, разве что применен разъем с трансформатором J00-0086NL, тогда как лучше было бы поставить J00-0066NL — у него коэффициент трансформации оптимальней (1:1). Но что было под рукой то и поставил. Можно и отдельный трансформатор взять, вроде FC-22 который стоял в

Еще одна важная деталь. Резистор Rbias, у меня он на схеме обозначен как R8 2k 1% нужно подбирать исходя из ревизии микросхемы. Я поставил 2.2кОм. Errata рекомендует

For silicon revisions, B1 and B4, use a 2.7 k, 1% external resistor between the RBIAS pin and ground. The value shown in the data sheet (2.32 k,) is correct for revisions B5 and B7.

Деталей не много, развести все удалось по одной стороне практически, с парой перемычек.






Дорожки мелковаты, 0.3мм, но не думаю, что у кого то это вызовет сильных затруднений. Сделано ЛУТом без проблем.

Интерфейс
Связь с контроллером по SPI интерфейсу.

  • SO — MISO
  • SI — MOSI
  • SCK — SCK
  • CS — SS Впрочем, выбор кристалла SS тут может быть повешан куда угодно.
  • RESET — если никуда не подключать, то лучше его повесить на +3.3 вольта. Чтобы не болтался и не создавал глюки.
  • INT — выход прерывания. При приеме пакета может дрыгать этой ногой и заставлять проц срочно обрабатывать пакет. Или, как минимум, принять во внимание, что надо получать данные.
  • WOE — Это, как я понял, Wake On Ethernet. Я никуда не подключал
  • 3V3 — питание на 3.3 вольта. Микруха жручая, потребляет 250мА и весьма активно при этом греется. От платы не отпаивается конечно, но горячая — палец еле держит. Да, несмотря на питание в 3.3 вольта ее входы толерантны к 5 вольтам
  • GND — земля

Подробнейшее описание работы с этой игрушкой можно найти в сообществе, в цикле статей посвященной этой микросхеме и работе с Ethernet в частности. Подробней вы вряд ли где найдете:)

Как мне сообщили на форуме, чего я ранее не знал, GET запросы не желательно использовать для данной цели. Однако мне кажется, что это стоит оставить как один из вариантов решения задачи. Позднее я постараюсь описать передачу данных с помощью POST запроса.
Введение:

Всем рано или поздно приходит мысль о создании своего устройства по концепции "интернет вещей", но при разработке остро встает вопрос об организации этих устройств и сбор информации с них. В данном случае идеально подходит соединение всех устройств в локальной сети (LAN) через ethernet, и управление ими с помощью сервера, в роли которого может выступать любой компьютер, и даже телефон!

Что мы имеем на руках:

  • Arduino uno
  • Ethernet module (enc28j60)

Небольшое отступление по поводу сетевого контроллера. Если у вас есть свободные средства, то советую вам взять W5100 (стоит 6-7$ на AliExpress) - официальный модуль от Arduino, имеет мощную документацию, есть на этом сайте. Но поскольку я обычный школьник без свободных средств, то буду использовать дешевый ENC28J60 (стоит 2-3$ на AliExpress). О котором, к сожалению, не так много информации (в основном запуски веб-сервера, да прочие стандартные скетчи)

P.S. Если вам интересно запустить этот код, а не написать его. Все ссылки будут в конце статьи.

P.S.S. Статья была примерно на треть больше так, как я описывал так же отправку данных на ардуину, но по неизвестной мне причине ардуина не захотела работать. Я все еще продолжаю гуглеж по этой теме, если найду причину моих неудач, я дополню статью.

Теория:

Наше устройство будет передавать данные по локальной сети (при желании можно и по интернету), с помощью http get запроса.

Это работает примерно так:

  • На нашем компьютере запущен сервер, и есть некоторые обработчики(в нашем случае на питоне), которые отвечают за обработку запроса и выполнение заданных функций.
  • Устройство совершает запрос к серверу, который передает данные обработчику
  • обработчик получает эти данные, и дальше делает то, что нам необходимо

Практика:

Думаю, что стоит начать с разработки серверной части, если вы уже знакомы с этим, то смело можете пропускать эту главу.

Сервер:

Приступим, для начала вам будет необходимо скачать python с официального сайта (Качаем на ниже 3.4 версии!)

Для написания кода можете использовать любой текстовый редактор, в поставке с питоном уже идет IDLE (простая и легкая среда разработки), для наших экспериментов этого вполне хватит.

Сервер я буду писать на питоне, по многим причинам.

  1. Python - очень простой в изучении язык (похож на псевдокод)
  2. В поставке с питоном уже идут библиотеки которые помогут вам запустить сервер без лишних шаманств
  3. Я знаком с этим языком уже довольно продолжительное время и знаю что от него ожидать

Плюсы можно перечислять долго, но если вы любите писать на PHP или же Ruby, можете использовать их, это не принципиально.
Так же если вы не знакомы с языком Python, но хотите понять что здесь происходит, советую почитать несколько первых глав из этого учебника.

Начнем:

Подготовка:

  • Создадим папку для нашего проекта, я назову ее server/
  • В папке проекта создадим:
    • Подпапку cgi-bin/ - в этой директории будут лежать скрипты, обрабатывающие запросы
      • Внутри создадим скрипт handler.py - это обработчик запросов посылаемых ардуиной.
    • файл run.py - этот скрипт будет запускать наш веб-сервер, который будет принимать запросы и передавать их скриптам.

В итоге все должно выглядеть вот так:

Напишем скрипт который будет запускать наш сервер (run.py)

Перейдем к файлу run.py:

From http.server import HTTPServer, CGIHTTPRequestHandler import socket if len(socket.gethostbyname_ex(socket.gethostname())) > 1: print("Сервер запущен на адресе: %s"%socket.gethostbyname_ex(socket.gethostname())) server_address = ("", 80) httpd = HTTPServer(server_address, CGIHTTPRequestHandler) httpd.serve_forever()

Разберем код построчно:

  1. Импортируем библиотеку для запуска HTTP сервера
  2. Импортируем библиотеку для работы с WEB-сокетами (для того, что бы узнать ip адресс компьютера)
  3. <Пусто>
  4. Данная функция возвращает список (массив в python) в котором содержится: имя компьютера в сети, ip адрес компьютера. Если компьютер на подключен к сети, то в списке будет только имя.
  5. Выводим сообщение с текущим ip адресом
  6. Задаем адрес на котором будет работать наш сервер. Кавычки оставляем пустыми, так как это локальный сервер. В качестве порта обязательно указываем 80 (это стандартный http порт). Подробнее о портах читать
  7. Создаем экземпляр класса сервера, и передаем ему все необходимые настройки
  8. Запускаем сервер

Как видим, все очень просто, так как всю работу за нас выполняет библиотека, а мы лишь указываем необходимые настройки для сервера. Но это лишь половина пути, теперь необходимо создать обработчики запросов. На этом этапе большая часть ответственности лежит на нас. Я напишу простой обработчик на примере которого вы сможете написать свои.

Наш обработчик будет принимать сообщение и записывать его в файл. Просто?! Да, просто, но это пожалуй, самый востребованный кейс.

Перейдем к коду handler.py :

#!/usr/bin/env python3 import cgi values = cgi.FieldStorage() cxem = values.getfirst("cxem", "none") output_file = open("out.txt","a") output_file.write(cxem) output_file.close()

Разберем код построчно:

  1. Команда для интерпретатора, не будем вдаваться в подробности (если интересно просто загуглите)
  2. Импортируем библиотеку для получения данных из get запроса
  3. <пусто>
  4. Получаем из Get запроса переданные значения в виде словаря (ассоциативного массива)
  5. Определяем переменной значение поля с названием "cxem", в случае если значение не будет задано переменная примет значение "none"
  6. Открываем файл на запись
  7. Записываем в файл значение
  8. Закрываем файл

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

Мы можем наблюдать что данные записались файл. Если вы обладаете дедукцией и некоторой логикой вы могли догадаться что данные указываются в таком виде путь_до_обработчика?название_переменной=значение

Q: А что если необходимо передать несколько переменных?
A: Все просто, в коде мы делаем так же как и с первой переменной, а при формировании запроса разделяем переменные знаком амперсант ("&"), то есть это будет выглядеть примерно так: путь_до_обработчика?название_переменной=значение&название_переменной=значение

На этом наша работа с сервером закончена, перейдем к работе с Ардуино.

Ардуино:

Для работы с ethernet модулем enc28j60 мы будем использовать самую адекватную (и до сих пор поддерживающуюся библиотеку ethercard)

Теория:

Запрос будет формироваться с помощью метода BrowseUrl. Данный метод совершает запрос на определенный url и с помощью указанного колбэка обрабатывает полученные от сервера данные (у меня не к сожалению это не получилось)

Практика:

Поскольку здесь много строк, объяснять буду не построчно, а поблочно.

Это переменные и константы которые мы задаем вначале программы.

// Библиотека для работы с сетевой картой #include // Буффер сетевой карты byte Ethernet::buffer; // Адрес сайта на который будем стучаться (в моем случае он запускается на одном с сервером IP) const char website PROGMEM = "192.168.0.100"; //Замените на ip адрес вашего компьютера // IP адрес сервера. static byte websiteip = { 192,168,0,100 }; //Замените на ip адрес вашего компьютера static uint32_t timer; // Действия после успешной отправки данных //Мак-адрес устройства static byte mac = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

  • Ethernet::buffer - буффер сетевой карты, в который она будет записывать полученные данные, поскольку в нашем случае данные получаемые данные не так важны, я выставил не большой размер буффера (Извиняюсь, в видео ниже такая же оговорка. В ходе экспериментов выяснилось что при буфере меньше 700 байт, сетевой модуль ведет себя не правильно)
  • website - доменое имя сервера, в нашем случае это ip адрес компьютера (его нам покажет сервер при запуске)
  • websiteip - ip адрес сервера (записывается массивом десятичных чисел)
  • timer - переменная счетчика таймера (для переодического пинга сервера)
  • mac - мак адрес нашего устройства (должен быть уникальным в сети)

Думаю что в принципе здесь все понятно, и можно переходить к другому блоку.

Void setup () { Serial.begin(9800); if (ether.begin(sizeof Ethernet::buffer, mac) == 0) Serial.println(F("Failed to access Ethernet controller")); else Serial.println(F("Successfully to access Ethernet controller")); if (!ether.dhcpSetup()) Serial.println(F("DHCP failed")); else Serial.println(F("Successfully DHCP")); memcpy(ether.hisip, websiteip, sizeof(websiteip)); ether.printIp(F("SRV: "), ether.hisip); }

Это функция setup, вызывается один раз при старте работы устройства.

Здесь мы:

  • Устанавливаем скорость работы с serial монитором
  • Проверяем подключен ли ethernet контроллер
  • Проверяем подключение к DHCP
  • Записываем в память имя и ip сервера (необходимо для библиотеки)
  • Выводим на экран ip сервера к которому будем подключаться

Далее идет функция loop, которая вызывается постоянно во время работы устройства. Но в ней я лишь прописал вызов функции send_package Отправку данных я специально выделил в отдельную функцию, чтобы вы могли вызвать ее из любого места программы.

// Функция отправки данных на сервер void send_package(){ ether.packetLoop(ether.packetReceive()); if (millis() > timer) { Serial.println(F("<

  • Первая строка принимает пакеты от сервера не останавливая работы программы
  • Далее мы совершаем отправляем данные на сервер каждые 5 секунд (без данного счетчика данные могут не отправится)
  • Ну и пожалуй то, что необходимо рассмотреть больше всего это формирование запроса c помощью BrowseUrl. Первым аргументом мы передаем константное значение, пути до обработчика запроса (считая от корневой директории сервера). Вторым аргументом мы передаем переменные и их значения. Прошу заметить что здесь значения заданы константами, но вы можете передавать значения из переменных, главное что бы они были представлены с помощью типа данных char array .Третьим аргументом мы передаем доменное имя сервера (которое мы задали заранее). Четвертым аргументом мы передаем функцию колбэк, которую мы рассмотрим ниже.
static void callback (byte status, word off, word len) { Serial.println(">>>"); Ethernet::buffer = 0; Serial.print((const char*) Ethernet::buffer + off); Serial.println("..."); }

Это функция коллбэк, которую вызывает библиотека для обработки полученных данных.

Следующие несколько уроков будут посвящены организации сети Ethernet. В этом уроке я изложу минимум информации, необходимой для практической работы с сетью. Немного расскажу об Ethernet модуле ENC28J60 и приведу схему подключения его к плате Ардуино.

Локальная сеть Ethernet.

Ethernet – самый распространенный в мире сетевой интерфейс. Когда говорят об объединении компьютеров в локальную сеть, как правило, имеют в виду именно его. Ethernet контроллер стал штатным устройством для каждого компьютера.

Первый вариант стандарта Ethernet появился еще в 70х годах. Первоначально средой передачи был коаксиальный кабель, топология сети – шина, скорость передачи 10 мегабит/сек. Со временем появилось множество разновидностей Ethernet со скоростью передачи до 100 гигабит/сек, изменилась архитектура сети, стала другой среда передачи. Об этом существует много подробной информации: протоколы, форматы данных, алгоритмы обмена и т.п. Я буду рассказывать о сети Ethernet чисто с практической стороны.

Нам интересны стандарты Ethernet (10 Мбит/сек) и Fast Ethernet (100 Мбит/сек). Они совместимы и отличаются только скоростью передачи данных. Для подключения к сети плат Ардуино мы будем использовать контроллеры первого стандарта (10 Мбит/сек), а штатные сетевые контроллеры компьютеров поддерживают второй стандарт (100 Мбит/сек). Но это не помешает подключить компьютер к той же сети. Стандарты обозначаются соответственно 10BASE-T и 100BASE-TX.

Топология сети.

Два Ethernet устройства могут быть соединены между собой непосредственно. Никакие дополнительные блоки не требуются, достаточно одного кабеля.

Если используется более двух устройств, то соединение происходит по радиальной топологии с помощью хабов (HUB).

Хаб или сетевой концентратор - это электронный прибор для соединения нескольких сетевых устройств в один сегмент сети. Он содержит несколько портов ввода/вывода.

По сути это повторитель. Все сигналы, которые подаются на один из его портов, повторяются на остальных. Несмотря на то, что физически топология сети выглядит как радиальная, логически с использованием хабов она превращается в “общую шину”. Любые пакеты данных в сети попадают на все сетевые устройства, в том числе и на устройства, которым они не предназначены. Благодаря этому возможны конфликты данных, увеличивается нагрузка на сеть. В настоящее время хабы практически вытеснены более совершенными устройствами - сетевыми коммутаторами.

Хабы можно соединять между собой, но только в древовидные структуры.

При этом недостатки, связанные с логической топологией ”общая шина” усугубляются за счет увеличения количества сетевых устройств.

Гораздо больше возможностей имеет сеть, созданная на базе коммутаторов (switch).

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

Коммутатор это прибор для соединения нескольких устройств сети в пределах одного или нескольких сегментов.

Подобно хабу коммутатор имеет несколько портов ввода/вывода. Но в отличие от хаба коммутатор передает пакеты данных не всем подключенным к нему устройствам, а только непосредственно получателю. Благодаря этому увеличивается производительность сети, повышается надежность.

  • Хаб - это “тупой” аппаратный повторитель сигналов.
  • Коммутатор – интеллектуальное устройство, которое анализирует заголовки пакетов и передает данные только на нужные порты.

Обычно сетевой коммутатор поддерживает различные скорости передачи данных одновременно.

К портам коммутаторов могут быть подключены другие коммутаторы или хабы. Это позволяет почти бесконечно расширять сеть.

Роутер или маршрутизатор – это сетевой шлюз, устройство для передачи пакетов между различными сетями. Как правило, используется для подключения к глобальной сети Интернет.

Большинство роутеров также выполняют функции сетевых коммутаторов. В этом случае можно обойтись без сетевого коммутатора.

Среда передачи данных Ethernet (кабель).

В качестве среды передачи нужные нам стандарты требуют применения кабеля категории 3 или категории 5. Используются только две неэкранированные витые пары (4 провода).

Одна витая пара предназначена для передачи данных, другая для приема.

  • Волновое сопротивление линий - 100 Ом.

Кабель обозначается UTP - Unshielded twisted pair (неэкранированная витая пара). Часто на нем написано ”ETHERNET LAN CABLE”.

Стандартный кабель содержит 4 витые пары.

Мы будем использовать только две из них.

Для подключения к портам Ethernet используются 8 контактные разъемы RJ-45.

Есть два варианта распиновки разъемов: T568A и T568B. Часто просто называются варианты A и B.

Распиновка T568A.

Распиновка T568B.

  • На сетевой карте компьютера и Ethernet модуле Ардуино применяется вариант A.
  • Порты ввода/вывода коммутатора или роутера используют вариант B.

Понятно, что выходные сигналы одного устройства должны подключаться к входам другого, и наоборот. Поэтому существует 2 варианта кабелей: прямой и перекрестный. Прямой используется для соединения между устройствами с разъемами типов A и B, а перекрестный – для соединения портов с одинаковой распиновкой.

Для нас это означает:

  • если мы будем подключать плату Ардуино к материнской плате компьютера или другой плате Ардуино, то необходимо использовать перекрестный кабель;
  • если плата Ардуино подключается к коммутатору или роутеру – кабель должен быть прямым.

Прямой кабель предполагает, что соединяются контакты с одинаковыми номерами. Соответствие сигналов вход – выходу обеспечивается распиновкой разъемов сетевых портов.

В перекрестном кабеле провода соединяются таким образом, чтобы у связанных кабелем портов входные сигналы были подключены к выходам, а выходные к входам.

На рисунках показаны общепринятые цвета жил кабеля. Лучше их придерживаться.

  • Максимальная длина сегмента кабеля – 100 м.

В сетевом интерфейсе Ethernet существует полная гальваническая развязка каждого устройства от среды передачи (кабеля). Развязка осуществляется за счет применения импульсных трансформаторов.

Это значительно повышает помехозащищенность сети и обеспечивает электрическую безопасность сетевых устройств.

Платы Ардуино будем подключать к сети Ethernet с помощью модуля ENC28J60. Физически он представляет собой плату размерами 51 x 18 мм.

Это самый дешевый сетевой Ethernet контроллер. По моей на момент написания статья его цена составляет всего 250 руб.

Моя цель не сделать обзор возможностей и технических характеристик модуля. Возможно, я напишу отдельную статью о нем в рубрике ”Электронные компоненты”. А сейчас я приведу информацию необходимую для работы модуля совместно с платами Ардуино.

Модуль выполнен на базе микросхемы ENC28J60 фирмы Microchip. Практически это микросхема ENC28J60 в стандартном включении.

Техническую информацию фирмы-производителя можно посмотреть по этой ссылке .

Вот принципиальная схема модуля.

Основные характеристики модуля ENC28J60.

  • Совместимость с Ethernet сетями 10/100/1000 Base-T. Скорость передачи данных 10 мбит/сек, реализация TCP/IP стека.
  • Интерфейс связи с микроконтроллером – SPI, частота до 20 мГц.
  • Напряжение питания 3,1 – 3,6 В. Типовое 3,3 В.
  • Интерфейсные входы модуля позволяют непосредственное подключение к сигналам с 5 вольтовыми уровнями. Максимально-допустимое напряжение на входах интерфейса SPI - 6 В. В половине статей о подключении ENC28J60 к Ардуино написано, что необходимо подключать входные сигналы через согласующие резисторные делители. Это не так. Сомневающееся могут посмотреть документацию на .
  • Ток потребления от источника питания 3,3 В:
    • в момент передачи может достигать 180 мА;
    • в активном состоянии, но без передачи 120 мА;
    • в режиме ожидания (сигнал CS в неактивном уровне) не более 2 мА.
  • В модуле обеспечивается гальваническая развязка от линии связи.

Это характеристики, которые я решил выделить. Главное:

  • для питания модуля необходимо использовать источник напряжением 3,3 В и выходным током до 180 мА;
  • выводы интерфейса модуля допускается подключать к 5 вольтовым сигналам.

Интерфейс связи с микроконтроллером.

К микроконтроллеру модуль подключается через 10 контактный разъем типа PLHD, расположенный на печатной плате устройства.

Назначение контактов (распиновка) модуля ENC28J60.

Контакт Обозначение Направление Назначение
1 CLK выход Выход тактового сигнала
2 INT выход Сигнал прерывания
3 WOL - Зарезервирован
4 SO выход Сигнал SO интерфейса SPI
5 SI вход Сигнал SI интерфейса SPI
6 SCK вход Сигнал SCK интерфейса SPI
7 CS вход Сигнал CS интерфейса SPI (выбор контроллера)
8 RST вход Сброс
9 VCC - Питание модуля 3,3 В 180 мА
10 GND - Общий вывод

Подключение модуля ENC28J60 к плате Ардуино.

Всем привет.
Как многие слышат, что нужно создать WEB сервер – сразу становится не по себе, всячески пытаются отойти от этой темы применив другие варианты управления и мониторинга своих устройств. Но ведь интернет и сеть есть уже почти в каждом устройстве. Так чем Ваш творение хуже?
Так что Если Вам интересно – идем дальше.

Не так страшен Волк, как его рисуют. Среди Нас много специалистов, но и много новичков. Учится никогда не поздно, я сам многому учусь, и многое познаю в практике. Надеюсь, эта статья поможет начинающим или освежит память начавшим.
За основу взят популярный модуль с контроллером ENC28j60.

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

Для начала идет инициализация библиотек.
Далее я указал пины для подключения модуля с контроллером 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 адресу?.. Если есть то отправить строчки нашей странички, а браузер уже придаст ей привычный нам вид. Давайте посмотрим пример:

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

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

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

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

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

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

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

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

Вот так можно делать динамические станицы, которые будут меняться, и отображать различную информацию в зависимости от параметров переменных или запросов от ссылок и кнопок.

Более детально и наглядно можно увидеть все, выше упомянутое, в Видео уроках для начинающих:



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: