ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

Huvudpunkter eller vad den här artikeln handlar om

ТEftersom människors intressen är olika och folk har lite tid, så kortfattat om innehållet i artikeln.

СDen här artikeln är en översikt över controllerprojektet med lägsta pris och kapacitet visuell programmering via webbläsare.

ПEftersom det här är en recensionsartikel som syftar till att visa "vad som kan pressas ut ur en penny controller", bör du inte leta efter djupa sanningar och detaljerade algoritmer i den.

РMotivationen, idéerna och resultaten av att bygga en kontroller baserad på ett WiFI-chip beaktas ESP8266.

Varning

Jag ville inte skriva den här artikeln. Jag är inte alls ett fan av att skriva artiklar. Du måste tänka på detta, och mycket. Tänk på hur man skriver på ett sådant sätt att antalet personer som missförstår dig reduceras till ett minimum. Tänk på hur man inte går till ytterligheter. Och det finns mycket mer att tänka på.
Men mina vänner sa att eftersom mina insatser inom IoT och annan liten automation är intressanta för dem, så kan de också vara intressanta för andra och för allmänheten. Ja, var samlas allmänheten som är intresserad av detta? Naturligtvis på navet. Och här är jag. Gammal läsare och ny författare.

Jag tar inget ansvar för fel, felaktigheter, stavfel, inaktuell presentationsstil etc. som läsaren kanske inte gillar. Läs på egen risk.

Jag varnar dig också omedelbart för att jag inte kommer att förklara vad MQTT, WiFi och UDP multicast är och andra saker som inte är direkt relaterade till ämnet. Det finns några länkar i slutet av artikeln.

Födelsen av en idé eller någon text

ЖLivet är ingen lätt sak och Hans Majestät Chans spelar en viktig roll i det. Så jag vill dela med mig av hur slumpmässiga händelser, i kombination med naturlig lättja, resulterade i en ganska intressant utveckling av en kontroller baserad på ESP8266.

НDet hela började ganska rutinmässigt: jag ville bygga ett system för att kontrollera vattenförsörjningen och vattningen av trädgårdsrabatter och -buskar på landet.

НÅh, eftersom jag bara kan arbeta fullt ut med rör, tankar och kranar på semestern, som fortfarande var mer än ett halvår kvar - allt begränsades till diskussioner på jobbet med kollegor och vänner och kamrater i en informell miljö.

ТÄmnet "liten automation" eller, som de brukar säga bland "dessa skolpojke-hackers-hipsters" - ämnet IoT - Internet of Things - har intresserat mig länge. Långt innan själva Internet användes flitigt.

ЕRedan som barn ville jag att saker skulle göra något "på egen hand". Och det vore önskvärt att jag kunde kontrollera dem på något sätt på avstånd. Men på den tiden (80-talet, början av 90-talet av förra millenniet) var detta ganska svårt. Internet var inte allmänt tillgängligt någonstans i världen, precis som det inte fanns några mobiltelefoner, surfplattor eller ens LCD-skärmar eller USB-minnen någonstans. Så vi var tvungna att begränsa oss till "klappljusbrytare" och enkla radiofjärrkontroller. Men för den tiden och den åldern var det inte dåligt och intressant.

НÅh, det här är saker från det förflutna. Nu är det 15-talet. Och alla har en smartphone i fickan, internet är tillgängligt nästan överallt där det behövs och inte behövs, och basen av tillgängliga elektroniska komponenter är nu sådan att för bara XNUMX år sedan skulle den genomsnittliga invånaren på planeten jorden aldrig ha drömt om det .

ПDärför, efter att ha bestämt mig för att bygga en kontroller för vattenfrågor vid dacha, vände jag min uppmärksamhet mot ESP8266-chippet.
Först och främst är detta chip billigt. Och om det inte räcker med en styrenhet kan du installera två, tre eller fem. För det andra har den WiFi ombord. Det vill säga, du kan se vad som händer via Internet och till och med styra processen från vilken smartphone som helst. Naturligtvis behöver du en accesspunkt med internetuppkoppling, men det är inget problem. Hur som helst, det är nästan överallt eller är på väg att vara, inklusive i min dacha.

