Sommario:

Assistente personale: 9 passaggi (con immagini)
Assistente personale: 9 passaggi (con immagini)

Video: Assistente personale: 9 passaggi (con immagini)

Video: Assistente personale: 9 passaggi (con immagini)
Video: Quando provi a fare un complimento a una ragazza... 2024, Dicembre
Anonim
Image
Image
Assistente personale
Assistente personale

In questo tutorial, ti mostrerò come puoi usare la potenza di ESP8266, la creatività nella progettazione e programmazione del software, per creare qualcosa di interessante ed educativo.

L'ho chiamato Assistente personale, perché è tascabile, parla con te e può darti alcune informazioni utili e (ovviamente) alcune non utili (ma comunque interessanti) su meteo, ora e data, messaggi di Gmail, nascita dal vivo e tassi di mortalità e così via.

Ho cercato di mantenere il design semplice. Il dispositivo dispone di due interfacce utente. Un pulsante fisico e un'applicazione basata sul Web a cui l'utente può accedere utilizzando un browser Web e modificare le impostazioni e la configurazione del dispositivo.

Come funziona? I componenti principali di questo progetto sono un Microcontrollore e un modulo Lettore musicale. Il nostro microcontrollore (NodeMCU) utilizza la tecnologia WiFi per connettersi ad un access point con connessione internet; in modo che possa ottenere i dati richiesti, elaborarli e indicare al lettore musicale (DFPlayer Mini) quando, quale file MP3 deve essere riprodotto.

Per ora, è tutto ciò che devi sapere. Ti darò informazioni più dettagliate nei prossimi passaggi, quindi non preoccuparti.

Passaggio 1: parti necessarie

Parti necessarie
Parti necessarie
  • NodeMCU ESP-12E (interfaccia USB-seriale CP2102)
  • Mini DFPlayer
  • Pulsante momentaneo SPST
  • Altoparlante 8 Ohm 2 Watt
  • Micro SD Card (avrai bisogno di pochi Kilobyte, quindi la capacità non ha importanza)
  • Dadi e bulloni

    • Dadi M3 (x6)
    • Bulloni M3 - 23 mm (x4)
    • Bulloni M3 - 15 mm (x2)
  • Diodo di segnale 1N4148 (x1)
  • resistori

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

Altre parti:

  • PCB (puoi ordinare un prototipo online o visitare un negozio locale)
  • Foglio acrilico tagliato al laser

    • Lastra trasparente di 2 mm di spessore
    • Spessore 2,8 mm lastre in due colori diversi (arancione e verde, rosso e verde, dipende da te e i colori non contano)
  • Qualsiasi caricatore micro USB da 5 volt (almeno) 1 ampere (per alimentare il dispositivo)

Passaggio 2: come funziona

Come funziona
Come funziona
Come funziona
Come funziona

Ok, voglio darti informazioni più dettagliate su come funziona il software.

Il software è costituito da alcuni Servizi. Ogni Servizio, ha i suoi Moduli. (Puoi considerare un servizio come una classe e i suoi moduli come i suoi metodi). Ogni modulo, può essere considerato come un oggetto eseguibile. Quindi, il nostro software è costituito da alcuni oggetti eseguibili.

Qui abbiamo alcuni servizi e sottoservizi o i loro moduli:

  • Gmail

    Messaggi non letti

  • Tempo metereologico

    • Temperatura attuale
    • Condizione odierna
    • Oggi Basso / Alto
    • Condizione di domani
    • Domani Basso/Alto
    • Previsione delle precipitazioni
    • Alba tramonto
  • Tempo

    • Ora attuale
    • Data odierna
  • Nascita e morte

    • Nascita del mondo
    • Morte nel mondo

C'è una coda circolare che contiene i moduli. Lo chiamiamo Operation Queue. Ho detto, ogni modulo è un oggetto eseguibile. Quindi, quando si preme il pulsante sul dispositivo, questo guarda nella coda delle operazioni ed esegue il modulo (o oggetto) successivo.

È possibile modificare i membri della coda delle operazioni nell'interfaccia utente basata sul web che spiegherò più avanti. Per ora ti faccio un esempio. Considera la coda dell'operazione corrente come questa:

CODA (Messaggi non letti | Previsione precipitazioni | Ora corrente)

Premendo il pulsante, i messaggi non letti dovrebbero essere eseguiti.

CODA (Messaggi non letti | Previsione precipitazioni | Ora corrente)

Quindi, il dispositivo utilizzerà i dati raccolti (qui, il numero dei tuoi messaggi non letti che viene catturato dal feed API di Google Mail) per parlare con te. Ma come? Qui, NodeMCU dirà al modulo MP3, quando dovrebbe riprodurre quale pezzo MP3 per formare una frase significativa. Per raggiungere questo obiettivo, ho progettato diverse code, timer e algoritmi. (Se sei un ragazzo c++ e ti piacciono i microcontrollori, puoi studiare il codice da solo.)

Quindi, sentirai, il dispositivo inizia a parlare: hai 4 messaggi non letti nella posta in arrivo di Gmail.

Premi di nuovo il pulsante, il modulo successivo sarà Precipitazioni che dovrebbe essere gestito.

CODA (Messaggi non letti | Previsione precipitazioni | Ora corrente)

Quindi, sentirai qualcosa del tipo: non dimenticare l'ombrello, domani piove. E così via… Un'altra cosa interessante: per alcuni moduli (come la previsione delle precipitazioni), puoi aspettarti frasi casuali per gli stessi stati. Ad esempio, se domani ci sono precipitazioni e piove, e non nevica, puoi aspettarti "c'è la possibilità che piova domani", "porta il tuo sole, domani pioverà", "tut,tut, sembra pioggia per domani", o …

Come otteniamo dati diversi per ogni servizio?

  • Gmail

    Messaggi non lettiGoogle ha una potente API a cui puoi accedere ai suoi diversi servizi, incluso Gmail. Ma, per motivi di sicurezza, sono necessari diversi metodi di autenticazione e autorizzazione come OAuth. ESP8266 non è così potente per eseguire diversi algoritmi di hash complicati. Quindi, ho utilizzato una tecnologia di accesso più vecchia e semplice per accedere alla posta in arrivo di Gmail. È Google Atom Feed che può essere utilizzato anche dai lettori RSS. Inviamo una richiesta HTTP per accedere al feed di Gmail e la sua risposta è in formato XML. Quindi, contiamo il numero di messaggi non letti e lo usiamo nel nostro programma

  • MeteoUtilizziamo l'API meteo di Yahoo per ottenere informazioni meteorologiche diverse. Di recente, proprio come Google, Yahoo ha cambiato la sua API Weather, quindi dovrai utilizzare gli standard OAuth per accedere ai suoi dati. Sfortunatamente, ESP8266 non può gestire la sua complessità, quindi useremo un trucco per risolvere il problema. Invece di accedere direttamente all'API Yahoo Weather, invieremo la nostra richiesta a un file personalizzato su un server. Il nostro file riceve i dati da Yahoo Weather e ce li invia semplicemente.

    • Condizione di domani La condizione di domani ti dirà se domani è più caldo o più freddo di oggi, o lì se non ci sarà alcun cambiamento sensibile di temperatura. Confrontiamo "oggi basso / alto" con "domani basso / alto" per raggiungere questo obiettivo. Puoi controllare come ho scritto questo algoritmo e come funziona nel file della libreria del programma.
    • Previsione delle precipitazioniSe controlli la documentazione di Yahoo Weather, puoi vedere la tabella dei codici delle condizioni. Come si dice, i codici di condizione vengono utilizzati nella risposta per descrivere le condizioni correnti. Useremo i codici delle condizioni di domani e il loro significato per scoprire se ci saranno precipitazioni e se pioverà o nevicherà.
  • TimeNTP sta per Network Time Protocol. È un protocollo di rete per la sincronizzazione dell'orologio tra i sistemi informatici. Poiché abbiamo accesso a Internet, utilizzeremo un client NTP per ottenere il tempo da un server NTP e lo sincronizzeremo attraverso il timer interno ESP8266 (come quello che usi con millis() se sei un ragazzo Arduino).
  • Nascita e morteCalcoleremo il numero di nascite e morti dall'inizio della giornata (Grazie a NTP Client, è semplice ottenere il numero di secondi dall'inizio della giornata). Ho usato i tassi di natalità e mortalità nel mondo dall'ecologia.

Passaggio 3: configurare il software

Configura il software
Configura il software

Useremo Arduino IDE per caricare il nostro programma su NodeMCU. Puoi scaricare e installare l'ultimo Arduino IDE dal loro sito ufficiale:

Prima di iniziare, è necessario configurare l'IDE Arduino per Nodemcu. Non ti dirò i passaggi qui, perché potrebbe essere fuori tema. Ma puoi seguire i passaggi e le spiegazioni di questo eccellente istruibile.

Il nostro programma ha alcune dipendenze dalle librerie. Che cos'è una dipendenza da software?

La dipendenza è un termine generico di ingegneria del software utilizzato per indicare quando un pezzo di software si basa su un altro.

Ecco un elenco di librerie Arduino che devi avere sul tuo computer per poter compilare il programma Personal Assistant:

  • ArduinoJson
  • DFRobotDFPlayerMini
  • NTPClient

Puoi scaricarli uno per uno dalla loro pagina Github, quindi estrarre i file zip nella directory della libreria Arduino. Il suo percorso sul tuo sistema è: C:\Users [tuo-nome utente] Documents\Arduino

Ho scritto una libreria per mantenere il codice pulito ed evitare complessità. Scarica il file PersonalAssistant-Library.zip ed estrailo nella directory della libreria Arduino. Proprio come hai fatto prima per quelle tre biblioteche.

File YahooWeather.php

Poiché ESP8266 non è abbastanza potente per eseguire algoritmi di hash, non possiamo utilizzarlo direttamente per inviare richieste HTTP all'API Yahoo Weather, in base agli standard OAuth. Quindi, utilizzeremo un file tra il nostro dispositivo e l'API Yahoo Weather. Puoi scaricare il file YahooWeather.zip, estrarlo e inserire il file YahooWeather.php in un server web. Ad esempio, se il tuo dominio è example.com e inserisci il file nella directory API, il tuo endpoint API diventa example.com/api/YahooWeather.php Invierai richieste di dati meteo a questo endpoint.

Lo schizzo del programma e l'FFS (Flash File System)

La tua scheda NodeMCU ha un file system flash da 4 MB per l'archiviazione dei dati. Quindi, quando ce l'abbiamo, perché non usarla?

Ricordi quando ho detto che il nostro dispositivo ha due interfacce utente? Oltre a quel pulsante solitario, la nostra seconda interfaccia utente è una semplice applicazione basata sul web. Con questa applicazione è possibile manipolare la coda delle operazioni abilitando/disabilitando ciascun modulo, modificando le impostazioni del servizio o la configurazione del dispositivo, come l'impostazione dell'SSID WiFi e della password. Memorizzeremo tutti questi file in NodeMCU Flash File System ed eseguiremo un server web leggero per gestire le richieste degli utenti dal loro browser web.

Modifica del file di configurazione

Scarica il file PersonalAssistant-Sketch.zip ed estrailo da qualche parte nel tuo computer. Apri il file config.json che si trova:

PersonalAssistant/data/config.json

Puoi utilizzare qualsiasi editor di testo o codice come blocco note, blocco note ++, Atom, ecc. Il file è una struttura di dati json, quindi è una coppia chiave / valore leggibile dall'uomo e puoi facilmente modificarlo. Puoi modificare questi campi:

  • Gmail

    • nome utente: il tuo nome utente Gmail con il suo @gmail.com
    • password: la tua password Gmail
  • Tempo metereologico

    • woeid: la località per la quale si desidera ricevere le informazioni meteo. il WOEID (Where On Earth IDentifier) è un identificatore di riferimento utilizzato da Yahoo per la posizione. Puoi eseguire una ricerca sulle posizioni WOEID in questo link.
    • api: è l'endpoint dell'API. Il link al tuo file yahooweather.php.
    • appId, consumerKey e consumerSecret: per accedere all'API Yahoo Weather, è necessario creare un progetto nella pagina degli sviluppatori di Yahoo. Questo ti darà una chiave consumatore e un segreto necessari per utilizzare l'API. Per iniziare, visita la pagina Yahoo Weather Developer e crea un'APP.
  • Fuso orario

    fuso orario: inserisci il fuso orario in base alla tua posizione. Può essere un numero float positivo o negativo e la sua unità sono le ore

  • Wifi

    • ssid: SSID della tua rete.
    • password: la tua password di rete. NodeMCU utilizzerà ssid e password per connettersi alla tua rete wifi.

Caricamento dello schizzo del programma e dei dati FFS

Collega il NodeMCU al tuo computer, utilizzando un cavo da micro-USB a USB.

Ora apri il file PersonalAssistant.ino che si trova:

PersonalAssistant/PersonalAssistant.ino

In Arduino IDE, da Strumenti > Scheda, selezionare NodeMCU 1.0 (Modulo ESP-12E). Da Strumenti > Porta, selezionare la porta corretta. Rappresenta il tuo NodeMCU.

Ora, seleziona Strumenti> Caricamento dati schizzo ESP8266, questo caricherà il contenuto della cartella dati su ESP8266. Attendi qualche istante finché non è finito. Quindi, seleziona Schizzo> Carica o premi semplicemente i pulsanti Ctrl + U sulla tastiera per avviare il caricamento del programma. Attendi fino a quando non viene visualizzato il messaggio "caricamento completato".

Passaggio 4: configurare la scheda Micro SD

Usiamo una scheda micro SD per memorizzare i pezzi del file MP3. È NodeMCU che decide quale file deve essere riprodotto a che ora e DFPlayer Mini lo aiuta a creare una frase significativa decodificando i file MP3.

Ho usato Amazon Polly per generare i pezzi vocali di cui avevo bisogno.

Amazon Polly è un servizio che trasforma il testo in voce realistica, consentendoti di creare applicazioni che parlano e creare categorie completamente nuove di prodotti abilitati alla voce.

Non dimenticare che il nostro dispositivo non utilizza l'API Amazon Polly per parlare in modo dinamico. Abbiamo alcuni brani vocali offline statici e, mettendoli insieme, creiamo frasi diverse.

Ho usato questo sito per generare file MP3. L'output vocale che ho selezionato era inglese americano / Salli.

L'unica cosa che devi fare è scaricare il file microSD.zip, quindi estrarlo nella tua scheda micro SD. Contiene tutti i 78 file MP3 richiesti.

Probabilmente la tua scheda Micro SD viene fornita con un adattatore. Puoi inserire la tua scheda Micro SD nel suo adattatore e collegarla al tuo laptop. Se il tuo computer non supporta la lettura delle carte, dovresti usare un lettore di carte esterno.

Passaggio 5: progettazione degli schemi e configurazione del PCB

Progettare gli schemi e impostare il PCB
Progettare gli schemi e impostare il PCB
Progettare gli schemi e impostare il PCB
Progettare gli schemi e impostare il PCB
Progettare gli schemi e impostare il PCB
Progettare gli schemi e impostare il PCB
Progettare gli schemi e impostare il PCB
Progettare gli schemi e impostare il PCB

Ho progettato lo schema e la scheda utilizzando Autodesk EAGLE. Ho incluso sia i file SCH che BRD in PersonalAssistant-PCB.zip. Puoi facilmente modificarlo e/o inviarlo a un produttore di PCB locale o online per ordinare e ottenere la tua scheda.

Un'altra cosa da menzionare è che ESP8266 funziona in 3.3v mentre DFPlayer Mini funziona in 5v. Poiché questi due moduli devono comunicare tra loro tramite l'interfaccia seriale, non possiamo collegare direttamente un'uscita 5v a un ingresso 3.3v poiché danneggia il tuo ESP8266. Quindi avremo bisogno di una conversione di livello da 5v a 3.3v. Usiamo un diodo di segnale e un resistore da 10K per farlo accadere.

Passaggio 6: saldarlo

Saldalo
Saldalo
Saldalo
Saldalo

L'assemblaggio della scheda è piuttosto semplice in quanto hai pochi componenti. Segui lo schema e i disegni della scheda nel passaggio 5 per posizionare facilmente ogni elemento nella posizione corretta.

Ho iniziato saldando le resistenze e il diodo, dato che sono piccoli. Puoi facilmente tagliare le loro code non necessarie usando un tronchese. Dall'alto verso il basso, dovresti mettere una resistenza da 1K, 10K e 10K.

Non è necessario saldare tutti i pin NodeMCU e DFPlayer Mini sul PCB. È sufficiente saldare i pin con un percorso.

Non dimenticare che altoparlanti e diodi hanno polarità. Hai un altoparlante e un diodo nei tuoi componenti. Per il diodo, il lato con una linea nera è il suo lato negativo o il catodo.

Passaggio 7: il recinto

Il recinto
Il recinto
Il recinto
Il recinto
Il recinto
Il recinto

Ho deciso di progettare un recinto di fantasia in modo creativo. Ero preoccupato per la sua strana forma durante il design, ma alla fine non è stato così male. Almeno sembra un pianoforte a coda e si sente benissimo tenendolo in mano!

Invece della classica forma cubica esaedrica con 6 facce, ho progettato un involucro multistrato. Dal basso verso l'alto, ogni strato si adagia sul suo strato inferiore. (Li ho chiamati da L0 a L6, dal basso verso l'alto)

Colori e Spessore

Puoi usare due colori complementari per creare il contrasto più forte, come:

  • Rosso e Verde
  • Blu e Arancione
  • Giallo e Viola
  • Blu e Giallo

Ho usato acrilico trasparente per lo strato superiore, così puoi vedere all'interno del dispositivo.

Lo spessore dello strato superiore (strato-6) deve essere di 2 mm. Lo spessore degli altri strati (da strato-0 a strato-5) deve essere di 4 mm. Se vuoi usare uno scudo acrilico da 2,8 mm, come ho fatto io, non c'è problema. Ma devi tagliare due serie dal livello 1 e dal livello 3 per l'offset.

Per assemblare la custodia, iniziare dallo strato inferiore (L0). Metti la tavola su di essa, usa i bulloni più corti e stringila usando i dadi. Ora puoi attaccare i quattro bulloni più lunghi dal fondo del livello-0. Qualcosa come una torre. Quindi puoi facilmente continuare a montare altri livelli su di essi.

Nota: è possibile utilizzare una rondella opzionale tra lo strato inferiore e la scheda.

Ho anche aggiunto testi informativi per le porte del dispositivo (alimentazione e scheda micro SD). È possibile utilizzare l'incisione laser sullo strato superiore.

Ho incluso entrambi i formati di file CDR e DXF. Puoi scaricarli, modificarli e usarli per il taglio laser.

Passaggio 8: accesso all'interfaccia utente basata sul Web

Accesso all'interfaccia utente basata sul Web
Accesso all'interfaccia utente basata sul Web

Accendi il dispositivo

Puoi accendere il dispositivo, utilizzando qualsiasi caricatore micro USB 5v. Collega la micro USB alla porta di alimentazione del dispositivo, ovvero l'ingresso micro USB sul tuo NodeMCU.

Accedi all'interfaccia utente

Ricordi che abbiamo caricato alcuni file in ESP8266 Flash File System? È ora di usarlo. Tutto ciò di cui hai bisogno è l'indirizzo IP assegnato a ESP8266 sulla rete. Esistono molti modi diversi per trovare l'indirizzo IP. Ne elencherò alcuni qui:

  • Nella pagina di configurazione del tuo router, da qualche parte in DHCP Lease List, puoi vedere l'elenco dei dispositivi con i loro indirizzi IP nella tua rete.
  • In Microsoft Windows e macOS puoi eseguire comandi come arp -a nel terminale.
  • In Android e iOS, puoi utilizzare applicazioni come Fing. (Android/iOS)
  • In Linux, puoi usare strumenti come Nmap.

Dopo aver trovato l'indirizzo IP, aprilo utilizzando il tuo browser web. È possibile manipolare la coda delle operazioni abilitando/disabilitando i moduli.

Passaggio 9: considerazioni finali

Questo progetto è stato molto dispendioso in termini di tempo ed energia. Puoi aggiungere molte altre opzioni all'Assistente personale. Ho lasciato alcune parti aperte per sviluppi futuri. Alcune parti come:

  1. Aggiunta di più servizi e modulo. Ad esempio contare i numeri, tirare un dado o lanciare una moneta.
  2. Dopo la connessione alla rete, il dispositivo può pronunciare l'indirizzo IP. Puoi aggiungere questa opzione per semplificare il processo di ricerca dell'indirizzo IP.
  3. Aggiunta la possibilità di modificare le impostazioni WiFi nel pannello di controllo basato sul web.
  4. Aggiunta la possibilità di modificare le impostazioni del servizio nel pannello di controllo basato sul web. (Il loro modulo html è pronto. Devi gestire le richieste)
  5. Aggiunta di più risposte vocali in diversi stati del dispositivo.
  6. Aggiunta di una pagina di accesso per il pannello di controllo basato sul web. Puoi farlo aggiungendo/confrontando i cookie nelle righe di intestazione

E, mi piacerebbe conoscere le tue idee su questo istruibile.:)

Consigliato: