Идея
Для второго эксперимента решено
было сделать «полезную вещь», а именно мини «метеостанцию», которая будет
показывать данные о температуре и влажности в квартире, а также на улице. При
этом данные должны передаваться на сайт и хранится в БД, чтобы можно было потом
просмотреть их в любом виде.
Реализация
Для реализации я использовал
следующие компоненты:
·
Arduino
UNO rev.3
·
Ethernet
shield W5100
·
Датчик температуры DHT11
Дешёвый датчик DHT11 я решил разместить на балконе,
т.к. в комнате хотелось более точную температуру, а у этого датчика погрешность
в 2 градуса (у DHT22 погрешность
в 0.5 градуса). Но после изучения технического описания о датчиках, стало
понятно, что такой вариант не подойдёт, т.к. DHT11 измеряет температуру от 0°C до 50°C, против DHT22 от -40°C до 125°С.
Отправку данных решено делать
через W5100. Подключаем
библиотеку Ethernet и…
чудо не произошло, т.к. пример работы с сетью оказался старым и компилятор
выдаёт множество ошибок. Смотрим ошибки; переименовываем создание переменных
под другими классами; подключаем библиотеки, которых не хватает; компилируем
снова и … о чудо - проект скомпилирован.
Загружаем скетч на ардуину и запускаем монитор порта. Видим, что подключаемся через раз, а через раз выдаётся ошибка. Вывел код ошибки в монитор порта, но оказалось, что никакой ошибки нет (точнее код ошибки 0, а обработка показывает, что мы просто не можем подключится). Беглым взглядом пробегаю код примера, из которого я писал свой код, и находим ошибку:
!client.connected() - проверяем, что клиент не подключён и тогда ОТКЛЮЧАЕМ его.
Зачем отключать клиент, если он не подключён?! Убираем отрицание и всё работает отлично.
Подключение к серверу за роутером мне пока побороть не удалось, поэтому я отправляю данные на внутренний сетевой накопитель (mybooklive), на котором работает виртуальный сервер. NAS обрабатывает запрос, логирует его в текстовый файл (на всякий случай) и отправляет запрос на внешний (сторонний, за роутером) сервер, где данные записываются в БД и выводятся в читабельном виде:
Загружаем скетч на ардуину и запускаем монитор порта. Видим, что подключаемся через раз, а через раз выдаётся ошибка. Вывел код ошибки в монитор порта, но оказалось, что никакой ошибки нет (точнее код ошибки 0, а обработка показывает, что мы просто не можем подключится). Беглым взглядом пробегаю код примера, из которого я писал свой код, и находим ошибку:
if (!client.connected()){
isdata=0;
Serial.println();
Serial.println("disconnecting.");
client.stop(); // Завершаем соединение
}
!client.connected() - проверяем, что клиент не подключён и тогда ОТКЛЮЧАЕМ его.
Зачем отключать клиент, если он не подключён?! Убираем отрицание и всё работает отлично.
Подключение к серверу за роутером мне пока побороть не удалось, поэтому я отправляю данные на внутренний сетевой накопитель (mybooklive), на котором работает виртуальный сервер. NAS обрабатывает запрос, логирует его в текстовый файл (на всякий случай) и отправляет запрос на внешний (сторонний, за роутером) сервер, где данные записываются в БД и выводятся в читабельном виде:
Также в планах построение графиков изменения температуры и влажности по данным в БД.
Результат
В живую посмотреть актуальную информацию можно тут: smarthome.fwm.by/weather/ (иногда информация не обновляется, т.к. плата у меня одна и я эксперементирую с другими проектами)
Итого выглядит плата с датчиками вот так:
Итого выглядит плата с датчиками вот так:
Скетч (показать/скрыть)



Комментариев нет:
Отправить комментарий