ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

Hovedpunkter eller hva denne artikkelen handler om

ТSiden folks interesser er forskjellige, og folk har liten tid, så kort om innholdet i artikkelen.

СDenne artikkelen er en oversikt over kontrollerprosjektet med minimumspris og kapasitet visuell programmering via nettleser.

ПSiden dette er en oversiktsartikkel som tar sikte på å vise "hva som kan presses ut av en penny-kontroller", bør du ikke se etter dype sannheter og detaljerte algoritmer i den.

РMotivasjonen, ideene og resultatene av å bygge en kontroller basert på en WiFI-brikke vurderes ESP8266.

Advarsel

Jeg ville ikke skrive denne artikkelen. Jeg er ikke en fan av å skrive artikler i det hele tatt. Dette må du tenke på, og mye. Tenk på hvordan du skal skrive på en slik måte at antallet personer som misforstår deg reduseres til et minimum. Tenk på hvordan du ikke skal gå til ytterligheter. Og det er mye mer å tenke på.
Men vennene mine sa at siden min innsats innen IoT og annen liten automatisering er interessant for dem, så kan de også være interessante for andre og for allmennheten. Vel, hvor samles publikum som er interessert i dette? Selvfølgelig på navet. Og her er jeg. Gammel leser og ny forfatter.

Jeg påtar meg ikke noe ansvar for feil, unøyaktigheter, skrivefeil, utdatert presentasjonsstil osv. som leseren kanskje ikke liker. Les på eget ansvar.

Jeg advarer deg også umiddelbart om at jeg ikke vil forklare hva MQTT, WiFi og UDP multicast er og andre ting som ikke er direkte relatert til temaet. Det er noen lenker på slutten av artikkelen.

Fødselen av en idé eller noen tekster

ЖLivet er ikke en lett ting og Hans Majestet Sjanse spiller en viktig rolle i det. Så jeg vil dele hvordan tilfeldige hendelser, kombinert med naturlig latskap, resulterte i en ganske interessant utvikling av en kontroller basert på ESP8266.

НDet hele startet ganske rutinemessig: Jeg ønsket å bygge et system for å kontrollere vannforsyningen og vanningen av hagebedene og buskene i landet.

НÅh, siden jeg bare kan jobbe fullt ut med rør, tanker og kraner på ferien, som fortsatt var mer enn seks måneder unna - var alt begrenset til diskusjoner på jobben med kolleger og venner og kamerater i en uformell setting.

ТTemaet "liten automatisering" eller, som de vanligvis sier blant "disse skolegutt-hackere-hipsterne" - emnet for IoT - Internet of Things - har interessert meg i lang tid. Lenge før selve Internett ble mye brukt.

ЕSelv som barn ønsket jeg at ting skulle gjøre noe «på egen hånd». Og det ville være ønskelig at jeg kunne kontrollere dem på en eller annen måte på avstand. Men på den tiden (80-tallet, begynnelsen av 90-tallet av forrige årtusen) var dette ganske vanskelig. Internett var ikke allment tilgjengelig hvor som helst i verden, akkurat som det ikke fantes mobiltelefoner, nettbrett eller til og med LCD-skjermer eller USB-minnepinner hvor som helst. Så vi måtte begrense oss til «klapplysbrytere» og enkle radiofjernkontroller. Men for den tiden og den alderen var det ikke dårlig og interessant.

НÅ, dette er ting fra fortiden. Nå er det det 15. århundre. Og alle har en smarttelefon i lommen, Internett er tilgjengelig nesten overalt der det er nødvendig og ikke nødvendig, og basen av tilgjengelige elektroniske komponenter er nå slik at for bare XNUMX år siden ville den gjennomsnittlige innbyggeren på planeten Jorden aldri ha drømt om det .

ПDerfor, etter å ha bestemt meg for å bygge en kontroller for vannsaker på dacha, vendte jeg oppmerksomheten mot ESP8266-brikken.
For det første er denne brikken billig. Og hvis én kontroller ikke er nok, kan du installere to, tre eller fem. For det andre har den WiFi om bord. Det vil si at du kan se hva som skjer via Internett og til og med kontrollere prosessen fra hvilken som helst smarttelefon. Selvfølgelig trenger du et tilgangspunkt med Internett-tilgang, men dette er ikke et problem. Uansett, det er nesten overalt eller er i ferd med å være, inkludert i min dacha.

ПEtter å ha fordypet meg i den fantastiske verdenen av prosjekter for ESP8266, ble jeg overrasket over å oppdage at til tross for de fantastiske egenskapene til denne brikken, er prosjekter på den, med sjeldne unntak, delt inn i to typer: disse er enten ekstremt primitive programmer som "klikk bryterne fra smarttelefonen din og stirrer på tilstanden til sensortemperaturene via Internett"; eller gode og solide JavaScript- eller Lua-tolker, men dessverre forbruker de nesten all hukommelsen og lar deg ikke gjøre noe alvorlig.

ПMin første idé var så enkel som pannekaker - å skrive et enkelt program for å kontrollere pumper basert på tilstanden til sensorene og det er det. Men, som en erfaren vals når det gjelder å hoppe på rake av å implementere forskjellige systemer, forsto jeg at jeg definitivt ikke ville være i stand til på forhånd å forutse alle bøyningene i algoritmen som jeg ønsker eller trenger å rette opp under konstruksjonen av algoritmen. vannforsyning og vanningssystem.

ДDet er ikke veldig praktisk å behandle programmet på dacha, i en mørk låve. Men du må.
Hva er veien ut? Selvfølgelig var det første jeg tenkte på å gjøre algoritmen tilpassbar. En av kollegene mine ga mange råd – hva de skulle sette opp og hvordan. Med dette drepte han min første idé i spiren. Takket være ham. Hvis han ikke hadde avslørt for øynene mine hvor mange parametere jeg måtte konfigurere, ville jeg sannsynligvis ikke ha nektet dette alternativet: å lage en algoritme-innstillingsside.

НDet skremmende bildet av antall innstillingsparametere, og til og med de som påvirker hverandre, gjorde meg edru. Nok en gang innså jeg at du ikke kan forutse alt...

СJeg vil reservere en gang: Jeg er lat. Veldig lat! Jeg er ærlig talt for lat til å skrive om programmet hver gang. Derfor oppsto oppgaven - hvordan stille inn en algoritme raskt og enkelt, helst uten programmering? Dessuten vil denne algoritmen være ganske komplisert; vil ha mange parametere; vil være spesifikk for mitt tilfelle og uegnet for andre. Og jeg vil virkelig gjøre enheten mer eller mindre universell...

ПSiden det fortsatt var omtrent seks måneder før ferie og all slags rørpumpearbeid, bestemte jeg meg for å ta meg god tid og tenke på hvordan jeg skulle gjøre det praktisk og vakkert? Hvordan programmere uten programmering? Hvordan gjøre uten en billion parametere som kan endres ved konfigurering?

КSom vanlig var alt allerede oppfunnet før oss: Jeg skjønte at jeg ville tegne en algoritme i form av handlingsfirkanter og koble dem sammen med kommunikasjonslinjer som viser hvor dataene flyr fra og til. Vel, ved å peke på firkanten, vil jeg kunne konfigurere noen av dens individuelle parametere.

ИIdeen om å definere en algoritme ved å tegne den i firkanter er ikke ny. Slike systemer fantes tilbake på 80-tallet; Nå er det et superpopulært NodeRed-system, som er godt kjent for de som allerede har sluttet seg til en verden av småskala automatisering/IoT.

НÅ, her er problemet: slike systemer er designet for "store PCer". I verste fall - på Raspberry PI. Men ikke på ESP8266, som bare har noen få titalls kilobyte RAM og ikke noe operativsystem!

Кhva å gjøre? Og det er bare to utveier: skriv og tegn et program på en "stor PC" eller bærbar datamaskin, og overfør det deretter i en eller annen form til ESP8266, eller prøv å "skyve det umulige" inn i selve ESP8266-kontrolleren.

ПDerfor var det maksimale programmet jeg hadde dette: for å programmere kontrolleren din bør du ikke trenge noe annet enn en bærbar PC med nettleser! Det vil si en bærbar PC med nettleser og min kontroller - dette skal være nok til å konfigurere fullt ut og skrive og tegne kontrollprogrammer.

И, som det viste seg, var det fullt mulig å implementere dette!
Jeg vil ikke kjede deg med alle detaljene i prosjektutviklingen. Jeg vil bare si at basert på ordene som kom til mitt sinn og tunge under utviklingsprosessen, ville det være mulig å komponere en egen "Ordbok med uanstendig språk brukt av arbeidere i elektronisk industri" Men det hele er over. Mer presist, ikke alt, men det første, vanskeligste stadiet, når det ikke er klart om ideen din om å leve vil være der eller er det bare deliriet til en grå vallak på en måneskinn natt.

ПJeg vil dele resultatet av det som kom ut og fikk navnet "ShIoTiny Controller".

Så hva skjedde?

maskinvare ShIoTiny-kontrolleren er standard og enkel: tre innganger designet for sensorer av typen "tørrkontakt" (knapper, reed-brytere, de er også vannnivåsensorer i tanken), en ADC-inngang, en inngang for å koble til en temperatur- og fuktighetssensor på DHT22 type eller lignende. Og til slutt tre utganger i form av koblingsreleer for 220 Volt, 1 Ampere. Reléet sier 10A, men jeg er realist og vil ikke tillate 10A gjennom brettet. Og for å kontrollere pumpestartere er 1Amp nok. Alt dette drives fra en strømkilde med en spenning på 5 til 9 volt.

ЧFor å være ærlig la jeg til temperatursensoren akkurat som det, men på ADC hadde jeg håp om å måle spenningen på forsyningsnettet. Hvem vet?

РSelvfølgelig er alle innganger, bortsett fra inngangen for tilkobling av DHT22, beskyttet av motstander og dioder: Jeg hadde ikke noe ønske om å brenne ESP8266, og dioder og motstander koster bare noen få kopek.

Bilde Det ferdige produktet kan sees i begynnelsen av artikkelen. Jeg bestilte flere av disse brettene - hva om jeg brenner dem eller må kutte sporbeina?
Men heldigvis trengte jeg ikke det.

ФDette produktet er selvfølgelig skjønnhet og storhet. Men for enkelhets skyld, nedenfor er et tegningsdiagram for å koble simulatorer av sensorer og aktuatorer til brettet.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

Вi stedet for nivåsensorer er det Input1..3-knapper, i stedet for startere er det LED-er koblet til Relay1..3-reléet. Vel, en variabel motstand på ADC for å simulere inngangsspenningen.
КNår releet er slått av, lyser den røde LED-en. Og når den er på, er den grønn. Så jeg feilsøkte det på bordet.

КI tillegg til alt dette er det en strømkontakt på venstre side av brettet, og to serviceknapper på høyre: Reset og AP. Vel, det er en DIP-bryter som bytter enheten til programmeringsmodus. Programmeringskontakten ESP8266 via USB-UART-adapter er også tilgjengelig.

Noen forklaringer om knappene. Hva er Tilbakestill – og så er det klart. Og her er knappen AP nødvendig for å oversette ShioTiny for å åpne tilgangspunktmodus (konfigurasjonsmodus eller konfigurasjonsmodus). Hvorfor er dette nødvendig? Vel, for eksempel rotet du til nettverksinnstillingene dine og vil endre dem. Trykk på AP-knappen i noen sekunder (til den vakre blå LED-en lyser). Ta deretter smarttelefonen eller den bærbare datamaskinen, slå på WiFi og se et åpent tilgangspunkt der med navnet esp_8266_xxxx og koble til det. Gå deretter til nettleseren på smarttelefonen eller den bærbare datamaskinen og skriv inn i adressefeltet: 192.168.4.1. Hvis alt er i orden, blir du tatt til ShIoTiny-kontrollersiden og kan konfigurere den på nytt.

КSom vi ser, er maskinvaren ikke noe komplisert. Derfor o programvaredel.

ВJeg skal beskrive alle særegenhetene ved implementeringen, men senere. En dag. Og i dag vil jeg vurdere programvaren bare "fra utsiden", det vil si fra brukerens synspunkt - meg selv eller noen andre som tok risikoen med å bruke håndverket mitt (det finnes også slike stuntmenn).

С Fra brukerens synspunkt er enheten en HTTP-server som er tilgjengelig over WiFi. Alle innstillinger, programmering og så videre gjøres ved hjelp av en nettleser.

ИSå vi gikk til kontrollersiden. Hva ser vi? Og vi ser fanen "Kontroll og status", som viser gjeldende tilstand til enhetene som brukes: innganger, utganger, ADC, DHT22. I tillegg vises tilkoblingsparametrene til tilgangspunktet (hvis vi jobber i WiFi-stasjonsmodus); tilgangspunktparametere (hvis vi jobber i WiFi-tilgangspunktmodus) eller begge deler. Vel, i tillegg vises tilkoblingsparametrene med MQTT-megleren hvis MQTT-protokollen brukes.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

КSom vi ser, ikke noe spesielt eller interessant. Det er ingenting å klikke på! Skjønt... Det er to faner til! Konfigurere nettverksinnstillinger nettverk og programkretsredaktør ElDraw.

Кså du gjettet riktig, nettverk - dette er nettverksoppsett, men ikke bare. Den har et par flere interessante parametere. La oss klikke på fanen nettverk og vi vil se der omtrent det som er vist på figuren.
НSette opp tilgangspunktnavnet og passordet for hver modus - WiFi-stasjon og WiFi-tilgangspunkt. Alt ser ut til å være klart. Samt formålet med knappen "Skann WiFi" ganske gjennomsiktig.
А her er rullegardinlisten "ShIoTiny-modus" krever avklaring. Faktum er at jeg ikke kunne bestemme på noen måte hvilken modus som ville være mer praktisk for meg å jobbe. Og derfor ga han 5 driftsmoduser for enheten.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

ПLa oss kort liste disse driftsmodusene.

Konfigurasjonsmodus — konfigurasjonsmodus. Dette er en åpen tilgangspunktmodus med en fast adresse på 192.168.4.1 og navnet esp_8266_xxxx.

Stasjonsmodus — modus for en WiFi-stasjon koblet til tilgangspunktet ditt.

AP-modus — lukket tilgangspunktmodus. Du angir navn og passord selv.

AP+Stasjonsmodus - dette er samtidig aktivering av AP-modus + Stasjonsmodus.

Enkel modus — arbeid uten nettverkstilkobling i det hele tatt. En ensom kontrollør som bærer sin tunge andel...

В noen av modusene unntatt "Konfigurasjonsmodus", kan du blokkere en WEB-side ved å merke av i boksen "Lås web i stasjonsmodus". Dette er litt av sikkerhetsmessige årsaker.

НMQTT-innstillinger er åpenbare: server, port, passord, åpen tilkobling eller ved SSL. Jeg vil ikke gå i detalj her.

КShIoTiny-kontrolleren kan blant annet sende og motta pakker i et spesielt format via multicast. Innstillingene er også åpenbare: gruppeadresse og port.
Selvfølgelig, hvis du beskriver alle nyansene til innstillingene, vil du få en egen artikkel, men dette er ikke en del av planene mine.

Иja, med en fane nettverk alt er mer eller mindre klart. La oss gå videre til hovedfunksjonen til kontrolleren - programkretsredigereren ElDraw.

Тved å trykke på fanen ElDraw, vil vi se noe sånt som følgende. Selvfølgelig, hvis enheten ikke har en lastet krets, vil kretsfeltet være tomt.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

Сvenstre - en palett av elementer eller noder (noder).
Сrettigheter - skjemafelt eller ganske enkelt "skjema".
СØverst er det knapper for inn- og utlasting til disk og til enheten, samt redigeringsknapper.

ДFor de som har jobbet med redaktører, er ledelse generelt opplagt. Du må legge til et element i diagrammet - ta det med musen og dra det fra paletten til diagrammet. Hvis du trenger å fjerne et element eller en forbindelse fra diagrammet, klikker du på det eller det med musen og trykker på tasten AV. Vi må koble elementene - vi tar inngangen til ett element og kobler det til utgangen til et annet.

ЕDet er også skalering (SHIFT+musehjul). Dessverre er det ikke mulig å kopiere elementer og grupper av elementer. Men dette plager meg ikke mye.

КI tillegg, av logiske grunner, kan inngangen til en node bare kobles til en utgang på en annen node. Men utgangen til en node er med flere innganger fra andre noder. Inngangene er alltid til venstre for nodene. Utganger er alltid til høyre.

КHvilke evner har vi for å implementere algoritmer?
ВMulighetene er ganske omfattende. Paletten inneholder noder som representerer all kontrollermaskinvare ShioTiny: innganger, releer, ADC, DHT11/22.

ДDet er logiske og aritmetiske noder for databehandling.

ЧFor at vi skal kunne jobbe med enheten via Internett, er det noder for å abonnere og publisere parametere på MQTT-megleren.

ЕHvis vi ønsker at flere ShIoTiny-kontrollere skal utveksle informasjon med hverandre, kan vi bruke noder for å sende og motta parametere ved å bruke UDP multicast-protokollen.

КI tillegg er det timernoder; kontrollnoder for hendelsesbehandling.

ПJeg skal gi deg noen eksempler. Vil du for eksempel at temperatur- og fuktighetsdata skal publiseres til en MQTT-server hvert 30. minutt? Ingenting kunne vært enklere. La oss tegne slik.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

Жmeme-knappen "Last opp". Alle!
ЕHvis du har konfigurert tilkoblingen med MQTT-megleren på fanen Nettverk riktig, så er det alt!
Кhver halvtime vil temperaturen bli publisert på megler under /T-emnet, og fuktigheten - under /H-emnet. Eller, hvis du angir dine egne emnenavn, så under dem.
ЗDet åpenbare spørsmålet er: hvorfor er 18000 30 minutter? Fordi alle tider måles i tideler av et sekund.

ТNå vil du legge til denne ordningen muligheten til å slå på Relay1-reléet via Internett, og til og med for en viss tid? Ikke noe problem. La oss fullføre tegningen slik.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

ОFem klikk på "Last opp"-knappen. Alle! Nå, i tillegg til at hver halvtime, temperatur og luftfuktighet vil bli publisert på MQTT-megleren, vil det være mulig å skru på Relay1-reléet. Ja, ikke bare slå den på, men i nøyaktig 10 minutter. Du kan aktivere reléet ved å publisere emnet /r1cmd, satt til 1. Og den virkelige tilstanden til reléet vil bli publisert i emnet /r1status.

ВVil du ikke bare slå på, men også slå av releet før tidsplanen? Ja, uansett hva du sier. Bildet under viser hvordan du gjør dette!

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

ПEr prinsippet klart? Du tegner bare algoritmen med musen! Og skriv noen innstillinger: tid, emnenavn og det er det. Dette er mye klarere enn å skrive en haug med kode.

КForresten, å fremheve forbindelser i forskjellige farger er ikke "Photoshop" - det er en av redaktørens funksjoner. Du kan farge tilkoblingene som du ønsker for ikke å bli forvirret.

Нoh og det er ikke alt! For å feilsøke algoritmen er det en "Monitor start"-knapp. Merkelig nok slår den på "monitor" -modus. I denne modusen leses tilstanden til alle utganger til alle noder periodisk fra kontrolleren ShioTiny og vises på diagrammet. Omtrent som på bildet under.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»

ТDet vil si at vi kan se i "nesten sanntid" hva vi har ved inngangen og utgangen til hver node. Det hjelper mye når noe ikke er klart.

ЕDet er mange flere "triks og funksjoner" som jeg vil beskrive, men min samvittighet vil ikke tillate deg å kaste bort tiden din på dem i én artikkel. Hovedideen implementert er allerede klar: et minimum av tilpassbare parametere - maksimal klarhet.

Fly i salven

КSelvfølgelig vil jeg at det ikke skal være noen flue i salven, men verden er ikke ideell. Både redaktøren min og kontrolleren min er ikke perfekte. Jeg oppdaget to hovedtrekk som jeg ennå ikke har klart å eliminere.

ВFor det første oppstår det noen ganger feil når elementer flyttes i grupper. Men dette forstyrrer ikke arbeidet mye. Mer en "funksjon" enn en "bug".

И, for det andre, under visse forhold, etter å ha lastet kretsen inn i enheten ved å bruke "Last opp" -knappen, starter den på nytt. Dette forstyrrer ikke livet, men redaktørsiden må oppdateres.

Konklusjon

НJeg håper du likte ideen om å tegne algoritmer i stedet for å skrive programmer. Slik gir tilfeldige tanker, ideer og tvister noen ganger opphav til helt levedyktig utvikling.

НÅ, etter min mening har volumet av artikkelen overskredet alle rimelige grenser. Så jeg avslutter for i dag.
ПLa meg bare si at det er bare noen få uker igjen før ferien, og jeg er ganske klar til å gå fra å feilsøke kontrolleren ved bordet til å feilsøke den "i felten."
ЕHvis noen er interessert i mine ideer eller utviklingsdetaljer, skriv til meg: [e-postbeskyttet]

ВJeg vil alltid være glad for å motta kommentarer og kritikk, hvis det selvfølgelig er relevant.

Жvelkommen tilbakemeldinger, kommentarer og forslag.

Lenker, referanser og pakker

ESP8266
WiFi
MQTT
UDP Multicast

På forespørsel fra arbeidstakere

ВJeg legger ut rådokumentasjonen og fastvaren (binær).

https://github.com/shiotiny/ShIoTinyBin

Fastvare: https://github.com/shiotiny/ShIoTinyBin/blob/master/bin/esp-07-shiotiny.bin

kjøring: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/esp-07-shiotiny.png

Beskrivelse av komponenter og korte forklaringer: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/ShIoT-esp8266-nodes.pdf

Instruksjoner "hvordan syr" er der.

Kilde: www.habr.com

Legg til en kommentar