
Huvudpunkter eller vad denna artikel handlar om
Vi fortsĂ€tter artikelserien om ShIoTiny â den visuellt programmerbara kontroller baserad pĂ„ chipet ESP8266.
I denna artikel diskuteras, med exempel frÄn ett projekt för att kontrollera ventilationen i ett badrum eller en annan plats med hög luftfuktighet, hur programmet byggs för ShIoTiny.
Tidigare artiklar i serien.
LĂ€nkar
Introduktion
FörstÄelse finns inte utan erfarenhet. Det Àr en sanning som bevisats av tid och generationer. DÀrför finns det inget bÀttre för att lÀra sig praktiska fÀrdigheter Àn att försöka göra nÄgot sjÀlv. Exempel som visar vad man kan göra och vad man bör undvika att prova kommer hÀr att vara till stor hjÀlp. Andras misstag kan förstÄs inte förhindra att egna misstag uppstÄr, men de kan hjÀlpa till att minska antalet.
FrÄgor och brev frÄn lÀsare av tidigare artiklar motiverade mig att göra ett litet exempelprojekt för att visa hur ShIoTiny-enheterna fungerar.
Den ursprungliga idĂ©n, pĂ„ vilken kontrollern baserades ShIoTiny â en pump- och bevattningsstation â passar inte alla och Ă€r kanske inte av intresse för mĂ„nga. DĂ€rför valde jag ett allmĂ€nt begripligt och nyttigt ventilationssystem som exempel.
Jag kan sÀga att projektidén inte Àr min, utan och sedan anpassade jag den till ShIoTiny.
Först förstÄ vad du vill
Processen för förbĂ€ttring Ă€r oĂ€ndlig. Och detta drag har dödat mĂ„nga bra idĂ©er och projekt. Utvecklaren fortsatte att förbĂ€ttra sin idĂ© istĂ€llet för att slĂ€ppa nĂ„got som, om Ă€n inte perfekt, var anvĂ€ndbart â och fortsatte att förbĂ€ttra tills konkurrenterna övertrĂ€ffade honom med nĂ„got som, Ă€ven om det inte var perfekt (och ofta rent av dĂ„ligt), Ă€ndĂ„ var funktionellt.
DÀrför Àr det mycket viktigt att veta var man ska sÀtta punkten i projektet. Med andra ord, vi mÄste bestÀmma vad vi vill uppnÄ i slutet av projektet utifrÄn det vi har i början. PÄ ryska finns det ett utmÀrkt kort och koncist ord för ett dokument som görs just för att beskriva vÀgen till skapandet av nÄgot, nÀmligen "plan", vilket dumma översÀttare och bristfÀlliga chefer pÄ sistone mÀrkligt nog har börjat kalla för "fÀrdplan". Men de kan vara.
VÄr plan kommer att se ut sÄ hÀr. LÄt oss anta att vi har ett rum dÀr fuktigheten ibland kan öka kraftigt. Till exempel ett sÄdant rum som ett badrum eller kök. Fuktighet Àr otrevligt och sÀttet att bekÀmpa den har funnits sedan urminnes tider: att lufta rummet. Det finns mÄnga sÀtt att lufta. Men vi vÀljer nog att avstÄ frÄn exotiska och gammaldags metoder som svarta med flÀktar och istÀllet fokusera pÄ en vanlig flÀkt. FlÀktar Àr billigare och lÀttare att hitta hÀr.
Kort sagt, vi vill styra flÀkten: slÄ pÄ den och, som konsekvens, stÀnga av den. Mer korrekt vill vi att den automatiskt ska sÀttas pÄ och av nÀr det behövs.
Det ÄterstÄr att faststÀlla: under vilka förhÄllanden flÀkten ska slÄ pÄ och under vilka förhÄllanden den ska stÀngas av.
HÀr Àr allt tydligt: om fuktigheten överstiger ett visst angivet grÀnsvÀrde - flÀkten slÄr pÄ och sug ut luft; fuktigheten har ÄtergÄtt till det normala - flÀkten stÀngs av.
Den uppmÀrksamma lÀsaren kommer genast att fÀsta blicken vid ordet "angivet". Av vem angivet? Hur angivet?
Tröskelfukten kan stÀllas in pÄ flera sÀtt. Vi kommer att titta pÄ tvÄ av dem: den första - med hjÀlp av en variabel resistor och den andra - via nÀtverket genom protokollet MQTT. Varje metod har sina fördelar och nackdelar som kommer att diskuteras vidare.
För dem som inte förstod, lÄt mig förklara att "tröskelfuktighet" Àr den nivÄ av fuktighet som, nÀr den överskrids, krÀver att flÀkten sÀtts pÄ.
NÀsta frÄga: ska anvÀndaren ha rÀtt att slÄ pÄ flÀktarna direkt? Det vill sÀga oavsett fuktighetsnivÄ, med ett knapptryck? Vi kommer att inkludera en sÄdan möjlighet. FlÀkten kan behövas inte bara vid hög fuktighet, utan ocksÄ för att ta bort obehagliga lukter frÄn rummet, som folk kallar "stank".
SÄ, vi har förstÄtt vad vi vill och ocksÄ lite om hur det kommer att fungera. LÄt oss kort lista alla funktioner i vÄrt ventilationssystem:
- instÀllning av en tröskelnivÄ för fuktighet (tvÄ alternativ);
- mÀtning av fuktighetsnivÄ;
- automatisk aktivering av flÀkten;
- automatisk avstÀngning av flÀkten;
- manuell aktivering av flÀkten (med ett knapptryck).
SÄ, planen Àr tydlig. Vi mÄste implementera alla ovan nÀmnda funktioner i vÄrt program. Baserat pÄ denna "plan" kommer vi att agera. Först ska vi rita ett strukturellt schema för enheten.
Strukturellt schema för enheten
Ăverlag kommer vi att ha tvĂ„ sĂ„dana scheman. Det första â för alternativet dĂ€r tröskelnivĂ„n för fuktighet anges med ett variabelmotstĂ„nd. Det andra schemat â för alternativet dĂ€r tröskelnivĂ„n för fuktighet anges via nĂ€tverket genom protokollet MQTT.
Men eftersom dessa scheman endast kommer att skilja sig Ă„t med ett enda element â det variabla motstĂ„ndet "instĂ€llning av tröskelnivĂ„ för fuktighet", ritar vi bara ett strukturellt schema. SjĂ€lvklart ser det strukturella schemat ut pĂ„ ett annat sĂ€tt enligt GOST. Men vi riktar oss inte till ingenjörsproffs utan till den yngre generationen. DĂ€rför Ă€r tydlighet viktigare.

SĂ„, vad ser vi pĂ„ bilden? FlĂ€kten Ă€r kopplad till relĂ€et Relay1 av kontrolleraren. ShIoTinyJag vill pĂ„peka att flĂ€kten Ă€r en apparat som arbetar med hög spĂ€nning. SĂ„ om nĂ„gon gör detta sjĂ€lv â var försiktig. Det betyder att, Ă„tminstone, innan du stoppar fingrar eller mĂ€tinstrument i kretsen â koppla bort strömmen frĂ„n flĂ€kten. Och en andra pĂ„minnelse. Om din flĂ€kt Ă€r kraftigare Ă€n 250W, bör du inte ansluta den direkt till ShIoTiny utan endast via en kontaktor.
Nu har vi gÄtt igenom flÀkten. Nu knappen "manuell aktivering" av flÀkten. Den Àr kopplad till ingÄngen Input1. HÀr finns det inte mycket mer att förklara.
Temperatur- och fuktighetsgivare DHT-11 (eller DHT-22 eller dess motsvarigheter). För att ansluta det finns en speciell ingĂ„ng pĂ„ kontrollern. ShIoTiny. Som man kan se pĂ„ bilden â anslutningen av en sĂ„dan sensor Ă€r inte heller nĂ„got problem.
Och slutligen, ett variabelt motstĂ„nd som stĂ€ller in tröskelnivĂ„n för fuktighet. Mer exakt â en delare som bestĂ„r av ett variabelt och ett konstant motstĂ„nd. Det finns inga problem med att ansluta det, men jag ska förklara att den inbyggda ADC:n Ă€r ESP8266 berĂ€knad max pĂ„ 1 Volt. DĂ€rför behövs en spĂ€nningsdelare som Ă€r ungefĂ€r 5 gĂ„nger.
Och jag pÄminner Ànnu en gÄng om att denna delare inte behövs om tröskelnivÄn för fuktighet stÀlls in via nÀtverket med hjÀlp av MQTT-protokollet.
LÄt oss börja skriva algoritmen för enhetens arbete i ElDraw ShIoTiny-editorn. Hur man kommer dit, kan man lÀsa i tidigare artiklar eller i bruksanvisningen, som det finns en lÀnk till i början av artikeln.
Första alternativet, det enklaste.
Vi börjar med det enkla: att aktivera relÀet Relay1 vid överskridande av tröskelnivÄer för fuktighet under en angiven tid.

