Arduino:Примеры/WebServer
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Веб-сервер на базе Arduino[1]
В этом примере мы воспользуемся платой Arduino, модулем Ethernet Shield и библиотекой Ethernet для создания простого веб-сервера, который сможет отвечать на HTTP-запросы. Для того, чтобы воспользоваться этим веб-сервером, вам надо будет открыть браузер и вписать IP-адрес Ethernet Shield, после чего Arduino сгенерирует достаточно HTML-кода, чтобы отобразить в браузере входные данные ото всех шести аналоговых контактов.
Необходимое оборудование
- Сетевой модуль Arduino Ethernet Shield;
- Плата Arduino, совместимая с Ethernet Shield;
Цепь
Ethernet Shield позволяет подключить Arduino к Ethernet-контроллеру WizNet (через SPI-шину), и это подключение осуществляется через 10-ый, 11-ый, 12-ый и 13-ый контакты. У последних моделей Ethernet Shield имеется встроенный слот для SD-карты, а для управления SS-контактом этой SD-карты используется 4-ый цифровой контакт.
Ethernet Shield должен быть подключен к сети при помощи Ethernet-кабеля. Кроме того, в скетче нужно будет поменять сетевые настройки, чтобы они соответствовали настройкам вашей сети.
Ethernet Shield устанавливается поверх платы Arduino.
Схема
Внимание! SD-карта для этого скетча не нужна. Однако в случае, если SD-карта все же будет вставлена, но использоваться не будет, то скетч может зависнуть, потому что 4-ый контакт используется как SS-контакт SD-карты, а будучи неиспользованным он по умолчанию воспринимается как входной контакт. Вот два возможных решения:
- Выньте SD-карту;
- Добавьте в секции setup() вот эти строчки кода:
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
Код
/*
Веб-сервер на базе Arduino
Простой веб-сервер, который показывает значения от входных аналоговых контактов
при помощи Arduino Ethernet Shield на базе WizNet.
Цепь:
* Ethernet Shield подключен к 10-ому, 11-ому, 12-ому и 13-ому контактам
* Аналоговые устройства, подключенные к шести входным аналоговым контактам (с 0-ого по 5-ый)
Создан 18 декабря 2009 Дэвидом А. Меллисом (David A. Mellis),
модифицирован 9 апреля 2012 Томом Иго (Tom Igoe).
*/
#include <SPI.h>
#include <Ethernet.h>
// Ниже вводим MAC-адрес и IP-адрес контроллера.
// IP-адрес будет зависеть от вашей локальной сети:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
// Инициализируем библиотеку Ethernet Server
// с необходимыми вам IP-адресом и портом
// (порт 80 используется для HTTP по умолчанию):
EthernetServer server(80);
void setup() {
// Открываем последовательную передачу данных и ждем открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта (нужно только для Leonardo)
}
// Запускаем Ethernet-соединение и работу сервера:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at "); // "Сервер по адресу "
Serial.println(Ethernet.localIP());
}
void loop() {
// Слушаем подключающихся клиентов:
EthernetClient client = server.available();
if (client) {
Serial.println("new client"); // "Новый клиент"
// HTTP-запрос заканчивается пустой линией:
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// Если добрались до конца строки (т.е. получили символ новой строки),
// и эта строка – пустая, это значит, что это конец HTTP-запроса.
// То есть, можно приступать к отправке ответа:
if (c == '\n' && currentLineIsBlank) {
// Отсылаем стандартный заголовок для HTTP-ответа:
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // после выполнения ответа соединение будет разорвано
client.println("Refresh: 5"); // автоматически обновляем страницу каждые 5 секунд
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// Выводим значения ото всех входных аналоговых контактов:
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// Начинаем новую строку:
currentLineIsBlank = true;
}
else if (c != '\r') {
// В текущей строке есть символ:
currentLineIsBlank = false;
}
}
}
// Даем браузеру время, чтобы получить данные:
delay(1);
// Закрываем соединение:
client.stop();
Serial.println("client disconnected"); // "Клиент отключился"
}
}
См.также
- Arduino Ethernet Shield
- Getting started with the ethernet shield
- Ethernet library
- ChatServer
- ChatClient
- WebClient
- WebServer
- PachubeClient?
- PachubeClientString?
- BarometricPressureWebServer
- UDPSendReceiveString
- UdpNtpClient
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino