Как стать автором
Обновить

Комментарии 14

Как Вы понимаете, после Вашего предостережения, просто не мог не взглянуть на исходники.

Если позволите, несколько мелких замечаний навскидку:
0. Не все так плохо, я видел и хуже, но тем не менее, относительно wifi.cpp
1. Вложенные include — это ЗЛО
2. Глобальные переменные config, dnsServer — это ЗЛО
3. Если нет разницы, то все таки лучше --count
4. Для печати просто просится макрос
5. При дефолтном и внешнем назначениях разная печать — так и должно быть?
С вложенным include получилось не хорошо. Мое стремление писать отдельными модулями исчезло. я надеялась на #pragma once, но видимо оно не работает или работает не так как ожидала. На каждый .cpp я наивно создавала .h с нужными include. Наследие windows.
Все замечания очень ценны для меня, обязательно учту при внесении правок, особенно стыдно за вложенные include
«разная печать» — так не должно быть. мне нужно быть более внимательной. Все исправлю, как только побольше разберусь с контролем версий. Спасибо, что проверили мою работу.
Ни в коем случае не стыдитесь, это мэйнстрим, более того, во многих проектах, считающихся хорошими, типа CMSIS или исходников Linux, не просто вложенные заголовки, но зацикленное вложение, вот почему без прагмы once или защиты от повтора оно просто не собирается.
Так что Вы в большой компании, и лишь отдельные отдельные старики, еще помнящие, как надо, брюзжат в комментариях.
Раньше было принято иметь 2 заголовочных файла, один — для внешнего представления с интерфейсом и другой, имеющий все необходимое для реализации и там лежали в том числе и ссылки на другие заголовки, но сейчас так не делают, наверное, имена файлов стали дефицитом
Благодарю. Код стал лучше. Хоть шапки и одеты на лысую голову и смотрятся сиротливо. Но мне было интеренсно отказаться от #include в .h Благодаря Вам я поняла как работает #pragma once (это свершилось). Это очень хорошее продвижение. Мне требовалось несколько месяцев, что бы понять это в одиночку. Похоже, что вложенные инклюды большая проблема и это муравейник в который легко наступить по незнанию.

Если кому интересно, оставлю свой коммент, как это делается в системе Умного Дома быстро, без пайки и нудного программирования (почти :-)), но не дешево по железу:
Из железа понадобится: Raspberry Pi — тот который у вас уже наверняка есть и используется в качестве сервера Умного Дома, Z-wave контроллер, например Aeon Z-wave Stick, которым вы будете управлять всеми I/O. Fibaro RGBW контроллер, блок питания 220В/12В — я рекомендую миниатюрный, в подрозетник типа такого, сорри не знаю кто производитель, и любая китайская RGB лента из магазина.


USB Стик вставляете в RPi. Ленту приклеиваете на карниз, подключаете RGBW Контроллер и блок питания по инструкции. RGBW Контроллер и блок питания вместе со всеми проводами влазят в подрозетник.


По настройке:


  1. На Распберри ставите Openhabian, устанавливаете в настройках Mosquitto MQTT Broker и NodeRED
  2. В OpenHAB устанавливаете Z-wave Binding, включаете в сеть RGBW контроллер и делаете Inclusion, чтобы он обнаружился в OpenHAB. Получаете RGB каналы для управления, линкуете их с Items и наслаждаетесь ручным управлением LED лентой.
  3. Устанавливаете там же Astro Binding, тыкаете в карте свой дом, получаете Sunset канал для получения всех этих разных гражданских, астрономических и навигационных сумерек для своих координат.
  4. Устанавливаете MQTT биндинг и настраиваете event bus, чтобы все, что происходит в OpenHAB появлялось в виде MQTT сообщений на брокере, и обратно, чтобы все, что отправлялось в MQTT с других устройств, отображалось в OpenHAB.
  5. Теперь самое интересное — в NodeRed рисуете flow в котором по событиям от Sunset будет задаваться цвет вашей подсветки. Пример в моей статье. Можете радугу придумать. Можете по времени настроить. Режим ночника добавить. В общем все графически.

Вот в принципе и все.

Разработка, пайка, программирование. Это магия. Я не могу отказать себе в удовольствии отключив мозг от повседневных дел писать код или трассировать pcb руками. Написание кода не может быть «нудно». Вы знаете как работает Z-wave? А можете поменять логику его работы? У меня нет цели сделать быстро или как нибудь, что бы работало. Это хобби которое доставляет мне удовольствие.
Зачем вышивать когда можно купить уже вышитое на ЧПУ? Ответ прост. Получение удовольствия от создания чего либо.

