Прототип Web-клиента на Arduino для работы
с PHP-файлами на Web-сервере
В статье разобрано создание Web клиента на ардуине с платой Ethernet shield.
Клиент отсылает GET запросы с данными на Web-cервер с поддержкой PHP. Приведены примеры php-файлов для отработки запроса и отображения состояния базы поступивших данных. Клиент отсылает состояние одного цифрового входа, температуры с датчика DS18B20 и позволяет управлять состоянием одного цифрового выхода...
Предистория: История, собственно, та жа, что в предыдущей статье про ардуиновский Web-сервер. С сервером из статьи вроде бы все хорошо, но есть минус: для обращения к нему требуется статический IP-адрес. Здесь рассмотрено альтернативное решение: создаем страничку в интернете, разрабатываем на ардуине клиента, который периодически посылает запросы (с данными) на эту страничку; та, в ответ, посылает клиенту данные, введенные человеком на той же страничке. Внешне, все остается таким же, как в статье: мы заходим на сайт, просматриваем состояние контролируемого объекта (т.е. данные принятые из запросов ардуин-клиента), вводим какую-либо информацию, при очередном запросе, клиент эту информацию получает. Таким образом мы контролируем объект и управляем им.
Клиент отсылает GET запросы с данными на Web-cервер с поддержкой PHP. Приведены примеры php-файлов для отработки запроса и отображения состояния базы поступивших данных. Клиент отсылает состояние одного цифрового входа, температуры с датчика DS18B20 и позволяет управлять состоянием одного цифрового выхода...
Предистория: История, собственно, та жа, что в предыдущей статье про ардуиновский Web-сервер. С сервером из статьи вроде бы все хорошо, но есть минус: для обращения к нему требуется статический IP-адрес. Здесь рассмотрено альтернативное решение: создаем страничку в интернете, разрабатываем на ардуине клиента, который периодически посылает запросы (с данными) на эту страничку; та, в ответ, посылает клиенту данные, введенные человеком на той же страничке. Внешне, все остается таким же, как в статье: мы заходим на сайт, просматриваем состояние контролируемого объекта (т.е. данные принятые из запросов ардуин-клиента), вводим какую-либо информацию, при очередном запросе, клиент эту информацию получает. Таким образом мы контролируем объект и управляем им.
Итак: нам снова нужно создать НЕЧТО, которое бы имело выход в интернет, могло контролировать состояние различных датчиков, а так же могло управлять (включать/выключать) исполнительными устройствами...
Контроллер. В качестве устройства управления исполнительными механизмами и устройства контроля состояния датчиков удобно и логично использовать какой-нибудь микроконтроллер, например, Arduino UNO.
Датчики. Для измерения температуры будем использовать DS18B20 совместно с библиотекой OneWire. Прочие датчики цифровые (замкнуто/разомкнуто).
Web-клиент. Существует специальная плата расширения для Arduino с Ethernet контроллером. Для такой связки существует несколько библиотек, позволяющих, в том числе, создать Web-клиент.
Web-сервер. Для отработки запросов клиента нам нужен Web-сервер с поддержкой какого-нибудь языка. Опыты проводились на бесплатном хостинге Hostinger - на нем бесплатно дают работать и с PHP, и с MySQL.
Выход в интернет. Любой, для автономности - пока одно решение - 3G модем.
Контроллер. В качестве устройства управления исполнительными механизмами и устройства контроля состояния датчиков удобно и логично использовать какой-нибудь микроконтроллер, например, Arduino UNO.
Датчики. Для измерения температуры будем использовать DS18B20 совместно с библиотекой OneWire. Прочие датчики цифровые (замкнуто/разомкнуто).
Web-клиент. Существует специальная плата расширения для Arduino с Ethernet контроллером. Для такой связки существует несколько библиотек, позволяющих, в том числе, создать Web-клиент.
Web-сервер. Для отработки запросов клиента нам нужен Web-сервер с поддержкой какого-нибудь языка. Опыты проводились на бесплатном хостинге Hostinger - на нем бесплатно дают работать и с PHP, и с MySQL.
Выход в интернет. Любой, для автономности - пока одно решение - 3G модем.
Измеряем температуру, подключаем нагрузку...
Датчик температуры 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-клиента, нам нужен: WebClientRepeating. Загрузил, проверил - работает (не забудьте только прописать IP адрес Вашей подсети и DNS сервера). В процедуру добавлено следующее:
Полученный скетч по ходу текста имеет много комментариев - понять смысл программы можно.
Библиотека Ethernet встроена, отдельно скачивать и устанавливать ее не надо. С библиотекой идет пара примеров Web-клиента, нам нужен: WebClientRepeating. Загрузил, проверил - работает (не забудьте только прописать IP адрес Вашей подсети и DNS сервера). В процедуру добавлено следующее:
- процедура опроса термодатчика и вывод значения температуры в качестве переменной в GET запросе;
- код анализа текста ответа на запрос - простой поиск совпадения с искомыми фразами "out1=0" и "out1=1": по наличию их в ответе выход pin 9 либо выключается, либо включается;
- подстановка переменных GET запроса с состоянием входа (pin 7) и выхода (pin 9).
Полученный скетч по ходу текста имеет много комментариев - понять смысл программы можно.
Создаем Web-сайт
Итак: наше устройство формирует GET запросы к указанному в тексте скетча сайту, странице avr.php. В запросе передаются три переменные с значениями состояния выводов 7 и 9 arduino и температуры с датчика.
Файл avr.php представляет собой небольшую программку. По тексту масса комментариев, вкратце, при работе скрипта происходит следующее:
Файл data.txt - собственно база данных в текстовом формате. Каждая запись - это строка с пятью значениями: дата/время записи, признак "кем сделана запись" (dev/hum), pin 7, pin 9, температура. При повторении обязательно надо дать права на запись в файл всем клиентам (0666 в свойствах файла).
Файл avr.php представляет собой небольшую программку. По тексту масса комментариев, вкратце, при работе скрипта происходит следующее:
- открывается файл базы данных, в котором сохраняются все поступающие с клиента данные;
- в файле находим последнюю запись, которая сделана с сайта (т.е. не по запросу с ардуино);
- данные о состоянии вывода pin 9 (колонка 3) отсылаются в ответе на запрос в переменной out1;
- если в запросе были приняты данные, они сверяются с последней записью из базы данных и, при отличии от них, записываются в базу.
- отображение последних десяти записей из базы данных;
- запись в базу данных строки с состоянием pin 9 (колонка 3), которое бы мы хотели видеть на плате Arduino;
- форма для ввода данных о состоянии выхода.
- out=0/1 - функция записи в базу;
- psw=123 - включение режима ввода данных;
- без параметров, скрипт просто отображает данные из базы.
Файл data.txt - собственно база данных в текстовом формате. Каждая запись - это строка с пятью значениями: дата/время записи, признак "кем сделана запись" (dev/hum), pin 7, pin 9, температура. При повторении обязательно надо дать права на запись в файл всем клиентам (0666 в свойствах файла).
Немного про web-интерфейс получившейся странички (файла form.php) - см. скриншоты выше.
Если обращаться к странице form.php web-сервера без параметров, то картинка будет как слева. Здесь можно просмотреть последние записи из базы данных.
Если обращаться к странице form.php web-сервера с параметром psw=123 (123 - это "как бы" пароль), то картинка будет как в центре. Здесь можно просмотреть последние записи из базы данных и управлять цифровой линией: выставить нужное состояние и нажать кнопку "Send".
Если обращаться к странице form.php web-сервера с параметром out=0|1, то картинка будет как справа. Такой запрос происходит по нажатию кнопки "Send" в предыдущем экране. Здесь можно просмотреть последние записи из базы данных и увидеть сверху результат записи.
размещено: 5 апреля 2013 года
Если обращаться к странице form.php web-сервера без параметров, то картинка будет как слева. Здесь можно просмотреть последние записи из базы данных.
Если обращаться к странице form.php web-сервера с параметром psw=123 (123 - это "как бы" пароль), то картинка будет как в центре. Здесь можно просмотреть последние записи из базы данных и управлять цифровой линией: выставить нужное состояние и нажать кнопку "Send".
Если обращаться к странице form.php web-сервера с параметром out=0|1, то картинка будет как справа. Такой запрос происходит по нажатию кнопки "Send" в предыдущем экране. Здесь можно просмотреть последние записи из базы данных и увидеть сверху результат записи.
размещено: 5 апреля 2013 года
версия файла form.php от 15.04.2013
По мере роста базы данных (файла data.txt), возникают задержки в обработке данных. Вполне естественным желанием может стать реализация возможности удаления "лишней" (старой) информации из файла базы данных.
В версии form.php от 15.04.2013 добавлена возможность сокращения файла базы данных путем удаления ранних записей.
Если обращаться к странице form.php web-сервера с параметром psw=123 (123 - это "как бы" пароль), то картинка будет как показано слева. Здесь, кроме просмотра последних записей из базы данных и управления цифровой линией, добавлена кнопка "Cut". По нажатию этой кнопки программа перезапускается с параметром cut=Cut. При таком запуске файл data.txt сокращается до 400 байт - остаются последние записи из файла. Таким образом можно сократить размер файла. В остальном работа программы form.php совпадает с описанной ранее.
добавлено 26 апреля 2013 года
В версии form.php от 15.04.2013 добавлена возможность сокращения файла базы данных путем удаления ранних записей.
Если обращаться к странице form.php web-сервера с параметром psw=123 (123 - это "как бы" пароль), то картинка будет как показано слева. Здесь, кроме просмотра последних записей из базы данных и управления цифровой линией, добавлена кнопка "Cut". По нажатию этой кнопки программа перезапускается с параметром cut=Cut. При таком запуске файл data.txt сокращается до 400 байт - остаются последние записи из файла. Таким образом можно сократить размер файла. В остальном работа программы form.php совпадает с описанной ранее.
добавлено 26 апреля 2013 года