Inhoudsopgave:

Retro spraaksynthese. Deel: 12 IoT, domotica: 12 stappen (met afbeeldingen)
Retro spraaksynthese. Deel: 12 IoT, domotica: 12 stappen (met afbeeldingen)

Video: Retro spraaksynthese. Deel: 12 IoT, domotica: 12 stappen (met afbeeldingen)

Video: Retro spraaksynthese. Deel: 12 IoT, domotica: 12 stappen (met afbeeldingen)
Video: Test détaillé Urtopia vélo électrique en carbone et courroie #ebike #urtopia #veloelectrique 2024, November
Anonim
Image
Image
Retro spraaksynthese. Deel: 12 IoT, Domotica
Retro spraaksynthese. Deel: 12 IoT, Domotica

Dit artikel is het 12e in een serie over Domotica Instructables waarin wordt gedocumenteerd hoe een IoT Retro Speech Synthesis Device kan worden gemaakt en geïntegreerd in een bestaand domoticasysteem, inclusief alle benodigde softwarefunctionaliteit om de succesvolle implementatie in een huiselijke omgeving mogelijk te maken.

Afbeelding 1 toont het voltooide IoT-spraaksynthesizer-apparaat en Afbeelding 2 toont alle componenten die in het prototype zijn gebruikt en waarvan de vormfactor is verkleind om in het eindproduct te gaan.

De video toont het apparaat in actie (tijdens het testen).

Invoering

Zoals hierboven vermeld, geeft deze Instructable details over het maken van een IoT Retro Speech Synthesis Device en is gebaseerd op de General Instruments SP0256-AL2.

Het primaire doel is het toevoegen van 'old school' spraaksynthese aan een IoT-netwerk. Waarom 'old school' vraag je je misschien af? Nou, omdat ik in de jaren 80 was toen deze dingen voor het eerst werden vervaardigd en ik er een heb aangesloten op mijn BBC Micro, dus voor mij hangt er een zekere mate van nostalgie rond de SP0256-AL2.

Ik geef de voorkeur aan de uitdaging om erachter te komen wat er in hemelsnaam wordt gezegd door deze Dalek-klinkende stem dan te luisteren naar de zachte tonen van een hipster Amazon-echo of Siri. Waar zit de uitdaging in dat ik je vraag?

Oh, en niet te vergeten, ik heb ook nog een 'bag load' van 'SP0256-AL2' IC's rondslingeren.

Het apparaat is ook in staat om de lokale temperatuur en vochtigheid te lezen, dus het breidt de omgevingsinstrumentatie van mijn bestaande IoT-infrastructuur verder uit, aansluitend op het op MQTT/OpenHAB gebaseerde IoT-netwerk dat wordt beschreven in deze serie over domotica (HA), voortbouwend op hergebruikte code die hier is genomen.

Het hart is een ESP8266-07 die verantwoordelijk is voor MQTT-communicatie en het regelen van alle systeemfunctionaliteit (SD-kaarttoegang, led-bediening, temperatuur-/vochtigheidsdetectie, volumeregeling, spraaksynthese). Het apparaat is volledig configureerbaar via tekstbestanden die zijn opgeslagen op een lokale SD-kaart, hoewel kalibratie- en netwerkbeveiligingsparameters ook kunnen worden geprogrammeerd via externe MQTT-publicaties.

Welke onderdelen heb ik nodig?

Bekijk hier de stuklijst

Welke software heb ik nodig?

  • Arduino-IDE 1.6.9,
  • Arduino IDE geconfigureerd om de ESP8266-07 te programmeren (hetzelfde als dit). Configureer vervolgens de IDE zoals aangegeven in de gedetailleerde beschrijving in de softwareschets hier,
  • Python v3.5.2 als u de geautomatiseerde testmogelijkheid wilt gebruiken, vindt u hier:

Welke hulpmiddelen heb ik nodig?

  • Microscoop minimaal x3 (voor SMT-solderen),
  • Molex connector krimptang (voor JST connectoren),
  • SMD-soldeerbout (met vloeibare fluxpen en gevulde soldeer),
  • Schroevendraaiers (diversen),
  • Hitte geweer,
  • Boren (diversen),
  • Verzinkgereedschap,
  • Bestanden (diversen),
  • Dremel (verschillende bits),
  • Stevige bankschroef (klein en groot, zoals een black and decker werkmaat),
  • Scalpel,
  • Schuifmaat (gebruikt om fabricage te meten en handig voor het dimensioneren van PCB-componenten),
  • Sleutels en Moersleutels (diversen),
  • Sterk pincet (voor SMT-solderen),
  • Junior ijzerzaag,
  • Boor (met verschillende boren),
  • Fijne tang (punt en stompe neus),
  • Spoelsnijders,
  • DMM met hoorbare continuïteitscontrole,
  • Dual channel digitale scope (handig voor het debuggen van signalen)

Welke vaardigheden heb ik nodig?

  • Veel geduld,
  • Veel handvaardigheid en uitstekende hand-oogcoördinatie,
  • Uitstekende soldeervaardigheden,
  • Uitstekende fabricage vaardigheden,
  • Het vermogen om te visualiseren in 3 dimensies,
  • Enige kennis van softwareontwikkeling met 'C' (als je de broncode wilt begrijpen),
  • Enige kennis van Python (hoe scripts te installeren en uit te voeren, als je de geautomatiseerde tests wilt gebruiken),
  • Kennis van Arduino en zijn IDE,
  • Goede kennis van elektronica,
  • Enig begrip van uw thuisnetwerk.

Behandelde onderwerpen

  • Handleiding
  • Circuitoverzicht
  • PCB-fabricage en montage
  • fabricage:
  • Overzicht softwaresysteem
  • Software-overzicht
  • Sensorkalibratie:
  • MQTT Onderwerp Naamgeving Conventie
  • Foutopsporing en fouten zoeken
  • Het ontwerp testen
  • Conclusie
  • Gebruikte referenties

Series LinksTo Part 11: IoT Desktop Console. Deel: 11 IoT, Domotica

Stap 1: Gebruikershandleiding

Handleiding
Handleiding
Handleiding
Handleiding
Handleiding
Handleiding

Afbeelding 1 hierboven toont de voorkant van de Retro Speech Synthesizer en afbeelding 2 de achterkant.

Behuizing voorzijde

  1. Luidsprekergrill
  2. 3,5 mm koptelefoonaansluiting: de hoofdluidspreker wordt uitgeschakeld wanneer een 3,5 mm-aansluiting is geplaatst.
  3. Rode LED: Deze LED brandt terwijl een woord wordt uitgesproken wanneer spraak werd gestart via een
  4. Blauwe LED: deze LED brandt terwijl een woord wordt uitgesproken wanneer spraak werd gestart via een MQTT IoT-verzoek.

Behuizing achter

  1. Reset-knop: wordt gebruikt om het ESP8266-07 IoT-apparaat hard te resetten.
  2. Flash-knop: bij gebruik in combinatie met de reset-knop kan de ESP8266-07 opnieuw worden geflitst.
  3. WiFi-antennestekker (SMA-stekker): voor externe WiFi-antenne met de minste RF-padverzwakking omdat de sluiting van aluminium is.
  4. Externe programmeerpoort: om de noodzaak te verwijderen om de behuizing los te schroeven om toegang te krijgen tot de ESP8266-07 voor herprogrammering. De programmeerpinnen van de ESP8266-07 zijn naar de externe programmeerpoort gebracht. Afbeelding 3 is de programmeeradapter.
  5. Groene LED: dit is de led van het IoT-systeem en wordt gebruikt om de diagnostische status van het apparaat aan te geven en tijdens het opstarten en tijdens het gebruik.
  6. Externe temperatuur-/vochtigheidssensor (AM2320)
  7. SD-kaartsleuf: hierin staan alle configuratie-/beveiligingsgegevens samen met de webpagina's van de webserver.
  8. 2.1mm Voedingsaansluiting 6vdc

Stap 2: Circuitoverzicht

Circuitoverzicht
Circuitoverzicht
Circuitoverzicht
Circuitoverzicht

Het Retro Speech Synth-apparaat bestaat uit twee PCB's;

  • RetroSpeechSynthIoTBoard: Dit is een generieke, herbruikbare ESP8266-07/12/12E/13 PCB
  • RetroSpeechSynthBoard: Dit is een generieke SP0256-AL2 PCB

Retro Speech Synth IoT-bord

Dit bord maakt het direct solderen van een ESP8266-07/12/12E/13 of 0,1 pitch-sockets mogelijk voor een ESP8266-dragerprintplaat.

Het bord is ontworpen om zijn I/O uit te breiden via een I2C-verbinding en kan 3v3- of 5v-voedingsniveaus ondersteunen via Q1, Q2, R8-13.

Verbinding met het bord wordt bereikt via een van de twee headers J2 en J4, een 8-weg DIL IDC-lint of 5-weg JST/Molex.

U2 en U3 bepaling 3.3v en 5v on board supply regeling. Als alternatief, als een grotere stroomcapaciteit vereist is, kunnen externe seriële shuntregelaars worden aangesloten via respectievelijk connectoren J10 en J11.

Connectors J1 en J3 bieden externe SD-kaartondersteuning via SPI. J1 is ontworpen voor een 8-weg Molex en J3 heeft directe pin voor pin-compatibiliteitsondersteuning voor een standaard SD-kaart-PCB met 3v3- of 5v-ondersteuning.

Retro Speech Synth Board

De besturing van dit bord vindt plaats via een I2C 5v-compatibele verbinding via J1, J5 of J6, een 4-weg JST/Molex, 8-weg DIL IDC of 8-weg IDC-lintconnector.

U2 MPC23017 biedt de I2C naar parallelle interface naar U3 de SP0256-AL2 en LEDS D1 (Groen), D2 (Rood) en D3 (Blauw). De output van de Speech Synth wordt via analoge pot RV1 of digitale pot U1 MCP4561 naar audioversterker CR1 TBA820M gevoerd.

Digitale Pot U1 wordt ook bestuurd via 5v-compatibele I2C.

Opmerking: er is gekozen voor het ESP8266-07-apparaat omdat het een geïntegreerde IPX RF-connector heeft waardoor een externe WiFi-antenne aan de aluminium behuizing kan worden toegevoegd.

Stap 3: PCB-fabricage en montage

PCB-fabricage en montage
PCB-fabricage en montage
PCB-fabricage en montage
PCB-fabricage en montage
PCB-fabricage en montage
PCB-fabricage en montage
PCB-fabricage en montage
PCB-fabricage en montage

Afbeeldingen 1 en 2 tonen de voltooide en bedrade PCB-subassemblages die zich op het aluminium behuizingsubstraat bevinden.

De twee PCB's zijn ontworpen met behulp van Kicad v4.0.7, vervaardigd door JLCPCB en geassembleerd door mij en weergegeven hierboven Pics 3 tot 13.

Stap 4: Fabricage

fabricage
fabricage
fabricage
fabricage
fabricage
fabricage

Afbeelding 1 toont een lay-out in Haynes Manual-stijl van alle geprefabriceerde onderdelen vóór de uiteindelijke montage.

Foto's 2 … 5 tonen verschillende opnamen tijdens de fabricage van de behuizing met minimale spelingen.

Stap 5: Softwaresysteemoverzicht

Overzicht softwaresysteem
Overzicht softwaresysteem
Overzicht softwaresysteem
Overzicht softwaresysteem

Dit IoT Retro Speech Synthesis Device bevat zes belangrijke softwarecomponenten zoals weergegeven in afbeelding 1 hierboven.

SD-kaart

Dit is het externe SD SPI Flash-bestandssysteem en wordt gebruikt om de volgende informatie te bewaren (zie foto 2 hierboven);

  • Pictogrammen en 'Speech Synth Configuration Home Page' index.htm: Wordt bediend door het IoT-apparaat wanneer het geen verbinding kan maken met uw IoT WiFi-netwerk (meestal vanwege onjuiste beveiligingsinformatie of het eerste gebruik) en biedt de gebruiker een middel van op afstand configureren van de sensoren zonder de noodzaak om nieuwe SD-inhoud opnieuw te flashen. via
  • Beveiligingsinformatie: dit bevat de informatie die bij het opstarten door het IoT-apparaat wordt gebruikt om verbinding te maken met uw IoT WiFi-netwerk en MQTT Broker. Informatie die via de 'Speech Synth Configuration Home Page' wordt verzonden, wordt naar dit bestand geschreven ('secvals.txt').
  • Kalibratie-informatie: De informatie in de bestanden ('calvals1.txt' en 'calvals2.txt') wordt gebruikt om de temperatuur-/vochtigheidssensoren aan boord te kalibreren indien nodig. Kalibratieconstanten kunnen naar het IoT-apparaat worden geschreven via MQTT-opdrachten van een MQTT-broker of door de SD-kaart opnieuw te flashen. 'calvals1.txt' heeft betrekking op de AM2320-sensor en 'calvals2.txt' op de DHT22.
  • Door de gebruiker configureerbare systeemwaarden: de informatie in dit bestand ('confvals.txt'), gekozen door de gebruiker, regelt bepaalde systeemreacties, zoals het initiële digitale volumeniveau, automatische 'systeem gereed'-aankondiging op MQTT-brokerabonnement enz.

mDNS-server

Deze functionaliteit wordt aangeroepen wanneer het IoT-apparaat geen verbinding kan maken met uw WiFi-netwerk als WiFi-station en in plaats daarvan een WiFi-toegangspunt is geworden, vergelijkbaar met een binnenlandse WiFi-router. In het geval van een dergelijke router zou u er normaal gesproken verbinding mee maken door het IP-adres van iets als 192.168.1.1 (meestal afgedrukt op een label op de doos) rechtstreeks in de URL-balk van uw browser in te voeren, waarna u een inlogpagina zou ontvangen om in te voeren de gebruikersnaam en het wachtwoord waarmee u het apparaat kunt configureren. Voor de ESP8266-07 in AP-modus (Access Point-modus) gebruikt het apparaat standaard het IP-adres 192.168.4.1, maar als de mDNS-server draait, hoeft u alleen de mensvriendelijke naam 'SPEECHSVR.local' in de browser-URL-balk in te voeren om zie de 'Speech Synth Configuratie Home Page'.

MQTT-client

De MQTT-client biedt alle benodigde functionaliteit om; maak verbinding met uw IoT-netwerk MQTT-broker, abonneer u op de onderwerpen van uw keuze en publiceer payloads naar een bepaald onderwerp. Kortom, het voorziet in IoT-kernfunctionaliteit.

HTTP-webserver

Deze webserver heeft twee doelen;

  1. Als het IoT-apparaat geen verbinding kan maken met het WiFi-netwerk waarvan de SSID, P/W enz. is gedefinieerd in het beveiligingsinformatiebestand op de SD-kaart, wordt het apparaat een toegangspunt. Eenmaal verbonden met het wifi-netwerk dat door het toegangspunt wordt geleverd, kunt u door de aanwezigheid van een HTTP-webserver rechtstreeks verbinding maken met het apparaat en de configuratie wijzigen via het gebruik van een HTTP-webbrowser. Het doel is om de 'Speech Synth-configuratie Home Page' webpagina die ook op de SD-kaart wordt bewaard.
  2. Zodra het IoT Retro Speech Synthesis Device verbinding heeft gemaakt met het WiFi-netwerk en de MQTT-broker, zal de HTTP-webserver, indien geopend, automatisch een HTTP-webpagina weergeven die beperkte controle over het IoT-apparaat biedt om een selectie van vaste zinnen uit te spreken en de mogelijkheid om cyclus de twee voorste Rode en Blauwe LEDS.

WiFi-station

Deze functionaliteit geeft het IoT-apparaat de mogelijkheid om verbinding te maken met een huishoudelijk WiFi-netwerk met behulp van de parameters in het beveiligingsinformatiebestand, zonder dit kan uw IoT-apparaat zich niet abonneren op/publiceren op de MQTT-makelaar.

WiFi-toegangspunt

De mogelijkheid om een WiFi-toegangspunt te worden, is een middel waarmee u met het IoT-apparaat verbinding kunt maken en configuratiewijzigingen kunt doorvoeren via een WiFi-station en een browser (zoals Safari op de Apple iPad). Dit toegangspunt zendt een SSID = "SPEECHSYN" + de laatste 6 cijfers van het MAC-adres van het IoT-apparaat uit. Het wachtwoord voor dit gesloten netwerk heeft de fantasierijke naam 'PASSWORD'

Stap 6: Software-overzicht

Software-overzicht
Software-overzicht
Software-overzicht
Software-overzicht
Software-overzicht
Software-overzicht

Preambule

Om deze broncode met succes te compileren, hebt u een lokale kopie nodig van de code en bibliotheken die hieronder worden beschreven in Stap 12, Gebruikte referenties. Als je niet zeker weet hoe je een Arduino-bibliotheek moet installeren, ga dan hierheen.

Overzicht

De software maakt gebruik van de state-machine zoals getoond in foto 1 hierboven (volledige kopie van de bron in mijn GitHub-repository hier). Er zijn 5 hoofdstaten zoals hieronder beschreven;

  • IN HET

    Deze initialisatiestatus is de eerste status die wordt ingevoerd na het opstarten

  • NOCONFIG

    Deze status wordt ingevoerd als na het opstarten een ongeldig of ontbrekend secvals.txt-bestand wordt gedetecteerd. Tijdens deze status is de configuratiepagina zichtbaar

  • IN AFWACHTING NW

    Deze status is van voorbijgaande aard, ingevoerd terwijl er geen wifi-netwerkverbinding is

  • IN AFWACHTING MQTT

    Deze status is van voorbijgaande aard en wordt ingevoerd nadat een WiFi-netwerkverbinding is gemaakt en terwijl er geen verbinding is met een MQTT-broker op dat netwerk

  • ACTIEF

    Dit is de normale operationele status die wordt ingevoerd zodra zowel een WiFi-netwerkverbinding als een MQTT Broker-verbinding tot stand is gebracht. Het is tijdens deze toestand dat de temperatuur, warmte-index en vochtigheid op het IoT Retro Speech Synthesis Device regelmatig worden gepubliceerd aan de MQTT Broker. In deze staat is de Speech Synth Home Page zichtbaar

De gebeurtenissen die overgangen tussen toestanden regelen, worden beschreven in afbeelding 1 hierboven. Overgangen tussen toestanden worden ook bepaald door de volgende SecVals-parameters;

  • 1e MQTT Broker IP-adres. In decimale vorm AAA. BBB. CCC. DDD
  • 2e MQTT-makelaarspoort. In geheel getal.
  • 3e MQTT Broker-verbinding probeert te maken voordat wordt overgeschakeld van STA-modus naar AP-modus. In geheel getal.
  • 4e WiFi-netwerk SSID. In vrije vorm tekst.
  • 5e wifi-netwerkwachtwoord. In vrije vorm tekst.

Zoals hierboven vermeld, als het IoT-apparaat geen verbinding kan maken als een WiFi-station met het WiFi-netwerk waarvan de SSID en P/W is gedefinieerd in secvals.txt op de SD-kaart, wordt het IoT-apparaat een toegangspunt. Eenmaal verbonden met dit toegangspunt zal het de 'Speech Synth Configuration Home Page' weergeven zoals hierboven getoond in Pic 2 (door ofwel 'SPEECHSVR.local' of 192.168.4.1 in te voeren in de URL-adresbalk van uw browser). Deze startpagina maakt de herconfiguratie van het IoT Retro Speech Synthesis Device mogelijk via een

Toegang op afstand in de ACTIEVE status

Eenmaal verbonden met de MQTT Broker is het ook mogelijk om het apparaat zowel opnieuw te kalibreren als opnieuw te configureren via MQTT-onderwerppublicaties. Het bestand calvals.txt heeft R/W-toegang en secvals.txt heeft alleen-schrijftoegang.

Zoals hierboven vermeld, is het, eenmaal in de actieve modus, mogelijk om toegang te krijgen tot de Speech Synth via een HTTP-interface door 'SPEECHSVR.local' of 192.168.4.1 in te voeren in de URL-adresbalk van uw browser. Deze op HTTP gebaseerde interface zorgt voor basiscontrole van de Speech Synth. Foto's 3, 4 en 5 tonen de beschikbare webpagina's.

Foutopsporing door gebruiker

Tijdens de opstartvolgorde geeft de groene systeemled van het IoT-apparaat aan de achterkant van de behuizing de volgende foutopsporingsfeedback;

  • 1 Korte flits: geen configuratiebestand op SD-kaart (secvals.txt)
  • 2 korte flitsen: IoT-apparaat probeert verbinding te maken met wifi-netwerk
  • Continue verlichting: IoT-apparaat probeert verbinding te maken met MQTT Broker
  • Uit: Apparaat is actief.

IoT Retro Speech Synthesis Device Functionaliteit in ACTIEVE staat

Eenmaal in de ACTIEVE toestand komt de ESP8266 in een continue lus die de volgende functies aanroept; timer_update(), checkTemperatureAndHumidity() en handleSpeech(). Het nettoresultaat hiervan is ontworpen om de gebruiker een HTTP- of MQTT-interface te bieden, de ingebouwde spraakprocessor naadloos te bedienen met on-demand fonemen en lokale omgevingsparametrische waarden via MQTT te publiceren.

Een uitgebreide lijst van alle onderwerpabonnementen en publicaties, inclusief payloadwaarden, is opgenomen in de broncode.

Stap 7: Sensorkalibratie

Sensorkalibratie
Sensorkalibratie

Wanneer het IoT-apparaat opstart, worden als onderdeel van de opstartvolgorde twee bestanden met de naam 'cavals1.txt' en 'cavals2.txt' van de SD-kaart gelezen.

De inhoud van deze bestanden zijn kalibratieconstanten zoals hierboven aangegeven in pic 1.

  1. 'cavals1.txt': Gebruikt door de externe AM2320
  2. 'cavals2.txt': Gebruikt door de interne DHT22

Deze kalibratieconstanten worden gebruikt om de meetwaarden van de twee sensoren aan te passen om ze in overeenstemming te brengen met een referentieapparaat. Er is nog een waarde die een rapportagestrategie voor elk apparaat definieert en die hieronder wordt beschreven, samen met de procedure die wordt gevolgd om de sensoren te kalibreren.

Rapportagestrategie

Deze parameter bepaalt hoe de externe sensor eventuele lokale parameterwijzigingen in de omgeving meldt. Als een waarde van 0 is geselecteerd, publiceert de externe sensor elke verandering die hij ziet in de temperatuur of vochtigheid elke keer dat de respectieve sensor wordt gelezen (ongeveer elke 10 seconden). Elke andere waarde vertraagt de publicatie van een wijziging met 1…60 minuten. Door deze parameter te wijzigen, kan het MQTT-netwerkverkeer worden geoptimaliseerd. Opgemerkt moet worden dat temperatuur- en vochtigheidsgegevens van de DHT22 afwisselend worden gelezen vanwege beperkingen van de sensor.

Temperatuur kalibratie

Om de temperatuursensor te kalibreren volgde ik hetzelfde proces als hier beschreven stap 4, opnieuw met een eenvoudige y=mx+c relatie. Ik gebruikte IoT Temperature, Humidity Sensor #1 als referentieapparaat. Waarden van de sensor zijn in graden celcius.

Vochtigheidskalibratie

Omdat ik geen middelen heb om de lokale luchtvochtigheid nauwkeurig vast te leggen of zelfs te regelen, heb ik voor het kalibreren van de sensor een vergelijkbare benadering gebruikt als hierboven, stap 4, opnieuw met behulp van Sensor #1 als referentie. Hoe dan ook, ik heb onlangs een uitstekend artikel op internet gevonden waarin wordt beschreven hoe vochtigheidssensoren moeten worden gekalibreerd. Misschien ga ik deze aanpak in de toekomst eens proberen. Waarden van de sensor zijn in % relatieve vochtigheid.

Stap 8: MQTT Onderwerp Naamgeving Conventie

MQTT Onderwerp Naamgeving Conventie
MQTT Onderwerp Naamgeving Conventie
MQTT Onderwerp Naamgeving Conventie
MQTT Onderwerp Naamgeving Conventie

Zoals vermeld in een eerdere Instructable (hier) heb ik me gevestigd op de naamgevingsconventie voor onderwerpen zoals beschreven in foto 1 hierboven.

Namelijk, 'AccessMethod/DeviceType/WhichDevice/Action/SubDevice' Het is niet perfect, maar het maakt het mogelijk om handige filters toe te passen om alle sensoruitgangen voor een bepaald parametrisch onderwerp te zien, waardoor een gemakkelijke vergelijking zoals in foto 2 hierboven met MQTTSpy mogelijk is.

Dit project is de eerste keer dat een enkel apparaat meer dan één oorspronkelijke bron van hetzelfde type publicatie bevat. d.w.z. Twee temperatuur-/vochtigheidssensoren, van interne en externe subapparaten.

Het ondersteunt ook redelijk uitbreidbare logische groeperingen van functionaliteit binnen een bepaald IoT-apparaat.

Bij het implementeren van deze onderwerpen in software heb ik hardgecodeerde onderwerpreeksen met vaste, ingebedde numerieke identifiers voor elk apparaat gebruikt, in plaats van de onderwerpen dynamisch tijdens runtime te genereren om RAM te besparen en de prestaties hoog te houden.

Opmerking: als u niet zeker weet hoe u MQTTSpy moet gebruiken, raadpleegt u hier 'Een MQTT-makelaar instellen'. Deel 2: IoT, Domotica'

Stap 9: Debuggen en fouten zoeken

Foutopsporing en fouten zoeken
Foutopsporing en fouten zoeken

Over het algemeen heb ik voor mijn hobbyprojecten, waar mogelijk, de neiging om een representatief hardware-prototype te bouwen waartegen de software is ontwikkeld. Ik heb zelden problemen bij het integreren van de software in de uiteindelijke platformhardware.

Bij deze gelegenheid kwam ik echter een vreemde intermitterende storing tegen waarbij sommige fonemen wel zouden klinken en andere niet.

Na wat eerste foutopsporing van de Speech Synth PCB met behulp van een Arduino Uno om fonemen te sourcen en te bewijzen dat dit bord werkte, nam ik een scope naar de I2C-lijnen tussen de IoT PCB en de Speech Synth PCB. Zie foto 1 hierboven.

Je kunt duidelijk de 'zaagtand'/exponentiële rand naar het I2C-signaal op de sporen zien.

Dit is meestal een indicatie dat de I2C pull-up-waarden te hoog zijn, waardoor de lijnspanning niet snel genoeg herstelt in een open drain-circuit.

Als 'work around' heb ik de twee smt pull-up weerstanden R12 en R13 parallel geschakeld met 10Ks om 4K7 te geven en ja hoor, de Speech Synth 'barst tot leven'

Dit type mislukking is het tegenovergestelde van wat er kan gebeuren bij het debuggen van dit soort projecten. Over het algemeen worden de meeste I2C-gebaseerde modules die op Ebay zijn gekocht, geleverd met reeds gemonteerde 10K- of 4K7-pull-ups. Als je van plan bent om >5 I2C-modules te gebruiken, elk met 4K7 pull-ups, dan is de totale belasting 940R, wat te groot is voor de eindtrap van de master. De oplossing zou zijn om op één na alle pull-upweerstanden op elke module te desolderen. Bij voorkeur degene die fysiek het verst van de meester verwijderd is.

Een handige tip die het waard is om in gedachten te houden bij het ontwerpen van elektronica met I2C-apparaten.

Stap 10: het ontwerp testen

Image
Image
Het ontwerp testen
Het ontwerp testen
Het ontwerp testen
Het ontwerp testen

Het testen werd uitgevoerd met behulp van twee methodieken; Handmatig en geautomatiseerd.

De eerste, handmatige en over het algemeen gebruikte tijdens de initiële code-ontwikkeling was het gebruik van MQTT Spy om alle beschikbare geabonneerde onderwerpen te oefenen en de gepubliceerde antwoorden te controleren (afgebeeld in afbeelding 2 hierboven). Omdat dit een handmatig proces is, kan het tijdrovend en foutgevoelig zijn naarmate de code-ontwikkeling vordert, hoewel handmatige uitvoering 100% dekking mogelijk maakt.

MQTTSpy werd gekozen voor handmatig testen omdat het een uitstekend hulpmiddel is om een bepaalde payload met de hand te formatteren en deze gemakkelijk naar elk onderwerp te publiceren. Het geeft ook een duidelijk logboek met tijdstempel weer dat erg handig is voor het opsporen van fouten (foto 3 hierboven).

De tweede, geautomatiseerde aanpak werd gevolgd naarmate de broncode complexer werd (>3700 regels). Verhoogde complexiteit betekent langere handmatige testcycli en complexere tests. Om de betrouwbaarheid, determinisme en kwaliteit van tests te verbeteren, werd geautomatiseerd testen gebruikt via een python-testmanager (foto 1). Zie stap #10 in deze Instructable over hoe geautomatiseerd testen werd geïntroduceerd. Een volledige kopie van de geautomatiseerde tests die in deze Instructable worden gebruikt, is hier beschikbaar.

Een video van de geautomatiseerde testreeks in werking wordt hierboven getoond. De reeks voert de volgende stappen uit;

  • Geautomatiseerd via MQTT

    • Maak verbinding met MQTT-backbone en kondigt 'System Ready' aan
    • Oefening Groene LED
    • Oefening Rode LED
    • Oefening Blauwe LED
    • Controleer of de digitale pot werkt
    • Spreken met behulp van fonemen
    • Spreek met hexadecimale codes voor fonemen
    • Spreek met codes voor vaste zinnen
    • Een beetje Dr Who en de Daleks plezier.
  • Handmatig via
    • Oefening Blauwe LED
    • Oefening Rode LED
    • Spreek vaste zinnen 'Steven Quinn', 'System Ready' en 'Hello World'
    • Heb de HTTP-server, serveer

      • Details over Speech Synth Chip
      • MQTT-details

Stap 11: Conclusie

Conclusie
Conclusie

Hoewel het veel moeite kostte met bestanden en oefeningen enz., vooral voor het luidsprekerrooster, denk ik dat het resultaat esthetisch is en in een mooie, kleine behuizing past. Ik had het kleiner kunnen maken, maar het had op één PCB moeten gaan en ik heb het opzettelijk in tweeën gebroken, zodat ik de PCB's op een later tijdstip voor andere projecten kon hergebruiken. Het is dus een gelukkig compromis.

De software werkt goed, het IoT-apparaat draait al geruime tijd stabiel zonder problemen.

Ik heb de temperatuur en vochtigheid via Grafana in de gaten gehouden en vergeleken met een apparaat op dezelfde locatie. De twee omgevingswaarden correleren goed, wat impliceert dat de kalibratie redelijk is (of in ieder geval vergelijkbaar).

Ik stopte met het implementeren van woordcommando's ('WFD/SpeechTH/1/Word/Command') omdat ik geen tijd meer had en verder moest gaan. Ik kan dit heel goed opnieuw bezoeken als en wanneer ik een MySQL-database opzet. Op dit moment gebruik ik InfluxDB.

Stap 12: Gebruikte referenties

De volgende bronnen zijn gebruikt om deze Instructable samen te stellen; Broncode voor het IoT Retro Speech Synthesis Device (dit bevat een kopie van alles)

https://github.com/SteveQuinn1/IoT_Retro_Speech_Synthesis_SP0256_AL2

PubSubClient.h

  • Door: Nick O'Leary
  • Doel: stelt het apparaat in staat om MQTT-onderwerpen te publiceren of zich erop te abonneren bij een bepaalde makelaar
  • Van:

DHT.h

  • Door: Adafruit
  • Doel: Arduino-bibliotheek voor DHT11DHT22, enz. Temperatuur- en vochtigheidssensoren
  • Van:

Adafruit_AM2320.h/Adafruit_Sensor.h

  • Door: Adafruit
  • Doel: Arduino-bibliotheek voor AM2320, enz. Temp & Vochtigheidssensor
  • Van:

MCP4561_DIGI_POT.h

  • Door: Steve Quinn
  • Doel: Arduino-bibliotheek voor MCP4561 digitale potentiometer
  • Van:

Adafruit_MCP23017.h

  • Door: Steve Quinn
  • Doel: Arduino Bibliotheek voor de MCP23017 I2C Port Expander. Dit is een GITHub-vork van Adafruit-MCP23017-Arduino-Library, door Adafruit.
  • Van:

Voor de lol

https://haynes.com/en-gb/

PCB-vervaardiging:

https://jlcpcb.com/

Extra Arduino-bibliotheken installeren

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

Een vochtigheidssensor controleren en kalibreren

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_254ffe3829=048 /

SP0256-AL2 Gegevensblad

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

Spraakchips Winkel

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

Arduino-wedstrijd 2019
Arduino-wedstrijd 2019
Arduino-wedstrijd 2019
Arduino-wedstrijd 2019

Tweede plaats in de Arduino-wedstrijd 2019

Aanbevolen: