ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

Punti principali o di cosa tratta questo articolo

ТPoiché gli interessi delle persone sono diversi e le persone hanno poco tempo, brevemente sul contenuto dell'articolo.

СQuesto articolo offre una panoramica del progetto del controller con il prezzo e la funzionalità minimi programmazione visiva tramite browser WEB.

ПPoiché questo è un articolo di recensione volto a mostrare "cosa può essere spremuto da un penny controller", non dovresti cercare verità profonde e algoritmi dettagliati al suo interno.

РVengono presi in considerazione la motivazione, le idee e i risultati della costruzione di un controller basato su un chip WiFI ESP8266.

Attenzione

Non volevo scrivere questo articolo. Non sono affatto un fan della scrittura di articoli. Devi pensare a questo, e molto. Pensa a come scrivere in modo tale che il numero di persone che ti fraintendono sia ridotto al minimo. Pensa a come non andare agli estremi. E c'è molto altro a cui pensare.
Ma i miei amici hanno detto che, poiché i miei sforzi nel campo dell'IoT e di altre piccole automazioni interessano a loro, potrebbero interessare anche ad altri e al pubblico in generale. Ebbene, dove si riunisce il pubblico interessato a questo? Ovviamente sull'hub. Ed eccomi qui. Vecchio lettore e nuovo scrittore.

Non mi assumo alcuna responsabilità per errori, imprecisioni, refusi, stile di presentazione non aggiornato, ecc., che potrebbero non piacere al lettore. Leggi a proprio rischio.

Inoltre ti avverto subito che non ti spiegherò cosa sono MQTT, WiFi e UDP multicast e altre cose che non riguardano direttamente l'argomento. Alla fine dell'articolo ci sono alcuni link.

La nascita di un'idea o di qualche testo

ЖLa vita non è una cosa facile e Sua Maestà il Caso gioca un ruolo importante in essa. Quindi voglio condividere come eventi casuali, uniti alla naturale pigrizia, abbiano portato allo sviluppo piuttosto interessante di un controller basato sull'ESP8266.

НTutto è iniziato in modo abbastanza ordinario: volevo costruire un sistema per controllare l'approvvigionamento idrico e l'irrigazione delle aiuole e dei cespugli in campagna.

Нoh, dal momento che posso lavorare completamente su tubi, serbatoi e rubinetti solo durante le vacanze, a cui mancavano ancora più di sei mesi, tutto si limitava a discussioni sul lavoro con colleghi, amici e compagni in un ambiente informale.

ТIl tema della “piccola automazione” o, come si dice di solito tra “questi scolari-hacker-hipsters” - il tema dell'IoT - Internet of Things - mi interessa da molto tempo. Molto prima che Internet stessa fosse ampiamente utilizzata.

ЕFin da bambino volevo che le cose facessero qualcosa “da sole”. E sarebbe auspicabile poterli controllare in qualche modo a distanza. Ma a quel tempo (anni '80, primi anni '90 del millennio scorso) questo era piuttosto difficile. Internet non era ampiamente disponibile in nessuna parte del mondo, così come non c’erano telefoni cellulari, tablet e nemmeno display LCD o chiavette USB da nessuna parte. Quindi ci siamo dovuti limitare agli “interruttori della luce” e ai semplici radiocomandi. Ma per quei tempi e quell'età non era né brutto né interessante.

НOh, queste sono cose del passato. Ora è il 15° secolo. E tutti hanno uno smartphone in tasca, Internet è disponibile quasi ovunque sia necessario che non necessario, e la base di componenti elettronici disponibili è oggi tale che solo XNUMX anni fa l'abitante medio del pianeta Terra non se lo sarebbe mai sognato .

ПPertanto, avendo deciso di costruire un controller per gli affari idrici nella dacia, ho rivolto la mia attenzione al chip ESP8266.
Prima di tutto, questo chip è economico. E se un controller non basta, puoi installarne due, tre o cinque. In secondo luogo, ha il WiFi a bordo. Cioè, puoi guardare cosa sta succedendo via Internet e persino controllare il processo da qualsiasi smartphone. Naturalmente è necessario un punto di accesso con accesso a Internet, ma questo non è un problema. Comunque, è quasi ovunque o sta per arrivare, anche nella mia dacia.

ПDopo essermi immerso nel meraviglioso mondo dei progetti per l'ESP8266, sono stato sorpreso di scoprire che, nonostante le straordinarie capacità di questo chip, i progetti su di esso, con rare eccezioni, sono divisi in due tipi: si tratta di programmi estremamente primitivi come "click gli interruttori dal tuo smartphone e fissa via internet lo stato dei sensori di temperatura"; oppure buoni e solidi interpreti JavaScript o Lua, ma purtroppo consumano quasi tutta la memoria e non permettono di fare nulla di serio.

ПLa mia prima idea era semplicissima: scrivere un semplice programma per controllare le pompe in base allo stato dei sensori e basta. Ma, come un esperto in termini di salti sulla rastrelliera dell'implementazione di diversi sistemi, ho capito che sicuramente non sarei stato in grado di prevedere in anticipo tutte le pieghe dell'algoritmo che avrei voluto o dovuto raddrizzare durante la costruzione dell'algoritmo. impianto idrico e di irrigazione.

ДNon è molto conveniente elaborare il programma in una dacia, in una stalla buia. Ma devi.
Qual è la via d'uscita? Naturalmente, la prima cosa che mi è venuta in mente è stata quella di rendere l’algoritmo personalizzabile. Uno dei miei colleghi mi ha dato molti consigli: cosa impostare e come. Con questo ha ucciso sul nascere la mia prima idea. Grazie a lui. Se non mi avesse rivelato davanti agli occhi il numero di parametri che avrei dovuto configurare, probabilmente non avrei rifiutato questa opzione: creare una pagina di impostazioni dell'algoritmo.

НL'immagine terrificante del numero di parametri di impostazione, e anche di quelli che si influenzano a vicenda, mi ha fatto riflettere. Ancora una volta mi sono reso conto che non si può prevedere tutto...

СFarò una prenotazione una volta: sono pigro. Molto pigro! Francamente sono troppo pigro per riscrivere il programma ogni volta. Pertanto, è sorto il compito: come impostare un algoritmo in modo rapido e semplice, preferibilmente senza programmazione? Inoltre, questo algoritmo sarà piuttosto complicato; avrà molti parametri; sarà specifico per il mio caso e inadatto ad altri. E voglio davvero rendere il dispositivo più o meno universale...

ПDato che mancavano ancora circa sei mesi alle vacanze e a tutti i tipi di lavori di pompaggio, ho deciso di prendermi il mio tempo e pensare a come renderlo comodo e bello? Come programmare senza programmare? Come fare a meno di trilioni di parametri che possono essere modificati durante la configurazione?

КCome al solito, tutto era già stato inventato prima di noi: mi sono reso conto che volevo disegnare un algoritmo sotto forma di quadrati di azione e collegarli con linee di comunicazione che mostrano da e verso dove volano i dati. Ebbene, indicando il quadrato, voglio poter configurare alcuni dei suoi parametri individuali.

ИL’idea di definire un algoritmo disegnandolo a quadrati non è nuova. Tali sistemi esistevano già negli anni '80; Ora c'è un sistema NodeRed super popolare, ben noto a coloro che sono già entrati nel mondo dell'automazione/IoT su piccola scala.

НOh, ecco il problema: tali sistemi sono progettati per “PC di grandi dimensioni”. Nel peggiore dei casi, su Raspberry PI. Ma non sull'ESP8266, che ha solo poche decine di kilobyte di RAM e nessun sistema operativo!

Кcosa fare? E ci sono solo due vie d'uscita: scrivere e disegnare un programma su un "PC di grandi dimensioni" o laptop, quindi trasferirlo in qualche modo sull'ESP8266, oppure provare a "inserire l'impossibile" nel controller ESP8266 stesso.

ПPertanto, il programma massimo che avevo era questo: per programmare il tuo controller non dovresti aver bisogno di altro che un laptop con un browser WEB! Cioè, un laptop con un browser WEB e il mio controller: questo dovrebbe essere sufficiente per configurare, scrivere e disegnare completamente programmi di controllo.

И, come si è scoperto, era del tutto possibile implementarlo!
Non ti annoierò con tutti i dettagli dello sviluppo del progetto. Dirò solo che in base alle parole che mi sono venute in mente e alla lingua durante il processo di sviluppo, sarebbe possibile comporre un "Dizionario del linguaggio osceno utilizzato dai lavoratori dell'industria elettronica" Ma è tutto finito. Più precisamente, non tutto, ma la prima, più difficile fase, quando non è chiaro se la tua idea di vita sarà lì o è solo il delirio di un castrone grigio in una notte di luna.

ПCondividerò il risultato di ciò che è venuto fuori e ha ottenuto il nome "Controller ShIoTiny".

Allora, cos'è successo?

La parte hardware Il controller ShIoTiny è standard e semplice: tre ingressi progettati per sensori di tipo “contatto pulito” (pulsanti, interruttori reed, sono anche sensori di livello dell'acqua nel serbatoio), un ingresso ADC, un ingresso per il collegamento di un sensore di temperatura e umidità del Tipo DHT22 o simile. E infine tre uscite sotto forma di relè di commutazione per 220 Volt, 1 Ampere. Il relè dice 10 A, ma sono realista e non consentirò 10 A attraverso la scheda. E per controllare gli avviatori delle pompe è sufficiente 1A. Tutto questo è alimentato da una fonte di alimentazione con una tensione da 5 a 9 volt.

ЧAd essere sincero, ho aggiunto il sensore di temperatura proprio così, ma sull'ADC speravo di misurare la tensione della rete di alimentazione. Chi lo sa?

РNaturalmente, tutti gli ingressi, ad eccezione dell'ingresso per il collegamento del DHT22, sono protetti da resistori e diodi: non avevo voglia di bruciare l'ESP8266, e diodi e resistori costano solo pochi centesimi.

foto Il prodotto finito può essere visto all'inizio dell'articolo. Ho ordinato diverse di queste tavole: cosa succede se le brucio o devo tagliare le gambe del binario?
Ma, fortunatamente, non dovevo farlo.

ФQuesto prodotto è, ovviamente, bellezza e grandezza. Ma per comodità, di seguito è riportato uno schema di collegamento dei simulatori di sensori e attuatori alla scheda.

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

Вal posto dei sensori di livello ci sono i pulsanti Input1..3, al posto degli avviatori ci sono i LED collegati al relè Relay1..3. Bene, un resistore variabile sull'ADC per simulare la tensione di ingresso.
КQuando il relè è spento, il LED rosso si accende. E quando è acceso, è verde. Quindi ho eseguito il debug sul tavolo.

КOltre a tutto questo, sul lato sinistro della scheda è presente un connettore di alimentazione e su quello destro due pulsanti di servizio: Reset e AP. Bene, c'è un interruttore DIP che commuta il dispositivo in modalità di programmazione. È disponibile anche il connettore di programmazione ESP8266 tramite adattatore USB-UART.

Alcune spiegazioni sui pulsanti. che cosa Reset - e quindi è chiaro. Ed ecco il pulsante AP necessario tradurre ShIoTiny per aprire la modalità punto di accesso (modalità di configurazione o modalità Config). Perché è necessario? Bene, ad esempio, hai incasinato le impostazioni di rete e desideri modificarle. Premi il pulsante AP per qualche secondo (fino all'accensione del bellissimo LED blu). Quindi, prendi il tuo smartphone o laptop, attiva il WiFi e vedi lì un punto di accesso aperto con il nome esp_8266_xxxx e connettiti ad esso. Andate quindi nel browser del vostro smartphone o portatile e digitate nella barra degli indirizzi: 192.168.4.1. Se tutto è in ordine, verrai indirizzato alla pagina del controller ShIoTiny e potrai configurarlo nuovamente.

КCome vediamo, l'hardware non è niente di complicato. Pertanto o parte software.

ВDescriverò tutte le stranezze dell'implementazione, ma più tardi. Un giorno. E oggi considererò il software solo "dall'esterno", cioè dal punto di vista dell'utente: io o qualcun altro che ha corso il rischio di utilizzare il mio mestiere (ci sono anche questi stuntman).

С Dal punto di vista dell'utente, il dispositivo è un server HTTP accessibile tramite WiFi. Tutte le impostazioni, la programmazione e così via vengono eseguite utilizzando un browser WEB.

ИQuindi, siamo andati alla pagina del controller. Cosa vediamo? E vediamo la scheda “Controllo e stato”, che mostra lo stato attuale dei dispositivi utilizzati: ingressi, uscite, ADC, DHT22. Inoltre vengono mostrati i parametri di connessione al punto di accesso (se stiamo lavorando in modalità stazione WiFi); parametri del punto di accesso (se stiamo lavorando in modalità punto di accesso WiFi) o entrambi. Ebbene, in più, vengono mostrati i parametri di connessione con il broker MQTT se si utilizza il protocollo MQTT.

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

КCome vediamo, niente di speciale o interessante. Non c'è nemmeno niente su cui fare clic! Anche se... Ci sono altre due schede! Configurazione delle impostazioni di rete Networking e editor di circuiti di programma ElDraw.

Кquindi hai indovinato, Networking - questa è la configurazione della rete, ma non solo. Ha un paio di parametri più interessanti. Facciamo clic sulla scheda Networking e lì vedremo approssimativamente ciò che è mostrato nella figura.
НImpostazione del nome e della password del punto di accesso per ciascuna modalità: stazione WiFi e punto di accesso WiFi. Tutto sembra essere chiaro. Così come lo scopo del pulsante "Scansione Wi-Fi" abbastanza trasparente.
А ecco l'elenco a discesa "Modalità ShIoTiny" richiede chiarimenti. Il fatto è che non potevo decidere in alcun modo quale modalità sarebbe stata più conveniente per me lavorare. E quindi ha previsto 5 modalità di funzionamento del dispositivo.

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

ПElenchiamo brevemente queste modalità operative.

Modalità di configurazione — modalità di configurazione. Questa è una modalità punto di accesso aperto con un indirizzo fisso 192.168.4.1 e un nome esp_8266_xxxx.

Modalità stazione — modalità di una stazione WiFi connessa al tuo punto di accesso.

Modalità AP — modalità punto di accesso chiuso. Il nome e la password li imposti tu stesso.

Modalità AP+Stazione - questa è l'attivazione contemporanea della modalità AP + modalità Station.

Modalità singola - funziona senza una connessione di rete. Un controllore solitario che sopporta la sua pesante parte...

В nessuna delle modalità tranne "Modalità configurazione", puoi bloccare una pagina WEB selezionando la casella "Blocca Web in modalità Stazione". Questo è per motivi di sicurezza.

НLe impostazioni MQTT sono ovvie: server, porta, password, connessione aperta o by SSL. Non entrerò nei dettagli qui.

КTra le altre cose, il controller ShIoTiny può inviare e ricevere pacchetti di un formato speciale tramite multicast. Anche le sue impostazioni sono ovvie: indirizzo di gruppo e porta.
Naturalmente, se descrivi tutte le sfumature delle impostazioni, otterrai un articolo separato, ma questo non fa parte dei miei piani.

Иsì, con una scheda Networking tutto è più o meno chiaro. Passiamo alla caratteristica principale del controller: l'editor del circuito del programma ElDraw.

Тtoccando la scheda ElDraw, vedremo qualcosa di simile al seguente. Naturalmente, se il dispositivo non ha un circuito caricato, il campo del circuito sarà vuoto.

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

Сa sinistra: una tavolozza di elementi o nodi (nodi).
Сdiritti - campo schema o semplicemente “schema”.
СNella parte superiore sono presenti i pulsanti per caricare e scaricare su disco e sul dispositivo, nonché i pulsanti di modifica.

ДPer coloro che hanno lavorato con gli editori, la gestione è generalmente ovvia. Devi aggiungere un elemento al diagramma: prendilo con il mouse e trascinalo dalla tavolozza al diagramma. Se devi rimuovere un elemento o una connessione dallo schema, cliccaci sopra con il mouse e premi il tasto IL. Dobbiamo connettere gli elementi: prendiamo l'input di un elemento e lo colleghiamo all'output di un altro.

ЕC'è anche il ridimensionamento (SHIFT+rotellina del mouse). Purtroppo non è possibile copiare elementi e gruppi di elementi. Ma questo non mi disturba molto.

КInoltre, per ragioni logiche, l'ingresso di un nodo può essere collegato solo a un'uscita di un altro nodo. Ma l'output di un nodo è con diversi input di altri nodi. Gli ingressi sono sempre a sinistra dei nodi. Le uscite sono sempre a destra.

КQuali capacità abbiamo per implementare gli algoritmi?
ВLe possibilità sono piuttosto ampie. La tavolozza contiene nodi che rappresentano tutto l'hardware del controller ShIoTiny: ingressi, relè, ADC, DHT11/22.

ДEsistono nodi logici e aritmetici per l'elaborazione dei dati.

ЧPer poter lavorare con il dispositivo tramite Internet, sono presenti nodi per la sottoscrizione e la pubblicazione dei parametri sul broker MQTT.

ЕSe vogliamo che più controller ShIoTiny scambino informazioni tra loro, possiamo utilizzare dei nodi per l'invio e la ricezione dei parametri utilizzando il protocollo multicast UDP.

КInoltre, ci sono nodi timer; nodi di controllo dell'elaborazione degli eventi.

ПTi farò alcuni esempi. Ad esempio, vuoi che i dati di temperatura e umidità vengano pubblicati su un server MQTT ogni 30 minuti? Niente potrebbe essere più semplice. Disegniamo in questo modo.

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

Жpulsante meme “Carica”. Tutto!
ЕSe hai configurato correttamente la connessione con il broker MQTT nella scheda Networking, allora è tutto!
Кogni mezz'ora, la temperatura verrà pubblicata sul broker sotto l'argomento /T e l'umidità - sotto l'argomento /H. Oppure, se imposti i nomi degli argomenti, sotto di essi.
ЗLa domanda ovvia è: perché 18000 è 30 minuti? Perché tutti i tempi si misurano in decimi di secondo.

ТOra vuoi aggiungere a questo schema la possibilità di accendere il relè Relay1 tramite Internet, e anche per un certo tempo? Nessun problema. Completiamo il disegno in questo modo.

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

ОCinque clic sul pulsante "Carica". Tutto! Ora, oltre al fatto che ogni mezz'ora, temperatura e umidità verranno pubblicate sul broker MQTT, sarà possibile accendere il relè Relay1. Sì, non solo accenderlo, ma esattamente per 10 minuti. Puoi abilitare il relè pubblicando l'argomento /r1cmd, impostato su 1. E lo stato reale del relè verrà pubblicato nell'argomento /r1status.

ВVuoi non solo accendere, ma anche spegnere il relè prima del previsto? Sì, qualunque cosa tu dica. L'immagine qui sotto mostra come farlo!

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

ПIl principio è chiaro? Basta disegnare l'algoritmo con il mouse! E scrivi alcune impostazioni: ora, nome dell'argomento e basta. Questo è molto più chiaro che scrivere un mucchio di codice.

КA proposito, evidenziare le connessioni in diversi colori non è "Photoshop": è una delle funzioni dell'editor. Puoi colorare i collegamenti come preferisci per non confonderti.

Нoh e non è tutto! Per eseguire il debug dell'algoritmo, è presente un pulsante "Avvio monitor". Stranamente, attiva la modalità "monitor". In questa modalità, lo stato di tutte le uscite di tutti i nodi viene periodicamente letto dal controller ShIoTiny e visualizzato nel diagramma. Più o meno come nella foto qui sotto.

ShIoTiny: piccola automazione, Internet delle cose ovvero “sei mesi prima delle vacanze”

ТPossiamo cioè vedere in “tempo quasi reale” ciò che abbiamo in ingresso e in uscita da ciascun nodo. Aiuta molto quando qualcosa non è chiaro.

ЕCi sono molti altri "trucchi e caratteristiche" che vorrei descrivere, ma la mia coscienza non ti permetterà di perdere tempo con loro in un articolo. L'idea principale implementata è già chiara: un minimo di parametri personalizzabili - massima chiarezza.

Unico neo

КCerto, voglio che non ci siano difetti, ma il mondo non è l'ideale. Sia il mio editor che il mio controller non sono perfetti. Ho scoperto due caratteristiche principali che non sono ancora riuscito a eliminare.

ВInnanzitutto, a volte compaiono dei problemi quando si spostano gli elementi in gruppi. Ma questo non interferisce molto con il lavoro. Più una "caratteristica" che un "bug".

И, in secondo luogo, in determinate condizioni, dopo aver caricato il circuito nel dispositivo utilizzando il pulsante "Carica", si riavvia. Ciò non interferisce con la vita, ma la pagina dell'editor deve essere aggiornata.

conclusione

НSpero ti sia piaciuta l'idea di disegnare algoritmi invece di scrivere programmi. È così che pensieri, idee e controversie casuali talvolta danno origine a sviluppi del tutto realizzabili.

НOh, secondo me, il volume dell'articolo ha superato tutti i limiti ragionevoli. Quindi per oggi finisco.
ПLasciatemi solo dire che mancano solo poche settimane alle vacanze e sono abbastanza pronto a passare dal debug del controller al tavolo al debug "sul campo".
ЕSe qualcuno è interessato alle mie idee o ai dettagli di sviluppo, scrivetemi: [email protected]

ВSarò sempre felice di ricevere commenti e critiche, se ovviamente pertinenti.

Жbenvenuti i vostri feedback, commenti e suggerimenti.

Link, riferimenti e pacchi

ESP8266
WiFi
MQTT
Multicast UDP

Su richiesta dei lavoratori

ВSto pubblicando la documentazione grezza e il 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

Descrizione dei componenti e brevi spiegazioni: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/ShIoT-esp8266-nodes.pdf

Le istruzioni “come cucire” ci sono.

Fonte: habr.com

Aggiungi un commento