ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Асноўныя тэзы ці пра што гэты артыкул

Тпаколькі інтарэсы людзей розныя, а часу ў людзей мала, то коратка пра змест артыкула.

СТацця гэтая ўяўляе сабой агляд праекта кантролера з мінімальнай цаной і магчымасцю візуальнага праграмавання пасродкам WEB-браўзэра.

Ппаколькі гэта артыкул-агляд, накіраваная на тое, каб паказаць "што можна выціснуць з капейкавага кантролера", глыбокіх ісцін і падрабязных алгарытмаў у ёй шукаць не варта.

Рагледжана матывацыя, ідэі і вынікі пабудовы кантролера на базе WiFI-чыпа ESP8266.

Папярэджанне

Я не хацеў пісаць гэты артыкул. Я ўвогуле не аматар пісаць артыкулы. Гэта трэба думаць і прычым - шмат. Думаць, як напісаць так, каб колькасць няправільна цябе зразумелых звялася да мінімуму. Думаць, як не скаціцца ў крайнасці. І шмат яшчэ пра што думаць.
Але сябры сказалі, што раз мае патугі на ніве IoT і іншай малой аўтаматызацыі цікавыя ім, то яны і іншым могуць быць цікавыя і шырокай публіцы. Ну, а дзе збіраецца публіка, якой цікава такое? Канешне, на хабры. І вось я тут. Стары чытач і новы пісьменнік.

За памылкі, недакладнасці, памылкі друку, несучасны стыль выкладу і іншае, што можа не спадабацца чытачу, я ніякай адказнасці не нясу. Чытайце на свой страх і рызыку.

Яшчэ я адразу папярэджваю, што не буду тлумачыць што такое MQTT, WiFi і UDP multicast і іншыя рэчы, якія прама не адносяцца да тэмы. Некаторыя спасылкі ёсць у канцы артыкула.

Нараджэнне ідэі ці крыху лірыкі

Жизнь - штука няпростая і яго вялікасць Выпадак гуляе ў ёй далёка не апошнюю ролю. Вось і я жадаю падзяліцца тым, як выпадковыя падзеі, памножаныя на заканамерную ляноту, выліліся ў даволі цікавую распрацоўку кантролера на базе ESP8266.

Нпачыналася ўсё даволі будзённа: хацелася пабудаваць сістэму кіравання вадаправодам і паліву градак-кустоў на дачы.

Но, паколькі паўнавартасна займацца трубамі-бакамі-кранамі мне можна толькі ў адпачынку, да якога было яшчэ больш за паўгода - усё абмяжоўвалася абмеркаваннем на працы з калегамі і з сябрамі-таварышамі ў нефармальнай абстаноўцы.

Тема «малой аўтаматызацыі» ці, як гэта прынята казаць у «гэтых вашых школоло-хакераў-хіпстараў» – тэма IoT – Інтэрнэту рэчаў – цікавіла мяне даўно. Задоўга да з'яўлення інтэрнета як такога ў шырокім карыстанні.

Еяшчэ ў дзяцінстве мне хацелася каб рэчы рабілі нешта "самі". І пажадана, каб я мог кіраваць імі неяк на адлегласці. Але ў той час (80е, пачатак 90х гадоў мінулага тысячагоддзя) з гэтым было цяжкавата. Інтэрнэту не было ў шырокім доступе нідзе ў свеце, як не было нідзе і сотавых тэлефонаў, планшэтаў і нават LCD-дысплеяў і USB-флэшак. Так што прыходзілася абмяжоўвацца "выключальнікамі святла па бавоўне" і найпростымі пультамі дыстанцыйнага кіравання па радыё. Але для тых часоў і таго веку і гэта было нядрэнна і цікава.

Нпра гэта справы мінулыя. Ноччы на ​​двары стагоддзе XXI. І ў кожнага ў кішэні смартфон, інтэрнэт ёсць практычна ўсюды, дзе трэба і не трэба, ды і база даступных электронных кампанентаў зараз такая, што яшчэ гадоў 15 таму і не снілася радавому жыхару планеты Зямля.

Птаму, вырашыўшы зляпіць кантролер для вадзяных спраў на дачы, я звярнуў погляды на чып ESP8266.
Па-першае, гэты чып танны. І калі не хопіць аднаго кантролера - можна паставіць два, тры ці пяць. Па-другое, ён мае WiFi на борце. Гэта значыць, можна глядзець што адбываецца праз інтэрнэт і нават кіраваць працэсам з любога смартфона. Зразумела, патрэбная кропка доступу з выхадам у інтэрнэт, але гэта не праблема. Усё роўна яна амаль усюды ёсць ці вось-вось будзе, у тым ліку - і ў мяне на дачы.

Папусціўшыся ў дзіўны свет праектаў для ESP8266, я са здзіўленнем выявіў, што нягледзячы на ​​ачмураныя магчымасці гэтага чыпа – праекты на ім, за рэдкім выключэннем, дзеляцца на два тыпу: гэта ці вельмі прымітыўныя праграмы тыпу «пстрыкаем рэлюхамі са смартфона і ўзіраемся на стан датчыка тэмпературы праз інтэрнэт»; ці добрыя і дыхтоўныя інтэрпрэтатары JavaScript ці Lua, але нажаль, якія зжыраюць амаль усю памяць і не дазваляюць зрабіць чагосьці сур'ёзнага.

Первая мая ідэя была простай як блін - напісаць простую праграму кіравання помпамі па стане датчыкаў і ўсё. Але, як цёрты калач у плане скакання па граблях укаранення розных сістэм, я разумеў, што прадугледзець загадзя ўсе выгібы алгарытму, якія захочацца ці будзе неабходна выпрастаць падчас будаўніцтва водаправода-паліва - я сапраўды не змагу.

Дапрацоўваць праграму на дачы, у цёмным хляве - не вельмі зручна. А давядзецца.
Якое ж выйсце? Вядома, першае, што прыйшло ў маю галаву - гэта зрабіць алгарытм наладжвальным. Адзін мой калега даў масу парадаў - што наладзіць і як. Гэтым ён засек маю першую ідэю на пні. Дзякуй яму. Калі б ён не разгарнуў перад маім поглядам колькасць параметраў, якую мне трэба будзе наладзіць - я б напэўна так і не адмовіўся ад гэтага варыянту: зрабіць старонку налад алгарытму.

Наб жахлівая карціна колькасці наладкавых параметраў, ды яшчэ і якія ўплываюць адзін на іншы — працверазіла мяне. Я ў чарговы раз зразумеў, што ўсяго не прадугледзець…

Сразу абмоўлюся: я гультаяваты. Вельмі гультаяваты! Мне адкрыта лянота кожны раз перапісваць праграму. Таму ўстала задача - як хутка і проста задаваць алгарытм, пажадана без праграмавання? Прычым гэты алгарытм будзе даволі складаны; будзе мець масу параметраў; будзе індывідуальны для майго выпадку і непрыдатны для іншых. А прылада так жадаецца зрабіць больш-менш універсальным…

Ппаколькі да адпачынку і ўсякіх трубапомпаў было яшчэ каля паўгода - я вырашыў не спяшаючыся абдумаць: як зрабіць зручна і прыгожа? Як праграмаваць не праграмуючы? Як абысціся без трыльёна зменлівых пры наладзе параметраў?

Кяк звычайна, усё ўжо было прыдумана да нас: я зразумеў, што хачу маляваць алгарытм у выглядзе квадрацікаў-дзеянняў і злучаць іх лініямі сувязі, якія паказваюць адкуль і куды ляцяць дадзеныя. Ну і ткнуўшы ў квадрацік, жадаю мець магчымасць наладзіць нейкія яго індывідуальныя параметры.

Идзея задаваць алгарытм, малюючы яго квадрацікамі не новая. Такія сістэмы былі яшчэ ў 80-я; Аднак ёсць супер-папулярная сістэма NodeRed, якая добра вядомая тым, хто ўжо далучыўся да міру малой аўтаматызацыі/IoT.

