Чтение онлайн

на главную

Жанры

Программируем Arduino. Основы работы со скетчами
Шрифт:

void sendBody

{

client.println(F("<html><body>"));

sendAnalogReadings;

client.println(F("<h1>Output Pins</h1>"));

client.println(F("<form method='GET'>"));

setValuesFromParams;

setPinStates;

sendHTMLforPins;

client.println(F("<input type='submit' value='Update'/>"));

client.println(F("</form>"));

client.println(F("</body></html>"));

}

Она выводит простой макет HTML-страницы,

опираясь на множество вспомогательных функций, которые были созданы, чтобы разбить код на более управляемые фрагменты. Первая из них — sendAnalogReadings:

void sendAnalogReadings

{

client.println(F("<h1>Analog Inputs</h1>"));

client.println(F("<table border=’1’>"));

for (int i = 0; i < 5; i++)

{

int reading = analogRead(i);

client.print(F("<tr><td>A")); client.print(i);

client.print(F("</td><td>")); client.print((float) reading / 205.0);

client.println(F(" V</td></tr>"));

}

client.println("</table>");

}

Она выполняет обход всех аналоговых входов, читает их значения и выводит HTML-таблицу с прочитанными значениями в вольтах.

Возможно, вы обратили внимание на то, что sendBody вызывает также функции setValuesFromParams и setPinStates. Первая записывает в массив pinStates состояния HIGH или LOW цифровых выходов, извлекая их из параметров запроса с помощью функции valueOfParam:

int valueOfParam(char param)

{

for (int i = 0; i < strlen(line1); i++)

{

if (line1[i] == param && line1[i+1] == '=')

{

return (line1[i+2] — '0');

}

}

return 0;

}

Функция valueOfParam ожидает получения параметра запроса в виде единственной цифры. Как выглядят эти параметры, можно увидеть, если запустить пример, открыть страницу в браузере и щелкнуть на кнопке Update (Обновить). Адрес URL в адресной строке браузера изменится, и в нем появятся параметры, как показано далее:

192.168.1.10/?0=1&1=0&2=0&3=0&4=0

Список параметров начинается после символа ?. Параметры имеют вид X=Y и отделяются друг от друга символом &. Слева от знака = находится имя параметра (в данном случае цифры от 0 до 4), а справа — значения (в данном примере 1 означает «включено», а 0 — «выключено»). Для простоты параметры в этом примере могут иметь только односимвольные значения. Функция setPinStates устанавливает состояние цифровых выходов в соответствии со значениями элементов массива pinStates.

А теперь вернемся к функции sendBody. Вслед за таблицей со значениями аналоговых входов нужно послать разметку HTML с коллекцией раскрывающихся списков, соответствующих цифровым выходам. В каждом списке нужно выбрать пункт On (Включено) или Off (Выключено) в зависимости от текущего состояния цифрового выхода. Для этого нужно добавить текст «selected» в значение, соответствующее состоянию данного выхода в массиве pinStates.

Код разметки HTML для цифровых выходов заключается в форму, чтобы посетитель мог изменить значения в форме и, щелкнув на кнопке Update (Обновить), сгенерировать новый запрос к этой странице с соответствующими параметрами для установки цифровых выходов. А теперь посмотрим, как выглядит разметка HTML-страницы:

<html><body>

<hq>Analog Inputs</h1>

<table border='1'>

<tr><td>A0</td><td>0.58 V</td></tr>

<tr><td>A1</td><td>0.63 V</td></tr>

<tr><td>A2</td><td>0.60 V</td></tr>

<tr><td>A3</td><td>0.65 V</td></tr>

<tr><td>A4</td><td>0.60 V</td></tr>

</table>

<h1>Output Pins</h1>

<form method='GET'>

Pin 3<select name='0'>

<option value='0'>Off</option>

<option value='1' selected>On</option>

</select>

Pin 4<select name='1'>

<option value='0' selected >Off</option>

<option value='1'>On</option>

</select>

Pin 5<select name='2'>

<option value='0' selected >Off</option>

<option value='1'>On</option>

</select>

Pin 6<select name='3'>

<option value='0' selected >Off</option>

<option value='1'>On</option>

</select>

Pin 7<select name='4'>

<option value='0' selected >Off</option>

<option value='1'>On</option>

</select>

<input type='submit'> value='Update'/>

</form>

</body></html>

Увидеть этот код можно, воспользовавшись функцией View Source (Исходный код страницы) в браузере.

Использование веб-службы JSON

Для иллюстрации возможности отправки веб-запросов из платы Arduino внешним веб-сайтам я воспользуюсь веб-службой, возвращающей данные о погоде в определенном географическом пункте. Плата будет выводить краткое описание погоды в монитор последовательного порта (рис. 12.6). Описываемый скетч посылает запрос один раз в момент запуска, но его нетрудно изменить, чтобы он запрашивал погоду каждый час и выводил результаты на двухстрочный жидкокристаллический дисплей.

Поделиться:
Популярные книги

Дядя самых честных правил 7

Горбов Александр Михайлович
7. Дядя самых честных правил
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Дядя самых честных правил 7

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Proxy bellum

Ланцов Михаил Алексеевич
5. Фрунзе
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Proxy bellum

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2

Средневековая история. Тетралогия

Гончарова Галина Дмитриевна
Средневековая история
Фантастика:
фэнтези
попаданцы
9.16
рейтинг книги
Средневековая история. Тетралогия

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Дайте поспать! Том IV

Матисов Павел
4. Вечный Сон
Фантастика:
городское фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать! Том IV

Запределье

Михайлов Дем Алексеевич
6. Мир Вальдиры
Фантастика:
фэнтези
рпг
9.06
рейтинг книги
Запределье

Совок 4

Агарев Вадим
4. Совок
Фантастика:
попаданцы
альтернативная история
6.29
рейтинг книги
Совок 4

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Жандарм 3

Семин Никита
3. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 3

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3