Inhaltsverzeichnis:

Retro-Sprachsynthese. Teil: 12 IoT, Hausautomation – Gunook
Retro-Sprachsynthese. Teil: 12 IoT, Hausautomation – Gunook

Video: Retro-Sprachsynthese. Teil: 12 IoT, Hausautomation – Gunook

Video: Retro-Sprachsynthese. Teil: 12 IoT, Hausautomation – Gunook
Video: C64-Spiel mit Sprachausgabe und weitere Klassiker (Retro ausgepackt) 2024, Dezember
Anonim
Image
Image
Retro-Sprachsynthese. Teil: 12 IoT, Hausautomation
Retro-Sprachsynthese. Teil: 12 IoT, Hausautomation

Dieser Artikel ist der 12. in einer Reihe von Instructables zur Hausautomation, in denen dokumentiert wird, wie ein IoT-Retro-Sprachsynthesegerät erstellt und in ein vorhandenes Hausautomationssystem integriert wird, einschließlich aller erforderlichen Softwarefunktionen, um die erfolgreiche Bereitstellung in einer häuslichen Umgebung zu ermöglichen.

Bild 1 zeigt das fertige IoT-Sprachsynthesizer-Gerät und Bild 2 zeigt alle im Prototyp verwendeten Komponenten, deren Formfaktor reduziert wurde, um in das Endprodukt zu gelangen.

Das Video zeigt das Gerät in Aktion (während des Tests).

Einführung

Wie oben erwähnt, beschreibt dieses Instructable, wie man ein IoT-Retro-Sprachsynthesegerät herstellt und basiert auf dem General Instruments SP0256-AL2.

Sein Hauptzweck besteht darin, einem IoT-Netzwerk eine Sprachsynthese der alten Schule hinzuzufügen. Warum 'alte Schule' werden Sie fragen? Nun, da ich in den 80er Jahren war, als diese Dinger zum ersten Mal hergestellt wurden, und ich eines an mein BBC-Mikro angeschlossen habe, gibt es für mich ein gewisses Maß an Nostalgie rund um den SP0256-AL2.

Ich bevorzuge die Herausforderung, herauszufinden, was um alles in der Welt von dieser nach Dalek klingenden Stimme gesagt wird, als den sanften Tönen eines Hipster-Amazonas-Echos oder Siri zuzuhören. Wo liegt die Herausforderung, die ich dich frage?

Oh, und ganz zu schweigen davon, dass ich auch eine 'Tüte' von 'SP0256-AL2'-ICs herumliegen habe.

Das Gerät ist auch in der Lage, die lokale Temperatur und Luftfeuchtigkeit zu lesen, sodass die Umgebungsinstrumentierung meiner bestehenden IoT-Infrastruktur, die sich in das MQTT/OpenHAB-basierte IoT-Netzwerk einklinkt, das in dieser Serie über Heimautomatisierung (HA) beschrieben wird, weiter erweitert wird, aufbauend auf wiederverwendetem Code von hier.

Sein Herzstück ist ein ESP8266-07, der für die MQTT-Kommunikation verantwortlich ist und alle Systemfunktionen steuert (SD-Kartenzugriff, LED-Steuerung, Temperatur-/Feuchtigkeitsmessung, Lautstärkeregelung, Sprachsynthese). Das Gerät ist vollständig über Textdateien konfigurierbar, die auf einem lokale SD-Karte, obwohl Kalibrierungs- und Netzwerksicherheitsparameter auch über entfernte MQTT-Publikationen programmiert werden können.

Welche Teile brauche ich?

Sehen Sie hier die Stückliste

Welche Software benötige ich?

  • Arduino-IDE 1.6.9,
  • Arduino IDE konfiguriert zum Programmieren des ESP8266-07 (wie hier). Konfigurieren Sie dann die IDE wie in der detaillierten Beschreibung in der Softwareskizze hier angegeben,
  • Python v3.5.2, wenn Sie die automatisierte Testfunktion verwenden möchten, Details hier

Welche Werkzeuge brauche ich?

  • Mikroskop mindestens x3 (für SMT-Löten),
  • Crimpzange für Molex-Steckverbinder (für JST-Steckverbinder),
  • SMD-Lötkolben (mit flüssigem Flussmittelstift und flussmittelgefülltem Lot),
  • Schraubendreher (verschiedene),
  • Heißluftpistole,
  • Bohrer (verschiedene),
  • Senker Handwerkzeug,
  • Dateien (verschiedene),
  • Dremel (verschiedene Bits),
  • Robuster Schraubstock (klein und groß, wie ein schwarzer und dicker Arbeitskollege),
  • Skalpell,
  • Messschieber (zum Messen der Fertigung und nützlich für die Dimensionierung von PCB-Komponenten),
  • Schraubenschlüssel und Steckschlüssel (diverse),
  • Starke Pinzette (zum SMT-Löten),
  • Junior Bügelsäge,
  • Bohrer (mit verschiedenen Bohrern),
  • Feinzange (spitze und stumpfe Nase),
  • Bündigfräser,
  • DMM mit akustischer Durchgangsprüfung,
  • Dual-Channel-Digital-Scope (praktisch zum Debuggen von Signalen)

Welche Fähigkeiten brauche ich?

  • Viel Geduld,
  • Großes handwerkliches Geschick und ausgezeichnete Hand-Augen-Koordination,
  • Sehr gute Lötkenntnisse,
  • Ausgezeichnete Fertigungsfähigkeiten,
  • Die Fähigkeit, in 3 Dimensionen zu visualisieren,
  • Einige Kenntnisse in der Softwareentwicklung mit 'C' (wenn Sie den Quellcode verstehen möchten),
  • Einige Python-Kenntnisse (wie man Skripte installiert und ausführt, wenn Sie das automatisierte Testen verwenden möchten),
  • Kenntnisse von Arduino und seiner IDE,
  • Gute Kenntnisse in der Elektronik,
  • Etwas Verständnis für Ihr Heimnetzwerk.

Behandelten Themen

  • Benutzerhandbuch
  • Schaltungsübersicht
  • PCB-Herstellung und -Bestückung
  • Herstellung
  • Übersicht über das Softwaresystem
  • Software-Übersicht
  • Sensorkalibrierung
  • Namenskonvention für MQTT-Themen
  • Debug und Fehlersuche
  • Testen des Designs
  • Abschluss
  • Verwendete Referenzen

Series LinksTo Teil 11: IoT Desktop Console. Teil: 11 IoT, Hausautomation

Schritt 1: Benutzerhandbuch

Benutzerhandbuch
Benutzerhandbuch
Benutzerhandbuch
Benutzerhandbuch
Benutzerhandbuch
Benutzerhandbuch

Bild 1 oben zeigt die Vorderseite des Retro Speech Synthesizers und Bild 2 die Rückseite.

Gehäusefront

  1. Lautsprechergrill
  2. 3,5-mm-Kopfhörerbuchse: Der Hauptlautsprecher ist deaktiviert, wenn eine 3,5-mm-Buchse eingesteckt ist.
  3. Rote LED: Diese LED leuchtet, während ein Wort gesprochen wird, wenn Sprache über eine HTTP-Anfrage initiiert wurde.
  4. Blaue LED: Diese LED leuchtet, während ein Wort gesprochen wird, wenn Sprache über eine MQTT-IoT-Anfrage initiiert wurde.

Gehäuserückseite

  1. Reset-Taste: Wird verwendet, um das ESP8266-07 IoT-Gerät hart zurückzusetzen.
  2. Flash-Taste: In Verbindung mit der Reset-Taste ermöglicht das erneute Flashen des ESP8266-07.
  3. WiFi-Antennenstecker (SMA-Stecker): Für eine externe WiFi-Antenne mit der geringsten HF-Pfaddämpfung, da der Verschluss aus Aluminium besteht.
  4. Externer Programmieranschluss: Um die Notwendigkeit zu beseitigen, das Gehäuse abzuschrauben, um Zugang zum ESP8266-07 für Neuprogrammierungszwecke zu erhalten. Die Programmierpins des ESP8266-07 wurden auf den externen Programmierport herausgeführt. Bild 3 ist der Programmieradapter.
  5. Grüne LED: Dies ist die IoT-System-LED und wird verwendet, um den Diagnosestatus des Geräts anzuzeigen und zu booten und während des Betriebs.
  6. Externer Temperatur-/Feuchtigkeitssensor (AM2320)
  7. SD-Kartensteckplatz: Dieser enthält alle Konfigurations-/Sicherheitsdaten zusammen mit Webserverseiten.
  8. 2,1 mm Versorgungsbuchse 6vdc

Schritt 2: Schaltungsübersicht

Schaltungsübersicht
Schaltungsübersicht
Schaltungsübersicht
Schaltungsübersicht

Das Retro Speech Synth-Gerät besteht aus zwei PCBs;

  • RetroSpeechSynthIoTBoard: Dies ist eine generische, wiederverwendbare ESP8266-07/12/12E/13 PCB
  • RetroSpeechSynthBoard: Dies ist eine generische SP0256-AL2-Platine

Retro Speech Synth IoT Board

Diese Platine ermöglicht entweder das direkte Löten eines ESP8266-07/12/12E/13 oder 0,1 Pitch-Buchsen, die eine ESP8266 Trägerplatine aufnehmen.

Das Board wurde entwickelt, um seine I/O über eine I2C-Verbindung zu erweitern und kann entweder 3v3- oder 5v-Versorgungspegel über Q1, Q2, R8-13 unterstützen.

Der Anschluss an die Platine erfolgt über einen der beiden Header J2 und J4, ein 8-Wege-DIL-IDC-Bändchen oder 5-Wege-JST/Molex.

U2 und U3 bieten 3,3 V und 5 V Bordnetzregelung. Wenn eine höhere Stromkapazität erforderlich ist, können alternativ externe serielle Shunt-Regler über die Anschlüsse J10 bzw. J11 angeschlossen werden.

Die Anschlüsse J1 und J3 bieten Unterstützung für externe SD-Karten über SPI. J1 wurde für einen 8-Wege-Molex entwickelt und J3 verfügt über einen direkten Pin für Pin-Kompatibilitätsunterstützung für eine handelsübliche SD-Karten-Platine mit entweder 3v3- oder 5v-Unterstützung.

Retro-Sprach-Synth-Board

Die Steuerung dieses Boards erfolgt über eine I2C-5-V-kompatible Verbindung über J1, J5 oder J6, einen 4-Wege-JST/Molex-, 8-Wege-DIL-IDC- oder 8-Wege-IDC-Flachbandstecker.

U2 MPC23017 bietet die I2C-zu-Parallel-Schnittstelle zu U3, dem SP0256-AL2 und den LEDs D1 (Grün), D2 (Rot) und D3 (Blau). Der Ausgang des Speech Synth wird dem Audioverstärker CR1 TBA820M entweder über das analoge Poti RV1 oder das digitale Poti U1 MCP4561 zugeführt.

Digital Pot U1 wird auch über 5V-kompatibles I2C gesteuert.

Hinweis: Das Gerät ESP8266-07 wurde ausgewählt, da es über einen integrierten IPX-RF-Anschluss verfügt, der es ermöglicht, eine externe WLAN-Antenne zum Aluminiumgehäuse hinzuzufügen.

Schritt 3: PCB-Herstellung und -Bestückung

PCB-Herstellung und -Bestückung
PCB-Herstellung und -Bestückung
PCB-Herstellung und -Bestückung
PCB-Herstellung und -Bestückung
PCB-Herstellung und -Bestückung
PCB-Herstellung und -Bestückung
PCB-Herstellung und -Bestückung
PCB-Herstellung und -Bestückung

Die Bilder 1 und 2 zeigen die fertigen und verdrahteten PCB-Unterbaugruppen, die sich auf dem Aluminiumgehäusesubstrat befinden.

Die beiden PCBs wurden mit Kicad v4.0.7 entworfen, von JLCPCB hergestellt und von mir zusammengebaut und oben auf den Bildern 3 bis 13 gezeigt.

Schritt 4: Herstellung

Herstellung
Herstellung
Herstellung
Herstellung
Herstellung
Herstellung

Bild 1 zeigt ein Layout im Haynes Manual-Stil aller vorgefertigten Teile vor der Endmontage.

Die Bilder 2 … 5 zeigen verschiedene Aufnahmen während der Gehäusefertigung mit minimalen Abständen.

Schritt 5: Überblick über das Softwaresystem

Übersicht über das Softwaresystem
Übersicht über das Softwaresystem
Übersicht über das Softwaresystem
Übersicht über das Softwaresystem

Dieses IoT-Retro-Sprachsynthesegerät enthält sechs wichtige Softwarekomponenten, wie in Bild 1 oben gezeigt.

SD-Karte

Dies ist das externe SD-SPI-Flash-Ablagesystem und wird verwendet, um die folgenden Informationen zu speichern (siehe Bild 2 oben);

  • Symbole und 'Speech Synth Configuration Home Page' index.htm: Wird vom IoT-Gerät bereitgestellt, wenn es keine Verbindung zu Ihrem IoT-WLAN-Netzwerk herstellen kann (normalerweise aufgrund falscher Sicherheitsinformationen oder erstmaliger Verwendung) und bietet dem Benutzer eine Möglichkeit die Sensoren aus der Ferne zu konfigurieren, ohne neue SD-Inhalte neu flashen zu müssen. Es enthält auch index1.htm, mqtt.htm und sp0256.htm, dies sind die lokal bereitgestellten Webseiten, auf die über einen Webbrowser zugegriffen werden kann, die eine eingeschränkte Steuerung des Sprachsynthesizers ermöglichen über
  • Sicherheitsinformationen: Dies sind die Informationen, die das IoT-Gerät beim Einschalten verwendet, um eine Verbindung zu Ihrem IoT-WLAN-Netzwerk und MQTT-Broker herzustellen. Informationen, die über die 'Speech Synth Configuration Home Page' übermittelt werden, werden in diese Datei ('secvals.txt') geschrieben.
  • Kalibrierungsinformationen: Die in den Dateien ('calvals1.txt' und 'calvals2.txt') enthaltenen Informationen werden verwendet, um die integrierten Temperatur-/Feuchtesensoren bei Bedarf zu kalibrieren. Kalibrierkonstanten können über MQTT-Befehle von einem MQTT-Broker oder durch erneutes Flashen der SD-Karte auf das IoT-Gerät geschrieben werden. 'calvals1.txt' bezieht sich auf den AM2320-Sensor und 'calvals2.txt' auf den DHT22.
  • Vom Benutzer konfigurierbare Systemwerte: Die in dieser Datei ('confvals.txt') enthaltenen Informationen, die vom Benutzer ausgewählt werden, steuern bestimmte Systemreaktionen, wie z.

mDNS-Server

Diese Funktionalität wird aufgerufen, wenn das IoT-Gerät keine Verbindung zu Ihrem WLAN-Netzwerk als WLAN-Station herstellen konnte und stattdessen zu einem WLAN-Zugangspunkt geworden ist, der einem heimischen WLAN-Router ähnelt. Im Fall eines solchen Routers würden Sie sich normalerweise damit verbinden, indem Sie die IP-Adresse von etwa 192.168.1.1 (normalerweise auf einem an der Box angebrachten Etikett gedruckt) direkt in die URL-Leiste Ihres Browsers eingeben, woraufhin Sie eine Anmeldeseite zur Eingabe erhalten Benutzername und Passwort, damit Sie das Gerät konfigurieren können. Für den ESP8266-07 im AP-Modus (Access Point-Modus) verwendet das Gerät standardmäßig die IP-Adresse 192.168.4.1, jedoch müssen Sie bei laufendem mDNS-Server nur den benutzerfreundlichen Namen 'SPEECHSVR.local' in die Browser-URL-Leiste eingeben, um siehe die 'Startseite der Sprachsynth-Konfiguration'.

MQTT-Client

Der MQTT-Client stellt alle erforderlichen Funktionen zur Verfügung; Verbinden Sie sich mit Ihrem IoT-Netzwerk MQTT-Broker, abonnieren Sie die Themen Ihrer Wahl und veröffentlichen Sie Nutzlasten zu einem bestimmten Thema. Kurz gesagt stellt es IoT-Kernfunktionen bereit.

HTTP-Webserver

Dieser Webserver hat zwei Zwecke;

  1. Wenn das IoT-Gerät keine Verbindung zum WLAN-Netzwerk herstellen kann, dessen SSID, P/W usw. in der Sicherheitsinformationsdatei auf der SD-Karte definiert ist, wird das Gerät zu einem Zugangspunkt. Sobald Sie mit dem vom Access Point bereitgestellten WiFi-Netzwerk verbunden sind, können Sie durch das Vorhandensein eines HTTP-Webservers direkt eine Verbindung zum Gerät herstellen und seine Konfiguration über einen HTTP-Webbrowser ändern, der die "Sprachsynthese-Konfiguration" bereitstellen soll Homepage', die sich auch auf der SD-Karte befindet.
  2. Sobald sich das IoT Retro Speech Synthesis Device mit dem WiFi-Netzwerk und dem MQTT-Broker verbunden hat, stellt der HTTP-Webserver bei Zugriff automatisch eine HTTP-Webseite bereit, die eine eingeschränkte Kontrolle über das IoT-Gerät ermöglicht, eine Auswahl fester Sätze zu sprechen und die Möglichkeit zu schalten Sie die beiden vorderen roten und blauen LEDs ein.

WLAN-Station

Diese Funktionalität gibt dem IoT-Gerät die Möglichkeit, sich mit den Parametern in der Sicherheitsinformationsdatei mit einem heimischen WLAN-Netzwerk zu verbinden. Andernfalls kann Ihr IoT-Gerät den MQTT-Broker nicht abonnieren/veröffentlichen.

WLAN-Zugangspunkt

Die Fähigkeit, ein WiFi Access Point zu werden, ist ein Mittel, mit dem Sie sich mit dem IoT-Gerät verbinden und Konfigurationsänderungen über eine WiFi-Station und einen Browser (z. B. Safari auf dem Apple iPad) vornehmen können. Dieser Access Point sendet eine SSID = "SPEECHSYN" + die letzten 6 Ziffern der MAC-Adresse des IoT-Geräts. Das Passwort für dieses geschlossene Netzwerk heißt phantasievoll 'PASSWORD'

Schritt 6: Softwareübersicht

Software-Übersicht
Software-Übersicht
Software-Übersicht
Software-Übersicht
Software-Übersicht
Software-Übersicht

Präambel

Um diesen Quellcode erfolgreich zu kompilieren, benötigen Sie eine lokale Kopie des Codes und der Bibliotheken, die unten in Schritt 12, Verwendete Referenzen beschrieben werden. Wenn Sie nicht sicher sind, wie Sie eine Arduino-Bibliothek installieren, gehen Sie hier.

Überblick

Die Software verwendet die Zustandsmaschine, wie in Bild 1 oben gezeigt (vollständige Kopie der Quelle in meinem GitHub-Repository hier). Es gibt 5 Hauptstaaten, wie unten beschrieben;

  • DRIN

    Dieser Initialisierungszustand ist der erste Zustand, der nach dem Einschalten erreicht wird

  • NOCONFIG

    Dieser Zustand wird erreicht, wenn nach dem Einschalten eine ungültige oder fehlende Datei secvals.txt erkannt wird. In diesem Zustand ist die Konfigurationsseite sichtbar

  • AUSSTEHEND NW

    Dieser Zustand ist vorübergehend und wird eingegeben, während keine WLAN-Netzwerkverbindung besteht

  • AUSSTEHENDE MQTT

    Dieser Zustand ist vorübergehend und tritt ein, nachdem eine WLAN-Netzwerkverbindung hergestellt wurde und keine Verbindung zu einem MQTT-Broker in diesem Netzwerk besteht

  • AKTIV

    Dies ist der normale Betriebszustand, der erreicht wird, sobald sowohl eine WiFi-Netzwerkverbindung als auch eine MQTT-Broker-Verbindung hergestellt wurde. In diesem Zustand werden Temperatur, Hitzeindex und Luftfeuchtigkeit am IoT Retro Speech Synthesis Device regelmäßig an den MQTT Broker veröffentlicht. In diesem Zustand ist die Startseite von Speech Synth sichtbar

Die Ereignisse, die Übergänge zwischen Zuständen steuern, sind in Bild 1 oben beschrieben. Übergänge zwischen Zuständen werden auch durch die folgenden SecVals-Parameter geregelt;

  • 1. MQTT-Broker-IP-Adresse. In punktierter Dezimalform AAA. BBB. CCC. DDD
  • 2. MQTT-Broker-Port. In Integer-Form.
  • 3. MQTT-Broker-Verbindungsversuch, bevor vom STA-Modus in den AP-Modus gewechselt wird. In Integer-Form.
  • 4. WLAN-Netzwerk-SSID. In freiem Text.
  • 5. WLAN-Netzwerkkennwort. In freiem Text.

Wie oben erwähnt, wenn das IoT-Gerät sich nicht als WiFi-Station mit dem WiFi-Netzwerk verbinden kann, dessen SSID und P/W in der secvals.txt auf der SD-Karte definiert sind, wird das IoT-Gerät zu einem Access Point. Sobald er mit diesem Zugangspunkt verbunden ist, wird die 'Speech Synth Configuration Home Page' angezeigt, wie oben in Bild 2 gezeigt (indem Sie entweder 'SPEECHSVR.local' oder 192.168.4.1 in die URL-Adressleiste Ihres Browsers eingeben). Diese Homepage ermöglicht die Neukonfiguration des IoT Retro Speech Synthesis Device über einen

Fernzugriff im AKTIV-Zustand

Nach der Verbindung mit dem MQTT-Broker ist es auch möglich, das Gerät über MQTT-Themenveröffentlichungen sowohl neu zu kalibrieren als auch neu zu konfigurieren. Die Datei calvals.txt hat R/W-Zugriff und secvals.txt hat nur Schreibzugriff ausgesetzt.

Wie oben erwähnt, ist es im aktiven Modus möglich, über eine HTTP-Schnittstelle auf den Speech Synth zuzugreifen, indem Sie 'SPEECHSVR.local' oder 192.168.4.1 in die URL-Adressleiste Ihres Browsers eingeben. Diese HTTP-basierte Schnittstelle ermöglicht die grundlegende Steuerung des Speech Synth. Die Bilder 3, 4 und 5 zeigen die verfügbaren Webseiten.

Benutzer-Debugging

Während der Boot-Sequenz gibt die grüne System-LED des IoT-Geräts an der Rückseite des Gehäuses das folgende Debug-Feedback;

  • 1 Kurzes Blinken: Keine Konfigurationsdatei auf SD-Karte vorhanden (secvals.txt)
  • 2 kurzes Blinken: IoT-Gerät versucht, eine Verbindung zum WLAN-Netzwerk herzustellen
  • Kontinuierliche Beleuchtung: IoT-Gerät versucht, sich mit MQTT Broker zu verbinden
  • Aus: Gerät ist aktiv.

IoT-Retro-Sprachsynthese-Gerätefunktionalität im AKTIVEN Zustand

Sobald sich der ESP8266 im ACTIVE-Zustand befindet, tritt eine kontinuierliche Schleife ein, die die folgenden Funktionen aufruft; timer_update(), checkTemperatureAndHumidity() und handleSpeech(). Das Ergebnis wurde entwickelt, um dem Benutzer eine HTTP- oder MQTT-Schnittstelle zu präsentieren, seinen integrierten Sprachprozessor nahtlos mit Phonemen auf Abruf zu versorgen und lokale Parameterwerte der Umgebung über MQTT zu veröffentlichen.

Eine umfassende Liste aller Themenabonnements und Publikationen inklusive Payload-Werten ist im Quellcode enthalten.

Schritt 7: Sensorkalibrierung

Sensorkalibrierung
Sensorkalibrierung

Beim Hochfahren des IoT-Geräts werden im Rahmen der Boot-Sequenz zwei Dateien namens „cavals1.txt“und „cavals2.txt“von der SD-Karte gelesen.

Der Inhalt dieser Dateien sind Kalibrierungskonstanten, wie oben in Bild 1 angegeben.

  1. 'cavals1.txt': Wird vom externen AM2320 verwendet
  2. 'cavals2.txt': Wird vom internen DHT22 verwendet

Diese Kalibrierkonstanten werden verwendet, um die von den beiden Sensoren erfassten Messwerte anzupassen, um sie mit einem Referenzgerät in Einklang zu bringen. Es gibt einen weiteren Wert, der eine Meldestrategie für jedes Gerät definiert und im Folgenden zusammen mit dem Verfahren zur Kalibrierung der Sensoren beschrieben wird.

Berichtsstrategie

Dieser Parameter bestimmt, wie der Fernsensor alle lokalen Parameteränderungen der Umgebung meldet. Wenn ein Wert von 0 ausgewählt wird, veröffentlicht der Fernsensor jede Änderung der Temperatur oder Luftfeuchtigkeit jedes Mal, wenn der entsprechende Sensor gelesen wird (ca. alle 10 Sekunden). Jeder andere Wert verzögert die Veröffentlichung einer Änderung um 1…60 Minuten. Das Ändern dieses Parameters ermöglicht die Optimierung des MQTT-Netzwerkverkehrs. Es ist zu beachten, dass Temperatur- und Feuchtigkeitsdaten vom DHT22 aufgrund von Einschränkungen des Sensors abwechselnd gelesen werden.

Temperaturkalibrierung

Um den Temperatursensor zu kalibrieren, folgte ich dem gleichen Prozess wie hier in Schritt 4 beschrieben, wieder unter Verwendung einer einfachen y = mx + c-Beziehung. Als Referenzgerät habe ich IoT Temperature, Humidity Sensor #1 verwendet. Die Werte des Sensors sind in Grad Celsius angegeben.

Feuchtigkeitskalibrierung

Da ich keine Möglichkeit habe, die lokale Umgebungsfeuchtigkeit genau aufzuzeichnen oder sogar zu kontrollieren, habe ich zur Kalibrierung des Sensors einen ähnlichen Ansatz wie oben in Schritt 4 verwendet, wobei wiederum Sensor # 1 als Referenz verwendet wird. Wie auch immer, ich habe kürzlich einen ausgezeichneten Artikel im Internet gefunden, in dem beschrieben wird, wie Feuchtigkeitssensoren kalibriert werden. Ich werde diesen Ansatz vielleicht irgendwann in der Zukunft ausprobieren. Die Werte des Sensors sind in % der relativen Luftfeuchtigkeit angegeben.

Schritt 8: Namenskonvention für MQTT-Themen

Namenskonvention für MQTT-Themen
Namenskonvention für MQTT-Themen
Namenskonvention für MQTT-Themen
Namenskonvention für MQTT-Themen

Wie in einem früheren Instructable (hier) erwähnt, habe ich mich für die in Bild 1 oben beschriebene Namenskonvention entschieden.

Nämlich 'AccessMethod/DeviceType/WhichDevice/Action/SubDevice' Es ist nicht perfekt, aber es ermöglicht die Anwendung nützlicher Filter, um alle Sensorausgaben für ein bestimmtes parametrisches Thema zu sehen, was einen einfachen Vergleich wie in Bild 2 oben mit MQTTSpy ermöglicht.

Dieses Projekt ist das erste Mal, dass ein einzelnes Gerät mehr als eine Ursprungsquelle desselben Publikationstyps enthält. dh. Zwei Temperatur-/Feuchtesensoren, von internen und externen Untergeräten.

Es unterstützt auch vernünftig erweiterbare logische Gruppierungen von Funktionen innerhalb eines bestimmten IoT-Geräts.

Bei der Implementierung dieser Themen in Software habe ich hartcodierte Themenzeichenfolgen mit festen, eingebetteten numerischen Bezeichnern für jedes Gerät verwendet, anstatt die Themen zur Laufzeit dynamisch zu generieren, um RAM zu sparen und die Leistung hoch zu halten.

Hinweis: Wenn Sie sich nicht sicher sind, wie Sie MQTTSpy verwenden, lesen Sie hier 'Einrichten eines MQTT-Brokers. Teil 2: IoT, Hausautomation'

Schritt 9: Debug & Fehlersuche

Debug und Fehlersuche
Debug und Fehlersuche

Im Großen und Ganzen neige ich für meine Hobbyprojekte dazu, wenn möglich, einen repräsentativen Hardware-Prototyp zu bauen, gegen den die Software entwickelt wird. Ich habe selten Probleme bei der Integration der Software in die endgültige Plattform-Hardware.

Bei dieser Gelegenheit stieß ich jedoch auf einen seltsamen zeitweiligen Fehler, bei dem einige Phoneme erklangen, andere jedoch nicht.

Nach einem anfänglichen Debugging der Speech Synth-Platine mit einem Arduino Uno, um Phoneme zu beziehen und zu beweisen, dass diese Platine funktioniert, habe ich die I2C-Leitungen zwischen der IoT-Platine und der Speech Synth-Platine untersucht. Siehe Bild 1 oben.

Auf den Spuren ist deutlich die 'Sägezahn'/exponentielle Flanke des I2C-Signals zu sehen.

Dies ist normalerweise ein Hinweis darauf, dass die I2C-Pull-Up-Werte zu hoch sind und verhindern, dass sich die Netzspannung in einer Open-Drain-Schaltung schnell genug erholt.

Als "Workaround" habe ich die beiden smt-Pull-Up-Widerstände R12 und R13 mit 10Ks parallelgeschaltet, um 4K7 zu ergeben und tatsächlich ist der Sprachsynth "in Leben gesprungen".

Diese Art von Fehlern ist das Gegenteil von dem, was beim Debuggen dieser Art von Projekten passieren kann. Im Allgemeinen werden die meisten I2C-basierten Module, die bei Ebay gekauft werden, mit bereits installierten 10K- oder 4K7-Klimmzügen geliefert. Wenn Sie >5 I2C-Module mit jeweils 4K7-Pull-Ups verwenden möchten, beträgt die Gesamtlast 940R, was für die Endstufe des Masters zu groß ist. Die Lösung wäre, alle bis auf einen Satz Pull-Up-Widerstände an jedem Modul zu entlöten. Vorzugsweise diejenige, die physisch am weitesten vom Master entfernt ist.

Ein nützlicher Tipp, den Sie beim Entwerfen von Elektronik mit I2C-Geräten beachten sollten.

Schritt 10: Testen des Designs

Image
Image
Testen des Designs
Testen des Designs
Testen des Designs
Testen des Designs

Die Tests wurden mit zwei Methoden durchgeführt; Manuell und automatisiert.

Die erste, manuelle und allgemein während der anfänglichen Codeentwicklung verwendete, war die Verwendung von MQTT Spy, um alle verfügbaren abonnierten Themen zu prüfen und die veröffentlichten Antworten zu überprüfen (siehe Abbildung 2 oben). Da es sich um einen manuellen Prozess handelt, kann er im Verlauf der Codeentwicklung zeitaufwändig und fehleranfällig sein, obwohl die manuelle Ausführung eine 100%ige Abdeckung ermöglicht.

MQTTSpy wurde für manuelle Tests ausgewählt, da es ein hervorragendes Werkzeug ist, um eine bestimmte Nutzlast von Hand zu formatieren und sie problemlos zu jedem Thema zu veröffentlichen. Es zeigt auch ein klares Protokoll mit Zeitstempel an, das für das Debuggen sehr nützlich ist (Bild 3 oben).

Der zweite, automatisierte Ansatz wurde gewählt, als der Quellcode komplexer wurde (>3700 Zeilen). Erhöhte Komplexität bedeutet längere manuelle Testzyklen und komplexere Tests. Um die Zuverlässigkeit, den Determinismus und die Qualität von Tests zu verbessern, wurde automatisiertes Testen über eine Python-Testausführung verwendet (Bild 1). Siehe Schritt 10 in diesem Instructable darüber, wie automatisierte Tests eingeführt wurden. Eine vollständige Kopie der in diesem Instructable verwendeten automatisierten Tests ist hier verfügbar.

Oben sehen Sie ein Video des automatisierten Prüfablaufs im Betrieb. Die Sequenz führt die folgenden Schritte aus;

  • Automatisiert über MQTT

    • Verbinden Sie sich mit dem MQTT-Backbone und geben Sie „System Ready“bekannt
    • Übung Grüne LED
    • Übung rote LED
    • Übung blaue LED
    • Überprüfen Sie, ob Digital Pot funktioniert
    • Mit Phonemen sprechen
    • Sprechen Sie mit Hex-Codes für Phoneme
    • Sprechen Sie mit Codes für feste Sätze
    • Ein bisschen Spaß mit Dr. Who und den Daleks.
  • Manuell über

    • Übung blaue LED
    • Übung rote LED
    • Sprechen Sie die festen Sätze 'Steven Quinn', 'System Ready' und 'Hello World'
    • Habe den HTTP-Server, serviere

      • Details zum Sprachsynth-Chip
      • MQTT-Details

Schritt 11: Fazit

Abschluss
Abschluss

Obwohl es viel Mühe mit Feilen und Bohrern usw. insbesondere für das Lautsprechergitter gekostet hat, finde ich das Ergebnis ästhetisch ansprechend und in einem schönen, kleinen Gehäuse verpackt. Ich hätte es kleiner machen können, aber es hätte auf eine Platine gehen müssen und ich habe es absichtlich in zwei geteilt, damit ich die Platinen zu einem späteren Zeitpunkt für andere Projekte wiederverwenden konnte. Es ist also ein glücklicher Kompromiss.

Die Software funktioniert gut, das IoT-Gerät läuft seit einiger Zeit ohne Probleme im stabilen Betrieb.

Ich habe die Temperatur und Luftfeuchtigkeit über Grafana überwacht und mit einem Gerät am selben Standort verglichen. Die beiden Umgebungswerte korrelieren gut, was bedeutet, dass die Kalibrierung vernünftig ist (oder zumindest ähnlich ist).

Ich habe aufgehört, den Wortbefehl ('WFD/SpeechTH/1/Word/Command') zu implementieren, weil mir die Zeit ausging und ich weitermachen musste. Ich werde dies möglicherweise noch einmal besuchen, wenn und wenn ich eine MySQL-Datenbank einrichte. Im Moment verwende ich InfluxDB.

Schritt 12: Verwendete Referenzen

Die folgenden Quellen wurden verwendet, um dieses Instructable zusammenzustellen; Quellcode für das IoT Retro Speech Synthesis Device (dies enthält eine Kopie von allem)

https://github.com/SteveQuinn1/IoT_Retro_Speech_Synthesis_SP0256_AL2

PubSubClient.h

  • Von: Nick O'Leary
  • Zweck: Ermöglicht dem Gerät, MQTT-Themen mit einem bestimmten Broker zu veröffentlichen oder zu abonnieren
  • Von:

DHT.h

  • Von: Adafruit
  • Zweck: Arduino-Bibliothek für DHT11DHT22 usw. Temperatur- und Feuchtigkeitssensoren
  • Von:

Adafruit_AM2320.h/Adafruit_Sensor.h

  • Von: Adafruit
  • Zweck: Arduino-Bibliothek für AM2320 usw. Temperatur- und Feuchtigkeitssensor
  • Von:

MCP4561_DIGI_POT.h

  • Von: Steve Quinn
  • Zweck: Arduino-Bibliothek für das digitale Potentiometer MCP4561
  • Von:

Adafruit_MCP23017.h

  • Von: Steve Quinn
  • Zweck: Arduino-Bibliothek für den MCP23017 I2C-Port-Expander. Dies ist eine GITHub-Fork von Adafruit-MCP23017-Arduino-Library von Adafruit.
  • Von:

Zum Spass

https://haynes.com/de-de/

Leiterplattenherstellung

https://jlcpcb.com/

Installieren zusätzlicher Arduino-Bibliotheken

https://www.arduino.cc/en/Guide/Bibliotheken

So prüfen und kalibrieren Sie einen Feuchtigkeitssensor

https://www.allaboutcircuits.com/projects/how-to-check-and-calibrate-a-humidity-sensor/?utm_source=All+About+Circuits+Members&utm_campaign=ffeee38e54-EMAIL_CAMPAIGN_2017_12_06&utm_medium=email&utm_term40_256ffe270e48 /

SP0256-AL2 Datenblatt

https://www.futurebots.com/spo256.pdf

Sprachchips Shop

https://www.speechchips.com/shop/

Arduino-Wettbewerb 2019
Arduino-Wettbewerb 2019
Arduino-Wettbewerb 2019
Arduino-Wettbewerb 2019

Zweiter Platz beim Arduino-Wettbewerb 2019

Empfohlen: