Fiasko Die Geschichte eines IoT selbst gemacht

    Die meisten Artikel werden nach dem Prinzip geschrieben: „Ich / wir haben es / und schauen, wie cool es ist!“. Dieselbe Publikation ist einem gescheiterten Projekt gewidmet. Willkommen unter der Kategorie…

    Dies ist eine Fortsetzung meiner Publikation Entwicklung intelligenter Geräte am Beispiel eines Fußbodenheizungsreglers auf ESP8266


    Beginnen wir aus der Ferne


    Ich wohne in einem kleinen Haus, das nach meinem Projekt gebaut wird. Layout - Eurotreshka, Flur, Wohnküche im ersten Stock, Bad, Kinderzimmer und Schlafzimmer im zweiten Stock. Von Nicht-Standard-Wänden arbolit, das Fundament der UWB, heizt ausschließlich TP. Zur gleichen Zeit sind die Böden aus Holz, im zweiten Stock gibt es einen schwimmenden Boden, TP - in der Platte GVL. In der ersten Etage befinden sich 3 TP-Rohrschlaufen (in der Tat ein Raum), in der zweiten sind es auch drei, aber jeder Loop ist für einen Raum (Schlafzimmer, Badezimmer, Kinderzimmer) zuständig. Ein 14-kW-Wandheizkessel sorgt für Wärme. Steuert den programmierbaren wöchentlichen kabellosen Thermostat des Boilers. An jedem Wochentag gibt es vier Perioden, in denen Sie die gewünschte Temperatur einstellen können. Gehirne an der Batterie ist das Relais verborgen. Es funktioniert super Aber ich brauche oft mehr als ich. Ich wollte eine Raumtemperaturregelung. Ich habe mir die vorgeschlagenen Lösungen angesehen Ich mochte nichts. Und das Wort "Arduino" fiel mir auf. Und durch Spezialität bin ich Programmierer. Und es fing an ...


    Eisen


    In Eisen bin ich nicht stark. Lötbrett ist die Höhe meiner Fähigkeiten. Aber Arduino ist so einfach, dass ich es verstanden habe - trotz meiner Elektronikkenntnisse kann ich in einem Haus, das zu mir passt, einen Temperaturregler herstellen.


    Temperatursensoren


    Ich habe keine Liebe zu Kabeln im Inneren. Ich versuche, sie auszuschließen oder zu verbergen, wenn es unmöglich ist, sie auszuschließen. Etwas missmutig verwendete ich drahtlose Sensoren von chinesischen Wetterstationen als Raumtemperaturfühler. Die Sensoren arbeiten lange mit Batterien und senden mit 433 MHz. Es ist sehr schön, Sie können eine andere Farbe wählen, mit dem Bildschirm und ohne den Bildschirm. Mit Blick auf die Zukunft werde ich sagen, dass jeder Hersteller von Wetterstationen sein eigenes Datenübertragungsprotokoll mit einem Sensor erfindet. Im Verlauf der Experimente habe ich die Protokolle von 5 Sensortypen analysiert - alle haben unterschiedliche Datenübertragungsformate. Ich habe eine Bibliothek entwickelt, die Daten von 4 Sensortypen akzeptiert. 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 wurde zum chinesischen Logikanalysator. Ohne ein solches Werkzeug ist es praktisch unmöglich, eine Protokollanalyse durchzuführen. Es ist eine Menge wert, es ist einfach zu benutzen - ich empfehle es allen Arduinschik.

    Ich habe die Bibliothek nach dem Abtastprinzip implementiert, Frequenz 10kHz. Dieser Ansatz ermöglichte es, das Geräusch in der Luft auszugleichen und die Belastung des Prozessors zu reduzieren, verglichen mit dem Ansatz mit Unterbrechungen beim Ändern des Pegels am Empfänger-Pin. Logischer Analysator wurde zum Debuggen verwendet:

    Signal mit Debugdaten

    3...6 каналы — данные для отладки

    Ich werde Beispiele für Sensoren und deren Eigenschaften geben.

    • Typ 1: Datenübertragung alle 35 Sekunden. Die Periode ändert sich nicht, und dies ist ein Problem, wenn drei oder mehr Sensoren verwendet werden. Die Uhr in den Sensoren ändert sich etwas, die Signale können sich manchmal überlappen und ein oder zwei Sensoren fallen eine oder zwei oder drei Mal pro Woche oder zwei. 6 Datenpakete in 0,8 Sekunden. Die Sensor-ID ändert sich bei jedem Einschalten. Keine Daten zum Akkustatus.

      Aussehen


      Daten

      Сверху — данные приемника, стрелками отмечены помехи
      Снизу — данные передатчика.
    • Typ 2: Datenübertragungsdauer - 40 ... 80 Sekunden, je nach Kanal. Das beste Protokoll ist meiner Meinung nach 15 Datenpakete für 0,6 Sekunden, es gibt eine Prüfsumme. Die Sensor-ID ändert sich beim Einschalten. Es werden Daten zum Batteriestatus übertragen. Der schwächste Sender - wenn ich den Empfänger in die Box stecke, verschlechterte sich die Empfangsqualität merklich. Wahrscheinlich mit einer externen Antenne für den Empfänger behandelt.

      Aussehen


      Daten

      помехи отсутствуют
    • Typ 3: Die Datenübertragungsdauer beträgt je nach Kanal 50,55 Sekunden. 7 Packungen für 0,6 s. ID ändert sich beim Einschalten, es werden Daten zum Batteriestatus übertragen. Keine schlechte Wahl.

      Aussehen


      Daten
      Практически идентичны типу 1
    • Typ 4: Die Datenübertragungsdauer beträgt je nach Kanal 56 ... 76 Sekunden. Es gibt keinen Bildschirm. Kann geändert werden, wenn die aktivierte ID nicht erkannt wird. Ob es Unterschiede in der ID verschiedener Instanzen gibt - ich weiß nicht, ich habe einen solchen Sensor. Angaben zum Zustand der Batterie - sind. Ein kraftvolles Signal, die Übertragung wurde praktisch nicht beobachtet.

      Aussehen


      Daten
      не сохранились
    • Typ 5: Die Übertragungszeit wird nicht gemessen, es gibt keinen Kanalwechsel, das Protokoll wird nicht gründlich analysiert.

      Aussehen


      Daten


    Daher ist die Empfängereinheit auf den Arduino Pro Mini c-Ausgangsdaten des i2c-Slaves implementiert.


    Arduino Mega


    Dies ist die erste Plattform, auf der ich den Controller gemacht habe. Mein Controller hatte eine Befehlsschnittstelle, die von über UART eingegebenen Befehlen gesteuert wurde. Zu diesem Zeitpunkt plante ich, die WEB-Schnittstelle auf dem ESP8266 und die Kommunikation mit Mega auf dem UART zu erstellen. Ich habe ein Mega-Board von Robotdyn, kombiniert mit ESP8266, und auf diesem Board wollte ich meine eigene Entwicklung aufbauen. Ein besonderer Vorteil der Karte ist die Vielzahl externer Ports. Bei der Erkundung des ESP8266 erkannte ich jedoch, dass dieser kleine Chip durchaus in der Lage ist, die Funktionen eines Controllers und einer Schnittstelle zu kombinieren.


    ESP8266


    Ich habe eine Variante des WeMos D1-Miniboards verwendet, es hat eine geringe Größe und eine ausreichende Anzahl von Schlussfolgerungen 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 ausgezeichnete Webserverbibliothek mit Websocket-Unterstützung. Ich habe den Controller auf dieser Tafel gesammelt. Entwickelt eine Weboberfläche. Alles funktioniert wunderbar. Aber aus irgendeinem unbekannten Grund - die Betriebszeit beträgt nicht mehr als einen Tag. Entweder habe ich etwas schief gemacht, oder einige der verwendeten Bibliotheken sind eine Kurve. Darüber hinaus gibt es eine Begrenzung für 5 gleichzeitige Verbindungen. Bei Überschreitung - neu starten oder sogar hängen (trotz vorhandenem Watchdog. Ich hatte Probleme mit einem externen Watchdog). Da meine Weboberfläche aus fast einem Dutzend Dateien besteht, Und Browser laden Seiten in 5 parallelen Streams - ein Neustart ist elementar. Für mich habe ich entschieden, dass dieses Board nur als Client verwendet werden kann. Begann, nach anderen Lösungen zu suchen.

    Schnittstellen-Screenshots











    ESP32


    Dies ist eine Art Erbe von ESP8266. In ESP32 vor allem - Frequenzen, Speicher, Beine, ... Aber das Problem ist, dass die me-no-dev / ESPAsyncWebServer-Bibliothek in Bezug auf Web-Sockets nicht funktioniert. Insgesamt. Fliegt raus Etwas im Zusammenhang mit Multithreading. Ich habe keine andere Webserver-Bibliothek mit Unterstützung für Web-Sockets gefunden.


    SOC


    Zu diesem Zeitpunkt entschied ich mich für ein Board mit Linux - ich habe nichts passenderes erfunden.


    Meine Anforderungen an die Tafel. Es scheint, dass es nicht viele von ihnen gibt:



    • Ich brauche keinen Bildschirm.
    • Aufgrund des Fehlens eines Bildschirms für die Ersteinrichtung sollte die Karte im Zugangspunktmodus arbeiten können.
    • Ich brauche ein Minimum an Betriebssystemfunktionen.

    Orange Pi I96


    Diese Karte war in jeder Hinsicht geeignet - kein Videoausgang, WLAN, integrierter Flash-Speicher, SD-Kartensteckplatz. Sie können Ubuntu oder DietPi im eingebauten Speicher ablegen. Aber das Problem dieses Boards ist seine Software. Sie können keinen Zugangspunkt einrichten. Das größte Problem ist jedoch, dass sich beim Neustart die MAC-Adresse ändert und nichts dagegen unternommen werden kann. Im Ofen (Zum Zeitpunkt des Schreibens, auf w3bsit3-dns.com, erschien eine Nachricht in der für das Analog dieser Karte (2g IOT) bestimmten Niederlassung, dass es möglich ist, die MAC-Verschiebung zu besiegen.)


    Zwiebel Omega 2+


    Elegante Dokumentation. Mit der werkseitigen Firmware ist alles gestartet, der Bildschirm wird nicht benötigt, der UART ist optional. SSH ist standardmäßig aktiviert. Node.js wurde installiert (Version 4.x, ist mir aber egal). Die sqlite- und i2c-Bibliotheken für Node.js wurden installiert (mit einem Tamburin).
    Neben i2c benötige ich keine Hardware-Schnittstellen mehr. Verglichen mit der Version meiner Entwicklung auf dem ESP8266 wurde ein separater Arduino Pro Mini-Controller hinzugefügt, um die Daten des Temperatursensor-Empfängers zu analysieren. Der Empfängercontroller ist als i2c-Slave mit dem Omega verbunden. Kabelsensoren mit 1-Draht-Schnittstelle werden über eine 1-Draht-i2c-Brücke (DS2482-100) angeschlossen. Für diese Brücke gibt es eine Bibliothek für node.js, die jedoch bei der Suche nach Sensoren für mich nicht funktioniert hat. Ich habe es nicht verstanden, die DS2482-Bibliothek, die auf ESP8266 funktionierte, auf js portiert.

    Das Problem ist jedoch, dass WiFi auf Omega-2 nicht stabil arbeitet. Nach dem Neustart des Routers wird keine Verbindung hergestellt. Dieses Problem wird durch die Firmwareversion 2 behoben, es befindet sich nicht im Freigabestatus, funktioniert aber. Es wurde viel besser. Das Problem wurde jedoch geklärt - manchmal fällt das Board vom Zyxel-Router ab und verbindet sich nach dem Neustart des Routers oder nach ein, zwei oder drei Stunden von selbst, ohne den Router neu zu starten. Oder es fängt an, stumpf zu werden - dieses Problem wurde durch den Wechsel des Stromversorgungskreises (die Platine liebt 3,3 V oder etwas höher) und das Hinzufügen einer externen Antenne beseitigt - das Omega freute sich sehr darüber. Grundsätzlich bin ich mit der Platine zufrieden - etwas, das manchmal nicht verfügbar ist, stört mich nicht sehr - als Hauptschnittstelle habe ich ein altes Smartphone im Dock verwendet, das mit dem Omega Access Point verbunden ist. Der Fernzugriff wird jedoch dringend benötigt - ich kann den Router aus der Ferne neu starten. Es führt zu Missverständnissen - Omega-2 hat zwei RST-Pins - einer muss übermittelt werden +, so wie ich es verstehe, wird dies programmgesteuert behandelt. Was soll ich beim zweiten einreichen und wie man einen externen Watchdog anschließt, der gibt - ich weiß noch nicht.

    Schnittstelle im Innenraum


    Steuerlogik

    Ich habe bereits die Softwarearchitektur des Controllers beschrieben - sie hat sich nicht geändert (d. H. Die Steuerung von Textbefehlen, die über einen Web-Socket übertragen werden). Die Webschnittstelle wurde von ESP8266 mit kosmetischen Änderungen 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, eine SQL-Datenbank zu verwenden - sqlite. Daher organisierte ich die gesamte Logik für SQL-Abfragen. Dies ist eigentlich meine erste Erfahrung mit sqlite. Besonders gut gefiel mir die Möglichkeit, In-Memory-Datenbanken zu verwenden - ich habe alle temporären und aktuellen Daten in diese Datenbank gestellt (z. B. Sensordaten, Daten zur aktuell erforderlichen Temperatur, ...).

    Quellen
    Я обычно делюсь идеями, а не исходниками. Мне кажется это стимулирует умственную активность, мою и читателей. Хотите получить исходники — пишите в личку.

    Montage

    Ich sammelte alles in der Drüse und steckte es in eine Kiste. Next - Lebenstests. Nach einer Woche Betriebszeit entschied ich, dass der Test bestanden wurde. Sie können installieren.

    Box


    Installation


    Diese Etappe war sehr erfolgreich. Hängte eine Box neben dem Kollektor auf, installierte und schloss die Thermoköpfe an. Ich war sehr zufrieden mit meiner Idee, alle Daten, Einstellungen und Parameter in der Datenbank zu speichern. Im laufenden Betrieb konnte ich die Korrespondenz von Relais und Zonen auf eine nicht geplante Art und Weise konfigurieren, nämlich drei Relais pro Zone und alle anderen zu bewegenden Relais (Original) Die Idee war eine Zone - eine Staffel. Das Projekt umfasste die Verwendung eines Satzes von DS18B20-Servicesensoren, um die Kühlmitteltemperatur am Einlass, in der Rücklaufleitung jedes warmen Bodens und die Gesamtrücklauftemperatur zu überwachen - diese Sensoren wurden ebenfalls erfolgreich angeschlossen und konfiguriert (alle Einstellungen - um den eindeutigen Namen des Sensors anzugeben).


    Das Kesselrelais angeschlossen.


    Starten


    Der Controller verdient wie geplant.


    Für den Test habe ich beschlossen, die Temperatur in einem der Räume im zweiten Stock etwas zu erhöhen.


    Der Kessel begann zu überhitzen und wurde heruntergefahren.


    Und hier haben sich die 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! Das Wasser kühlt nicht! Das heißt, es gibt keine Wärme ab. Und im ganzen Haus ist es bei jeder Temperatur über Bord warm (das Ziel war es, die Temperatur im zweiten Stock etwas zu senken). Das bedeutet, dass die erste Etage alles Wärme gibt und die TP in der zweiten Etage die Etage kaum erwärmt. Daher ist eine raumbezogene Regelung der Heizung unter diesen Bedingungen nicht möglich.


    Fazit


    Der Einfluss der Physik und die Gestaltungsmerkmale meines Hauses setzen meinem Entwurf also ein Ende. Obwohl der Regler selbst einwandfrei funktioniert, kann ich ihn nicht in der Heizungsanlage meines Hauses verwenden. Vielleicht mache ich ihn zu einem Downgrade, damit er das Klima im Haus wie ein chinesischer Thermostat regeln kann - laut einem Sensor, aber vorerst sehe ich keinen Grund.


    Das Projekt als Ganzes ist jedoch nicht erfolgreich. Im Verlauf der Entwicklung lernte ich viele Technologien kennen, mit denen ich praktisch nicht vertraut war:

    • Controller-Programmierung
    • Ich erfuhr über den Datenbus 1wire, i2c, uart, ...
    • Kenntnisse über das Webserver-Gerät erhalten
    • Es scheint nicht schlecht in der Web-Frontend-Entwicklung zu sein: HTML, JavaScript, vue.js
    • Ich habe die Entwicklung des Web-Backends gemeistert: node.js


    So habe ich eine großartige Erfahrung mit einem gescheiterten Projekt gemacht, was bei anderen Projekten nützlich sein kann.

    Diejenigen, die bis hierher gelesen haben, können sehen, was passiert ist .
    (die letzten drei Einstellungen sind gesperrt)


    PS Perfect Board für DIY


    Beim Schreiben des Artikels wurde ein weiteres Problem mit Omega-2 entdeckt - das Modul begann zu hängen. Hart, Reset hilft nicht, einfach ausschalten. Was ist das Problem - ich weiß es noch nicht. Vielleicht mag er keine hohe Leistung - jetzt wird ihm 3.8B serviert. Ich werde versuchen, das Leistungsmodul auszutauschen. Trotz der Tatsache, dass das Projekt seine Funktionen nicht erfüllt, belasse ich es vorerst im Thermometermodus (wie man sagt, mache es nicht auf Arduino - du bekommst eine Wetterstation). Aber auf jeden Fall ist das Thema für mich interessant, ich möchte eine 100% ige Verfügbarkeit des Systems rund um die Uhr erreichen. Wenn das Ersetzen des Netzteils nicht hilft, probiere ich das LinkIt Smart 7688-System aus, da es sich um eine Hardware handelt, die mit Omega identisch ist. Es kann stabiler sein.
    Zusatz: Nach dem Austausch des Linearstabilisators 5-> 3,3 V mit einem pulsierenden Problem mit WiFi wurde Onion Omega 2+ nicht bemerkt - stabile Arbeit für eine Woche. Dann schrieb er diesen Zusatz.

    Basierend auf diesem Thema habe ich noch kein ideales Motherboard für hausgemachte Produkte gefunden :(

    Wahrscheinlich werde ich als nächstes versuchen, ein Smartphone auf Android zu verwenden - Sensoren müssen über WLAN angeschlossen werden, aber es gibt praktisch keine Probleme mit den Markentelefonen. Sie können js telefonieren,

    ich würde es begrüßen, wenn Sie Ihre Vision von der Wahl eines Boards für Heimwerker teilen.

    Jetzt auch beliebt: