Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Обсуждение Ещё один зародыш умного дома...

Тема в разделе "Умный дом", создана пользователем Balancer, 18 апр 2016.

  1. Balancer

    Balancer Новичок

    Сообщения:
    5
    Симпатии:
    1
    Я, где-то, с пол-года в очень-очень фоновом режиме (по часу в месяц :D) занимаюсь проработкой «умного дома». Ряд чисто прикладных мелких задач, которые сложно описать чем-то иным, кроме этого громкого умного слова :)

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

    Расписывать всё «от печки» оформляя что-то типа статьи — жалко времени (да и очень многие мысли ещё чётко не сформированы), поэтому, если коммьюнити не против, я просто буду время от времени флудить на тему хода работ и уже по необходимости делать экскурс к старым размышлениям. Ну и, конечно, на вопросы отвечать — на то он и форум.

    Начну с последней мелочи и зайду к ней со стороны :) Блин, не получается всё равно без экскурса в область идей :)

    База моего «умного дома» планируется разнообразной. По квартире (да и, в общем, за её пределами :)) будут раскиданы пассивные узлы — ноды самых разных типов. От привычных всем измерителей температуры или наличия газов до синтезаторов речи и дисплеев. Связывать их между собой будут активные узлы (тоже, в общем, ноды — я не думал о строгой терминологии). В роли сенсоров может быть зоопарк от ATTiny85+NRF24L01 до ESP8266. Активные узлы — от ESP8266 до *Pi и нормальных домашних (или внешних) серверов.

    Но это лирика завтрашнего дня.

    Пока же экспериментирую периодически с нодами-сенсорами. Разбираюсь с тонкостями конкретных изделий, вспоминаю, с какого конца держать паяльник (до этого не паял в заметных масштабах более 20 лет)...
     
  2. Balancer

    Balancer Новичок

    Сообщения:
    5
    Симпатии:
    1
    Последнее, чем занимался в этом направлении — модулем управления RGB-светодиодной гирляндой. Гирлянда в умном доме может нести ряд интересных вспомогательных функций. Типа, подвесить за окном и будить зимним утром сине-голубым светом, разрушающим мелатонин и создающим бодрое настроение. Может красным светом привлечь внимание к какой-то проблеме, о которой детальнее рассказано на дисплее коммуникатора в периоды, когда звук будет отключен (дети спят). А может и просто крутить красивые эффекты на праздниках, для чего изначально и рассчитана :)

    Гирлянда на WS2812, мозги — на ESP8266 в варианте ESP-01 (ничего, что я ссылки сразу на Ali даю? Это те лоты, что я сам заказывал).

    [​IMG]

    [​IMG]

    Мозги, в принципе, можно и попроще поставить, но гирлянда всё равно жрёт много и питать придётся от розетки. Так что можно не экономить, а, заодно, повысить эффективность разработки, используя NodeMCU (на ESP8266 сейчас я исключительно по неё пишу).

    Вообще, гирлянду я цеплял к ESP8266 давно, сразу после прихода гирлянды в январе, проблем никаких не было. Правда, эффекты под ESP8266 я пока реализовал только совсем простейшие и там надо бы концепцию совсем менять. Но вот что не нравится с ESP-01 — это необходимость вешать её на проводках. Ибо её 2x4 контакты нельзя воткнуть корректно в беспаечную макетную плату. Так что приходится или мучиться с проводками, или паять на полноценной макетке (в т.ч. в варианте переходника), или заказывать переходник на макетку. Но 370 рублей платить за такую мелочь жаба всё душила (с ценой просто оверкилл какой-то). Но не додушила. Колхозить кривой самопай хотелось меньше. Заказал, таки, пришла :D

    [​IMG]

    Сразу соорудил такую штуковину:

    [​IMG]

    Из приметных для моей практики мелочей:

    — Питание от отдельного макетного micro-USB через преобразователь 5В в 3.3В. Раньше я обычно просто макетный источник питания использовал, либо пользовался девелоперскими вариантами ESP8266, у которых сразу с USB питание.

    — Не поленился и вместо привычных перетыкаемых проводков воткнул кнопочки Reset и Prog (Flash).

    — Наличие питания от относительно мощного внешнего 5В позволило сразу воткнуть питание лентой в плату. А то жрёт лента много и питать её от стабилизаторов девелоперских плат недопустимо.

    Получился, в общем, вполне автономный девайс, который, в принципе, можно обновлять по воздуху. Но это пока не доведено — работает, но очень неудобно. Я хочу, вообще, сделать что-то типа онлайн-IDE, как ESPlorer, но для браузера и по воздуху, а не по кабелю.

    А потом можно будет уже и распаять на паяльной макетке полноценно.

    Не думаю, что с сырых кусков тестового кода будет какой-то прок, но для полноты описания добавлю:
    Код (Lua):
    1.  
    2. -- pin4 = gpio2 esp-01
    3.  
    4. local num_leds = 60
    5. local mxy = 255 -- max bright
    6.  
    7. local data = { }
    8.  
    9. for pos=0,num_leds
    10. do
    11.     table.insert(data, string.char(mxy,0,0))
    12. end
    13.  
    14. ws2812.writergb(4, table.concat(data))
    15. data = nil
    16.  
    17. pos_stop = 0
    18. iter = 1
    19. color = {
    20.     string.char(    0,     0,   mxy),
    21.     string.char(    0,   mxy,     0),
    22.     string.char(    0, mxy/2, mxy/2),
    23.     string.char(  mxy,     0,     0),
    24.     string.char(mxy/2,     0, mxy/2),
    25.     string.char(mxy/2, mxy/2,     0),
    26.     string.char(mxy/2, mxy/2,  mxy/2),
    27. }
    28.  
    29. time_sum = 0;
    30.  
    31. tmr.alarm(1, 30, 1, function()
    32.     local now = tmr.now()
    33.     local data = { }
    34.  
    35.     for i=0, pos_stop do
    36.         table.insert(data, color[iter])
    37.     end
    38.  
    39.     ws2812.writergb(4, table.concat(data))
    40.  
    41.     pos_stop = pos_stop + 1
    42.     if pos_stop >= num_leds then
    43.        tmr.wdclr()
    44.        print("next color; time=", time_sum)
    45.        time_sum = 0
    46.        now = tmr.now()
    47.         pos_stop = 0
    48.         iter = iter + 1
    49.         if(iter>#color) then
    50.            print("restart")
    51.             iter = 1
    52.             print(node.heap())
    53.         end
    54.     end
    55.  
    56.     data = nil
    57.     time_sum = time_sum + (tmr.now()-now)
    58. end)
    59.  
    Сигнальный провод светодиодной ленте вешается на GPIO2. Код заполняет в цикле ленту разными цветами. Сейчас в каждом внутреннем цикле заполняется нужными цветами массив и собирается в строку перед передачей ленте во внешнем цикле. Так получается намного быстрее, чем конкатенировать строку в каждом внутреннем цикле.

    Быстрое выключение ленты:
    Код (Lua):
    1.  
    2. local num_leds = 60
    3.  
    4. tmr.stop(1)
    5. ws2812.writergb(4, string.rep(string.char(0,0,0), num_leds) .. string.char(1,1,1))
    6.  
    Бывает полезно, чтобы сходу погасить ленту, когда она чем-то мешает. Плюс такой вызов у меня ставится в init.lua, так что ленту можно погасить сразу reset'ом. Запуск пока ручной, но можно будет попробовать повесить его запуск на кнопку на GPIO0, которая сейчас в роли PROG работает. Всё равно пустует :)

    Ну, в общем, пока хватит, думаю. Надеюсь продолжить позже....
     
    NutsXXXL нравится это.

Поделиться этой страницей