Итак, первый модуль. Подумав, решил начать с метеостанции. Типа как начинающий радиолюбитель должен собрать транзисторный приемник, начинающий строитель умного дома должен собрать метеостанцию. Ну как, метеостанцию… температуру, влажность и давление будет измерять. Опять же решил начать с метеостанции, потому что в интернете навалом подобных проектов. Хотя полностью совпадающего с тем, что я хочу получить не нашел. Поэтому придется копаться в чужих кодах, разбираться, как все работает и писать собственный код. Вопрос с кодом, наверное, лучше отложить немного, а пока обсудить алгоритм и аппаратную часть. А потом уже, исходя из этого, писать код.
Все представленное ниже требует доработки, критики, советов и обсуждения.
ТЗ
Погодный модуль. Где-то прочитал, что называть прибор, который не показывает направление и силу ветра и количество осадков метеостанцией – это моветон. Так что пусть это будет просто скромный погодный модуль.
1. Модуль подключается к электросети дома 220 вольт и имеет собственный блок питания на 5 вольт.
2. Модуль расположен на улице, поэтому предусмотреть защиту от осадков и ветра.
3. Модуль измеряет температуру, влажность (DHT22) и атмосферное давление (BMP180).
4. Модуль делает измерения в 06:00, в 14:00 и в 20:00
5. Данные сохраняются в модуле до момента их передачи на компьютер.
6. При запуске программы (мажордомо)на компьютере, программа получает данные, накопленные на модуле. Также программа получает данные в 00:00 каждого дня, в том случае, если компьютер включен. Этот пункт к тематике форума уже напрямую не относится, но для общего описания считаю нужным это озвучить.
7. После передачи данных на компьютер, данные в модуле обнуляются и начинают записываться с начала до следующей передачи.
8. В то время когда модуль не выполняет действия по измерению, пересылке данных или выводу html-странички, он находится в спящем режиме. Этот пункт пока не продуман. Скорее всего, надо будет основываться на прерываниях по таймеру. Тут надо будет изучать примеры и понять вообще возможно ли это. Или не заморачиваться и оставить модуль работать постоянно.
9. К модулю имеется возможность подключения напрямую с компьютера или мобильного устройства. При этом модуль должен выводить страничку с данными последних измерений. Данный пункт необязателен, но думаю это не очень сложно будет реализовать, поэтому включаю в список хотелок.
Алгоритм
У меня не получится нарисовать алгоритм в классическом стиле в виде блок-схемы, потому что есть еще некоторые вопросы. Поэтому это просто расширенное ТЗ с комментариями и вопросами по ходу.
В определенное время (06:00, в 14:00 и в 20:00) модуль должен делать измерения. Откуда модуль знает, сколько сейчас времени? Знаю о том, что в esp8266 имеется встроенный rtc-блок, но он заточен для работы с интернетом. Не хочется, чтобы при отключении интернета модуль оказывался бесполезен. Я думаю о подключении RTC-модуля ds3231. Того, который с батарейкой. И через него же в дальнейшем организовать уход и выход из спящего режима.
Полученные данные модуль накапливает у себя. Данные в виде строк (1474273873,15,74,760
что будет означать (время юникстайм, температура, влажность, давление). Варианты хранения: EEPROM и SD карта. И еще вариант, который предложил
@Юрий Ботов. SPIFFS. Я грешным делом, сначала решил, что это просто умным словом обозвали EEPROM, а потом решил все-таки поискать в интернете про это, и не пожалел. Как я понял это такой продвинутый EEPROM, который может хранить не просто последовательность байт, а уже некое структурированное хранилище вроде той же СД-карты. В принципе, SPIFFS мне должен подойти идеально. Еще хотел уточнить, есть ли какие-то недостатки и ограничения, например ограниченное количество циклов перезаписи как у обычного EEPROM? Хотя может это и не так актуально. В файл дописываем строки как в начале абзаца. Каждая строка 25 байт. Если снимать показания даже четыре раза в сутки, то 3 мегабайт мне хватит лет на 50, чтобы заполнить полностью.
Формат самого файла данных пока не продумывал. Это может быть JSON или обычный CSV. Я начну пока с простого текстового CSV. А потом, когда дело дойдет до синхронизации с базой данных, буду доводить до ума.
Должна быть возможность отдельного подключения с компьютера, планшета, телефона. В браузере при подключении к модулю должна выводиться минимальная информация о текущих данных. Или даже сделать еще проще. Если использовать SPIFFS как хранилище файла с данными, то при подключении к модулю, можно этот самый файл и выводить в браузер. Как в примере FSWebServer. Либо чуть посложнее, но, наверное, более правильно использовать advancedwebserver, который создает страницу «на лету». Здесь пока сложно сказать, вживую очень хочется посмотреть, но модулей пока нет.
Энергосбережение. У ЕСП есть несколько режимов сна. Точнее я знаю про три. И информации по ним немного и часто она противоречивая. Начиная от того, что в разных прошивках NodeMCU режимы сна реализованы по разному, и заканчивая тем, что реально от них нет никакого толка. Есть ли смысл использовать режимы сна для энергосбережения? И как в моем случае это лучше сделать? То есть мне надо выходить из режима сна 1) в момент снятия показаний. Это проще всего будет сделать по прерыванию из ds3231 2) по запросу от компьютера, для доступу к файлу с данными и 3) при подключении с телефона/планшета. Последние два пункта пока не знаю как реализовать.
Прикрепляю картинку с подключением.