
Hovedpunkter eller hvad denne artikel handler om
Vi fortsætter cyklussen af artikler om ShIoTiny — en visuelt programmerbar controller baseret på chippen ESP8266.
I denne artikel forklares det med eksemplet på et ventilationsstyringsprojekt i et badeværelse eller andet rum med høj luftfugtighed, hvordan man opbygger programmet til ShIoTiny.
Tidligere artikler i serien.
Links
Introduktion
Forståelse uden erfaring er umulig. Dette er en sandhed, der er blevet bekræftet af tiden og generationer. Derfor er der ikke noget bedre til at lære praktiske færdigheder end at forsøge at lave noget selv. Og eksempler, der viser, hvad man kan gøre, og hvad man ikke bør gøre, vil være meget nyttige. Andres fejl kan selvfølgelig ikke forhindre ens egne fejl, men de kan hjælpe med at reducere antallet af sidstnævnte.
Spørgsmål og breve fra læserne af de tidligere artikler har fået mig til at lave et lille projekt-eksempel på ventilationsstyring for at vise, hvordan ShIoTiny enheder fungerer.
Den oprindelige idé, som controlleren blev skabt ud fra ShIoTiny — en pumpestation — er ikke for alle og vil ikke være interessant for alle. Så jeg tog et almenkendt og nyttigt ventilationsstyringssystem som eksempel.
Jeg vil sige, at projektideen ikke er min, men og tilpassede den til ShIoTiny.
Først skal du forstå, hvad du vil
Forbedringsprocessen er uendelig. Og netop denne egenskab har ødelagt mange gode idéer og projekter. Udvikleren fortsatte i stedet for at frigive noget, der var måske ikke perfekt, men funktionelt — med at forbedre det. Og han forbedrede det, indtil konkurrenterne overhalede ham ved at udgive noget, der måske ikke var perfekt (og ofte direkte skræmmende), men som fungerede.
Derfor er det meget vigtigt at vide, hvor man sætter punktum i projektet. Med andre ord skal vi fastslå, hvad vi ønsker at opnå i slutningen af projektet ud fra det, vi har i starten. På russisk findes der et glimrende kort og præcist ord, „plan“, som oversættere og defekte ledere af en eller anden grund er begyndt at kalde „køreplan“ i den seneste tid. Men lad os glemme dem.
Vores plan vil være som følger. Antag, at vi har et rum, hvor fugtighed til tider kan stige kraftigt. For eksempel et rum som badeværelset eller køkkenet. Fugtighed er en ubehagelig ting, og den gamle metode til at bekæmpe den er lige så gammel som verden: at lufte rummet ud. Der findes mange måder at lufte ud på. Men vi vil fravælge eksotiske og gammeldags metoder som fx personer med fjerdragter og i stedet holde os til en almindelig ventilator. Ventilatorer er billigere, og de er også nemmere at finde her i vores område.
Kort sagt ønsker vi at styre ventilatoren: tænde den og naturligvis slukke den. Mere præcist ønsker vi, at den tænder og slukker af sig selv, når det er nødvendigt.
Det er tilbage at fastslå: under hvilke forhold skal ventilatoren tænde, og under hvilke forhold skal den slukkes.
Her er alt indlysende: hvis fugtigheden er over en bestemt grænse, tænder ventilatoren og suger luften; når fugtigheden er normal, slukker ventilatoren.
Den opmærksomme læser vil straks hæfte sig ved ordet „given“. Af hvem er den givet? Hvordan er den givet?
Man kan indstille tærskelfugtigheden på flere måder. Vi vil se på to af dem: den første — ved hjælp af variabel modstand og den anden — via netværket gennem MQTT-protokollen. Hver af disse metoder har fordele og ulemper, som vi vil se nærmere på senere.
For dem, der ikke forstod, vil jeg uddybe, at „tærskelfugtighed“ er det niveau af fugtighed, som kræver, at ventilatoren tændes, når det overskrides.
Næste spørgsmål: skal brugeren have ret til at tænde for ventilatoren direkte? Det vil sige, uanset fugtighedsniveauet, ved at trykke på en knap? Vi vil sørge for en sådan mulighed. For ventilatoren kan være nødvendig ikke kun ved høj fugtighed, men også til at fjerne ubehagelige lugte fra rummet, som folk kalder "lugt".
Så vi har forstået, hvad vi vil, og endda lidt om, hvordan det vil fungere. Lad os kort opsummere alle funktionerne i vores ventilationssystem:
- indstilling af tærskelniveau for fugtighed (to muligheder);
- måling af fugtighedsniveau;
- automatisk tænding af ventilatoren;
- automatisk slukning af ventilatoren;
- manuel tænding af ventilatoren (ved at trykke på en knap).
Så planen er klar. Det er nødvendigt at implementere alle de nævnte funktioner i vores program. Vi vil handle baseret på denne "plan". For at begynde med, skal vi tegne et strukturelt diagram af enheden.
Strukturelt diagram af enheden
Generelt set vil vi have to sådanne diagrammer. Det første — for varianten, hvor tærskelniveauet for fugtighed indstilles med en variabel modstand. Det andet diagram — for varianten, hvor tærskelniveauet for fugtighed indstilles via netværket gennem MQTT-protokollen.
Men da disse diagrammer kun vil adskille sig med ét element — den variable modstand "indstilling af tærskelniveau for fugtighed", vil vi kun tegne ét strukturelt diagram. Selvfølgelig ser det strukturelle diagram ifølge GOST anderledes ud. Men vi fokuserer ikke på ingeniører, men på den yngre generation. Derfor er klarhed vigtigere.

