Web-клиент на Ethernet Shield ENC28J60
В статье разобрано создание Web клиента на ардуине с платой Ethernet shield на базе ENC28J60.
Клиент отсылает GET запросы с данными на Web-cервер с поддержкой PHP. Приведены примеры php-файлов для отработки запроса и отображения состояния базы поступивших данных. Клиент отсылает состояние температуры и влажности с датчика DHT11 и позволяет управлять состоянием одного цифрового выхода...
Предисторию можно посмотреть в аналогичной статье про Ethernet shield на W5100. История, собственно, та жа, разница в плате Ethernet контроллера. Захотелось использовать приехавшую с Алиэкспресс платку. Хороша она лишь тем, что имеет меньшие размеры, что позволяет встроить ее более органично в какую-либо законченную конструкцию... Но плата имеет огромный минус - огромное количество всяческих библиотек и ни одной официальной. Беглый анализ форумов по данной теме показал довольно скептическое "народное" отношение к предмету: упоминается нестабильность (дословно - "глючность") чипа, довольно скудное описание примеров работы в качестве клиента...
Итак, здесь рассмотрим такое решение: создаем страничку в интернете, разрабатываем на ардуине клиента, который периодически посылает запросы (с данными) на эту страничку; та, в ответ, посылает клиенту данные, введенные человеком на той же страничке. Внешне, все выглядит так: мы заходим на сайт, просматриваем состояние контролируемого объекта (т.е. данные принятые из запросов ардуин-клиента), вводим какую-либо информацию, при очередном запросе, клиент эту информацию получает. Таким образом мы контролируем объект и управляем им.
Клиент отсылает GET запросы с данными на Web-cервер с поддержкой PHP. Приведены примеры php-файлов для отработки запроса и отображения состояния базы поступивших данных. Клиент отсылает состояние температуры и влажности с датчика DHT11 и позволяет управлять состоянием одного цифрового выхода...
Предисторию можно посмотреть в аналогичной статье про Ethernet shield на W5100. История, собственно, та жа, разница в плате Ethernet контроллера. Захотелось использовать приехавшую с Алиэкспресс платку. Хороша она лишь тем, что имеет меньшие размеры, что позволяет встроить ее более органично в какую-либо законченную конструкцию... Но плата имеет огромный минус - огромное количество всяческих библиотек и ни одной официальной. Беглый анализ форумов по данной теме показал довольно скептическое "народное" отношение к предмету: упоминается нестабильность (дословно - "глючность") чипа, довольно скудное описание примеров работы в качестве клиента...
Итак, здесь рассмотрим такое решение: создаем страничку в интернете, разрабатываем на ардуине клиента, который периодически посылает запросы (с данными) на эту страничку; та, в ответ, посылает клиенту данные, введенные человеком на той же страничке. Внешне, все выглядит так: мы заходим на сайт, просматриваем состояние контролируемого объекта (т.е. данные принятые из запросов ардуин-клиента), вводим какую-либо информацию, при очередном запросе, клиент эту информацию получает. Таким образом мы контролируем объект и управляем им.
Итак: нам нужно создать НЕЧТО, которое бы имело выход в интернет, могло контролировать состояние различных датчиков, а так же могло управлять (включать/выключать) исполнительными устройствами...
Контроллер. В качестве устройства управления исполнительными механизмами и устройства контроля состояния датчиков удобно и логично использовать какой-нибудь микроконтроллер, например, Arduino UNO.
Датчики. Для измерения температуры и (в данном случае, для разнообразия) влажности будем использовать DHT11 совместно с одноименной библиотекой.
Web-клиент. Как сказано выше используем "нестандартный" модуль на ENC28J60. Для такой связки существует масса библиотек, позволяющих, в том числе, создать Web-клиент. Сложность как раз в том чтоб выбрать работающую и удобную...
Web-сервер. Для отработки запросов клиента нам нужен Web-сервер с поддержкой какого-нибудь языка. Опыты проводились на бесплатном хостинге Hostinger - на нем бесплатно дают работать и с PHP, и с MySQL (мы SQL не будем использовать, а сохраним базу в обычном текстовом файле).
Выход в интернет. Любой... (у меня проводное подключение через ASUS-тековский роутер)
Контроллер. В качестве устройства управления исполнительными механизмами и устройства контроля состояния датчиков удобно и логично использовать какой-нибудь микроконтроллер, например, Arduino UNO.
Датчики. Для измерения температуры и (в данном случае, для разнообразия) влажности будем использовать DHT11 совместно с одноименной библиотекой.
Web-клиент. Как сказано выше используем "нестандартный" модуль на ENC28J60. Для такой связки существует масса библиотек, позволяющих, в том числе, создать Web-клиент. Сложность как раз в том чтоб выбрать работающую и удобную...
Web-сервер. Для отработки запросов клиента нам нужен Web-сервер с поддержкой какого-нибудь языка. Опыты проводились на бесплатном хостинге Hostinger - на нем бесплатно дают работать и с PHP, и с MySQL (мы SQL не будем использовать, а сохраним базу в обычном текстовом файле).
Выход в интернет. Любой... (у меня проводное подключение через ASUS-тековский роутер)
Измеряем температуру и влажность, подключаем нагрузку...
Датчик DHT11 имеет цифровой интерфейс 1-Wire. Подробно его подключение я разобрал в соответствующей статье. Надо лишь не забыть про подтягивающий резистор... Подключаем датчик так же, как в статье - к pin А0 Ардуины... На фото он такой голубенький в пластиковом корпусе...
Нагрузкой будем управлять с цифрового выхода установкой на нем логического нуля (выключено) или единицы (включено). К выходу можно подключить светодиод оптопары, а дальше.... делай с сигналом что хочешь... (тут у нас игрушка и до реальной коммутации мощной нагрузки - дело вести не будем).
В качестве светодиода оптопары на фото к pin 6 платы Arduino подключен обычный светодиод с токоограничивающим резистором.
Нагрузкой будем управлять с цифрового выхода установкой на нем логического нуля (выключено) или единицы (включено). К выходу можно подключить светодиод оптопары, а дальше.... делай с сигналом что хочешь... (тут у нас игрушка и до реальной коммутации мощной нагрузки - дело вести не будем).
В качестве светодиода оптопары на фото к pin 6 платы Arduino подключен обычный светодиод с токоограничивающим резистором.
Создаем Web-клиент
С аппаратной точки зрения нам нужны две платы: Arduino UNO и Ethernet card на ENC28J60. Связку этих плат хорошо видно на фото. Сразу "берем на ум", что сетевая плата для управления использует pin 11,12,13 - последовательная шина; pin 10 - ноль при обращении к Ethernet контроллеру (!!! обратите внимание: в разных библиотеках Chip Select по умолчанию подключается к разным пинам Ардуины, часто встречается pin 8). Для питания ENC28J60 нужно 3,3 вольта - берем с Arduino UNO. Говорят, что от 5 вольт не сгорает, но... Согласования по уровню для управляющих сигналов делать не нужно, так что питаем Ардуино от 5В, а ENC - от 3,3В. Подключение контактов платы к контроллеру показано на фото.
Для работы с платой использовал эту библиотеку. Ее огромный плюс - она совместима по свойствам и методам со стандартной (которая, как я упомянул выше предназначена для платы на W5100). С библиотекой идет пара примеров Web-клиента, я попробовал их - работают, а потом взял один-в-один пример для W5100 и заменил в нем только строки:
вместо #include <Ethernet.h> //стандартная билиотека для W5100
включена #include <UIPEthernet.h>
и все заработало!!!
Рабочий вариант с периодичностью 30 секунд посылает запрос к серверу (мой тестовый на Hostinger - a33.w.pw). В процедуру добавлено следующее:
Полученный скетч по ходу текста имеет много комментариев - понять смысл программы можно.
Для работы с платой использовал эту библиотеку. Ее огромный плюс - она совместима по свойствам и методам со стандартной (которая, как я упомянул выше предназначена для платы на W5100). С библиотекой идет пара примеров Web-клиента, я попробовал их - работают, а потом взял один-в-один пример для W5100 и заменил в нем только строки:
вместо #include <Ethernet.h> //стандартная билиотека для W5100
включена #include <UIPEthernet.h>
и все заработало!!!
Рабочий вариант с периодичностью 30 секунд посылает запрос к серверу (мой тестовый на Hostinger - a33.w.pw). В процедуру добавлено следующее:
- процедура опроса датчика и вывод значения температуры и влажности в качестве переменной в GET запросе;
- код анализа текста ответа на запрос - простой поиск совпадения с искомыми фразами "out1=0" и "out1=1": по наличию их в ответе выход pin 6 либо выключается, либо включается;
- подстановка переменных GET запроса с состоянием датчика DHT11.
Полученный скетч по ходу текста имеет много комментариев - понять смысл программы можно.
Создаем Web-сайт
(за основу "с легкими переделками" взяты разработки из вышеуказанной статьи)
Итак: наше устройство формирует GET запросы к указанному в тексте скетча сайту, странице avr_rf.php. В запросе передаются две переменные с значениями адреса (не используется, передается фиксировано "120") и температуры и влажности с датчика.
Файл avr_rf.php представляет собой небольшую программку. По тексту масса комментариев, вкратце, при работе скрипта происходит следующее:
Файл data_rf.txt - собственно база данных в текстовом формате. Каждая запись - это строка с пятью значениями: дата/время записи, признак "кем сделана запись" (dev/hum), адрес устройства (пока не используется), температура(С).влажность(%). При повторении обязательно надо дать права на запись в файл всем клиентам (0666 в свойствах файла).
Итак: наше устройство формирует GET запросы к указанному в тексте скетча сайту, странице avr_rf.php. В запросе передаются две переменные с значениями адреса (не используется, передается фиксировано "120") и температуры и влажности с датчика.
Файл avr_rf.php представляет собой небольшую программку. По тексту масса комментариев, вкратце, при работе скрипта происходит следующее:
- открывается файл базы данных, в котором сохраняются все поступающие с клиента данные;
- в файле находим последнюю запись, которая сделана с сайта (т.е. не по запросу с ардуино);
- данные о состоянии вывода pin 6 отсылаются в ответе на запрос в переменной out1;
- если в запросе были приняты данные, они сверяются с последней записью из базы данных и, при отличии от них, записываются в базу.
- отображение последних десяти записей из базы данных;
- запись в базу данных строки с состоянием pin 6, которое бы мы хотели видеть на плате Arduino;
- форма для ввода данных о состоянии выхода.
- out=0/1 - функция записи в базу;
- psw=123 - включение режима ввода данных;
- cut=Cut - при таком запуске файл data_rf.txt сокращается до 400 байт - остаются последние записи из файла;
- без параметров, скрипт просто отображает данные из базы.
Файл data_rf.txt - собственно база данных в текстовом формате. Каждая запись - это строка с пятью значениями: дата/время записи, признак "кем сделана запись" (dev/hum), адрес устройства (пока не используется), температура(С).влажность(%). При повторении обязательно надо дать права на запись в файл всем клиентам (0666 в свойствах файла).
Немного про web-интерфейс получившейся странички (файла form_rf.php) - см. скриншоты выше.
Если обращаться к странице form_rf.php web-сервера без параметров, то картинка будет как слева. Здесь можно просмотреть последние записи из базы данных.
Если обращаться к странице form_rf.php web-сервера с параметром psw=123 (123 - это "как бы" пароль), то картинка будет как в центре. Здесь можно просмотреть последние записи из базы данных и управлять цифровой линией: выставить нужное состояние и нажать кнопку "Send". Так же можно "урезать" файл data_rf.txt по кнопке "Cut".
Если обращаться к странице form_rf.php web-сервера с параметром out=0|1, то картинка будет как справа. Такой запрос происходит по нажатию кнопки "Send" в предыдущем экране. Здесь можно просмотреть последние записи из базы данных и увидеть сверху результат записи.
размещено: 8 ноября 2014 года
Если обращаться к странице form_rf.php web-сервера без параметров, то картинка будет как слева. Здесь можно просмотреть последние записи из базы данных.
Если обращаться к странице form_rf.php web-сервера с параметром psw=123 (123 - это "как бы" пароль), то картинка будет как в центре. Здесь можно просмотреть последние записи из базы данных и управлять цифровой линией: выставить нужное состояние и нажать кнопку "Send". Так же можно "урезать" файл data_rf.txt по кнопке "Cut".
Если обращаться к странице form_rf.php web-сервера с параметром out=0|1, то картинка будет как справа. Такой запрос происходит по нажатию кнопки "Send" в предыдущем экране. Здесь можно просмотреть последние записи из базы данных и увидеть сверху результат записи.
размещено: 8 ноября 2014 года