Наб вось няўдача: такія сістэмы разлічаны на "вялікія ПК". На худы канец - на Raspberry PI. Але ніяк не на ESP8266, у якога ўсяго некалькі дзясяткаў кілабайт АЗП і аперацыёнкі то няма!

Как быць? А выйсця ўсяго два: пісаць-маляваць праграму на "вялікім ПК" ці ноўце, а затым у нейкім выглядзе яе перадаваць на ESP8266 або паспрабаваць "упіхнуць няўпіхуемае" у сам кантролер ESP8266.

Птаму праграма-максімум у мяне была такой: для праграмавання свайго кантролера не павінна быць патрэбы ні ў чым, акрамя наўтбука з WEB-браўзэрам! Гэта значыць ноўтбук з WEB-браўзэрам і мой кантролер - гэтага павінна быць дастаткова для поўнай наладкі і напісання-малявання праграм кіравання.

И, як аказалася, рэалізаваць такое аказалася цалкам магчыма!
Не буду стамляць вас усімі падрабязнасцямі распрацоўкі праекту. Скажу толькі, што на падставе слоў, якія прыходзілі мне на розум і на мову ў працэсе распрацоўкі, можна было б скласці асобнуюСлоўнік нецэнзурнай лексікі працаўнікоў электроннай прамысловасці». Але ўсё ззаду. Дакладней не ўсё, а першы, самы складаны этап, калі не зразумела - будзе твая ідэя жыць ці гэта проста трызненне сівога каня ў месяцовую ноч.

Папрануся вынікам таго, што выйшла і атрымала назву «Кантролер ShIoTiny».

І што ж адбылося?

апаратная частка кантролера ShIoTiny стандартная і простая: тры ўваходу, разлічаныя на датчыкі тыпу «сухі кантакт» (кнопкі, герконы, яны ж – датчыкі ўзроўня вады ў баку), адзін уваход АЛП, адзін уваход для падлучэння датчыка тэмпературы і вільготнасці тыпу DHT22 ці аналагічнага. І, нарэшце, тры вынахаду ў выглядзе пераключалых рэле на 220Вольт, 1Ампер. На рэле напісана 10А, але я рэаліст і пускаць праз поплатак 10Ампер не буду. А для кіравання пускальнікамі помпаў і 1Ампер годзе. Сілкуецца ўсё гэта ад крыніцы харчавання напругай ад 5 да 9 вольт.

Чшчыра кажучы, датчык тэмпературы я дадаў проста так «шоб было», а вось на АЛП – былі надзеі вымяраць напружанне сілкавальнай сеткі. Ці мала што?

РЗразумела, усе ўваходы, акрамя ўваходу для падлучэння DHT22, маюць абарону з рэзістараў і дыёдаў: паліць ESP8266 у мяне не было ніякага жадання, а дыёды і рэзістары каштуюць усяго па некалькі капеек.

Фота гатовага выраба можна ўбачыць у пачатку артыкула. Такіх поплаткаў я замовіў некалькі — раптам што спалю ці прыйдзецца рэзаць дарожкі-ножкі?
Але, на шчасце - не прыйшлося.

Фад вырабы - гэта, вядома, прыгажосць і веліч. Але для выгоды ніжэй прыведзены чарцёж-схема падлучэння да платы імітатараў датчыкаў і выканаўчых прылад.

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Вмесца датчыкаў ўзроўню – кнопкі Input1..3, замест пускальнікаў – святлодыёды, падлучаныя да рэле Relay1..3. Ну і пераменны рэзістар на АЛП, каб імітаваць уваходную напругу.
Ккалі рэле выключана - гарыць чырвоны святлодыёд. А калі ўключана - зялёны. Дык вось і адладжваўся я на стале.

Кроме ўсяго гэтага - злева на плаце раз'ём харчавання, а справа - дзве сэрвісныя кнопкі: Reset і AP. Ну і DIP-перамыкач, які перакладае прыладу ў рэжым праграмавання. Раз'ём праграмавання ESP8266 праз USB-UART адаптар таксама маецца.

