Arduino:Примеры/Web HelloWorld

Материал из Онлайн справочника
Версия от 12:39, 8 июля 2023; EducationBot (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Показ в браузере надписи «Hello, World!»[1]

Этот пример демонстрирует, как при помощи библиотеки Webduino отобразить в окне браузера надпись «Hello, World!»

Код

/* Показ в браузере надписи «Hello, World!» (Webduino)  */

#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"

/* ПОСТАВЬТЕ ЗДЕСЬ СОБСТВЕННОЕ ЗНАЧЕНИЕ. MAC-адрес должен отличаться 
 * от других девайсов в сети. Если MAC-адрес Ethernet-модуля совпадет 
 * с другим MAC-адресом, это повлечет проблемы с получением пакетов.
 */
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


/* ВЫСТАВЬТЕ ТУТ ЗНАЧЕНИЕ, СООТВЕТСТВУЮЩЕЕ СЕТИ ВАШЕГО ХОСТА. 
 * Большинство сетей находятся в диапазонах 192.168.0.XXX 
 * или 192.168.1.XXX. Выберите адрес, который не используется 
 * и не присваивается автоматически DHCP-сервисом, к которому 
 * подключен ваш роутер. 
*/
static uint8_t ip[] = { 192, 168, 1, 210 };

/* Это создает экземпляр веб-сервера. Как PREFIX указываем "",
 * благодаря чему все страницы будут в корне сервера. */
#define PREFIX ""
WebServer webserver(PREFIX, 80);

/* Команды – это функции, вызываемые веб-сервером. Они могут считывать 
// любые данные, опубликованные клиентом, и передавать их обратно от 
// сервера к браузеру. 
*/
void helloCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  /* отправляем стандартное сообщение, что запрос был успешным. */
  server.httpSuccess();

  /* Если получили GET или POST, то показываем данные.
     Если получили HEAD request, останавливаемся после 
     показа заголовков */ 
  if (type != WebServer::HEAD)
  {
    /* Записываем HTML-текст в PROGMEM (память только для считывания).
     * Это нужно для того, чтобы не загружать лишними строками 
     * оперативную (RAM) память. */
    P(helloMsg) = "<h1>Hello, World!</h1>";

    /* Специальная функция для того, чтобы выводить текст из PROGMEM  
    */
    server.printP(helloMsg);
  }
}

void setup()
{
  /* Инициализируем Ethernet-модуль */
  Ethernet.begin(mac, ip);

  /* Указываем команду, которая будет запускаться, когда пользователь 
   * получит доступ к корневой странице сервера. */
  webserver.setDefaultCommand(&helloCmd);

  /* Запускаем ту же команду, если пользователь пытается 
   * загрузить /index.html – эта страница, как правило, считается 
   * на сайте самой главной. */
  webserver.addCommand("index.html", &helloCmd);

  /* Запускаем веб-сервер. */
  webserver.begin();
}

void loop()
{
  char buff[64];
  int len = 64;

  /* Вечно обрабатываем входящие соединения (по одному за раз) */
  webserver.processConnection(buff, &len);
}

См.также

Внешние ссылки