Arduino:Примеры/Web Demo
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Запрос значений на контактах через браузерный интерфейс[1]
Этот пример показывает, как при помощи библиотеки Webduino и браузерного интерфейса запрашивать значения, имеющиеся на цифровых и аналоговых контактах Arduino. Также есть возможность менять значения на цифровых контактах.
Код
/* Запрос значений на контактах через браузерный интерфейс (Webduino)
*/
/*
* Чтобы использовать это демо, введите в браузер один из
* нижеследующих URL’ов: «http://host/», «http://host/json»
* или «http://host/form». Замените «host» на IP-адрес,
* присвоенный вашей Arduino.
*
* Если вставить в браузере «http://host/», это отобразит на экране
* значения, считанные с цифровых контактов 0-9 и аналоговых
* контактов 0-5. Это выполняется командой defaultCmd.
*
* Если вставить в браузере «http://host/form», это тоже покажет на
* экране значения, считанные с цифровых контактов 0-9 и аналоговых
* контактов 0-5. Но это будет в виде формы (командой formCmd),
* а цифровые контакты будут показаны в виде переключателей,
* значения которых можно будет поменять. Когда вы нажмете на кнопку
* «Submit», это осуществит запрос POST, который запишет на цифровые
* контакты новые значения и снова покажет форму.
*/
#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"
// «бесплатный» потоковый оператор, описание которого есть тут:
// http://sundial.org/arduino/?page_id=119
template<class T>
inline Print &operator <<(Print &obj, T arg)
{ obj.print(arg); return obj; }
// ПОСТАВЬТЕ ЗДЕСЬ СОБСТВЕННОЕ ЗНАЧЕНИЕ:
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// ВЫСТАВЬТЕ ТУТ ЗНАЧЕНИЕ, СООТВЕТСТВУЮЩЕЕ СЕТИ ВАШЕГО ХОСТА:
static uint8_t ip[] = { 192, 168, 1, 210 };
#define PREFIX ""
WebServer webserver(PREFIX, 80);
// Команды – это функции, вызываемые веб-сервером. Они могут считывать
// любые данные, опубликованные клиентом, и передавать их серверу.
void jsonCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
if (type == WebServer::POST)
{
server.httpFail();
return;
}
//server.httpSuccess(false, "application/json");
server.httpSuccess("application/json");
if (type == WebServer::HEAD)
return;
int i;
server << "{ ";
for (i = 0; i <= 9; ++i)
{
// игнорируем контакты, которые используются для коммуникации с Ethernet-чипом:
int val = digitalRead(i);
server << "\"d" << i << "\": " << val << ", ";
}
for (i = 0; i <= 5; ++i)
{
int val = analogRead(i);
server << "\"a" << i << "\": " << val;
if (i != 5)
server << ", ";
}
server << " }";
}
void outputPins(WebServer &server, WebServer::ConnectionType type, bool addControls = false)
{
P(htmlHead) =
"<html>"
"<head>"
"<title>Arduino Web Server</title>"
"<style type=\"text/css\">"
"BODY { font-family: sans-serif }"
"H1 { font-size: 14pt; text-decoration: underline }"
"P { font-size: 10pt; }"
"</style>"
"</head>"
"<body>";
int i;
server.httpSuccess();
server.printP(htmlHead);
if (addControls)
server << "<form action='" PREFIX "/form' method='post'>";
server << "<h1>Digital Pins</h1><p>";
for (i = 0; i <= 9; ++i)
{
// игнорируем контакты, которые используются для коммуникации с Ethernet-чипом:
int val = digitalRead(i);
server << "Digital " << i << ": ";
if (addControls)
{
char pinName[4];
pinName[0] = 'd';
itoa(i, pinName + 1, 10);
server.radioButton(pinName, "1", "On", val);
server << " ";
server.radioButton(pinName, "0", "Off", !val);
}
else
server << (val ? "HIGH" : "LOW");
server << "<br/>";
}
server << "</p><h1>Analog Pins</h1><p>";
for (i = 0; i <= 5; ++i)
{
int val = analogRead(i);
server << "Analog " << i << ": " << val << "<br/>";
}
server << "</p>";
if (addControls)
server << "<input type='submit' value='Submit'/></form>";
server << "</body></html>";
}
void formCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
if (type == WebServer::POST)
{
bool repeat;
char name[16], value[16];
do
{
repeat = server.readPOSTparam(name, 16, value, 16);
if (name[0] == 'd')
{
int pin = strtoul(name + 1, NULL, 10);
int val = strtoul(value, NULL, 10);
digitalWrite(pin, val);
}
} while (repeat);
server.httpSeeOther(PREFIX "/form");
}
else
outputPins(server, type, true);
}
void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
outputPins(server, type, false);
}
void setup()
{
// задаем цифровые контакты 0-8 для ввода данных:
for (int i = 0; i <= 9; ++i)
pinMode(i, INPUT);
pinMode(9, OUTPUT);
Ethernet.begin(mac, ip);
webserver.begin();
webserver.setDefaultCommand(&defaultCmd);
webserver.addCommand("json", &jsonCmd);
webserver.addCommand("form", &formCmd);
}
void loop()
{
// вечно обрабатываем входящие соединения (по одному за раз):
webserver.processConnection();
// если вы хотите выполнить еще что-то, связанное с этим
// соединением, то это следует делать тут.
}
См.также
Внешние ссылки
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