Не, ну хобби — это святое. Моя инструкция чисто для тех, для кого важен не процесс, а результат и надо получить надежное рабочее решение. Вот и все.


Я сам и разработчик и программист встраиваемой электроники, если что.

А… эээ… у меня один вопрос: почему так сложно, с интернетом и т.п.? Разве нельзя присобачить к контроллеру таймер RTC с батарейкой, чтоб хранил текущее время, задать один раз в конфигурации прошивки текущую таймзону и широту, и радоваться жизни безо всяких mqtt-брокеров? Это ж просто лампочка с таймером.
Не гибко. А внести гибкость с использованием стандартных решений не трудно и не дорого.

В основном причина в желании будущей интеграции. Поставив таймер с батарейкой вы получите изолированное решение, которое будет решать только одну простую задачу — вашу лампочку с таймером.


Но привязав это дело к системе Умного Дома или Интернет ваше устройство сможет намного больше — например вы также сможете управлять подсветкой с любого выключателя, пульта и телефона в доме, подсветка может имитировать присутствие людей, когда вас нет дома, привлекать внимание, если вдруг в дом залезут воры, интегрироваться с различными сценами освещения и т.д.


Но для этого надо сразу продумать как реализовать это соединение с интернетом и сделать один раз.
Ну а когда интернет уже есть — то почему б не воспользоваться готовеньким?

Первая версия была сильно урезанной и даже без rtc. Планета Земля со своей наклонной осью сильно портит жизнь на идеальной сфере. Закат и рассвет происходит не в одно и то же время, даже на одной широте. Содержать массив 365(дней)*6(сумерки) слишком накладно и бестолково для esp01. Не нашла в rtc возможность задать широту и астрономические сумерки. По работе, частая смена часовых поясов с изменение широты, разрушает меня. Это освещение задает нужный ритм, я легче переношу переезд. Кроме этого передача гео с моего телефона позволяет дому понять, что я близко и включить split-systems-air, а режим работы задает влажность и температура в лампе. И я всегда могу контролировать атмосферное давление. Это позволяет мне делать погодный прогноз, для России это особенно актуально. В node-red есть нода astrodata dayvalues которая работает не очень хорошо. Невозможно получить который лунный день и lon,lat работают не так как я ожидаю. Поэтому node-red просит php скрипт с post передачей гео в json. Но это тема уже для отдельной статьи konbanwa4.0 которую буду писать если Вы готовы читать. Мне нужно проделать большую работу для правильного подношения информации и исправлять кучу ошибок. Извините, что заставляю вас ждать.

Ну да, астроданные не так уж просты, как кажется на первый взгляд. И тут опять же проявляется преимущества интеграции — вы можете выбрать провайдера данных по вкусу. Я пробовал ноду Sunrise/Sunset в Nodered — оно в принципе работало, но были проблемы с чем-то — помоему с переводом часов. Не понравилось — выкинули, из библиотеки попробовали следующий вариант — их там кучи.


Я, в принципе для себя вообще взял Astro из Openhab. Там очень легкая настройка и куча параметров. Кстати рекомендую взглянуть https://www.openhab.org/addons/bindings/astro/ там и по Луне полно параметров, не знаю, правда, кому они нужны.


Тоже самое по погоде — в принципе мне датчик температуры воздуха на улице не нужен — просто берешь погоду в своем городе с любого сервиса и используешь, где нужно. Точность вполне нормальная.

Долго пытался понять, почему лента питается от 5В, и как предлагается управлять её яркостью и цветностью без ШИМ. Только посмотрев схему, дошло, что речь идет о ws2812, с цифровым управлением. Стоило бы как-то обозначить это в тексте, наверное…
В тексте есть упоминание об этом. В части истории. С тех пор так и остались, ws2812. ШИМ, особенно на малой яркости, работает не очень хорошо. Это связано с тем, что зрение у человека нелинейно. Понятно, что это можно компенсировать программно, попутно расширив ШИМ (насколько я помню) до 10 bit на 8 битном микроконтроллере. Но даже при всех этих модификациях, свет «дрожит» К rgb лентам нужен драйвер и несколько линий питания. У ws2812 нет этих проблем. И на новый год можно устроить «пасхальное яйцо» в прошивке. С ws2812 только одна проблема, это разная цветовая температура на разных партиях ленты. И пожалуй еще одна, которой можно пренебречь. Если первый светодиод в цепи сгорит, то оставшиеся работать не будут.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории