Прототип Web-сервера на Arduino + Ethernet shield
для "Умного Дома"
В статье разобрано создание Web сервера на ардуине с платой Ethernet shield.
Сервер отображает состояние одного цифрового входа, температуры с датчика DS18B20 и позволяет управлять состоянием одного цифрового выхода...
Предистория: Когда проблема с замерзанием гаражного замка частично была решена, встал вопрос дистанционного управления обогревателем с расстояния более чем 15 метров. Первым решением стало использование сетей сотовых операторов: старенький Siemens + ATmega88 + опыт "неопубликованной статьи" - получилось неплохое решение, как-нибудь, распишу его подробнее. Но захотелось чего-то более современного, например, у гаража своя страница в интернете, на которой видно состояние освещения, температуры, ворот и т.д. С этой же страницы можно включить обогрев, свет и пр.
Сервер отображает состояние одного цифрового входа, температуры с датчика DS18B20 и позволяет управлять состоянием одного цифрового выхода...
Предистория: Когда проблема с замерзанием гаражного замка частично была решена, встал вопрос дистанционного управления обогревателем с расстояния более чем 15 метров. Первым решением стало использование сетей сотовых операторов: старенький Siemens + ATmega88 + опыт "неопубликованной статьи" - получилось неплохое решение, как-нибудь, распишу его подробнее. Но захотелось чего-то более современного, например, у гаража своя страница в интернете, на которой видно состояние освещения, температуры, ворот и т.д. С этой же страницы можно включить обогрев, свет и пр.
Итак: нам нужно создать НЕЧТО, которое бы имело выход в интернет, могло контролировать состояние различных датчиков, а так же могло управлять (включать/выключать) исполнительными устройствами...
Контроллер. В качестве устройства управления исполнительными механизмами и устройства контроля состояния датчиков удобно и логично использовать какой-нибудь микроконтроллер, например, Arduino UNO.
Датчики. Для измерения температуры будем использовать DS18B20 совместно с библиотекой OneWire. Прочие датчики цифровые (замкнуто/разомкнуто).
Web-сервер. Существует специальная плата расширения для Arduino с Ethernet контроллером. Для такой связки существует несколько библиотек, позволяющих, в том числе, создать Web-серверок.
Выход в интернет. В гараже - пока одно решение - 3G модем. Модемы такие широко распространены и сравнительно недороги - проблема одна: все они подключаются по USB. Тут, видимо, без роутера не обойтись... Возникает парадокс: как вспомогательное устройство, мы используем многократно более мощное средство, чем наш Arduinо... Более логичным было бы использовать ресурсы роутера напрямую, подключив к нему периферию и подняв на нем web-сервер... но тут уже проблемы лени и необходимости несравненно более глубокого освоения новой техники (на мой взгляд, это уже не любительский уровень).
Контроллер. В качестве устройства управления исполнительными механизмами и устройства контроля состояния датчиков удобно и логично использовать какой-нибудь микроконтроллер, например, Arduino UNO.
Датчики. Для измерения температуры будем использовать DS18B20 совместно с библиотекой OneWire. Прочие датчики цифровые (замкнуто/разомкнуто).
Web-сервер. Существует специальная плата расширения для Arduino с Ethernet контроллером. Для такой связки существует несколько библиотек, позволяющих, в том числе, создать Web-серверок.
Выход в интернет. В гараже - пока одно решение - 3G модем. Модемы такие широко распространены и сравнительно недороги - проблема одна: все они подключаются по USB. Тут, видимо, без роутера не обойтись... Возникает парадокс: как вспомогательное устройство, мы используем многократно более мощное средство, чем наш Arduinо... Более логичным было бы использовать ресурсы роутера напрямую, подключив к нему периферию и подняв на нем web-сервер... но тут уже проблемы лени и необходимости несравненно более глубокого освоения новой техники (на мой взгляд, это уже не любительский уровень).
Измеряем температуру, подключаем нагрузку...
Датчик температуры DS18B20 имеет цифровой интерфейс 1-Wire. Для Arduino существует библиотека для работы с 1-Wire. После подключения библиотеки нам становятся доступны примеры программ (sketch). В них легко разобраться с принципами работы шины и датчиков. За основу возьмем опрос температурных датчиков из примера DS18x20_Temperature. Убрав из него лишнее легко можно собрать процедуру опроса датчика.
Сам датчик подключается к шинам питания +5V и GND платы Arduino UNO. Шину данных организуем через pin 8 платы. Так как выходы устройств на шине 1-Wire выполнены с открытым коллектором, подтягиваем нашу шину к +5V резистором 4,7 КОм. Датчик видно на фото похожим на транзистор...
Нагрузкой будем управлять с цифрового выхода установкой на нем логического нуля (выключено) или единицы (включено). К выходу можно подключить светодиод оптопары, а дальше.... делай с сигналом что хочешь... (тут у нас прототип и до реальной коммутации мощной нагрузки - дело вести не будем).
В качестве светодиода оптопары на фото к pin 9 платы Arduino подключен обычный белый светодиод с токоограничивающим резистором 200 Ом.
Состояние цифрового датчика (контактный датчик - замкнуто/разомкнуто) контролируем на pin 7 платы Arduino (на фото - свободный контакт).
Сам датчик подключается к шинам питания +5V и GND платы Arduino UNO. Шину данных организуем через pin 8 платы. Так как выходы устройств на шине 1-Wire выполнены с открытым коллектором, подтягиваем нашу шину к +5V резистором 4,7 КОм. Датчик видно на фото похожим на транзистор...
Нагрузкой будем управлять с цифрового выхода установкой на нем логического нуля (выключено) или единицы (включено). К выходу можно подключить светодиод оптопары, а дальше.... делай с сигналом что хочешь... (тут у нас прототип и до реальной коммутации мощной нагрузки - дело вести не будем).
В качестве светодиода оптопары на фото к pin 9 платы Arduino подключен обычный белый светодиод с токоограничивающим резистором 200 Ом.
Состояние цифрового датчика (контактный датчик - замкнуто/разомкнуто) контролируем на pin 7 платы Arduino (на фото - свободный контакт).
Создаем Web-сервер
С аппаратной точки зрения нам нужны две платы: Arduino UNO и Ethernet Shield. Связку этих плат хорошо видно на фото. Сразу "берем на ум", что сетевая плата для управления использует pin 11,12,13 - последовательная шина; pin 10 - ноль при обращении к Ethernet контроллеру и pin 4 - ноль при работе с microSD картой (на плате, видимо, много места свободного оставалось, вот картридер туда и сунули...); так что эти пины нами не должны использоваться.
Библиотека Ethernet встроена, отдельно скачивать и устанавливать ее не надо. С библиотекой идет пример Web-сервера: WebServer. Загрузил, проверил - работает (не забудьте только прописать IP адрес Вашей подсети). Добавил в пример процедуру опроса и вывода термодатчика - тоже работает. Но данный пример демонстрирует только отображение состояния датчиков, а нам бы хотелось еще и управлять нагрузкой...
Нашел пример sketch для создания более серьезного Web-сервера. Тут несколько страниц, отработка запроса из браузера. Правда в исходнике есть ошибки, исправленный sketch тут. Все работает, но быстро сообразить как переделать сие под мои нужды не смог (хотя этот вариант "дожать" можно).
На будущее: нашел ссылку с интересным описанием Web-сервера с множеством html страниц, хранящихся на SD карте. Как-нибудь, будет время и интерес, разберемся...
В итоге, под носом, нашел библиотеку WebDuino, где есть все что нам нужно. Скачиваем, устанавливаем, смотрим - наш пример Web_Demo. Заливаем - работает. Остается только убрать лишнее: опрос аналоговых линий, опрос и управление "лишними" цифровыми линиями; добавить процедуру и библиотеку работы с температурным датчиком и ... получаем то что нам требовалось. В sketch я не убирал "лишние" строки - они просто закомментированы. Комментариев по ходу текста много - понять смысл программы можно.
Библиотека Ethernet встроена, отдельно скачивать и устанавливать ее не надо. С библиотекой идет пример Web-сервера: WebServer. Загрузил, проверил - работает (не забудьте только прописать IP адрес Вашей подсети). Добавил в пример процедуру опроса и вывода термодатчика - тоже работает. Но данный пример демонстрирует только отображение состояния датчиков, а нам бы хотелось еще и управлять нагрузкой...
Нашел пример sketch для создания более серьезного Web-сервера. Тут несколько страниц, отработка запроса из браузера. Правда в исходнике есть ошибки, исправленный sketch тут. Все работает, но быстро сообразить как переделать сие под мои нужды не смог (хотя этот вариант "дожать" можно).
На будущее: нашел ссылку с интересным описанием Web-сервера с множеством html страниц, хранящихся на SD карте. Как-нибудь, будет время и интерес, разберемся...
В итоге, под носом, нашел библиотеку WebDuino, где есть все что нам нужно. Скачиваем, устанавливаем, смотрим - наш пример Web_Demo. Заливаем - работает. Остается только убрать лишнее: опрос аналоговых линий, опрос и управление "лишними" цифровыми линиями; добавить процедуру и библиотеку работы с температурным датчиком и ... получаем то что нам требовалось. В sketch я не убирал "лишние" строки - они просто закомментированы. Комментариев по ходу текста много - понять смысл программы можно.
Немного про web-интерфейс получившейся странички (по сути - это перевод комментариев скетча).
Если к web-серверу обращаться с словом form после IP-адреса (в примере: 10.0.5.11/form), то картинка будет как слева. Здесь можно управлять цифровыми линиями: выставить нужное состояние и нажать кнопку "Submit".
Если к web-серверу обращаться просто по IP адресу, картинка будет той же, но без кнопки "Submit" и флажков управления цифровыми входами - это обычный режим наблюдения. Фото в центре.
Есть третий режим обращения 10.0.5.11/json - в этом случае будет текстовая строка с отображением состояния - см рисунок справа.
размещено: 29 марта 2013 года
Если к web-серверу обращаться с словом form после IP-адреса (в примере: 10.0.5.11/form), то картинка будет как слева. Здесь можно управлять цифровыми линиями: выставить нужное состояние и нажать кнопку "Submit".
Если к web-серверу обращаться просто по IP адресу, картинка будет той же, но без кнопки "Submit" и флажков управления цифровыми входами - это обычный режим наблюдения. Фото в центре.
Есть третий режим обращения 10.0.5.11/json - в этом случае будет текстовая строка с отображением состояния - см рисунок справа.
размещено: 29 марта 2013 года