ПEfter att ha fördjupat mig i den underbara världen av projekt för ESP8266, blev jag förvånad över att upptäcka att trots de fantastiska funktionerna hos detta chip, är projekt på det, med sällsynta undantag, uppdelade i två typer: dessa är antingen extremt primitiva program som "klicka strömbrytarna från din smartphone och stirrar på tillståndet för sensortemperaturerna via Internet"; eller bra och solida JavaScript- eller Lua-tolkar, men tyvärr förbrukar de nästan allt minne och låter dig inte göra något allvarligt.

ПMin första idé var så enkel som pannkakor - att skriva ett enkelt program för att styra pumpar baserat på sensorernas tillstånd och det är allt. Men, som en erfaren roller när det gäller att hoppa på raken för att implementera olika system, förstod jag att jag definitivt inte skulle kunna förutse alla krökar av algoritmen som jag skulle vilja eller behöva räta ut under konstruktionen av algoritmen. vattenförsörjning och bevattningssystem.

ДDet är inte särskilt bekvämt att bearbeta programmet på dacha, i en mörk lada. Men du måste.
Vad är vägen ut? Naturligtvis var det första jag tänkte på att göra algoritmen anpassningsbar. En av mina kollegor gav många råd – vad man skulle ställa in och hur. Med detta dödade han min första idé i sin linda. Tack vare honom. Om han inte hade avslöjat för mina ögon antalet parametrar som jag skulle behöva konfigurera, skulle jag förmodligen inte ha vägrat det här alternativet: att göra en sida med algoritminställningar.

НDen skrämmande bilden av antalet inställningsparametrar, och även de som påverkar varandra, nyktrade mig till. Återigen insåg jag att man inte kan förutse allt...

СJag ska göra en reservation en gång: jag är lat. Väldigt lat! Jag är uppriktigt sagt för lat för att skriva om programmet varje gång. Därför uppstod uppgiften - hur man snabbt och enkelt ställer in en algoritm, helst utan programmering? Dessutom kommer denna algoritm att vara ganska komplicerad; kommer att ha många parametrar; kommer att vara specifikt för mitt fall och olämpligt för andra. Och jag vill verkligen göra enheten mer eller mindre universell...

ПEftersom det fortfarande var ungefär ett halvår innan semester och alla möjliga rörpumpningsarbeten, bestämde jag mig för att ta mig tid och fundera på hur jag skulle göra det bekvämt och vackert? Hur programmerar man utan programmering? Hur gör man utan en biljon parametrar som kan ändras vid konfigurering?

КSom vanligt hade allt redan uppfunnits innan oss: jag insåg att jag ville rita en algoritm i form av handlingsrutor och koppla ihop dem med kommunikationslinjer som visar vart data flyger från och till. Tja, genom att peka på torget vill jag kunna konfigurera några av dess individuella parametrar.

ИTanken på att definiera en algoritm genom att rita den i rutor är inte ny. Sådana system fanns redan på 80-talet; Nu finns det ett superpopulärt NodeRed-system, som är välkänt för dem som redan har anslutit sig till en värld av småskalig automation/IoT.

НÅh, här är problemet: sådana system är designade för "stora datorer". I värsta fall - på Raspberry PI. Men inte på ESP8266, som bara har några tiotals kilobyte RAM och inget operativsystem!

Кvad ska man göra? Och det finns bara två utvägar: skriv och rita ett program på en "stor PC" eller bärbar dator och överför sedan det i någon form till ESP8266, eller försök att "skjuta in det omöjliga" i själva ESP8266-kontrollern.

ПDärför var det maximala programmet jag hade detta: för att programmera din kontrollenhet ska du inte behöva något annat än en bärbar dator med webbläsare! Det vill säga en bärbar dator med en webbläsare och min kontroller - detta borde räcka för att fullt ut konfigurera och skriva och rita kontrollprogram.

И, som det visade sig var det fullt möjligt att genomföra detta!
Jag kommer inte att tråka ut dig med alla detaljer om projektutvecklingen. Jag kommer bara att säga att baserat på de ord som kom till mitt sinne och tunga under utvecklingsprocessen, skulle det vara möjligt att komponera en separat "Ordbok över obscent språk som används av elektronikindustriarbetare" Men det är över. Mer exakt, inte allt, men det första, svåraste stadiet, när det inte är klart om din idé om att leva kommer att finnas där eller är det bara deliriet av en grå valack på en månljus natt.

ПJag kommer att dela resultatet av det som kom ut och fick namnet "ShIoTiny Controller".

Så vad hände?

Hårdvaran delen ShIoTiny-styrenheten är standard och enkel: tre ingångar utformade för sensorer av "torrkontakt" (knappar, reed-omkopplare, de är också vattennivåsensorer i tanken), en ADC-ingång, en ingång för anslutning av en temperatur- och fuktighetssensor på DHT22 typ eller liknande. Och slutligen tre utgångar i form av kopplingsreläer för 220 Volt, 1 Ampere. Reläet säger 10A, men jag är realist och kommer inte att tillåta 10A genom kortet. Och för att styra pumpstartare räcker det med 1Amp. Allt detta drivs från en strömkälla med en spänning på 5 till 9 volt.

ЧOm jag ska vara ärlig så la jag till temperatursensorn precis så, men på ADC:n hade jag förhoppningar om att mäta spänningen i matningsnätet. Vem vet?

РNaturligtvis är alla ingångar, förutom ingången för anslutning av DHT22, skyddade av motstånd och dioder: jag hade ingen lust att bränna ESP8266, och dioder och motstånd kostar bara några kopek.

Photo Shoot Den färdiga produkten kan ses i början av artikeln. Jag beställde flera av dessa brädor - tänk om jag bränner dem eller måste skära av spårbenen?
Men lyckligtvis behövde jag inte.

ФDenna produkt är naturligtvis skönhet och storhet. Men för enkelhetens skull, nedan är ett ritningsdiagram för att ansluta simulatorer av sensorer och ställdon till kortet.

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

Вistället för nivåsensorer finns Input1..3-knappar, istället för starters finns lysdioder kopplade till Relä1..3-reläet. Jo, ett variabelt motstånd på ADC:n för att simulera inspänningen.
КNär reläet är avstängt tänds den röda lysdioden. Och när den är på är den grön. Så jag felsökte det på bordet.

КUtöver allt detta finns en strömkontakt på kortets vänstra sida, och två serviceknappar till höger: Reset och AP. Tja, det finns en DIP-switch som växlar enheten till programmeringsläge. Programmeringskontakten ESP8266 via USB-UART-adapter är också tillgänglig.

Några förklaringar om knapparna. Vad är Återställa – och så är det klart. Och här är knappen AP behövs för att översätta ShioTiny för att öppna åtkomstpunktsläget (konfigurationsläge eller konfigurationsläge). Varför är detta nödvändigt? Tja, till exempel, du förstörde dina nätverksinställningar och vill ändra dem. Tryck på AP-knappen i några sekunder (tills den vackra blå lysdioden tänds). Ta sedan din smartphone eller bärbara dator, slå på WiFi och se en öppen åtkomstpunkt där med namnet esp_8266_xxxx och anslut till den. Gå sedan till webbläsaren på din smartphone eller bärbara dator och skriv i adressfältet: 192.168.4.1. Om allt är i sin ordning, kommer du till ShioTiny-kontrollsidan och kan konfigurera den igen.

КSom vi ser är hårdvaran inget komplicerat. Därför o mjukvarudel.

ВJag kommer att beskriva alla egenskaperna med implementeringen, men senare. Någon dag. Och idag kommer jag bara att betrakta programvaran "från utsidan", det vill säga ur användarens synvinkel - mig själv eller någon annan som tog risken att använda mitt hantverk (det finns också sådana stuntmän).

С Ur användarens synvinkel är enheten en HTTP-server som är tillgänglig via WiFi. Alla inställningar, programmering och så vidare görs med hjälp av en webbläsare.

ИSå vi gick till kontrollsidan. Vad ser vi? Och vi ser fliken "Kontroll och status", som visar det aktuella tillståndet för de enheter som används: ingångar, utgångar, ADC, DHT22. Dessutom visas anslutningsparametrarna till åtkomstpunkten (om vi arbetar i WiFi-stationsläge); åtkomstpunktsparametrar (om vi arbetar i WiFi-åtkomstpunktsläge) eller båda. Tja, dessutom visas anslutningsparametrarna med MQTT-mäklaren om MQTT-protokollet används.

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

КSom vi ser, inget speciellt eller intressant. Det finns inget att ens klicka på! Fast... Det finns två flikar till! Konfigurera nätverksinställningar nätverk och programkretsredigerare ElDraw.

Кså du gissade rätt, nätverk - det här är nätverksinstallation, men inte bara. Den har ytterligare ett par intressanta parametrar. Låt oss klicka på fliken nätverk och där ser vi ungefär vad som visas i figuren.
НStälla in åtkomstpunktens namn och lösenord för varje läge - WiFi-station och WiFi-åtkomstpunkt. Allt verkar vara klart. Samt syftet med knappen "Skanna WiFi" ganska transparent.
А här är rullgardinslistan "ShIoTiny-läge" kräver ett förtydligande. Faktum är att jag inte kunde bestämma mig på något sätt vilket läge som skulle vara bekvämare för mig att arbeta. Och därför tillhandahöll han 5 driftsätt för enheten.

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

ПLåt oss kort lista dessa driftlägen.

Konfigurationsläge — konfigurationsläge. Detta är ett läge med öppen åtkomstpunkt med en fast adress 192.168.4.1 och namnet esp_8266_xxxx.

Stationsläge — läge för en WiFi-station som är ansluten till din åtkomstpunkt.

AP-läge — läge för stängd åtkomstpunkt. Du ställer in namn och lösenord själv.

AP+stationsläge - detta är den samtidiga aktiveringen av AP-läge + Stationsläge.

Singelläge — arbeta utan nätverksanslutning alls. En ensam kontrollant som bär sin tunga del...

В något av lägena utom "Konfigurationsläge", kan du blockera en WEB-sida genom att markera rutan "Lås webben i stationsläge". Detta är typ av säkerhetsskäl.

НMQTT-inställningar är uppenbara: server, port, lösenord, öppen anslutning eller via SSL. Jag går inte in på detaljer här.

КShIoTiny-kontrollern kan bland annat skicka och ta emot paket av ett speciellt format via multicast. Dess inställningar är också uppenbara: gruppadress och port.
Naturligtvis, om du beskriver alla nyanser av inställningarna, kommer du att få en separat artikel, men det här är inte en del av mina planer.

Иja, med en flik nätverk allt är mer eller mindre klart. Låt oss gå vidare till styrenhetens huvudfunktion - programkretsredigeraren ElDraw.

Тgenom att trycka på fliken ElDraw, kommer vi att se något i stil med följande. Naturligtvis, om enheten inte har en laddad krets, kommer kretsfältet att vara tomt.

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

Сvänster - en palett av element eller noder (noder).
Сrättigheter - schemafält eller helt enkelt "schema".
СLängst upp finns knappar för in- och urladdning till disk och till enheten, samt redigeringsknappar.

ДFör den som har arbetat med redaktörer är ledningen generellt sett självklar. Du måste lägga till ett element i diagrammet - ta det med musen och dra det från paletten till diagrammet. Om du behöver ta bort ett element eller en anslutning från diagrammet, klicka på det eller det med musen och tryck på knappen DEN. Vi måste ansluta elementen - vi tar ingången från ett element och ansluter det till utgången från ett annat.

ЕDet finns även skalning (SHIFT+mushjul). Tyvärr går det inte att kopiera element och grupper av element. Men det här stör mig inte mycket.

КDessutom, av logiska skäl, kan en nods ingång endast kopplas till en utgång på en annan nod. Men utsignalen från en nod är med flera ingångar från andra noder. Ingångarna är alltid till vänster om noderna. Utgångar är alltid till höger.

КVilka möjligheter har vi för att implementera algoritmer?
ВMöjligheterna är ganska omfattande. Paletten innehåller noder som representerar all styrenhetshårdvara ShioTiny: ingångar, reläer, ADC, DHT11/22.

ДDet finns logiska och aritmetiska noder för databehandling.

ЧFör att vi ska kunna arbeta med enheten via Internet finns det noder för prenumeration och publicering av parametrar på MQTT-mäklaren.

ЕOm vi ​​vill att flera ShioTiny-kontroller ska utbyta information med varandra, kan vi använda noder för att skicka och ta emot parametrar med hjälp av UDP multicast-protokollet.

КDessutom finns timernoder; kontrollnoder för händelsebearbetning.

ПJag ska ge dig några exempel. Vill du till exempel att temperatur- och luftfuktighetsdata ska publiceras på en MQTT-server var 30:e minut? Inget kunde vara enklare. Låt oss rita så här.

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

Жmeme-knappen "Ladda upp". Allt!
ЕOm du har konfigurerat anslutningen med MQTT-mäklaren korrekt på fliken Nätverk, då är det allt!
Кvarje halvtimme kommer temperaturen att publiceras på mäklaren under /T-ämnet, och luftfuktigheten - under /H-ämnet. Eller, om du anger dina egna ämnesnamn, sedan under dem.
ЗDen uppenbara frågan är: varför är 18000 30 minuter? Eftersom alla tider mäts i tiondelar av en sekund.

ТNu vill du lägga till det här schemat möjligheten att slå på Relay1-reläet via Internet, och till och med under en viss tid? Inga problem. Låt oss slutföra ritningen så här.

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

ОFem klicka på "Ladda upp"-knappen. Allt! Nu, förutom att det varje halvtimme kommer att publiceras temperatur och luftfuktighet på MQTT-mäklaren, kommer det att vara möjligt att slå på Relay1-reläet. Ja, inte bara slå på den, utan i exakt 10 minuter. Du kan aktivera reläet genom att publicera ämnet /r1cmd, satt till 1. Och reläets verkliga tillstånd kommer att publiceras i ämnet /r1status.

ВVill du inte bara slå på, utan också stänga av reläet i förväg? Ja, vad du än säger. Bilden nedan visar hur du gör detta!

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

ПÄr principen tydlig? Du ritar bara algoritmen med musen! Och skriv några inställningar: tid, ämnesnamn och det är allt. Detta är mycket tydligare än att skriva en massa kod.

КFörresten, att markera anslutningar i olika färger är inte "Photoshop" - det är en av redaktörens funktioner. Du kan färga anslutningarna som du vill för att inte bli förvirrad.

Нåh och det är inte allt! För att felsöka algoritmen finns det en "Monitor start"-knapp. Konstigt nog slår den på "monitor" -läget. I detta läge läses tillståndet för alla utgångar från alla noder periodiskt från styrenheten ShioTiny och visas på diagrammet. Ungefär som på bilden nedan.

ShioTiny: liten automatisering, Internet of things eller "sex månader före semester"

ТDet vill säga vi kan se i "nästan realtid" vad vi har vid ingången och utgången av varje nod. Det hjälper mycket när något inte är klart.

ЕDet finns många fler "knep och funktioner" som jag skulle vilja beskriva, men mitt samvete tillåter dig inte att slösa din tid på dem i en artikel. Huvudidén som implementerats är redan klar: ett minimum av anpassningsbara parametrar - maximal tydlighet.

Hake

КSjälvklart vill jag att det inte ska finnas någon fluga i salvan, men världen är inte idealisk. Både min editor och min controller är inte perfekta. Jag upptäckte två huvuddrag som jag ännu inte har kunnat eliminera.

ВFör det första uppstår ibland fel när element flyttas i grupper. Men detta stör inte arbetet mycket. Mer av en "funktion" än en "bugg".

И, för det andra, under vissa förhållanden, efter att ha laddat kretsen i enheten med knappen "Ladda upp", startas den om. Detta stör inte livet, men redaktörssidan måste uppdateras.

Slutsats

НJag hoppas att du gillade idén att rita algoritmer istället för att skriva program. Det är så slumpmässiga tankar, idéer och dispyter ibland ger upphov till en helt gångbar utveckling.

НÅh, enligt min mening har artikelns volym överskridit alla rimliga gränser. Så jag avslutar för idag.
ПLåt mig bara säga att det bara är några veckor kvar innan semestern och jag är ganska redo att gå från att felsöka kontrollern vid bordet till att felsöka den "i fältet."
ЕOm någon är intresserad av mina idéer eller utvecklingsdetaljer, skriv till mig: [e-postskyddad]

ВJag tar alltid gärna emot kommentarer och kritik, om det så klart är relevant.

Жvälkomna din feedback, kommentarer och förslag.

Länkar, referenser och paket

ESP8266
WiFi
MQTT
UDP Multicast

På begäran av arbetstagare

ВJag lägger upp den råa dokumentationen och firmware (binär).

https://github.com/shiotiny/ShIoTinyBin

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

driving: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/esp-07-shiotiny.png

Beskrivning av komponenter och korta förklaringar: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/ShIoT-esp8266-nodes.pdf

Instruktioner "hur man syr" finns där.

Källa: will.com

Lägg en kommentar