Så hvad ser vi på tegningen? Ventilatoren er tilsluttet relæet Relay1 kontrolleren ShIoTiny. Jeg vil bemærke, at ventilatoren er en enhed, der arbejder med høj spænding. Så, hvis nogen laver sådan noget selv — vær forsigtig. Det vil sige, som minimum, før du stikker dine fingre eller måleapparater ind i diagrammet — sluk for strømmen til ventilatoren. Og den anden bemærkning. Hvis din ventilator er mere kraftfuld end 250W, bør du ikke tilslutte den direkte til ShIoTiny det — kun gennem en kontaktor.
Vi har forstået ventilatoren. Nu knappen "manuel tænding" af ventilatoren. Den er tilsluttet indgangen Input1. Her er der ikke mere at forklare.
Temperatur- og fugtighedssensor DHT-11 (eller DHT-22 eller deres analoger). Der er en speciel indgang på controlleren til at tilslutte dem. ShIoTiny. Som det ses på tegningen — er tilslutningen af en sådan sensor heller ikke et problem.
Og endelig, det variable modstand, der angiver tærskelniveauet for fugtighed. Mere præcist — en divisor bestående af en variabel og en konstant modstand. Der er ingen problemer med at tilslutte det, men jeg vil præcisere, at den indbyggede ADC på ESP8266 er maksimalt beregnet til 1 Volt. Derfor er en spændingsdeler på cirka 5 gange nødvendig.
Og jeg minder endnu engang om, at denne divider ikke er nødvendig, hvis tærskelniveauet for fugtigheden angives over netværket via MQTT-protokollen.
Lad os begynde at oprette algoritmen for enhedens funktion i ElDraw ShIoTiny editoren. Hvordan man kommer ind i denne editor kan læses i tidligere artikler eller i manualen, som der er et link til i begyndelsen af artiklen.
Den første mulighed, den enkleste.
Vi begynder med det enkle: aktivering af relæet. Relay1 ved overskridelse af tærskelniveauet for fugtighed i en given periode.

Som vi kan se, er der ikke noget svært: kun fire noder, uden at tælle kommentar nodene. DHT11 — det er selve temperatur- og fugtighedssensoren (kan ændres til DHT22).
Konstant CONST — tærskelniveauet for fugtighed i procent.
Komparatoren — en enhed, der sammenligner to tal og giver 1 på udgangen, hvis den angivne betingelse er opfyldt, og 0, hvis betingelsen ikke er opfyldt.
I vores tilfælde vil betingelsen være A>B, hvor A — det målte niveau for fugtighed, og B — tærskelniveauet for den samme fugtighed.
Så snart det målte fugtighedsniveau (A) overstiger tærskelniveauet for fugtighed (B), vil der straks komme 1 på komparatorens udgang, og relæet tændes. Og omvendt, så snart fugtighedsniveauet vender tilbage til det normale (dvs. A>B A<=B ), vil der komme 0, og relæet slukkes.), vil der straks komme 1 på komparatorens udgang, og relæet tændes. Og omvendt, så snart fugtighedsniveauet vender tilbage til det normale (dvs. A>B Er alt klart? Hvis nogen ikke forstod det helt — læs det igen eller kig ind i beskrivelsen af nodernes funktion i manualen.
Jeg bemærker, at dataene fra sensoren
opdateres cirka en gang hvert 10. sekund. Derfor vil relæet ikke kunne tænde og slukke oftere end en gang hvert 10. sekund. DHT11 Alt ville være fint, men vi ville gerne angive tærskelniveauet for fugtigheden med en variabel modstand. Der er ikke noget nemmere!
Vi udskifter blot konstant enheden med ADC'en. For det er til ADC'en, vi har tilsluttet spændingsdeleren med den variable modstand.

Vi skal bare erstatte konstantnode med ADC-noden. For det er til ADC, vi har tilsluttet spændingsdeleren med den variable modstand.
Spændingen på indgangen til ADC ændrer sig fra 0 til 1 Volt. Men fugtigheden på sensorens udgang varierer fra 0 til 100 %. Hvordan sammenligner vi dem? Det er enkelt. ADC-enheden i ShIoTiny måler ikke blot spændingen på indgangen, men kan også skalere og forskyde.
Det vil sige, at værdien på udgangen af ADC1 (ADC) vil være X, beregnet efter formlen

, hvor
— spænding på indgangen af ADC (fra 0 til 1V); k — rækkevidde (ADC range) og b— forskydning (ADC offset). Så hvis vi angiver k=100 og b=0, så vil værdien
på udgangen af ADC-enheden ændre sig i intervallet fra 0 til 100. Det vil sige, at det numerisk svarer til fugtighedsvariationen fra 0 til 100%. X Eller for at sige det enkelt, ved at dreje på variabelmodstanden kan vi indstille grænseværdien for fugtigheden fra 0 til 100. Den eneste ulempe er, at der ikke er nogen visningsenheder. Men i praksis, hvis vi laver 6 indstillinger på variabelmodstanden ved 0%, 20%, 40%, 60%, 80%, 100%) — så er det nok til at indstille grænseværdien for fugtigheden.
Hvordan sætter vi koefficienterne
- forskydning (ADC offset)? Det er lettere end en leg! Peg med musen på enheden k — rækkevidde (ADC range) og bog vil straks få et konfigurationsvindue. I det kan du indstille alt, hvad du har brug for. For vores tilfælde vil det være et vindue som på billedet. ADC1 Så vi har en simpel løsning til at begynde med. Lad os forbedre den.

For resten, den enkleste løsning har en fordel — den kræver ikke internet. Den er helt autonom.
Anden mulighed, vi tilslutter en knap
Alt fungerer, og alle er glade. Men det er et problem, at vi ikke kan tænde ventilationen manuelt. Vi har allerede aftalt, at der vil være tilsluttet en knap til indgangen
som vil tænde og slukke for ventilatoren manuelt, uden at tage hensyn til fugtighedssensoren. Input1 Det er tid til at behandle denne knap i vores skema-program.
Blokken til behandling af knaptryk er markeret med en orange linje. Den fungerer som en tæller for knaptryk, som nulstilles, når værdien på udgangen overstiger én (den grønne linje, udgang af enheden

Her fungerer det hele ligeså simpelt som før: tælleren CT).
tæller knaptryk tilsluttet indgangen CT . Det vil sige, at værdien på denne tællers udgang øges med 1 for hvert knaptryk. Input1Så snart denne værdi bliver lig med to (det vil sige større end 1), så
vil udgangen fra komparatoren. A>B der vil komme 1. Og denne 1 nulstiller tælleren CT til nul. Det henviser til comparatoren, den nedre i skemaet!
Dermed har vores knap to tilstande — 0 og 1. Hvis vi havde brug for flere tilstande (3 eller 4 eller endnu flere) — ville det være tilstrækkeligt at ændre konstanten CONST fra en til en anden værdi.
Så vi har to betingelser for at tænde blæseren: overskridelse af det angivne fugtighedsniveau og et enkelt tryk på knappen. Når nogen af betingelserne er opfyldt, tænder blæseren. Og den vil køre, indtil knappen trykkes igen Og fugtighedsniveauet vender tilbage til det normale.
Man kan selvfølgelig komplicere algoritmen endnu mere, men vi vil ikke gøre det — vi vil efterlade plads til kreativitet for dem, der ønsker det.
Tredje mulighed, vi opretter forbindelse til internettet
Alt, hvad vi har beskrevet, er ganske funktionelt. Men hvad med stilen? Enhver teenagehacker-hacker vil grine af dem, der drejer en knap og trykker på en knap i stedet for at styre fra en smartphone! At dreje på en knap er "ikke moderne". Men at glide fingeren over smartphonen, så den bløder — det er spidse ønsker for hipsteren-hackers (jeg har aldrig kunnet skelne dem — så hvis jeg har lavet en fejl, undskyld).
Men lad os være eftergivende over for de nævnte personligheder. Der er også reelle fordele ved internetstyring. For det første er der klarhed. Der er mange apps til alle platforme, som gør det muligt med et par tryk at skabe et ganske brugbart kontrolpanel til vores controller-carlson. For det andet er der mulighed for at overvåge fugtigheden i rummet på afstand. Og for det tredje kan du se ikke kun, hvad blæseren gør — om den drejer eller ej, men også hvilket tærskelniveau for fugtighed der er indstillet. Og om blæseren er startet automatisk eller manuelt. Generelt, alt hvad du ønsker.
Selvfølgelig, for en bestemt blæser er der meget ære — så meget opmærksomhed. Men det er kun et eksempel.
Så til at oprette forbindelse til internettet vil vi bruge teknologien MQTT og det samme protokol.
For at bruge denne teknologi har vi brug for en MQTT-broker. Det er en speciel server, der betjener MQTT-klienter, for eksempel ShIoTIny og din smartphone.
Essensen af teknologien MQTT består i, at enhver af klienterne offentliggør vilkårlige data på MQTT-brokeren (serveren) under et bestemt navn (kaldet emne i terminologien MQTT). Andre kunder kan abonnere på vilkårlige data baseret på deres navn (emne) og modtage nyudgivne data. Det vil sige, at al dataudveksling foregår på princippet kunde-mægler-kunde.
Jeg vil ikke fokusere på detaljerne. Der findes masser af artikler og tutorials på internettet om, hvordan MQTT og hvilke programmer der findes til at oprette kontrolpaneler. Jeg vil blot vise, hvordan vi modtager og offentliggør data ved hjælp af ShIoTiny.
Som mægler har jeg brugt , men princippet er det samme overalt.
Så lad os anta, at du har registreret dig på MQTT-mægler. I almindelighed vil mægleren give dig (eller kræve, at du opfinder) et brugernavn og adgangskode (til autentificering), samt en port til forbindelse. For at forbinde til ShIoTiny pull-requesten på GitHub MQTT-mægler kan gøres på to måder — normal forbindelse og via TLS (SSL).
Alle disse parametre indtastes i ShIoTiny fanen Netværk, sektion MQTT-forbindelse til server.

Hvis din en MQTT-broker ikke kræver autentificering — indtast ikke brugernavn og adgangskode (ladh disse felter stå tomme).
Parameter MQTT-emnepræfiks kræver en særskilt forklaring.
MQTT-præfiks er en streng, der tilføjes til emnets navn (emne) ved offentliggørelse og abonnement på MQTT-mægleren. For at indstille MQTT-præfiks for din controller, skal du blot indtaste det i inputfeltet "MQTT-emnepræfiks» («MQTT-emnepræfiks"). Præfikset starter altid med et skråstreg («/»)! Hvis du ikke indtaster skråstreg i inputfeltet, vil det blive tilføjet automatisk. I præfikset må der ikke bruges tegn «#» og «+». Der er ingen andre begrænsninger.
For eksempel, hvis du offentliggør parameteren "status" (eller abonnerer på den), og dit præfiks er sat til "/shiotiny/", så vil denne parameter blive offentliggjort på mægleren under navnet "/shiotiny/status". Hvis du har angivet et tomt præfiks, vil alle parametre på mægleren starte med skråstreg («/»): «status" vil blive offentliggjort som "/status».
Så lad os antage, at du har registreret dig på MQTT-mægler og fået brugernavn, adgangskode og port. Derefter har du angivet disse parametre i fanen Netværk, sektion MQTT-forbindelse til server kontrolleren ShIoTiny.
Lad os antage, at præfikset er indstillet til "/room/».
Lad os starte med at offentliggøre tilstanden af alle nøgleparametre: relæ Realay1, tilstanden for manuel aktivering, tilstanden for automatisk aktivering og endelig tærskel- og aktuelle fugtighedsniveauer. Og som en bonus — temperaturen i rummet. Sådan gør du, se på billedet.

Som vi kan se, er forskellen fra den tidligere version — kun noderne "MQTT-publicering". Med præfikset offentliggøres følgende parametre:

Som vi kan se, har vi hele systemets tilstand lige ved hånden!
Men vi ønsker ikke kun at se, men også at styre. Hvad gør vi? Meget simpelt. Vi dropper installationen af tærskelniveauet for fugt ved hjælp af ADC og variable modstande, og vi vil angive dette tærskelniveau for fugt direkte fra vores smartphone! MQTT Vi fjerner ADC-enheden fra skemaet og tilføjer tre nye enheder:

FLASH store FLASH restore, MQTT describe og Funktionen af enheden.
er åbenlys: den modtager parameteren Funktionen af enheden (tærskelniveau for fugt) fra /room/trigHset MQTT-broker . Men hvad gør den så med dataene? Den sender dem bare videre til enheden, som gemmer disse data i non-volatile hukommelse under navnet FLASH restoretrigH . Derefter læser enhedendataene fra non-volatile hukommelse med navnet MQTT describe og hvad der sker derefter, ved vi allerede. . Derefter læser enheden Hvorfor så mange komplikationer? Hvorfor kan man ikke bare sende de modtagne data direkte til komparatoren?
Som vores ven S. Holmes plejer at sige —
det er elementært ! Ingen kan garantere, at dit apparat efter tænding vil forbindes til. Men fugtigheden skal måles. Og viften skal tændes. Men uden information om tærskelniveauet for fugt er det umuligt! Derfor henter vores enhed ved tænding det tidligere gemte tærskelniveau for fugt fra non-volatile hukommelse og bruger det til at træffe beslutninger. Og når forbindelsen til MQTT-mæglerMQTT-brokeren er etableret, og nogen sender en ny værdi , vil denne nye værdi blive brugt. /room/trigHsetHerefter kan I finde på alt muligt. For eksempel kan vi udover fugt også måle temperaturen. Eller tilføje 'smart' belysningsstyring (vi har stadig to relæer og to indgange tilbage). Alt i jeres hænder!
Sådan har vi set på flere eksempler på implementeringen af en simpel controller baseret på ShIoTiny. Måske vil dette være nyttigt for nogen.
Konklusion
Som altid, forslag, ønsker, spørgsmål, trykfejl osv. — send til
shiotiny@yandex.ru shiotiny@yandex.ru
Kilde: habr.com