Некаторыя зацемкі па кнопках. Што такое Скід - і так зразумела. А вось кнопка AP патрэбна для таго, каб перавесці ShIoTiny у рэжым адкрытай кропкі доступу (канфігурацыйны рэжым або Config Mode). Навошта гэта патрэбна? Ну, напрыклад, вы напартачылі з настройкамі сеткі і хочаце іх змяніць. Ціснеце кнопку AP некалькі секунд (пакуль не загарыцца прыгожы сіненькі святлодыёд). Затым, бераце свой смартфон або наўтбук, уключаеце WiFi і бачыце тамака адчыненую кропку доступу з імем esp_8266_xxxx і падлучаецеся да яе. Пасля чаго заходзіце ў браўзэр смартфона ці наўтбука і набіраеце ў адрасным радку: 192.168.4.1. Калі ўсё ў парадку - то вы трапляеце на старонку кантролера ShIoTiny і можаце яго наладжваць па новай.

Как бачым, апаратна нічога складанага. Таму пра праграмнай часткі.

Ввось заскокі рэалізацыі я апішу, але потым. Калі-небудзь. А сёння я буду разглядаць праграмнае забеспячэнне толькі "звонку", гэта значыць з пункту гледжання карыстальніка - сябе ці іншага, які рызыкнуў выкарыстоўваць мой выраб (ёсць і такія каскадзёры).

С пункту гледжання карыстальніка, прылада ўяўляе сабой HTTP-сервер, які даступны па WiFi. Усе налады, праграмаванне і гэтак далей – робіцца з дапамогай WEB-браўзэра.

Итак, мы зайшлі на старонку кантролера. Што мы бачым? А бачым мы ўкладку "Control and status", якая паказвае бягучы стан выкарыстоўваных прылад: уваходаў, выхадаў, АЛП, DHT22. Акрамя гэтага паказаны параметры падлучэння да кропкі доступу (калі працуем у рэжыме WiFi-станцыі); параметры кропкі доступу (калі працуем у рэжыме WiFi-кропкі доступу) ці і таго і іншага. Ну і ў дадатак, паказаны параметры злучэння з MQTT-брокерам, калі выкарыстоўваецца пратакол MQTT.

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Кяк бачым, нічога асаблівага і цікавага. Нават націскаць няма на што! Хаця… Ёсць жа яшчэ дзве ўкладкі! Настройка сеткавых параметраў сетак і рэдактар ​​схем-праграм ElDraw.

Как вы здагадаліся, сетак - Гэта настройка сеткі, але не толькі. У ёй ёсць яшчэ пара цікавых параметраў. "Тыкнем" ж на ўкладку сетак і ўбачым там прыкладна тое, што паказана на малюнку.
Настройка імя кропкі доступу і пароля для кожнага з рэжымаў - WiFi станцыі і WiFi кропкі доступу. Быццам бы ўсё зразумела. Роўна як і прызначэнне кнопачкі "Scan WiFi" суцэль празрыста.
А вось выпадальны спіс "ShIoTiny mode" патрабуе тлумачэнні. Справа ў тым, што я ніяк не мог вызначыцца - у якім рэжыме мне зручней будзе працаваць. І таму прадугледзеў 5 рэжымаў працы прылады.

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Перечислим коратка гэтыя рэжымы працы.

Рэжым канфігурацыі - Рэжым канфігурацыі. Гэта рэжым адчыненай кропкі доступу з нязменным адрасам 192.168.4.1 і імем esp_8266_xxxx.

Рэжым станцыі - рэжым WiFi-станцыі, падлучанай да вашай кропкі доступу.

Рэжым AP - Рэжым закрытай кропкі доступу. Імя і пароль вы задаеце самі.

AP+Station mode - гэта адначасовае ўключэнне рэжымаў AP mode + Station mode.

адзіночны рэжым - Праца без падлучэння да сеткі наогул. Самотны кантролер, які нясе сваю цяжкую дзель…

В любым з рэжымаў, акрамя "Config mode", можна заблакаваць WEB-старонку, усталяваўшы галачку "Lock Web in Station mode". Гэта тыпу з меркаванняў бяспекі.