Som vi ser Ă€r det inget komplicerat: bara fyra noder, förutom kommentar noder. DHT11 â det Ă€r sjĂ€lva sensorn för temperatur och fuktighet (kan bytas ut mot DHT22).
Konstanten CONST â tröskelnivĂ„n för fuktighet, i procent.
Komparatorn â en nod som jĂ€mför tvĂ„ tal och sĂ€tter 1 pĂ„ utgĂ„ngen om det givna villkoret Ă€r uppfyllt och 0 om villkoret inte Ă€r uppfyllt.
I vĂ„rt fall kommer sĂ„dant villkor att vara A>B, dĂ€r A â den fuktighetsnivĂ„ som mĂ€ts av sensorn, och B â tröskelnivĂ„n för samma fuktighet.
SĂ„ snart den uppmĂ€tta fuktighetsnivĂ„n (A) överstiger tröskelnivĂ„n för fuktighet (B), kommer 1 att visas pĂ„ komparatorns utgĂ„ng och relĂ€et kommer att aktiveras. Och omvĂ€nt, sĂ„ snart fuktighetsnivĂ„n Ă„tergĂ„r till normal (det vill sĂ€ga A>B A<=B kommer 0 att visa och relĂ€et kommer att stĂ€ngas av.), kommer 1 att visas pĂ„ komparatorns utgĂ„ng och relĂ€et kommer att aktiveras. Och omvĂ€nt, sĂ„ snart fuktighetsnivĂ„n Ă„tergĂ„r till normal (det vill sĂ€ga A>B FörstĂ„s? De som inte riktigt gör det â lĂ€s igen eller kolla beskrivningen av nodernas arbete i manualen.
Jag vill pÄpeka att data frÄn sensorn
uppdateras ungefÀr en gÄng var 10:e sekund. DÀrför kan relÀet inte aktiveras och stÀngas av oftare Àn en gÄng var 10:e sekund. DHT11 Det skulle vara okej, men vi skulle vilja stÀlla in tröskelnivÄn för fuktighet med hjÀlp av en potentiometer. Det kan inte vara enklare!
Vi byter helt enkelt ut konstantnoden mot ADC-noden. Det Àr ju till ADC:n som vi har anslutit spÀnningsdelaren med det variabla motstÄndet.

Vi byter helt enkelt ut konstantnodet mot en ADC-nod. För det var just till ADC:n som vi kopplade spÀnningsdelaren med variabel resistor.
SpÀnningen vid ADC-ingÄngen varierar frÄn 0 till 1 Volt. Men fuktigheten vid sensorutgÄngen varierar frÄn 0 till 100 %. Hur jÀmför vi dem? Det Àr enkelt. ADC-noden i ShIoTiny mÀter inte bara spÀnningen vid ingÄngen, utan kan ocksÄ skala och förskjuta.
Det vill sÀga att vÀrdet frÄn ADC1-noden (ADC) kommer att vara X, berÀknat enligt formeln

, dÀr
â spĂ€nningen vid ADC-ingĂ„ngen (frĂ„n 0 till 1 V); vĂ„gvektor â omrĂ„det (ADC range) och bâ förskjutning (ADC offset). SĂ„ om vi stĂ€ller in k=100 och b=0, dĂ„ nĂ€r vi Ă€ndrar
inom intervallet frÄn 0 till 1, kommer vÀrdet X vid ADC-nodens utgÄng att variera frÄn 0 till 100. Det vill sÀga, numeriskt lika med fuktighetsvariationen frÄn 0 till 100%.
Eller, enklare sagt, genom att vrida pĂ„ den variabla motstĂ„ndsratten kan vi stĂ€lla in en tröskelnivĂ„ för fuktigheten frĂ„n 0 till 100. Den enda nackdelen Ă€r att det inte finns nĂ„gra displayenheter. Men i praktiken, om vi sĂ€tter 6 indelningar pĂ„ motorn för det variabla motstĂ„ndet 0%, 20%, 40%, 60%, 80%, 100%) â sĂ„ rĂ€cker det för att stĂ€lla in tröskelnivĂ„n för fuktigheten.
Hur stĂ€ller vi in koefficienterna vĂ„gvektor â omrĂ„det (ADC range) och bâ förskjutning (ADC offset)? Det Ă€r enklare Ă€n att skala Ă€pplen! Klicka med muspekaren pĂ„ noden ADC1 och fönstret för instĂ€llningar visas direkt. HĂ€r kan du stĂ€lla in allt du behöver. I vĂ„rt fall kommer det att vara ett sĂ„dant fönster som pĂ„ bilden.

SÄ vi har en enkel arbetslösning. LÄt oss börja förbÀttra den.
Förresten, den enklaste lösningen har en fördel â den behöver ingen internetuppkoppling. Den Ă€r helt autonom.
Alternativ tvÄ, vi kopplar in en knapp
Allt fungerar och alla Àr glada. Men ett problem, vi kan inte slÄ pÄ ventilationen manuellt. Vi har redan kommit överens om att en knapp kommer att kopplas till ingÄngen Input1 som kommer att slÄ pÄ och stÀnga av flÀkten manuellt, oavsett fuktighetsgivaren.
Det Àr dags att hantera denna knapp i vÄrt schema-program.

Blocket för knapptryckning Àr markerat med en orange linje. Det Àr en rÀknare för knapptryckningar som ÄterstÀlls till noll nÀr vÀrdet pÄ dess utgÄng överstiger ett (grön linje, utgÄngen frÄn noden CT).
Det fungerar hÀr precis sÄ enkelt som tidigare: rÀknaren CT rÀknar knapptryckningar kopplade till ingÄngen. Input1Det vill sÀga vÀrdet pÄ utgÄngen av denna rÀknare ökar med 1 för varje knapptryckning.
SÄ snart detta vÀrde blir tvÄ (det vill sÀga mer Àn 1), kommer det omedelbart pÄ komparators utgÄng. A>B En 1. Och denna 1 kommer att nollstÀlla rÀknaren CT till noll. Det handlar om komparatorn, den lÀgre i schemat!
SĂ„ledes har vĂ„r knapp tvĂ„ tillstĂ„nd â 0 och 1. Om vi behövde fler tillstĂ„nd (3 eller 4 eller fler) skulle det rĂ€cka med att Ă€ndra konstanten CONST frĂ„n ett till ett annat vĂ€rde.
SÄ vi har tvÄ villkor för att slÄ pÄ flÀkten: överskridande av den angivna fuktnivÄn och ett enkelt tryck pÄ knappen. NÀr nÄgot av villkoren Àr uppfyllt, slÄs flÀkten pÄ. Och den kommer att fungera tills knappen trycks ner igen Och fuktnivÄn ÄtervÀnder till det normala.
Man kan sjĂ€lvklart göra algoritmen Ă€nnu mer komplicerad, men vi kommer inte att göra det â vi lĂ€mnar utrymme för kreativitet för dem som vill.
Alternativ tre, vi kopplar upp oss mot internet
Allt vi har beskrivit Ă€r fullt fungerande. Men vad sĂ€gs om att vara cool? Vem som helst, en spritt sprĂ„ngande hipster-hacker-knepare, kommer att skratta Ă„t den som vrider pĂ„ en ratt och trycker pĂ„ en knapp istĂ€llet för att styra med sin smartphone! Att vrida pĂ„ en ratt Ă€r âinte trendigtâ. Men att svepa med fingret över sin smartphone, och slita detta finger till blods â det Ă€r hipster-hacker-kneparens högsta önskan (jag har aldrig kunnat sĂ€rskilja dem â sĂ„ ber om ursĂ€kt om jag gör fel).
Men lĂ„t oss vara milda mot dessa personer. Att styra via internet har Ă€ven verkliga fördelar. För det första, det Ă€r tydligt. Det finns massor av appar för alla plattformar som lĂ„ter dig med ett par tryck skapa en helt anvĂ€ndbar kontrollpanel för vĂ„r styrmodul-Karlsson. För det andra, det finns möjlighet att pĂ„ distans övervaka fuktnivĂ„n i rummet. Och för det tredje kan man se inte bara vad flĂ€kten gör â snurrar den eller inte, utan ocksĂ„ vilket tröskelvĂ€rde för fukt som Ă€r instĂ€llt. Och om flĂ€kten har slagits pĂ„ automatiskt eller manuellt. I allmĂ€nhet, vad du önskar.
SjĂ€lvklart Ă€r det för en flĂ€kt överdrivet â sĂ„ mycket uppmĂ€rksamhet. Men det Ă€r bara ett exempel.
SÄ för att koppla upp oss mot internet kommer vi att anvÀnda teknologin MQTT och den namngivna protokollet.
För att kunna anvÀnda denna teknologi behöver vi en MQTT-broker. Det Àr en speciell server som betjÀnar MQTT-kunder, till exempel ShIoTIny och din smartphone.
Essensen av teknologin MQTT Àr att varje klient publicerar godtycklig data pÄ MQTT-brokern (servern) under ett specifikt namn (som kallas topic i terminologin MQTT). Andra kunder kan prenumerera pÄ godtyckliga data med deras namn (topic) och ta emot nyligen publicerade data. SÄ hela databytealet sker enligt principen kund-mÀklare-kund.
Jag jag vill inte fokusera pÄ detaljer. Det finns massor av artiklar och guider pÄ internet om hur MQTT och vilka program som finns för att skapa kontrollpaneler. Jag ska bara visa hur vi tar emot och publicerar data via ShIoTiny.
Som mÀklare anvÀnde jag , men principen Àr densamma överallt.
SÄ vi antar att du har registrerat dig pÄ MQTT-mÀklare. I allmÀnhet kommer mÀklaren att ge dig (eller krÀva att du ska hitta pÄ) ett anvÀndarnamn och lösenord (för autentisering), samt en port för anslutning. Att ansluta ShIoTiny till till MQTT-mÀklare kan göras pÄ tvÄ sÀtt - vanlig anslutning och genom TLS (SSL).
Alla dessa parametrar i ShIoTiny anges pÄ fliken NÀtverkande, avsnittet MQTT Connection to server.

Om din MQTT-broker inte krĂ€ver autentisering â lĂ€mna anvĂ€ndarnamn och lösenord tomma (lĂ€mna dessa fĂ€lt tomma).
Parameter MQTT topic prefix krÀver en separat förklaring.
MQTT-parametrarnas prefix Ă€r en strĂ€ng som lĂ€ggs till namnet pĂ„ Ă€mnet (topic) vid publicering och prenumeration pĂ„ MQTT-mĂ€klare. För att stĂ€lla in MQTT-prefixet för din kontroller mĂ„ste det helt enkelt anges i inmatningsfĂ€ltet "MQTT topic prefix» («MQTT topic prefix". Prefixet börjar alltid med en snedstreck («/»)! Om du inte anger snedstrecken i inmatningsfĂ€ltet â lĂ€ggs den automatiskt till. Prefixet fĂ„r inte innehĂ„lla tecken «#» och «+». Det finns inga andra begrĂ€nsningar.
Till exempel, om du publicerar parametern "status" (eller prenumerar pÄ den), och ditt prefix anges som "/shiotiny/", sÄ kommer denna parameter att publiceras pÄ mÀklaren med namnet "/shiotiny/status". Om du har ett tomt prefix kommer alla parametrar pÄ mÀklaren att börja med en snedstreck («/»): «status" kommer publiceras som "/status».
SÄ, lÄt oss anta att du har registrerat dig pÄ MQTT-mÀklare och fÄtt anvÀndarnamn, lösenord och port. Sedan har du angett dessa parametrar pÄ fliken NÀtverkande, avsnittet MQTT Connection to server av kontrolleraren. ShIoTiny.
LÄt oss anta att prefixet Àr instÀllt pÄ "/room/».
LĂ„t oss börja med att publicera tillstĂ„ndet för alla nyckelparametrar: relĂ€ Realay1, manuellt lĂ€ge, automatiskt lĂ€ge och till sist, tröskel- och aktuella fuktighetsnivĂ„er. Som bonus â temperaturen i rummet. För att göra detta, se bilden.

Som vi ser, skillnaden frÄn föregÄende alternativ Àr endast noderna "MQTT Publish". Med hÀnsyn till prefixet publiceras följande parametrar:

Som vi ser har vi full insyn i systemets tillstÄnd!
Men vi vill inte bara se, utan ocksÄ styra. Vad gör vi? Mycket enkelt. Vi avstÄr frÄn att sÀtta en tröskelnivÄ för fuktighet med hjÀlp av ADC och ett variabelt motstÄnd och kommer att stÀlla in just den tröskelnivÄn för fuktighet direkt frÄn MQTT smartphonen!

Vi tar bort ADC-enheten frÄn kretsen och lÀgger till tre nya enheter: FLASH-lagring, FLASH-ÄterstÀllning och MQTT-beskrivning.
Funktionen för enheten MQTT-beskrivning Àr uppenbar: den tar emot parametern /room/trigHset (tröskelnivÄn för fuktighet) frÄn MQTT-brokern. Men vad gör den med datan dÀrefter? Den skickar helt enkelt vidare den till enheten FLASH-lagring, som i sin tur sparar dessa data i icke-flyktigt minne under namnet trigH. Efter det lÀser enheten FLASH-ÄterstÀllning av data frÄn det icke-flyktiga minnet under namnet trigH och vad som hÀnder hÀrnÀst vet vi redan.
Varför sÄdana komplikationer? Varför kan vi inte bara ge den mottagna datan direkt till komparatorn?
Som vĂ€n av S. Holmes sa â det Ă€r elementĂ€rt!! Ingen garanterar att efter att enheten Ă€r pĂ„slagen kommer den att ansluta till till MQTT-mĂ€klare. Men fuktigheten mĂ„ste mĂ€tas. Och flĂ€kten mĂ„ste slĂ„s pĂ„. Men utan information om tröskelnivĂ„n för fuktighet Ă€r detta omöjligt! DĂ€rför hĂ€mtar vĂ„r enhet tröskelnivĂ„n för fuktighet frĂ„n det icke-flyktiga minnet vid uppstart och anvĂ€nder den för att fatta beslut. Och nĂ€r anslutningen till MQTT-brokern Ă€r etablerad och nĂ„gon publicerar ett nytt vĂ€rde /room/trigHset, dĂ„ kommer detta nya vĂ€rde att anvĂ€ndas.
Vidare kan du hitta pÄ allt du vill. Till exempel, utöver fukt kan vi ocksÄ hÄlla reda pÄ temperaturen. Eller lÀgga till "smart" belysningskontroll (vi har fortfarande tvÄ relÀer och tvÄ ingÄngar oanvÀnda). Allt ligger i dina hÀnder!
Slutsats
Vi har nu sett nÄgra exempel pÄ hur man implementerar en grundlÀggande controller baserad pÄ ShIoTiny. Kanske kan detta vara till hjÀlp för nÄgon.
Som alltid, förslag, önskemĂ„l, frĂ„gor, tryckfel och sĂ„ vidare â till mejl: shiotiny@yandex.ru
KĂ€lla: habr.com
