Inhoudsopgave:

Persoonlijke assistent: 9 stappen (met afbeeldingen)
Persoonlijke assistent: 9 stappen (met afbeeldingen)

Video: Persoonlijke assistent: 9 stappen (met afbeeldingen)

Video: Persoonlijke assistent: 9 stappen (met afbeeldingen)
Video: ELBERT HELPT BIJ EEN BEVALLING - TOPDOKS EXTRA 2024, November
Anonim
Image
Image
Persoonlijke assistent
Persoonlijke assistent

In deze instructable laat ik je zien hoe je de kracht van ESP8266, creativiteit in softwareontwerp en programmeren, kunt gebruiken om iets cools en educatiefs te maken.

Ik noemde het Personal Assistant, omdat het zakformaat is, met je praat en je wat nuttige, en (natuurlijk) een paar niet-nuttige (maar nog steeds coole) informatie geeft over weer, tijd en datum, Gmail-berichten, live geboorte en sterftecijfers en etc.

Ik heb geprobeerd het ontwerp simpel te houden. Het apparaat heeft twee gebruikersinterfaces. Een fysieke drukknop en een webgebaseerde applicatie, die de gebruiker kan openen via een webbrowser en de apparaatinstellingen en configuratie kan wijzigen.

Hoe het werkt? De belangrijkste componenten van dit project zijn een Microcontroller en een Music Player-module. Onze microcontroller (NodeMCU) maakt gebruik van WiFi-technologie om verbinding te maken met een toegangspunt met internetverbinding; zodat het de vereiste gegevens kan krijgen, het kan verwerken en de muziekspeler (DFPlayer Mini) kan vertellen wanneer welk MP3-bestand moet worden afgespeeld.

Voor nu is dat alles wat u hoeft te weten. Ik zal je meer gedetailleerde informatie geven in de volgende stappen, dus maak je geen zorgen.

Stap 1: benodigde onderdelen

Onderdelen nodig
Onderdelen nodig
  • NodeMCU ESP-12E (CP2102 USB-naar-seriële interface)
  • DFPlayer Mini
  • SPST kortstondige drukknop
  • 8 Ohm 2 Watt luidspreker
  • Micro SD-kaart (je hebt een paar kilobytes nodig, dus de capaciteit maakt niet uit)
  • Bouten en moeren

    • M3 Moeren (x6)
    • M3-bouten - 23 mm (x4)
    • M3-bouten - 15 mm (x2)
  • 1N4148 Signaaldiode (x1)
  • Weerstanden

    • 1K Weerstand (x1)
    • 10K Weerstand (x2)

Overige onderdelen:

  • PCB (u kunt een prototype online bestellen of een plaatselijke winkel bezoeken)
  • Lasergesneden acrylplaat

    • 2 mm dikte doorzichtige plaat
    • 2,8 mm dikte twee verschillende kleuren vellen (oranje en groen, rood en groen, het is aan jou en de kleuren doen er niet toe)
  • Elke 5 volt (minstens) 1 ampère micro-USB-oplader (om het apparaat op te laden)

Stap 2: Hoe het werkt

Hoe het werkt
Hoe het werkt
Hoe het werkt
Hoe het werkt

Oké, ik wil je meer gedetailleerde informatie geven over hoe de software werkt.

De software bestaat uit enkele Diensten. Elke Service heeft zijn eigen Modules. (Je kunt een service beschouwen als een klasse en zijn modules als zijn methoden). Elke module kan worden beschouwd als een uitvoerbaar object. Onze software bestaat dus uit enkele uitvoerbare objecten.

Hier hebben we enkele services en subservices of hun modules:

  • Gmail

    ongelezen berichten

  • Het weer

    • Huidige temperatuur
    • Vandaag Conditie
    • Vandaag Laag / Hoog
    • Morgen Conditie
    • Morgen Laag / Hoog
    • Neerslagvoorspelling
    • Zonsopgang zonsondergang
  • Tijd

    • Huidige tijd
    • Huidige datum
  • Geboorte & Dood

    • Wereldgeboorte
    • wereld dood