Набудовы MQTT-відавочныя: сервер, порт, пароль, адчыненае злучэнне або па SSL. Не буду тут спыняцца падрабязна.

КАкрамя ўсяго іншага, кантролер ShIoTiny умее пасылаць і прымаць пакеты спецыяльнага фармату па multicast. Настройкі яго таксама відавочныя: адрас групы і порт.
Зразумела, што калі апісваць усе нюансы налад - атрымаецца асобны артыкул, а гэта ў мае планы не ўваходзіць.

Итак, з укладкай сетак усё больш-менш ясна. Пяройдзем да галоўнай фішкі кантролера – рэдактару схем-праграм ElDraw.

Тхіліўшыся на ўкладку ElDraw, мы ўбачым прыкладна наступнае. Відавочна, што калі ў прыладзе няма загружанай схемы, то ў поле схемы будзе пуста.

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Слева - палітра элементаў або вузлоў (нод).
Справы - поле схемы або проста "схема".
Сверсе - кнопкі загрузкі-выгрузкі на дыск і на прыладу, а таксама кнопкі рэдагавання.

Для тых, хто працаваў з рэдактарамі - кіраванне ўвогуле відавочна. Трэба дадаць элемент на схему - бярэм яго мышкай і цягнем з палітры ў схему. Трэба выдаліць элемент ці сувязь са схемы - тыкаем на яго ці на яе мышкай і націскаем клавішу DEL. Трэба злучыць элементы - бярэм уваход аднаго элемента і злучаем яго з вынахадам іншага.

Есць яшчэ маштабаванне (SHIFT+кола мышы). Нажаль, няма магчымасці капіявання элементаў і груп элементаў. Але гэта не моцна мяшае.

Кроме таго, з меркаванняў логікі ўваход вузла можа быць злучаны толькі з адным вынахадам іншага вузла. Але выхад вузла - з некалькімі ўваходамі іншых вузлоў. Уваходы - заўсёды злева вузлоў. Выйсці - заўсёды справа.

Кякія магчымасці ў нас ёсць для рэалізацыі алгарытмаў?
Вмагчымасці - даволі шырокія. У палітры маюцца вузлы, якія прадстаўляюць усю апаратуру кантролера ShIoTiny: уваходы, рэле, АЛП, DHT11/22.

Для апрацоўкі дадзеных маюцца лагічныя і арыфметычныя вузлы.

Чкаб мы маглі працаваць з прыладай праз інтэрнэт, маюцца вузлы для падпіскі і публікацыі параметраў на MQTT-брокеры.

ЕКалі мы хочам, каб некалькі кантролераў ShIoTiny абменьваліся інфармацыяй паміж сабой – можна выкарыстоўваць вузлы перадачы і прыёму параметраў па UDP multicast пратаколу.

Кроме гэтага, маюцца вузлы-таймеры; вузлы кіравання апрацоўкай падзей.

ПРыведу некалькі прыкладаў. Напрыклад, вы хочаце, каб кожныя 30 хвілін дадзеныя аб тэмпературы і вільготнасці публікаваліся на MQTT-серверы? Няма нічога прасцей. Малюем так.

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Жмем кнопачку "Upload". Усё!
Екалі ў вас правільна настроена сувязь з MQTT брокерам на ўкладцы Networking, то гэта ўсё!
Ккожныя паўгадзіны, тэмпература будзе публікавацца на брокеры пад топікам /T, а вільготнасць - пад топікам /H. Або, калі вы задасце свае назвы топікаў - то пад імі.
Законнае пытанне: чаму 18000 гэта 30 хвілін? Бо ўсе часы вымяраюцца ў дзесятых долях секунды.

ТЦяпер жадаеце дадаць да гэтай схемы магчымасць уключэння рэле Relay1 праз інтэрнэт, ды яшчэ і на вызначаны час? Не праблема. Дамалёўваем так.

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Опяць ціснем кнопачку «Upload». Усё! Цяпер, акрамя таго, што кожныя паўгадзіны, тэмпература і вільготнасць будуць публікавацца на MQTT-брокеры, з'явіцца магчымасць уключаць рэле Relay1. Ды не проста ўключаць, а роўна на 10 хвілін. Уключаць рэле можна публікацыяй топіка /r1cmd, усталяванага ў 1. А рэальны стан рэле будзе публікавацца ў топіцы /r1status.

Вам жадаецца не толькі ўключаць, але і адключаць рэле датэрмінова? Ды як скажаце. Малюнак ніжэй паказвае як гэта зрабіць!

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Прынцып зразумелы? Вы проста малюеце алгарытм мышкай! І крыху пішаце налад: час, імя топіка і ўсё. Гэта значна навочней, чым пісаць кучу кода.

Кдарэчы, падсвятленне сувязяў рознымі кветкамі - гэта не «фоташоп» - гэта адна з функцый рэдактара. Вы можаце размаляваць сувязі па сваім меркаванні, каб не блытацца ў іх.

Наб і гэта яшчэ не ўсё! Для таго, каб адладжваць алгарытм, ёсць кнопачка "Monitor start". Яна, як гэта ні дзіўна, уключае рэжым «манітор». У гэтым рэжыме стан усіх вынахадаў усіх вузлоў перыядычна счытваецца з кантролера. ShIoTiny і выводзіцца на схему. Прыкладна, як на малюнку ніжэй.

ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску"

Тпра ёсць мы ў "амаль рэальным часе" можам бачыць што ў нас на ўваходзе і выхадзе кожнага вузла. Вельмі дапамагае, калі нешта не зразумела.

Есць яшчэ шмат «фішак і фіч», якія я і хацеў бы апісаць, ды сумленне не дазволіць марнаваць ваш час на іх у адным артыкуле. Асноўная рэалізаваная ідэя і так зразумелая: мінімум наладжвальных параметраў - максімум нагляднасці.

Лыжка дзёгцю

КЗразумела, хочацца, каб не было ніякай лыжкі дзёгцю, але свет не ідэальны. Не ідэальны і мой рэдактар ​​і мой кантролер. Я выявіў дзве галоўныя асаблівасці, якія пакуль не змог ухіліць.

Ваб-першае, часам выяўляюцца глюкі пры групавым перасоўванні элементаў. Але гэта не моцна мяшае працы. Хутчэй "фіча", чым "баг".

И, па-другое, пры некаторых умовах пасля загрузкі схемы ў прыладу кнопачкай "Upload", яно перазагружаецца. Жыць гэта не замінае, але старонку рэдактара трэба абнавіць.

Заключэнне

Нспадзяюся, што вам спадабалася ідэя маляваць алгарытмы, замест таго, каб пісаць праграмы. Вось так выпадковыя думкі, ідэі і спрэчкі часам спараджаюць суцэль сабе жыццяздольныя распрацоўкі.

Наб, па-мойму, аб'ём артыкула перарос усе разумныя межы. Таму я на сёння скончу.
Пдазволю толькі сказаць, што да адпачынку засталіся лічаныя тыдні і я цалкам гатовы перайсці ад адладкі кантролера за сталом да адладкі яго "ў поле".
Екалі каго зацікавілі мае ідэі або падрабязнасці распрацоўкі - пішыце на мыла: [электронная пошта абаронена]

Взаўжды рады буду заўвагам і крытыцы, калі яна, вядома, па справе.

Жду вашых водгукаў, заўваг і прапаноў.

Спасылкі, дасылкі і пасылкі

ESP8266
Wi-Fi
MQTT
UDP Multicast

Па просьбах працоўных

Ввыкладваю волкую дакументацыю і прашыўку (бінар).

https://github.com/shiotiny/ShIoTinyBin

Прашыўка: https://github.com/shiotiny/ShIoTinyBin/blob/master/bin/esp-07-shiotiny.bin

схема: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/esp-07-shiotiny.png

Апісанне вузлоў і кароткія тлумачэнні: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/ShIoT-esp8266-nodes.pdf

Інструкцыя "як шыць" там жа.

Крыніца: habr.com

Дадаць каментар