Ein weiteres automatisches Bewässerungssystem für Anlagen mit ESP8266 und Blynk

Einmal, als ich mich mit Freunden in einem Studentenlager bei MEPhI entspannte, erzählte mir einer von ihnen, dass er kürzlich beschlossen hatte, Erdbeeren auf einem Grundstück anzupflanzen. Ich kaufte Töpfe, grub irgendwo etwas Erde aus und brachte Gießschläuche mit. Und alles wäre in Ordnung, der Besitzer schläft - Erdbeeren wachsen, aber sie müssen nur einmal pro Woche oder noch öfter stabil aufs Land, damit die Pflanzen nicht ohne Wasser austrocknen.

Ich erinnerte mich an ein paar Arduino, die in einer Kommode herumlagen, und an den langjährigen Wunsch, mehr als nur blinkende LEDs zu erreichen, und beschloss sofort, diese Aufgabe zu übernehmen und diesmal, wenn möglich, bis zum Ende zu erledigen.



Als Systemverwaltungsschnittstelle wurde beschlossen, die manuelle Steuerung „über die Taste“ sowie die Fernsteuerung über das Internet durchzuführen. Arduino Mega wurde als Head-Controller ausgewählt, da ein Schild mit LCD-Bildschirm und Tasten problemlos angeschlossen werden kann und auch genügend Speicher und GPIO für diese Aufgabe vorhanden sind.

Das allgemeine Schema des Systems:



Um mit dem globalen Netzwerk zu interagieren, wurde das ESP8266-Motherboard ausgewählt, das immer beliebter wird. Die Wahl eines drahtlosen Datenübertragungsprotokolls war zusätzlich zu den geringen Kosten des Wi-Fi-Moduls auf das Vorhandensein eines ständig aktiven Wi-Fi-Routers in der Datscha des Kunden zurückzuführen, wodurch das Ziehen einer Kabelverbindung im Haus vermieden wird.

Trotz der Tatsache, dass der ESP8266 vor kurzem am Horizont der DIY-Community erschien, entwickelt sich in RuNet bereits eine Ressource von Entwicklern auf diesem Chip aktiv, in der Sie immer nach der Antwort auf Ihre Frage suchen, ein Beispiel für den Anschluss eines bestimmten ESP-Boards finden oder bei einem Problem um Hilfe bitten können.

Projektschätzung


Zur Überwachung der aktuellen Bodenfeuchte wurde ein Standardsensor mit Ebay bestellt.

Zur Anzeige und Eingabe von Informationen wurde die Verwendung der LCD-Tastaturabschirmung gewählt, bei der es sich um ein elektronisches Modul mit einem LCD-Bildschirm und 6 Tasten handelt, die an einen Analogeingang angeschlossen sind.

Als Steuergerät für die Wasserversorgung wurde ein mechanisierter 12-Volt-Abgriff mit 2 Drähten gewählt, dessen Öffnen und Schließen durch Ändern der Vorzeichen der zugeführten Spannung erfolgt. Daher wurde zusätzlich zum Abgriff ein 4-Kanal-Relaismodul bestellt (zwei Relais ändern die zugeführte Polarität, eines ist für die Spannungsversorgung verantwortlich, eines bleibt in Reserve).

Als ESP8266 bei Ebay wurde die einfachste Version bestellt - ESP-01. Die Hauptsache ist, sich daran zu erinnern, dass der ESP8266 ausschließlich mit 3,3 V betrieben wird, was im Voraus erledigt werden muss.

Liste der notwendigen Ausrüstung:

  • Motorischer Kran
  • Arduino Mega
  • WiFi-Modul (ESP8266)
  • 4-Kanal-Relais
  • Bodenfeuchtesensoren
  • LCD-Display mit Tasten

Gesamtkosten (ohne die Kosten für alles, was zum Löten, Zusammenbauen und zur Stromversorgung erforderlich ist): 61,01 USD. Der Hauptbeitrag zu den Endkosten meines Systems wurde von einem angetriebenen Kran (23,32 USD) und einem Beamten des Arduino Mega 2560 (26,80 USD) geleistet.

Systemfunktionalität


Nach einigem Nachdenken entschied ich, dass das automatische Bewässerungssystem in den folgenden drei Modi funktionieren sollte:

  • Manuell ("von der Taste"). In diesem Modus entscheidet der Benutzer über die Startzeit der Bewässerung auf der Grundlage der Informationen, die ihm vom Bodenfeuchtesensor zur Verfügung gestellt werden, oder auf der Grundlage persönlicher Erfahrungen.
  • Geplanter Modus. Der Benutzer stellt nur die Bewässerungsparameter gemäß dem Zeitplan (Häufigkeit, Dauer) ein. Danach bewässert das System selbst gemäß den ausgewählten Einstellungen.
  • Sensormodus. Die Bewässerung erfolgt automatisch, wenn eine vorgegebene Feuchtigkeitsschwelle erreicht ist. Der Benutzer muss nur den Feuchtigkeitsschwellenwert und die Bewässerungsdauer einstellen.
  • Fernbedienung (vom Smartphone oder Computer). Es beinhaltet die Möglichkeit, das System mithilfe der Logik eines der drei oben aufgeführten Modi fernzusteuern.

Es ist schwer vorstellbar, dass eine solche Funktionalität ohne das einfachste Menü implementiert wird, dessen Navigation über die LCD-Tastatur-Abschirmtasten erfolgt. Über die Umsetzung des Menüs auf dem Arduino gefunden werden kann, zum Beispiel hier .

Blynk


Als ich über die Implementierung der Fernbewässerungssteuerung nachdachte, stieß ich auf ein interessantes Blynk-Projekt, für dessen Implementierung am 16. Januar 2015 auf Kickstarter Spenden gesammelt wurden .

Für einen Monat sammelte das Projekt 49.235 US-Dollar anstelle von 10.000 US-Dollar, was anscheinend das große Interesse der globalen Geek-Community an solchen Projekten widerspiegelt.

Das Hauptziel von Blynk ist die Schaffung einer erschwinglichen Plattform für die drahtlose Steuerung hausgemachter elektronischer Geräte von einem Smartphone aus. Wie von den Autoren geplant, ist der Internetzugang keine Voraussetzung - Blynk Server kann heruntergeladen und in Ihrem Heimnetzwerk bereitgestellt werden, nachdem Sie die volle Autonomie in Ihrem Heim erhalten haben.

Die vollständige Liste der unterstützten Plattformen (darunter natürlich Arduino, Raspberry PI und Intel Edison), auf die Blynk portiert werden soll, finden Sie hier .

Schematisch wird das Funktionsprinzip von Blynk in der folgenden Abbildung dargestellt:

Bild

In der Liste der Schnittstellenfunktionen des Programms für ein Smartphone zur Steuerung eines Remote-Geräts und zur Anzeige der von ihm empfangenen Informationen werden eine Vielzahl von Elementen ("Widgets") angekündigt. Wir wählen die wichtigsten aus:

  • Knöpfe
  • Schieberegler
  • Monoaxiale und biaxiale Joysticks;
  • Verwaltung mit einem Gyroskop und Telefonbeschleunigungsmessern;
  • Verschiedene Arten von Bedienknöpfen;
  • Diagramme
  • Pfeilindikatoren;
  • Popup-Benachrichtigungen.

Eine vollständige Liste der Elemente finden Sie auf der Blynk-Projektseite von Kickstarter.

Es ist zu beachten, dass sich das Projekt in einem aktiven Entwicklungsstadium befindet. Daher wurden bisher nicht alle von Entwicklern deklarierten Funktionen implementiert. Dies sei jedoch nur eine Frage der Zeit. Die verfügbaren Funktionen für unser Projekt werden ausreichen.

Technische Umsetzung


Schematische Darstellung des Gerätes:



Wie aus dem dargestellten Diagramm ersichtlich, erfolgt der Informationsaustausch zwischen Arduino und ESP8266 über UART. Um beim Flashen des Controllers keine Probleme zu haben, verbinden wir das Wi-Fi-Modul mit den Kontakten D2, D3, ordnen einen Hardware-UART (Serial3) auf diesen Beinen an und stellen die Geschwindigkeit auf 11520 Baud ein.

Ein aufmerksamer Leser sollte eine logische Frage haben: Wie wird der Arduino, der von der 5-Volt-Logik und dem 3,3-Volt-ESP8266 gespeist wird, kommunizieren? Nachdem ich dieses Problem im Internet untersucht hatte, kam ich zu dem Schluss, dass die Mehrheit diesem Problem keine absolute Bedeutung beimisst (wie sich später herausstellte - nicht umsonst), indem sie die entsprechenden Beine dieser beiden Boards direkt miteinander verband. Nur wenige Artikel haben die Verwendung des einfachsten Spannungsteilers oder speziell entwickelter Wandler vorgeschlagen. Natürlich hatte ich keinen Konverter, daher wurde zunächst versucht, die Kommunikation über einen Teiler zu implementieren, aber dies führte zu keinen Ergebnissen, und ich schloss mich den oben genannten Augenschließungsproblemen an (der Vorteil funktionierte ohne Koordination der logischen Ebenen). .

Ein paar Worte zur Leistung des ESP8266


Wie bereits in vielen Tutorials erwähnt, benötigen Sie für den normalen Betrieb des ESP eine stabile Stromversorgung im Bereich von 3,0 bis 3,6 Volt. Dazu können Sie verschiedene Linearwandler verwenden, zum Beispiel den heute beliebten AMS1117 3.3. Das Datenblatt zu AMS1117 zeigt an, dass die Eingangsspannung 15 V erreichen kann. Für einen stabilen Betrieb im Ausgangsstrommodus von ca. 1 A wird jedoch empfohlen, die Eingangsspannung zu senken (in der Praxis reichen 5-6 V aus). Aus eigener Erfahrung werde ich sagen, dass AMS beim Anschluss des Wandlers an eine 12-V-Quelle aktiv heizt, was schnell zu einer Abnahme der Ausgangsspannung und damit zu einem Neustart des ESP8266 führt.

Konfigurieren Sie ESP8266


Die Interaktion von Arduino und ESP8266 bei Verwendung von Blynk kann auf zwei verschiedene Arten implementiert werden:

  • «» ESP8266 AT-, Arduino (.. «ESP8266 as shield»);
  • ESP Arduino IDE Blynk, , , Arduino , / (.. «ESP8266 as standalone»).

Beide Optionen haben ihre Vor- und Nachteile, aber die erste Option ist bequemer, da nicht mit zwei Programmen gearbeitet und die Kompatibilität der beiden Geräte ständig überwacht werden muss.

Um mit Blynk steuern zu können, müssen Sie in der Lage sein, die gewünschte Firmware auf den ESP8266 hochzuladen. In unserem Fall wird die Version der AT-Firmware v0.22 SDK v1.0.0 verwendet .

Zum Flashen von ESP8266-Karten benötigen Sie einen USB-TTL-Konverter (z. B. einen ). Sie können Arduino jedoch auch verwenden, indem Sie die RST- und GND-Beine schließen und das RX-Wi-Fi-Modul mit dem RX-Zweig des Arduino verbinden, ähnlich wie bei TX zu TX. Versetzen Sie den ESP8266 als Nächstes in den Blinkmodus (schließen Sie dazu den GPIO0-Ausgang gegen Masse) und füllen Sie die Firmware mit dem Dienstprogramm XTCom Util wie hier beschrieben aus. Es bleibt nur, die UART-Geschwindigkeit mit dem AT-Befehl AT + UART_DEF = 115200,8,1,0,0 auf 115200 Baud zu erhöhen. Danach wird die Konfiguration des Wi-Fi-Moduls abgeschlossen.

Skizze für Arduino


Die Hauptbibliothek für die Arbeit mit Blynk unter der Arduino IDE ist die Bibliothek BlynkSimpleEsp8266.h. Betrachten Sie die Hauptfunktionen.

1) Blynk.begin (auth, "ssid", "pass")
Wie Sie vielleicht vermutet haben, empfängt die Funktion die Parameter für die Verbindung zu einem Wi-Fi-Punkt - seine SSID und ihr Kennwort sowie das Authentifizierungstoken unseres Geräts für die Verbindung zum Blynk-Server.

Wichtig! Der Verbindungsprozess zum Blynk-Server beginnt erst, nachdem eine der folgenden Funktionen zum ersten Mal im Programm aufgerufen wurde: Blynk.run () oder Blynk.connect ().

Zum Trennen / Herstellen einer Verbindung zum Blynk-Server werden die Funktionen Blynk.disconnect () und Blynk.connect () verwendet, wobei das Ergebnis in einem booleschen Typ zurückgegeben wird. Zum Herstellen einer Verbindung (Zeitlimit in Sekunden) wird Blynk.connect (s) verwendet (standardmäßig ist das Zeitlimit auf 30 s eingestellt).

2) Blynk.run ()
Die Hauptfunktion zum Synchronisieren des Geräts mit dem Blynk-Server und zum Empfangen von Befehlen vom Smartphone. Wird häufig in einer Schleife verwendet. Darüber hinaus können Sie mit dieser Funktion die Ein- und Ausgänge der ESP-Karte (im Standalone-Modus) steuern, ohne Funktionen wie digitalRead, digitalWrite, analogRead, analogWrite an einer beliebigen Stelle im Code verwenden zu müssen. Es reicht aus, die erforderlichen Elemente zum Steuerungsbildschirm in der Anwendung auf dem Smartphone hinzuzufügen und sie mit dem erforderlichen GPIO ESP8266 zu korrelieren.

3) Arbeiten mit virtuellen Kontakten ("Virtual Pins")
Eine der Funktionen von Blynk ist die Verwendung virtueller Kontakte. Dieser Begriff bezieht sich auf einen logischen Kanal zum Übertragen verschiedener Informationen zwischen einer mobilen Anwendung und einem Gerät, sei es Boolesche Variablen, numerische Werte (ganzzahlig oder lang) oder Textdaten als Zeichenfolge. Virtuelle Kontakte haben keine direkte Verbindung zu den Geräteterminals und werden hauptsächlich für die Interaktion mit Peripheriemodulbibliotheken (LCDs, Servos usw.) oder einer mobilen Anwendungsschnittstelle verwendet.

Im Skizzencode erfolgt die Verarbeitung des Anrufs an den virtuellen Kontakt mit der Nummer n mithilfe der Blöcke BLYNK_READ (Vn) {...} und BLYNK_WRITE (Vn) {...}. In den geschweiften Klammern wird der Verarbeitungscode für den Zugriff auf den virtuellen Kontakt angezeigt. Wenn das Anwendungs-Widget beispielsweise fragt, ob der Bodenfeuchtigkeitswert für die virtuelle Anzeige Nr. 2 als Grafik angezeigt werden soll, müssen wir Folgendes in die Skizze schreiben:

BLYNK_READ(V2)
{
//     ,    humidity:
  Blynk.virtualWrite(2, humidity);
}

In ähnlicher Weise können Sie den Parameter berücksichtigen, der beispielsweise über den virtuellen Kontakt Nr. 9 vom Benutzer der Blynk-Anwendung gesendet wurde:

BLYNK_WRITE(V9)
{
//      x:
int x = param.asInt();
}

Dies verwendet die Konvertierung der Eingabevariablen in einen ganzzahligen Wert mit param.asInt (). Konvertierungen param.asStr () und param.asDouble () sind ebenfalls zulässig.

Wichtig! Die Prozeduren BLYNK_READ / BLYNK_WRITE sollten so schnell wie möglich ausgeführt werden, damit das Gerät alle Anforderungen aus der Anwendung verarbeiten kann. Es wird daher dringend davon abgeraten, die Sllep / Delay-Funktionen in solchen Routinen zu verwenden.

Weitere Informationen zur Blynk-Funktionalität finden Sie auf der Github-Seite des Entwicklers im Beispielordner oder auf der Dokumentenseite .

Kehren wir nun mit Wissen zur automatischen Bewässerung zurück und schreiben eine Skizze. Wir bieten der mobilen Anwendung die folgenden Möglichkeiten zur Interaktion mit dem System:

  • Die Wahl des Systembetriebsmodus: manuell, nach Sensor, nach Zeitplan;
  • Anzeige der vom System empfangenen Bodenfeuchtigkeit und der Ausgabe historischer Daten;
  • Informationsaustausch über das Terminalanwendungselement.

Ich habe versucht, jeden Code zu kommentieren, der für eine bestimmte Funktion des Systems verantwortlich ist, daher werden wir uns nicht im Detail mit dem Programmcode befassen. Ich stelle nur fest, dass zur Vereinfachung der Verwendung alle vom Benutzer vorgenommenen Einstellungen im nichtflüchtigen Arduino-Speicher (EEPROM) aufgezeichnet werden.

Sketch kann auf GitHub heruntergeladen werden.

Einrichten der mobilen Blynk-Anwendung


Der letzte Schritt bleibt - Einrichten der mobilen Anwendung. In meinem Fall werden die folgenden Elemente verwendet:

  • 4 LED-Anzeigen (virtuelle Pins 1, 29, 30, 31);
  • 2 Tasten (virtuelle Pins 2, 3);
  • Terminal für den Informationsaustausch (Virtual Pin 4);
  • Numerische Anzeige „Wertanzeige“ (virtueller Pin 8);
  • Grafik mit der Möglichkeit, historische Daten anzuzeigen "Verlaufsdiagramm" (Virtual Pin 8);
  • Widget zum Aktivieren der Arbeit mit E-Mail ("E-Mail");
  • Ein Widget zum Aktivieren von Popup-Benachrichtigungen („Push“).

Nach der Installation der mobilen Blynk -Anwendung müssen Sie sich registrieren und das Gerät auswählen, das Sie verwalten möchten (in unserem Fall ESP8266). Um nicht zu verlieren, senden wir uns außerdem ein eindeutiges Authentifizierungstoken, das in der Skizze zur Authentifizierung auf Blynk-Servern verwendet wird. Unten finden Sie Screenshots, die die Einrichtung der Anwendung veranschaulichen.

Erstellen Sie ein neues Projekt


Im geöffneten Fenster des erstellten Projekts in der oberen rechten Ecke befinden sich 3 Schaltflächen: Globale Projekteinstellungen, Hinzufügen von Elementen (Widgets) zum Formular und Starten von:

Leeres Formular für neues Projekt


Es bleibt, Steuerelemente zum Antragsformular hinzuzufügen und zu konfigurieren. Einige der zum Zeitpunkt des Schreibens verfügbaren Widgets sind nachfolgend aufgeführt:

Liste der Widgets, die dem Antragsformular hinzugefügt werden sollen


Um den Betrieb des Systems zu steuern, fügen Sie dem Formular zwei Schaltflächen hinzu: eine ist für die Auswahl der Betriebsart verantwortlich, die zweite für den Start der Bewässerung im manuellen Modus. Der aktuelle Status des Systems wird mit vier LED-Anzeigen ermittelt. Eine Anzeige leuchtet während der Bewässerung auf, die anderen drei sind erforderlich, um den aktuellen Modus anzuzeigen.

Es bleibt, die Farben der Elemente auszuwählen, Beschriftungen hinzuzufügen und sie an die gewünschten virtuellen Kontakte zu binden.

LED-Anzeigen und -Tasten konfigurieren


Um die Dynamik der Bodenfeuchtigkeit anzuzeigen, fügen Sie dem Formular ein Diagramm mit der Möglichkeit hinzu, historische Daten anzuzeigen ("Verlaufsdiagramm"). Wir zeigen den aktuellen Feuchtigkeitswert auf der Digitalanzeige an ("Wertanzeige").

Hinzufügen von Verlaufsdiagramm- und Wertanzeigeelementen


Um die Remote-Konfiguration von Systemparametern zu vereinfachen und umfassendere Informationen zum aktuellen Status zu erhalten, fügen wir der Anwendung ein Terminal hinzu. Um Benachrichtigungen per E-Mail und Telefon zu erhalten, müssen Sie außerdem die Elemente "Push" und "E-Mail" in das Formular einfügen.

Fügen Sie Terminal-, Push- und E-Mail-Elemente hinzu


Es müssen noch alle oben beschriebenen Widgets auf dem Formular platziert werden, und wir erhalten ungefähr Folgendes:



Ergebnis


Unten finden Sie einige Fotos des Systems im aktuellen Zustand und ein Video der Arbeit von Autowatering und Blynk.
Ich werde sofort reservieren, dass ich keinen mechanisierten Wasserhahn in der Wohnung angeschlossen und den Blumentopf mit Wasser versorgt habe, und es besteht keine dringende Notwendigkeit - zum Zeitpunkt des Testens des Systems wird der Bewässerungsprozess (wenn der Wasserhahn geöffnet wird) von meiner Frau und einer normalen Gießkanne erfolgreich emuliert.

Foto Nr. 1:



Foto Nr. 2:



Video:



Anstelle einer Schlussfolgerung


Zusammenfassend lässt sich Folgendes über die Erstellung eines automatischen Bewässerungssystems mit Blynk sagen:

1. Der Blynk-Dienst selbst ist ein sehr praktisches und leicht zu erlernendes Tool, das dank der Fülle unterstützter Boards und Geräte problemlos in nahezu jedes Gerät integriert werden kann. Zusammen mit dem niedrigen Preis des ESP8266-Wi-Fi-Moduls ermöglichen diese Vorteile, dass Sie einem bestimmten Projekt mit geringstem Aufwand eine Fernbedienung hinzufügen können.
Die Nachteile einer solchen Lösung liegen natürlich in der geringeren Flexibilität bei der Anpassung des Systems an sich selbst und in der Abhängigkeit von Anwendungsentwicklern, was jedoch die Vorteile bei der Verwendung in kleinen DIY-Projekten nicht im Geringsten mindert.

2. Die beiden Hauptnachteile der obigen Implementierung des automatischen Bewässerungssystems sind seine Kosten und die geringe Qualität des verwendeten Bodenfeuchtesensors.

Der erste Nachteil wird, wie oben erwähnt, durch die hohen Kosten des elektromagnetischen Abgriffs und des offiziellen Arduino Mega-Boards verursacht. Sie kann jedoch erheblich reduziert werden, indem beispielsweise Arduino-Analoga verwendet werden oder indem der gesamte elektronische Teil auf einem anderen geeigneten MK implementiert wird. Der Kran konnte leider nicht viel billiger gefunden werden, und das war nicht mein Ziel.
Der Feuchtigkeitssensor muss erstens unmittelbar vor der Messung der Luftfeuchtigkeit (die in meinem System implementiert ist) angelegt werden, um seine Lebensdauer zu erhöhen und die Elektrolyseprodukte zwischen seinen Kontakten zu verringern. Zweitens ist es besser, ihn zu ersetzen entweder auf Graphitstangen oder mit Edelstahlkontakten.

In naher Zukunft ist geplant, das elektronische Teil zusammenzubauen und in einem anständigen Gebäude unterzubringen und hoffentlich endlich alles im Land zu installieren.

Vielen Dank für Ihre Aufmerksamkeit!

Source: https://habr.com/ru/post/de388589/


All Articles