ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

Belangrijkste punten of waar dit artikel over gaat

ТOmdat de interesses van mensen verschillend zijn en mensen weinig tijd hebben, dan kort over de inhoud van het artikel.

СDit artikel is een overzicht van het controllerproject met de minimumprijs en mogelijkheden visuele programmering via WEB-browser.

ПAangezien dit een overzichtsartikel is dat bedoeld is om te laten zien “wat er uit een penny-controller kan worden geperst”, moet je er niet naar diepe waarheden en gedetailleerde algoritmen in zoeken.

РDe motivatie, ideeën en resultaten van het bouwen van een controller op basis van een WiFI-chip worden besproken ESP8266.

Waarschuwing

Ik wilde dit artikel niet schrijven. Ik ben helemaal geen fan van het schrijven van artikelen. Je moet hierover nadenken, en veel. Bedenk hoe u zo kunt schrijven dat het aantal mensen dat u verkeerd begrijpt, tot een minimum wordt beperkt. Denk erover na hoe je niet tot het uiterste moet gaan. En er is nog veel meer om over na te denken.
Maar mijn vrienden zeiden dat aangezien mijn inspanningen op het gebied van IoT en andere kleine automatisering interessant voor hen zijn, ze ook interessant kunnen zijn voor anderen en voor het grote publiek. Waar komt het publiek bijeen dat hierin geïnteresseerd is? Natuurlijk, op de hub. En hier ben ik. Oude lezer en nieuwe schrijver.

Ik draag geen enkele verantwoordelijkheid voor fouten, onnauwkeurigheden, typfouten, een verouderde presentatiestijl, enz. die de lezer misschien niet leuk vindt. Lees op eigen risico.

Ik waarschuw je ook meteen dat ik niet zal uitleggen wat MQTT, WiFi en UDP-multicast zijn en andere zaken die niet direct verband houden met het onderwerp. Aan het einde van het artikel staan ​​enkele links.

De geboorte van een idee of een songtekst

ЖHet leven is niet eenvoudig en Zijne Majesteit Chance speelt daarin een belangrijke rol. Daarom wil ik delen hoe willekeurige gebeurtenissen, gekoppeld aan natuurlijke luiheid, resulteerden in een nogal interessante ontwikkeling van een controller op basis van de ESP8266.

НHet begon allemaal vrij routinematig: ik wilde een systeem bouwen om de watervoorziening en de bewatering van de tuinbedden en struiken in het land te controleren.

Нoh, aangezien ik pas volledig aan leidingen, tanks en kranen kan werken tijdens de vakantie, die nog ruim zes maanden zou duren, bleef alles beperkt tot discussies op het werk met collega's en vrienden en kameraden in een informele setting.

ТHet onderwerp ‘kleine automatisering’ of, zoals ze gewoonlijk zeggen onder ‘deze schooljongens-hackers-hipsters’ – het onderwerp IoT – Internet of Things – interesseert me al heel lang. Lang voordat het internet zelf op grote schaal werd gebruikt.

ЕAls kind wilde ik al dat dingen ‘op zichzelf’ zouden gebeuren. En het zou wenselijk zijn dat ik ze op de een of andere manier vanaf een afstand zou kunnen besturen. Maar in die tijd (jaren '80, begin jaren '90 van het vorige millennium) was dit nogal moeilijk. Het internet was nergens ter wereld algemeen beschikbaar, net zoals er nergens mobiele telefoons, tablets of zelfs LCD-schermen of USB-flashdrives waren. We moesten ons dus beperken tot “klaplichtschakelaars” en eenvoudige radiografische afstandsbedieningen. Maar voor die tijd en die leeftijd was het niet slecht en interessant.

НO, dit zijn dingen uit het verleden. Nu is het de 15e eeuw. En iedereen heeft een smartphone op zak, internet is bijna overal beschikbaar waar het nodig en niet nodig is, en de basis van beschikbare elektronische componenten is nu zodanig dat de gemiddelde bewoner van planeet Aarde er vijftien jaar geleden nooit van zou hebben gedroomd .

ПDaarom, nadat ik had besloten een controller voor waterzaken in de datsja te bouwen, richtte ik mijn aandacht op de ESP8266-chip.
Allereerst is deze chip goedkoop. En als één controller niet genoeg is, kun je er twee, drie of vijf installeren. Ten tweede heeft het WiFi aan boord. Dat wil zeggen dat u via internet kunt kijken wat er gebeurt en zelfs vanaf elke smartphone het proces kunt regelen. Uiteraard heb je een access point met internettoegang nodig, maar dit is geen probleem. Hoe dan ook, het is bijna overal of staat op het punt te gebeuren, ook in mijn datsja.

ПNadat ik mezelf had ondergedompeld in de wondere wereld van projecten voor de ESP8266, was ik verrast om te ontdekken dat ondanks de verbazingwekkende mogelijkheden van deze chip, projecten erop, op zeldzame uitzonderingen na, in twee typen zijn verdeeld: dit zijn ofwel extreem primitieve programma's zoals "klik de schakelaars van je smartphone en bekijk de stand van de sensortemperaturen via internet"; of goede en solide JavaScript- of Lua-tolken, maar helaas verbruiken ze bijna al het geheugen en laten ze je niets serieus doen.

ПMijn eerste idee was zo eenvoudig als een pannenkoek: een eenvoudig programma schrijven voor het besturen van pompen op basis van de status van de sensoren, en dat is alles. Maar als een doorgewinterde roller in termen van het springen op de hark van het implementeren van verschillende systemen, begreep ik dat ik absoluut niet van tevoren alle bochten van het algoritme zou kunnen voorzien die ik zou willen of moeten rechttrekken tijdens de constructie van het algoritme. watervoorziening en irrigatiesysteem.

ДHet is niet erg handig om het programma in de datsja, in een donkere schuur, te verwerken. Maar je moet.
Wat is de uitweg? Het eerste waar ik aan dacht was natuurlijk om het algoritme aanpasbaar te maken. Een van mijn collega's gaf veel advies: wat moest ik instellen en hoe. Hiermee heeft hij mijn eerste idee in de kiem gesmoord. Dankzij hem. Als hij niet voor mijn ogen had onthuld hoeveel parameters ik zou moeten configureren, zou ik deze optie waarschijnlijk niet hebben geweigerd: het maken van een pagina met algoritme-instellingen.

НHet angstaanjagende beeld van het aantal instellingsparameters, en zelfs de parameters die elkaar beïnvloeden, maakte me nuchter. Opnieuw besefte ik dat je niet alles kunt voorzien...

СIk zal een keer reserveren: ik ben lui. Heel lui! Ik ben eerlijk gezegd te lui om het programma elke keer te herschrijven. Daarom ontstond de taak: hoe stel je snel en eenvoudig een algoritme in, bij voorkeur zonder programmeren? Bovendien zal dit algoritme behoorlijk ingewikkeld zijn; zal veel parameters hebben; zal specifiek zijn voor mijn geval en niet geschikt voor anderen. En ik wil het apparaat echt min of meer universeel maken...

ПOmdat er nog ongeveer zes maanden vóór de vakantie waren en allerlei soorten leidingwerk, besloot ik de tijd te nemen en na te denken over hoe ik het gemakkelijk en mooi kon maken? Hoe programmeren zonder programmeren? Hoe te doen zonder een biljoen parameters die kunnen worden gewijzigd tijdens het configureren?

КZoals gewoonlijk was alles al voor ons uitgevonden: ik besefte dat ik een algoritme wilde tekenen in de vorm van actievierkanten en deze wilde verbinden met communicatielijnen die laten zien waar de gegevens vandaan en naartoe vliegen. Door naar het vierkant te wijzen, wil ik enkele van de individuele parameters ervan kunnen configureren.

ИHet idee om een ​​algoritme te definiëren door het in vierkanten te tekenen is niet nieuw. Dergelijke systemen bestonden al in de jaren 80; Nu is er een superpopulair NodeRed-systeem, dat goed bekend is bij degenen die zich al hebben aangesloten bij de wereld van kleinschalige automatisering/IoT.

НOh, hier is het probleem: dergelijke systemen zijn ontworpen voor “grote pc’s”. In het slechtste geval - op Raspberry PI. Maar niet op de ESP8266, die slechts enkele tientallen kilobytes RAM heeft en geen besturingssysteem!

Кwat moeten we doen? En er zijn maar twee uitwegen: schrijf en teken een programma op een "grote pc" of laptop, en breng het vervolgens in een of andere vorm over naar de ESP8266, of probeer "het onmogelijke" in de ESP8266-controller zelf te stoppen.

ПDaarom was het maximale programma dat ik had dit: om je controller te programmeren heb je niets anders nodig dan een laptop met een WEB-browser! Dat wil zeggen, een laptop met een WEB-browser en mijn controller - dit zou voldoende moeten zijn om besturingsprogramma's volledig te configureren, schrijven en tekenen.

ИHet bleek dat het heel goed mogelijk was om dit te implementeren!
Ik zal je niet vervelen met alle details van de projectontwikkeling. Ik kan alleen maar zeggen dat op basis van de woorden die tijdens het ontwikkelingsproces in mijn gedachten en tong opkwamen, het mogelijk zou zijn om een ​​aparte “Woordenboek van obscene taal gebruikt door werknemers in de elektronische industrie" Maar het is allemaal voorbij. Om precies te zijn, niet alles, maar de eerste, moeilijkste fase, waarin het niet duidelijk is of jouw idee van leven er zal zijn of is het gewoon het delirium van een grijze ruin op een maanverlichte nacht.

ПIk zal het resultaat delen van wat eruit kwam en de naam kreeg "ShIoTiny-controller".

Dus wat gebeurde er?

De hardware onderdeel De ShIoTiny-controller is standaard en eenvoudig: drie ingangen ontworpen voor sensoren van het type “droog contact” (knoppen, reed-schakelaars, het zijn ook waterniveausensoren in de tank), één ADC-ingang, één ingang voor het aansluiten van een temperatuur- en vochtigheidssensor van de DHT22-type of vergelijkbaar. En tot slot nog drie uitgangen in de vorm van schakelrelais voor 220 Volt, 1 Ampère. Het relais zegt 10A, maar ik ben een realist en laat geen 10Amp door het bord stromen. En om pompstarters aan te sturen is 1Amp voldoende. Dit alles wordt gevoed vanuit een stroombron met een spanning van 5 tot 9 volt.

ЧEerlijk gezegd heb ik de temperatuursensor zomaar toegevoegd, maar op de ADC hoopte ik de spanning van het voedingsnetwerk te meten. Wie weet?

РNatuurlijk zijn alle ingangen, behalve de ingang voor het aansluiten van DHT22, beschermd door weerstanden en diodes: ik had geen zin om de ESP8266 te verbranden, en diodes en weerstanden kosten slechts een paar kopeken.

foto Het eindproduct is te zien aan het begin van het artikel. Ik heb meerdere van deze planken besteld. Wat moet ik doen als ik ze verbrand of de spoorbenen moet doorknippen?
Maar gelukkig hoefde ik dat niet te doen.

ФDit product is natuurlijk schoonheid en grandeur. Maar voor het gemak vindt u hieronder een schema van het aansluiten van simulatoren van sensoren en actuatoren op het bord.

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

Вin plaats van niveausensoren zijn er Input1..3-knoppen, in plaats van starters zijn er LED's aangesloten op het relais Relay1..3. Welnu, een variabele weerstand op de ADC om de ingangsspanning te simuleren.
КWanneer het relais uitgeschakeld is, licht de rode LED op. En als het aan is, is het groen. Dus debugde ik het op tafel.

КNaast dit alles bevindt zich aan de linkerkant van het bord een stroomconnector en aan de rechterkant twee serviceknoppen: Reset en AP. Welnu, er is een DIP-schakelaar die het apparaat in de programmeermodus schakelt. De ESP8266-programmeerconnector via USB-UART-adapter is ook beschikbaar.

Enige uitleg over de knoppen. Wat Reset - en zo is het duidelijk. En hier is de knop AP nodig om te vertalen ShioTiny om de toegangspuntmodus te openen (configuratiemodus of configuratiemodus). Waarom is dit nodig? U heeft bijvoorbeeld uw netwerkinstellingen verprutst en wilt deze wijzigen. Druk een paar seconden op de AP-knop (totdat de mooie blauwe LED oplicht). Neem vervolgens uw smartphone of laptop, zet WiFi aan en zie daar een open toegangspunt met de naam esp_8266_xxxx en maak er verbinding mee. Ga vervolgens naar de browser van uw smartphone of laptop en typ in de adresbalk: 192.168.4.1. Als alles in orde is, wordt u naar de ShIoTiny-controllerpagina geleid en kunt u deze opnieuw configureren.

КZoals we zien, is de hardware niets ingewikkelds. Daarom o softwaregedeelte.

ВIk zal alle eigenaardigheden van de implementatie beschrijven, maar later. Op een dag. En vandaag zal ik de software alleen 'van buitenaf' bekijken, dat wil zeggen vanuit het perspectief van de gebruiker - ikzelf of iemand anders die het risico heeft genomen mijn vak te gebruiken (er zijn ook zulke stuntmannen).

С Vanuit het oogpunt van de gebruiker is het apparaat een HTTP-server die toegankelijk is via WiFi. Alle instellingen, programmering, enzovoort worden gedaan met behulp van een WEB-browser.

ИDus gingen we naar de controllerpagina. Wat zien we? En we zien het tabblad ‘Controle en status’, dat de huidige status van de gebruikte apparaten toont: ingangen, uitgangen, ADC, DHT22. Bovendien worden de verbindingsparameters met het toegangspunt weergegeven (als we in WiFi-stationmodus werken); toegangspuntparameters (als we in WiFi-toegangspuntmodus werken) of beide. Bovendien worden de verbindingsparameters met de MQTT-makelaar weergegeven als het MQTT-protocol wordt gebruikt.

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

КZoals we zien, niets bijzonders of interessants. Er is niets om zelfs maar op te klikken! Hoewel... Er zijn nog twee tabbladen! Netwerkinstellingen configureren Netwerken en programmacircuiteditor ElDraw.

Кdus je raadt het al, Netwerken - dit is netwerkconfiguratie, maar niet alleen. Het heeft nog een paar interessante parameters. Laten we op het tabblad klikken Netwerken en we zullen daar ongeveer zien wat er in de figuur wordt weergegeven.
НDe naam en het wachtwoord van het toegangspunt instellen voor elke modus: WiFi-station en WiFi-toegangspunt. Alles lijkt duidelijk. Evenals het doel van de knop "WiFi scannen" behoorlijk transparant.
А hier is de vervolgkeuzelijst "ShIoTiny-modus" vergt opheldering. Feit is dat ik op geen enkele manier kon beslissen welke modus voor mij handiger zou zijn om te werken. En daarom zorgde hij voor 5 werkingsmodi van het apparaat.

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

ПLaten we deze bedrijfsmodi kort opsommen.

Configuratiemodus — configuratiemodus. Dit is een open access point-modus met een vast adres van 192.168.4.1 en een naam van esp_8266_xxxx.

Station modus — modus van een WiFi-station dat is verbonden met uw toegangspunt.

AP-modus — gesloten toegangspuntmodus. De naam en het wachtwoord stel je zelf in.

AP+Station-modus - dit is de gelijktijdige activering van AP-modus + Station-modus.

Single mode — helemaal zonder netwerkverbinding werken. Een eenzame controleur die zijn zware deel draagt...

В een van de modi behalve "Configuratiemodus", kunt u een WEB-pagina blokkeren door het vakje aan te vinken "Web vergrendelen in stationmodus". Dit is een soort van veiligheidsredenen.

НMQTT-instellingen liggen voor de hand: server, poort, wachtwoord, open verbinding of door SSL. Ik zal hier niet in detail treden.

КDe ShIoTiny-controller kan onder meer pakketten van een speciaal formaat via multicast verzenden en ontvangen. De instellingen zijn ook duidelijk: groepsadres en poort.
Als je alle nuances van de instellingen beschrijft, krijg je natuurlijk een apart artikel, maar dit maakt geen deel uit van mijn plannen.

Иja, met een tabblad Netwerken alles is min of meer duidelijk. Laten we verder gaan met het hoofdkenmerk van de controller: de programmacircuiteditor ElDraw.

Тdoor op het tabblad te tikken ElDraw, zullen we zoiets als het volgende zien. Als het apparaat geen geladen circuit heeft, is het circuitveld uiteraard leeg.

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

Сlinks - een palet van elementen of knooppunten (knooppunten).
Сrechten - schemaveld of eenvoudigweg "schema".
СBovenaan bevinden zich knoppen voor het laden en lossen naar schijf en naar het apparaat, evenals bewerkingsknoppen.

ДVoor degenen die met redacteuren hebben gewerkt, ligt management over het algemeen voor de hand. U moet een element aan het diagram toevoegen - neem het met de muis en sleep het van het palet naar het diagram. Als u een element of verbinding uit het diagram wilt verwijderen, klikt u erop met de muis en drukt u op de toets DE. We moeten de elementen verbinden - we nemen de invoer van het ene element en verbinden dit met de uitvoer van een ander.

ЕEr is ook schaalvergroting (SHIFT+muiswiel). Helaas is het niet mogelijk om elementen en groepen elementen te kopiëren. Maar dit kan mij niet zoveel schelen.

КBovendien kan de ingang van een knooppunt om logische redenen slechts met één uitgang van een ander knooppunt worden verbonden. Maar de uitvoer van een knooppunt is met verschillende invoer van andere knooppunten. Ingangen bevinden zich altijd links van de knooppunten. Uitgangen bevinden zich altijd aan de rechterkant.

КWelke mogelijkheden hebben we om algoritmen te implementeren?
ВDe mogelijkheden zijn vrij uitgebreid. Het palet bevat knooppunten die alle controllerhardware vertegenwoordigen ShioTiny: ingangen, relais, ADC, DHT11/22.

ДEr zijn logische en rekenkundige knooppunten voor gegevensverwerking.

ЧOm ervoor te zorgen dat we via internet met het apparaat kunnen werken, zijn er knooppunten voor het abonneren en publiceren van parameters op de MQTT-makelaar.

ЕAls we willen dat meerdere ShIoTiny-controllers informatie met elkaar uitwisselen, kunnen we knooppunten gebruiken voor het verzenden en ontvangen van parameters met behulp van het UDP-multicast-protocol.

КDaarnaast zijn er timerknooppunten; controleknooppunten voor gebeurtenisverwerking.

ПIk zal je een paar voorbeelden geven. Wilt u bijvoorbeeld dat temperatuur- en vochtigheidsgegevens elke 30 minuten worden gepubliceerd naar een MQTT-server? Niets is eenvoudiger. Laten we zo tekenen.

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

Жmeme-knop "Uploaden". Alle!
ЕAls u de verbinding met de MQTT-makelaar correct hebt geconfigureerd op het tabblad Netwerken, dan is dat alles!
Кelk half uur wordt de temperatuur op de makelaar gepubliceerd onder het /T-onderwerp, en de luchtvochtigheid - onder het /H-onderwerp. Of, als u uw eigen onderwerpnamen instelt, dan daaronder.
ЗDe voor de hand liggende vraag is: waarom is 18000 30 minuten? Omdat alle tijden worden gemeten in tienden van een seconde.

ТNu wilt u aan dit schema de mogelijkheid toevoegen om het Relay1-relais via internet in te schakelen, en zelfs voor een bepaalde tijd? Geen probleem. Laten we de tekening als volgt voltooien.

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

ОVijf klikken op de knop 'Uploaden'. Alle! Nu is het, naast het feit dat elk half uur de temperatuur en vochtigheid op de MQTT-makelaar worden gepubliceerd, mogelijk om het Relay1-relais in te schakelen. Ja, niet alleen inschakelen, maar precies 10 minuten. U kunt de relay inschakelen door het onderwerp /r1cmd te publiceren, ingesteld op 1. De werkelijke status van de relay wordt gepubliceerd in het onderwerp /r1status.

ВWilt u het relais niet alleen eerder dan gepland inschakelen, maar ook eerder uitschakelen? Ja, wat je ook zegt. Op onderstaande afbeelding ziet u hoe u dit doet!

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

ПIs het principe duidelijk? Je tekent gewoon het algoritme met je muis! En schrijf een paar instellingen: tijd, onderwerpnaam en dat is alles. Dit is veel duidelijker dan het schrijven van een heleboel code.

КOverigens is het markeren van verbindingen in verschillende kleuren geen "Photoshop" - het is een van de functies van de editor. Je kunt de verbindingen naar wens kleuren, zodat ze niet in de war raken.

Нoh en dat is nog niet alles! Om het algoritme te debuggen, is er een knop “Monitor start”. Vreemd genoeg wordt de "monitor" -modus ingeschakeld. In deze modus wordt de status van alle uitgangen van alle knooppunten periodiek uit de controller gelezen ShioTiny en weergegeven op het diagram. Ongeveer zoals op onderstaande foto.

ShIoTiny: kleine automatisering, Internet of Things of “zes maanden voor vakantie”

ТDat wil zeggen dat we in “bijna realtime” kunnen zien wat we aan de invoer en uitvoer van elk knooppunt hebben. Het helpt enorm als iets niet duidelijk is.

ЕEr zijn nog veel meer 'trucs en functies' die ik zou willen beschrijven, maar mijn geweten staat niet toe dat je je tijd eraan verspilt in één artikel. Het geïmplementeerde hoofdidee is al duidelijk: een minimum aan aanpasbare parameters - maximale duidelijkheid.

Vlieg in de zalf

КNatuurlijk wil ik dat er geen vlieg in de zalf zit, maar de wereld is niet ideaal. Zowel mijn editor als mijn controller zijn niet perfect. Ik heb twee belangrijke kenmerken ontdekt die ik nog niet heb kunnen elimineren.

ВTen eerste treden er soms problemen op bij het verplaatsen van elementen in groepen. Maar dit hindert het werk niet veel. Meer een "feature" dan een "bug".

И, ten tweede, onder bepaalde omstandigheden, nadat het circuit in het apparaat is geladen met behulp van de knop "Uploaden", wordt het opnieuw opgestart. Dit interfereert niet met het leven, maar de editorpagina moet worden bijgewerkt.

Conclusie

НIk hoop dat je het idee leuk vond om algoritmen te tekenen in plaats van programma's te schrijven. Zo zorgen willekeurige gedachten, ideeën en meningsverschillen soms voor volkomen levensvatbare ontwikkelingen.

НOh, naar mijn mening heeft de omvang van het artikel alle redelijke grenzen overschreden. Dus ik rond af voor vandaag.
ПLaat ik zeggen dat er nog maar een paar weken te gaan zijn voordat de vakantie begint en dat ik er helemaal klaar voor ben om over te stappen van het debuggen van de controller aan tafel naar het debuggen ervan ‘in het veld’.
ЕAls iemand geïnteresseerd is in mijn ideeën of ontwikkelingsdetails, schrijf mij dan: [e-mail beveiligd]

ВIk zal altijd blij zijn met opmerkingen en kritiek, als deze uiteraard relevant zijn.

Жwelkom uw feedback, opmerkingen en suggesties.

Links, referenties en pakketten

ESP8266
WiFi
MQTT
UDP-multicast

Op verzoek van werknemers

ВIk plaats de onbewerkte documentatie en firmware (binar).

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

Beschrijving van componenten en korte uitleg: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/ShIoT-esp8266-nodes.pdf

Instructies "hoe te naaien" zijn aanwezig.

Bron: www.habr.com

Voeg een reactie