Er is een cirkelvormige wachtrij met daarin modules. We noemen het Operatie Wachtrij. Ik zei dat elke module een uitvoerbaar object is. Dus wanneer u op de drukknop op het apparaat drukt, kijkt het in de bewerkingswachtrij en voert het de volgende module (of object) uit.

U kunt de leden van de operatiewachtrij bewerken in de webgebaseerde gebruikersinterface die ik later zal uitleggen. Voor nu zal ik u een voorbeeld geven. Beschouw de huidige bewerkingswachtrij als volgt:

WACHTRIJ (Ongelezen berichten | Neerslagvoorspelling | Huidige tijd)

U drukt op de drukknop, ongelezen berichten moeten worden uitgevoerd.

WACHTRIJ (Ongelezen berichten | Neerslagvoorspelling | Huidige tijd)

Het apparaat gebruikt dus de verzamelde gegevens (hier het aantal ongelezen berichten dat is opgehaald uit de Google Mail API-feed) om met u te praten. Maar hoe? Hier zal NodeMCU de MP3-module vertellen wanneer het welk MP3-stuk moet spelen om een zinvolle zin te maken. Om dit te bereiken heb ik verschillende wachtrijen, timers en algoritmen ontworpen. (Als je een c++-man bent en van microcontrollers houdt, kun je de code zelf bestuderen.)

Dus, je hoort, het apparaat begint te praten: je hebt 4 ongelezen berichten in je gmail-inbox.

U drukt nogmaals op de drukknop, de volgende module is Neerslagvoorspelling die moet worden afgehandeld.

WACHTRIJ (Ongelezen berichten | Neerslagvoorspelling | Huidige tijd)

Dus je zult iets horen als: vergeet je paraplu niet, het regent morgen. En zo verder… Nog iets leuks: voor sommige modules (zoals neerslagvoorspelling) kun je willekeurige zinnen verwachten voor dezelfde toestanden. Als er morgen bijvoorbeeld neerslag is en het regent, en geen sneeuw, kun je verwachten "morgen is er kans op regen", "breng je eigen zonneschijn mee, het is regenachtig morgen", "tut, tut, het lijkt op regen voor morgen", of …

Hoe krijgen we verschillende gegevens voor elke service?

  • Gmail

    Ongelezen berichten Google heeft een krachtige API waarmee u toegang hebt tot de verschillende services, waaronder Gmail. Maar voor beveiligingsdoeleinden hebt u verschillende authenticatie- en autorisatiemethoden nodig, zoals OAuth. ESP8266 is niet zo krachtig om verschillende ingewikkelde hash-algoritmen uit te voeren. Dus ik gebruikte een oudere en eenvoudige aanmeldingstechnologie om toegang te krijgen tot Gmail-inbox. Het is Google Atom Feed die ook door RSS-lezers kan worden gebruikt. We sturen een HTTP-verzoek om toegang te krijgen tot Gmail-feed en het antwoord is in XML-indeling. We tellen dus het aantal ongelezen berichten en gebruiken het in ons programma

  • WeerWe gebruiken Yahoo Weather API om verschillende weersinformatie te krijgen. Onlangs heeft Yahoo, net als Google, zijn Weather API gewijzigd, dus je moet OAuth-standaarden gebruiken om toegang te krijgen tot zijn gegevens. Helaas kan ESP8266 de complexiteit ervan niet aan, dus we zullen een truc gebruiken om het probleem op te lossen. In plaats van rechtstreeks toegang te krijgen tot Yahoo Weather API, sturen we ons verzoek naar een aangepast bestand op een server. Ons bestand krijgt gegevens van Yahoo Weather en stuurt deze eenvoudig naar ons.

    • Morgen ConditieTomorrow Conditie zal u vertellen of het morgen warmer of kouder is dan vandaag, of dat er geen noemenswaardige verandering in temperatuur zal zijn. Om dit te bereiken vergelijken we "vandaag laag/hoog" met "morgen laag/hoog". U kunt controleren hoe ik dit algoritme heb geschreven en hoe het werkt in het programmabibliotheekbestand.
    • Neerslagvoorspelling Als u de Yahoo Weather-documentatie bekijkt, kunt u de tabel Conditiecodes zien. Zoals het zegt, worden conditiecodes gebruikt in het antwoord om de huidige condities te beschrijven. We zullen morgen conditiecodes en hun betekenis gebruiken om uit te zoeken of er neerslag zal zijn en of het regen of sneeuw is.
  • TimeNTP staat voor Network Time Protocol. Het is een netwerkprotocol voor kloksynchronisatie tussen computersystemen. Omdat we internettoegang hebben, zullen we een NTP-client gebruiken om tijd van een NTP-server te krijgen en deze te synchroniseren met de interne timer van ESP8266 (zoals degene die je gebruikt met millis() als je een Arduino-man bent).
  • Geboorte & Overlijden We berekenen het aantal geboorten en sterfgevallen vanaf het begin van de dag (Dankzij NTP Client is het eenvoudig om het aantal seconden sinds het begin van de dag te krijgen). Ik heb de geboorte- en sterftecijfers van de wereld uit de ecologie gebruikt.

Stap 3: Stel de software in

De software instellen
De software instellen

We zullen Arduino IDE gebruiken om ons programma naar NodeMCU te uploaden. U kunt de nieuwste Arduino IDE downloaden en installeren vanaf hun officiële site:

Voordat u begint, moet u Arduino IDE voor Nodemcu instellen. Ik ga je de stappen hier niet vertellen, omdat het off-the-topic kan zijn. Maar u kunt de stappen en uitleg van deze uitstekende instructable volgen.

Ons programma heeft enkele bibliotheekafhankelijkheden. Wat is een softwareafhankelijkheid?

Afhankelijkheid is een brede term voor software-engineering die wordt gebruikt om te verwijzen naar een stuk software dat afhankelijk is van een ander.

Hier is een lijst met Arduino-bibliotheken die u op uw computer moet hebben om het Personal Assistant-programma te kunnen compileren:

  • ArduinoJson
  • DFRobotDFPlayerMini
  • NTPClient

Je kunt ze één voor één downloaden van hun Github-pagina en vervolgens de zip-bestanden uitpakken naar de Arduino-bibliotheekmap. Het pad op uw systeem is:C:\Users [uw-gebruikersnaam] Documents\Arduino

Ik heb een bibliotheek geschreven om de code schoon te houden en complexiteit te vermijden. Download het bestand PersonalAssistant-Library.zip en pak het uit in de Arduino-bibliotheekmap. Net als wat je eerder deed voor die drie bibliotheken.

YahooWeather.php-bestand

Aangezien ESP8266 niet krachtig genoeg is om hash-algoritmen uit te voeren, kunnen we het niet rechtstreeks gebruiken om HTTP-verzoeken naar Yahoo Weather API te sturen, gebaseerd op OAuth-standaarden. We zullen dus een bestand gebruiken tussen ons apparaat en Yahoo Weather API. U kunt het YahooWeather.zip-bestand downloaden, het uitpakken en het YahooWeather.php-bestand op een webserver plaatsen. Als uw domein bijvoorbeeld example.com is en u het bestand in de api-directory plaatst, wordt uw api-eindpunt example.com/api/YahooWeather.php. U stuurt verzoeken om weergegevens naar dit eindpunt.

De programmaschets en de FFS (Flash File System)

Uw NodeMCU-bord heeft een flashbestandssysteem van 4 MB voor het opslaan van gegevens. Dus, als we het hebben, waarom zouden we het dan niet gebruiken?

Weet je nog dat ik zei dat ons apparaat twee gebruikersinterfaces heeft? Naast die eenzame drukknop is onze tweede gebruikersinterface een eenvoudige webgebaseerde applicatie. Met deze applicatie kunt u de bewerkingswachtrij manipuleren door elke module in of uit te schakelen, service-instellingen of apparaatconfiguratie te wijzigen, zoals het instellen van WiFi SSID en wachtwoord. We zullen al deze bestanden opslaan in NodeMCU Flash File System en een lichte webserver gebruiken om gebruikersverzoeken van hun webbrowser af te handelen.

Configuratiebestand bewerken

Download het bestand PersonalAssistant-Sketch.zip en pak het ergens op uw computer uit. Open het bestand config.json dat zich bevindt:

PersonalAssistant/data/config.json

U kunt elke tekst- of code-editor gebruiken, zoals Kladblok, Kladblok++, Atom, enz. Het bestand is een json-gegevensstructuur, dus het is een door mensen leesbaar sleutel/waarde-paar en u kunt het gemakkelijk bewerken. U kunt deze velden wijzigen:

  • Gmail

    • gebruikersnaam: uw Gmail-gebruikersnaam met zijn @gmail.com
    • wachtwoord: je Gmail-wachtwoord
  • Het weer

    • woeid: de locatie waarvan je weersinformatie wilt ontvangen. de WOEID (Where On Earth IDentifier) is een referentie-identificatie die door Yahoo wordt gebruikt voor locatie. U kunt via deze link een zoekopdracht uitvoeren op WOEID-locaties.
    • api: het is het API-eindpunt. De link naar je yahooweather.php-bestand.
    • appId, consumerKey en consumerSecret: om toegang te krijgen tot Yahoo Weather API, moet u een project maken op de Yahoo-ontwikkelaarspagina. Dit geeft je een Consumer Key en Secret die nodig zijn voor het gebruik van de API. Ga om te beginnen naar de Yahoo Weather Developer-pagina en maak een APP aan.
  • Tijdzone

    tijdzone: voer de tijdzone in op basis van uw locatie. Het kan een positief of negatief float-getal zijn en de eenheid is uren

  • Wifi

    • ssid: SSID van uw netwerk.
    • wachtwoord: uw netwerkwachtwoord. NodeMCU gebruikt ssid en wachtwoord om verbinding te maken met uw wifi-netwerk.

De programmaschets en FFS-gegevens uploaden

Sluit de NodeMCU aan op uw computer met behulp van een micro-USB-naar-USB-kabel.

Open nu het bestand PersonalAssistant.ino dat zich bevindt:

PersonalAssistant/PersonalAssistant.ino

Selecteer in Arduino IDE in Tools > Board, NodeMCU 1.0 (ESP-12E Module). Selecteer in Tools > Port de juiste poort. Het vertegenwoordigt uw NodeMCU.

Selecteer nu Tools > ESP8266 Sketch Data Upload, hierdoor wordt de inhoud van de datamap geüpload naar de ESP8266. Wacht even tot het klaar is. Selecteer vervolgens Sketch> Upload of druk eenvoudig op de Ctrl + U-knoppen op uw toetsenbord om het programma te uploaden. Wacht tot je het bericht "upload is done" ziet.

Stap 4: Stel de Micro SD-kaart in

We gebruiken een micro SD-kaart om de MP3-bestandsstukken op te slaan. Het is NodeMCU die beslist welk bestand op welk moment moet worden afgespeeld en DFPlayer Mini helpt hem bij het maken van een zinvolle zin door de MP3-bestanden te decoderen.

Ik gebruikte Amazon Polly om de stemstukken te genereren die ik nodig had.

Amazon Polly is een service die tekst omzet in levensechte spraak, waarmee je applicaties kunt maken die praten en geheel nieuwe categorieën spraakgestuurde producten kunt bouwen.

Vergeet niet dat ons apparaat geen Amazon Polly API gebruikt om dynamisch te spreken. We hebben een aantal statische offline stemstukken en door ze samen te voegen, maken we verschillende zinnen.

Ik heb deze site gebruikt om MP3-bestanden te genereren. De spraakuitvoer die ik selecteerde was Amerikaans Engels / Salli.

Het enige dat u hoeft te doen, is het microSD.zip-bestand downloaden en vervolgens uitpakken op uw micro SD-kaart. Het bevat alle 78 vereiste MP3-bestanden.

Waarschijnlijk wordt uw Micro SD-kaart geleverd met een adapter. U kunt uw Micro SD-kaart in de adapter steken en op uw laptop aansluiten. Als uw computer geen kaartlezen ondersteunt, moet u een externe kaartlezer gebruiken.

Stap 5: Het ontwerpen van de schema's en het opzetten van de PCB

De schema's ontwerpen en de printplaat instellen
De schema's ontwerpen en de printplaat instellen
De schema's ontwerpen en de printplaat instellen
De schema's ontwerpen en de printplaat instellen
De schema's ontwerpen en de printplaat instellen
De schema's ontwerpen en de printplaat instellen
De schema's ontwerpen en de printplaat instellen
De schema's ontwerpen en de printplaat instellen

Ik heb het schema en bord ontworpen met behulp van de Autodesk EAGLE. Ik heb zowel SCH- als BRD-bestanden opgenomen in PersonalAssistant-PCB.zip. U kunt het eenvoudig bewerken en/of naar een lokale of online PCB-fabrikant sturen om uw bord te bestellen en te krijgen.

Nog iets om te vermelden is dat ESP8266 werkt in 3.3v, terwijl DFPlayer Mini in 5v werkt. Aangezien deze twee modules met elkaar moeten praten via een seriële interface, kunnen we een 5v-uitgang niet rechtstreeks aansluiten op een 3,3v-ingang, omdat dit uw ESP8266 beschadigt. We hebben dus een niveauconversie nodig van 5v naar 3.3v. We gebruiken een signaaldiode en een weerstand van 10K om het mogelijk te maken.

Stap 6: Soldeer het op

Soldeer het op
Soldeer het op
Soldeer het op
Soldeer het op

Het monteren van het bord is vrij eenvoudig omdat je een paar componenten hebt. Volg het schema en de bordontwerpen in stap 5 om elk item gemakkelijk op de juiste plaats te zetten.

Ik begon met het solderen van de weerstanden en de diode, omdat ze klein zijn. U kunt hun onnodige staarten gemakkelijk doorknippen met een draadknipper. Van boven naar beneden moet je 1K, 10K en 10K weerstand plaatsen.

U hoeft niet alle NodeMCU- en DFPlayer Mini-pinnen op de printplaat te solderen. Het solderen van de pinnen met een pad is voldoende.

Vergeet niet dat luidsprekers en diodes polariteit hebben. Je hebt één luidspreker en één diode in je componenten. Voor de diode is de zijde met een zwarte lijn de negatieve zijde of de kathode.

Stap 7: De behuizing

de behuizing
de behuizing
de behuizing
de behuizing
de behuizing
de behuizing

Ik besloot op een creatieve manier een mooie behuizing te ontwerpen. Ik maakte me tijdens het ontwerp zorgen over de rare vorm, maar uiteindelijk viel het mee. Het ziet er in ieder geval uit als een vleugel en voelt heerlijk in de hand!

In plaats van de klassieke hexahedron kubische vorm met 6 vlakken, ontwierp ik een meerlaagse behuizing. Van onder naar boven ligt elke laag op zijn onderste laag. (Ik noemde ze L0 tot L6, van onder naar boven)

Kleuren en dikte

U kunt twee complementaire kleuren gebruiken om het sterkste contrast te maken, zoals:

  • Rood en groen
  • Blauw en oranje
  • Geel en paars
  • Blauw en geel

Ik heb helder acryl gebruikt voor de toplaag, zodat je in het apparaat kunt kijken.

De dikte van de toplaag (laag-6) dient 2 mm te zijn. De dikte van de overige lagen (laag-0 tot laag-5) dient 4 mm te zijn. Als je een acrylscherm van 2,8 mm wilt gebruiken, zoals ik deed, is dat geen probleem. Maar u moet twee series van laag-1 en laag-3 knippen voor de offset.

Begin bij de onderste laag (L0) om de behuizing te monteren. Zet het bord erop, gebruik de kortere bouten en draai het vast met de moeren. U kunt nu de vier langere bouten vanaf de onderkant van de laag-0 bevestigen. Iets als een toren. Dan kun je er eenvoudig andere lagen op monteren.

Let op: U kunt een optionele onderlegring gebruiken tussen de onderlaag en het bord.

Ik heb ook infoteksten toegevoegd voor apparaatpoorten (stroom en micro SD-kaart). Op de toplaag kunt u lasergraveren.

Ik heb zowel CDR- als DXF-bestandsindelingen opgenomen. U kunt ze downloaden, bewerken en gebruiken voor lasercutting.

Stap 8: Toegang tot webgebaseerde gebruikersinterface

Toegang tot webgebaseerde gebruikersinterface
Toegang tot webgebaseerde gebruikersinterface

Zet het apparaat aan

U kunt het apparaat van stroom voorzien met elke 5v micro-USB-oplader. Sluit de micro-USB aan op de voedingspoort van het apparaat, dat is de micro-USB-ingang op uw NodeMCU.

Toegang tot de gebruikersinterface

Weet je nog dat we enkele bestanden hebben geüpload naar ESP8266 Flash File System? Het is tijd om het te gebruiken. Het enige dat u nodig hebt, is het IP-adres dat is toegewezen aan ESP8266 op het netwerk. Er zijn veel verschillende manieren om het IP-adres te vinden. Ik zal er hier een aantal opnoemen:

  • Op de configuratiepagina van uw router, ergens in de DHCP-leaselijst, ziet u een lijst met apparaten met hun IP-adressen in uw netwerk.
  • In Microsoft Windows en macOS kun je commando's zoals arp -a in terminal uitvoeren.
  • In Android en iOS kun je applicaties zoals Fing gebruiken. (Android / iOS)
  • In Linux kun je tools zoals Nmap gebruiken.

Nadat u het IP-adres hebt gevonden, opent u het met uw webbrowser. U kunt de bewerkingswachtrij manipuleren door modules in of uit te schakelen.

Stap 9: Laatste gedachten

Dit project kostte veel tijd en energie. U kunt nog veel meer opties toevoegen aan Personal Assistant. Ik heb een aantal onderdelen opengelaten voor toekomstige ontwikkeling. Sommige onderdelen zoals:

  1. Meer diensten en module toevoegen. Bijvoorbeeld het tellen van getallen, het gooien van een dobbelsteen of het opgooien van een munt.
  2. Na verbinding met het netwerk kan het apparaat het IP-adres uitspreken. U kunt deze optie toevoegen om het vinden van het IP-adresproces te vereenvoudigen.
  3. De mogelijkheid toevoegen om wifi-instellingen te wijzigen in het webgebaseerde configuratiescherm.
  4. De mogelijkheid toegevoegd om service-instellingen te wijzigen in het webgebaseerde configuratiescherm. (Hun html-formulier is klaar. U moet verzoeken afhandelen)
  5. Meer spraakreacties toevoegen in verschillende toestanden van het apparaat.
  6. Een inlogpagina toevoegen voor een webgebaseerd configuratiescherm. U kunt dit doen door Cookies toe te voegen/te vergelijken in

En ik zou graag uw ideeën over deze instructable willen weten.:)

Aanbevolen: