Die meisten Artikel sind nach dem Prinzip "Ich / wir haben es gemacht / und schau wie cool!" Geschrieben. Dieselbe Veröffentlichung ist einem fehlgeschlagenen Projekt gewidmet. Willkommen bei der Katze…
Dies ist eine Fortsetzung meiner Veröffentlichung. Die Entwicklung intelligenter Geräte am Beispiel eines Fußbodenreglers am ESP8266
Fangen wir von weitem an
Ich wohne in einem kleinen Haus, das nach meinem Projekt gebaut wurde. Layout - Euro-Raster, Flur, Wohnküche im Erdgeschoss, Bad, Kinderzimmer und Schlafzimmer im zweiten. Aus nicht standardmäßigen Arbolitwänden, UShP-Fundament, ausschließlich TP-Heizung. Gleichzeitig sind die Böden aus Holz, im zweiten Stock befindet sich ein schwimmender Boden, TP - in der GVL-Platte. Im ersten Stock gibt es 3 Schleifen von TP-Rohren (eigentlich ein Raum), im zweiten - auch drei, aber jede Schleife ist für einen Raum verantwortlich (Schlafzimmer, Bad, Kinderzimmer). Der an der Wand montierte Gaskessel 14 kW ist für die Wärme verantwortlich. Der Kessel wird von einem wöchentlich programmierbaren chinesischen drahtlosen Thermostat gesteuert. An jedem Wochentag gibt es vier Perioden, in jeder Periode können Sie die gewünschte Temperatur einstellen. Gehirne an der Batterie, das Relais ist versteckt. Es funktioniert großartig. Aber ich brauche oft mehr als ich. Ich wollte Raumtemperaturregelung. Ich habe mir die vorgeschlagenen Lösungen angesehen, mir hat nichts gefallen. Und das Wort "Arduino" fiel mir auf. Und von Beruf bin ich Programmierer. Und los geht's ...
Eisen
Ich bin nicht stark in Eisen. Das Löten eines Entwicklungsboards ist der Höhepunkt meiner Fähigkeiten. Aber Arduino ist so einfach, dass ich realisiert habe - trotz meiner Kenntnisse der Elektronik kann ich in dem Haus einen Temperaturregler herstellen, der zu mir passt.
Temperatursensoren
Ich habe keine Liebe für Drähte im Innenraum. Ich versuche sie auszuschließen oder auszublenden, wenn ich sie nicht ausschließen kann. Und auf etwas kurvige Weise habe ich drahtlose Sensoren von chinesischen Wetterstationen als Raumtemperatursensoren verwendet. Die Sensoren arbeiten lange mit Batterien und senden mit einer Frequenz von 433 MHz. Es ist sehr schön, Sie können verschiedene Farben mit und ohne Bildschirm auswählen. Mit Blick auf die Zukunft möchte ich sagen, dass jeder Hersteller einer Wetterstation sein eigenes Protokoll für die Datenübertragung mit einem Sensor erfindet. Während der Experimente habe ich die Protokolle von 5 Sensortypen analysiert - alle haben unterschiedliche Datenübertragungsformate. Ich habe eine Bibliothek entwickelt, die Daten von 4 Arten von Sensoren empfängt. Ich habe den fünften nicht kontaktiert - sein Protokoll ist den anderen aufgrund des Fehlens von Paketgrenzen nicht ähnlich. Das Hauptwerkzeug für die Datenanalyse ist ein chinesischer Logikanalysator geworden. Ohne ein solches Tool ist eine Protokollanalyse praktisch unmöglich. Es kostet ziemlich viel, es ist einfach zu bedienen - ich empfehle, dass Sie es allen Arduinen zur Verfügung stellen.
Ich habe die Bibliothek nach dem Prinzip der Abtastung, Frequenz 10kHz, implementiert. Dieser Ansatz ermöglichte es uns, das Rauschen in der Luft auszugleichen und die Belastung des Prozessors zu verringern, verglichen mit dem Ansatz mit Unterbrechungen, wenn sich der Pegel am Empfängerstift ändert. Zum Debuggen wurde ein logischer Analysator verwendet:
Debug-Signal
3 ... 6 Kanäle - Daten zum Debuggen
Ich werde Beispiele für Sensoren und ihre Funktionen geben.
- Typ 1: Datenübertragung alle 35 Sekunden. Der Zeitraum ändert sich nicht und dies ist ein Problem bei Verwendung von 3 oder mehr Sensoren - die Stunden in den Sensoren verlaufen etwas anders, die Signale können sich manchmal überlappen und ein oder zwei Sensoren fallen für eine Stunde, zwei- oder dreimal pro Woche oder zwei aus. 6 Datenpakete in 0,8 Sekunden. Die Sensor-ID ändert sich bei jedem Einschalten. Keine Batteriestatusdaten.
Daten
Daten des oberen Empfängers, Pfeile zeigen Störungen an
Unten sind die Senderdaten.
- Typ 2: Datenübertragungszeit - 40 ... 80 Sekunden, je nach Kanal. Das beste Protokoll ist meiner Meinung nach 15 Datenpakete in 0,6 Sekunden, es gibt eine Prüfsumme. Die Sensor-ID ändert sich beim Einschalten, es erfolgt eine Übertragung der Batteriestatusdaten. Der schwächste Sender - Wenn Sie den Empfänger in eine Box legen, hat sich die Empfangsqualität merklich verschlechtert. Wahrscheinlich mit einer externen Antenne für den Empfänger behandelt.
Daten
keine Störung
- Typ 3: Datenübertragungszeit 50..55 Sekunden, je nach Kanal. 7 Packungen in 0,6 Sekunden. ID ändert sich beim Einschalten, es erfolgt eine Übertragung von Batteriestatusdaten. Gute Wahl.
DatenFast identisch mit Typ 1
- Typ 4: Datenübertragungszeit 56 ... 76 Sekunden, je nach Kanal. Es gibt keinen Bildschirm. Änderbare ID, wenn aktiviert, wird nicht erkannt. Gibt es Unterschiede in der ID zwischen verschiedenen Instanzen? Ich weiß nicht, ich habe einen solchen Sensor. Daten zum Zustand der Batterie - ist. Leistungsstarkes Signal, Übertragungssprung fast nie beobachtet.
- Typ 5: Ich habe die Übertragungsdauer nicht gemessen, es gibt keinen Kanalwechsel, ich habe das Protokoll nicht gründlich analysiert.
Infolgedessen wurde die Empfängereinheit auf dem Arduino Pro Mini mit Datenübertragung über den i2c-Slave implementiert.
Arduino Mega
Dies ist die erste Plattform, auf der ich den Controller erstellt habe. Mein Controller hatte eine Befehlsschnittstelle, die durch Befehle gesteuert wurde, die über UART eingegeben wurden. Zu diesem Zeitpunkt hatte ich vor, eine WEB-Schnittstelle auf ESP8266 zu erstellen und diese mit Mega auf UART zu kommunizieren. Ich habe ein Robotdyn Mega Board in Kombination mit einem ESP8266 und ich hatte vor, diese Entwicklung auf diesem Board aufzubauen. Ein besonderer Vorteil der Karte ist eine große Anzahl externer Ports. Als ich den ESP8266 kennenlernte, stellte ich fest, dass dieser kleine Chip durchaus in der Lage ist, die Funktionen des Controllers und der Schnittstelle zu kombinieren.
ESP8266
Ich habe die WeMos D1 Mini-Board-Option verwendet, sie hat kleine Abmessungen und eine ausreichende Anzahl von Pins für mich - unter Berücksichtigung der Verwendung eines Port-Expanders. Es gibt eine große Anzahl von Bibliotheken für dieses Board. Zum Beispiel ist me-no-dev / ESPAsyncWebServer eine großartige Webserver-Bibliothek mit Unterstützung für Web-Sockets. Ich habe den Controller auf dieser Platine montiert. Entwickelte ein Webinterface. Alles funktioniert wunderbar. Aber aus irgendeinem Grund verstehe ich nicht, dass die Betriebszeit nicht mehr als einen Tag beträgt. Entweder habe ich etwas schief gemacht, oder einige der verwendeten Bibliotheken sind schief. Zusätzlich gibt es ein Limit von 5 gleichzeitigen Verbindungen. Wenn überschritten - Neustart oder sogar Einfrieren (trotz des vorhandenen Watchdogs. Ich hatte Probleme mit den Hängen mit einem externen Watchdog). Wenn man bedenkt, dass meine Weboberfläche aus fast einem Dutzend Dateien besteht und Browser Seiten in 5 parallelen Streams laden, ist es einfach, einen Neustart durchzuführen. Für mich selbst habe ich mich entschieden - dieses Board kann nur als Kunde verwendet werden. Ich begann nach anderen Lösungen zu suchen.
Screenshots der Benutzeroberfläche ESP32
Es ist wie der Erbe des ESP8266. ESP32 hat die meisten - Frequenz, Speicher, Beine, ... Aber das Problem ist - die me-no-dev / ESPAsyncWebServer-Bibliothek funktioniert nicht in Bezug auf Web-Sockets. Absolut. Abstürze. Etwas im Zusammenhang mit Multithreading. Ich habe keine andere Webserver-Bibliothek mit Unterstützung für Web-Sockets gefunden.
SOC
Zu diesem Zeitpunkt habe ich mich entschieden, das Board unter Linux zu verwenden - ich habe mir nichts passenderes ausgedacht.
Meine Board-Anforderungen. Es scheint, dass es nicht viele von ihnen gibt:
- Ich brauche keinen Bildschirm.
- Aufgrund des Fehlens eines Bildschirms für die Ersteinrichtung muss die Karte im Access Point-Modus arbeiten können.
- Ich benötige ein Minimum an Betriebssystemfunktionalität.
Orange Pi i96
Diese Karte war in jeder Hinsicht geeignet - es gibt keinen Videoausgang, WiFi, eingebauten Flash-Speicher, SD-Kartensteckplatz. Sie können Ubuntu oder DietPi in den internen Speicher stellen. Das Problem mit diesem Board ist jedoch die Software. Sie können keinen Zugangspunkt erstellen. Nun, das größte Problem - beim Neustart ändert sich die MAC-Adresse und es wurde nichts damit gemacht. Im Ofen. (Zum Zeitpunkt des Schreibens erschien auf w3bsit3-dns.com in dem Thread, der dem Analogon dieser Karte (2g IOT) gewidmet ist, eine Meldung, dass es möglich ist, die MAC-Verschiebung zu besiegen.)
Zwiebel Omega 2+
Schicke Dokumentation. Mit der sofort einsatzbereiten Firmware wurde alles gestartet, der Bildschirm wird nicht benötigt, UART wird nicht benötigt. SSH ist standardmäßig aktiviert. Node.js wurde ausgeliefert (Version 4.x, ist mir aber egal). Die SQLite- und i2c-Bibliotheken für Node.js wurden geliefert (unter Verwendung eines Tamburins).
Außer i2c benötige ich keine Hardwareschnittstellen mehr. Im Vergleich zu meiner Entwicklungsvariante wurde dem ESP8266 ein separater Arduino Pro Mini-Controller hinzugefügt, um die Daten des Datenempfängers des Temperatursensors zu analysieren. Der Empfänger-Controller ist als i2c-Slave mit dem Omega verbunden. Kabelgebundene Sensoren mit einer 1-Draht-Schnittstelle werden über eine 1-Draht-i2c-Brücke (DS2482-100) angeschlossen. Für diese Bridge gibt es eine Bibliothek für node.js, die bei der Suche nach Sensoren jedoch nicht funktioniert hat. Ich habe nicht verstanden, ich habe die DS2482-Bibliothek, die auf ESP8266 funktioniert, auf js portiert.
Das Problem ist jedoch, dass WiFi unter Omega-2 nicht stabil funktioniert und nach dem Neustart des Routers keine Verbindung mehr hergestellt wird. Dieses Problem wird durch die Firmware-Version 2 behoben. Sie befindet sich nicht im Release-Status, funktioniert jedoch. Es ist viel besser geworden. Das Problem stellte sich jedoch heraus: Manchmal fällt die Karte vom Zyxel-Router ab und stellt die Verbindung nach dem Neustart des Routers oder nach einer Stunde wieder her, zwei oder drei selbst, ohne den Router neu zu starten. Oder es wird furchtbar langweilig - dieses Problem verschwand, nachdem das Stromversorgungsschema geändert wurde (das Board mag 3,3 V oder etwas höher) und eine externe Antenne hinzugefügt wurde - das Omega war sehr glücklich darüber. Daher bin ich im Prinzip mit dem Board zufrieden - die Tatsache, dass es manchmal keinen Zugang gibt, stört mich nicht sehr - als Hauptschnittstelle habe ich ein altes Smartphone im Dock verwendet, das mit dem Omega Access Point verbunden ist. Und Fernzugriff wird sehr notwendig sein - ich kann den Router aus der Ferne neu starten. Es verursacht Missverständnisse - Omega-2 hat zwei RST-Pins - einer muss eingereicht werden +, so wie ich es verstehe, wird dies programmgesteuert verarbeitet. Was für die Sekunde abgelegt werden muss und wie ein externer Watchdog angeschlossen wird, der füttert - ich weiß es noch nicht.
Schnittstelle im Innenraum Controller-Logik
Ich habe die Controller-Software-Architektur bereits beschrieben - sie hat sich nicht geändert (d. H. Das Verwalten von Textbefehlen, die über einen Web-Socket übertragen werden). Das Webinterface wurde mit kosmetischen Änderungen auf den ESP8266 migriert. Viele Prozeduren / Funktionen des Controller-Codes wurden einfach von C ++ nach JS übersetzt. Eine andere Sache ist, dass das Vorhandensein von Linux (OpenWRT) mir die Möglichkeit gab, die SQL-Datenbank - SQLite - zu verwenden. Daher habe ich die gesamte Logik für SQL-Abfragen organisiert. Dies ist eigentlich meine erste Erfahrung mit SQLite. Besonders gut hat mir die Möglichkeit gefallen, eine In-Memory-Datenbank zu verwenden. Ich habe alle temporären und aktuellen Daten in diese Datenbank gestellt (z. B. Sensordaten, Daten zur aktuell erforderlichen Temperatur, ...).
QuellcodeNormalerweise teile ich Ideen, keine Quellcodes. Es scheint mir, dass dies meine und meine Leser zu geistiger Aktivität anregt. Möchten Sie die Quelle erhalten - schreiben Sie in einem persönlichen.
Montage
Ich sammelte alles in Eisen, arrangiert in einer Kiste. Weitere - Ressourcentests. Nach einer Woche Betriebszeit entschied ich, dass der Test bestanden wurde. Es ist möglich zu installieren.
Installation
Diese Etappe war sehr erfolgreich. Ich hängte die Box neben den Kollektor, installierte und verband die Thermoköpfe. Ich war sehr zufrieden mit meiner Idee, alle Daten, Einstellungen und Parameter in einer Datenbank zu speichern. Im laufenden Betrieb konnte ich die Relais und Zonen auf eine nicht geplante Weise konfigurieren, nämlich drei Relais pro Zone, und alle anderen Relais (das Original) verschieben Die Idee war eine Zone - eine Staffel. Das Projekt umfasste die Verwendung eines Satzes von Service-Sensoren DS18B20 zur Überwachung der Temperatur des Heizmediums an der Versorgung, bei der Rückführung jeder Schleife des warmen Fußbodens und der Gesamtrücklauftemperatur - diese Sensoren wurden ebenfalls erfolgreich angeschlossen und konfiguriert (alle Einstellungen - geben den verständlichen Namen des Sensors an).
Ich habe das Kesselrelais angeschlossen.
Starten
Der Controller arbeitete wie geplant.
Für den Test habe ich beschlossen, die Temperatur in einem der Räume im zweiten Stock leicht zu erhöhen.
Der Kessel begann sich zu überhitzen und auszuschalten.
Und dann haben sich Service-Sensoren als nützlich erwiesen. Es stellte sich heraus, dass die Wassertemperatur am Ausgang der Schleife dieses Raumes nur ein paar Zehntel Grad niedriger ist als am Eingang! Wasser kühlt nicht! Dies bedeutet, dass es keine Wärme abgibt. Und das ganze Haus ist bei jeder Temperatur über Bord warm (das Ziel war es, die Temperatur im zweiten Stock etwas zu senken). Der erste Stock gibt also die gesamte Wärme ab, und der TP im zweiten Stock heizt den Boden kaum auf. Infolgedessen ist eine raumweise Regelung der Heizung unter solchen Bedingungen nicht möglich.
Fazit
Der Einfluss der Physik und der Gestaltungsmerkmale meines Hauses hat meiner Entwicklung ein Ende gesetzt. Trotz der Tatsache, dass der Regler selbst einwandfrei funktioniert, kann ich ihn nicht in der Heizungsanlage meines Hauses verwenden. Vielleicht werde ich ihn herabstufen lassen, damit er das Klima im Haus wie ein chinesischer Thermostat regelt - laut einem Sensor, aber bis jetzt sehe ich den Punkt nicht.
Das gesamte Projekt ist jedoch nicht erfolgreich. Während des Entwicklungsprozesses habe ich viele Technologien kennengelernt, mit denen ich vorher fast nicht vertraut war:
- Controller-Programmierung
- Ich habe etwas über die Datenbusse 1wire, i2c, uart, ... gelernt.
- Kenntnisse im Webserver-Gerät erworben
- Es scheint ein gutes Verständnis für die Entwicklung von Web-Frontends zu sein: HTML, JavaScript, vue.js.
- Er beherrschte die Web-Backend-Entwicklung: node.js.
So habe ich viel Erfahrung mit einem fehlgeschlagenen Projekt gesammelt, was für andere Projekte nützlich sein kann.
Diejenigen, die diesen Ort gelesen haben, können sich ansehen, was passiert ist .
(Die letzten drei Einstellungen sind blockiert)
PS Ideales Board für Heimwerker
Beim Schreiben des Artikels wurde ein weiteres Problem mit Omega-2 entdeckt - das Modul begann zu frieren. Schwer, Reset hilft nicht, schalten Sie einfach die Stromversorgung aus. Was ist das Problem - ich weiß es noch nicht. Vielleicht mag er die erhöhte Leistung nicht - jetzt wird er mit 3,8 V gespeist. Ich werde versuchen, das Leistungsmodul zu ersetzen. Trotz der Tatsache, dass das Projekt seine Funktionen nicht erfüllt, werde ich es vorerst im Thermometer-Modus belassen (wie gesagt, auf Arduino nichts tun - Sie erhalten eine Wetterstation). Aber auf jeden Fall ist das Thema für mich interessant, ich möchte rund um die Uhr eine 100% ige Systemverfügbarkeit erreichen. Wenn das Ersetzen des Netzteils nicht hilft, probiere ich das LinkIt Smart 7688-System aus. Es scheint Hardware-identisch mit Omega zu sein. Kann stabiler sein.
Zusatz: Nach dem Ersetzen des Linearstabilisators 5-> 3,3 V durch einen Impuls hatte Onion Omega 2+ eine Woche lang keine Probleme mit dem WiFi-stabilen Betrieb. Dann schrieb er diese Beilage.
Auf dieser Grundlage habe ich noch nicht das ideale Optionsboard für hausgemachte Produkte für mich gefunden :(
Wahrscheinlich werde ich als Kopf des nächsten Projekts versuchen, ein Smartphone auf Android zu verwenden - Sie müssen Sensoren über WLAN daran anschließen, aber es gibt praktisch keine Probleme mit der Stabilität von Markentelefonen. Und node.js scheint auf dem Telefon zu sein.
Ich wäre Ihnen dankbar, wenn Sie Ihre Vision bei der Auswahl eines Boards für Heimwerker teilen würden.