Spisu treści:

Osobisty asystent: 9 kroków (ze zdjęciami)
Osobisty asystent: 9 kroków (ze zdjęciami)

Wideo: Osobisty asystent: 9 kroków (ze zdjęciami)

Wideo: Osobisty asystent: 9 kroków (ze zdjęciami)
Wideo: 9 kroków, dzięki którym zabłyśniesz na wideokonferencji - Aneta Wrona Mówi 2024, Lipiec
Anonim
Image
Image
Osobisty asystent
Osobisty asystent

W tej instrukcji pokażę, jak wykorzystać moc ESP8266, kreatywność w projektowaniu oprogramowania i programowaniu, aby stworzyć coś fajnego i edukacyjnego.

Nazwałem go Osobistym Asystentem, ponieważ jest kieszonkowy, rozmawia z Tobą i może dać Ci przydatne i (oczywiście) kilka nieprzydatnych (ale wciąż fajnych) informacji o pogodzie, godzinie i dacie, wiadomościach w Gmailu, urodzeniu na żywo i śmiertelność itp.

Starałam się, aby projekt był prosty. Urządzenie posiada dwa interfejsy użytkownika. Fizyczny przycisk i aplikacja internetowa, do których użytkownik może uzyskać dostęp za pomocą przeglądarki internetowej i zmienić ustawienia i konfigurację urządzenia.

Jak to działa? Głównymi elementami tego projektu są mikrokontroler i moduł odtwarzacza muzyki. Nasz mikrokontroler (NodeMCU) wykorzystuje technologię Wi-Fi do łączenia się z punktem dostępowym z połączeniem internetowym; dzięki czemu może uzyskać wymagane dane, przetworzyć je i powiedzieć odtwarzaczowi muzycznemu (DFPlayer Mini), kiedy, który plik MP3 powinien zostać odtworzony.

Na razie to wszystko, co musisz wiedzieć. Bardziej szczegółowe informacje podam w kolejnych krokach, więc nie martw się.

Krok 1: Potrzebne części

Potrzebne części
Potrzebne części
  • NodeMCU ESP-12E (interfejs USB-szeregowy CP2102)
  • Miniodtwarzacz DFP
  • Przycisk chwilowy SPST
  • Głośnik 8 Ohm 2 Wat
  • Karta Micro SD (potrzebujesz kilku kilobajtów, więc pojemność nie ma znaczenia)
  • Nakrętki i śruby

    • Nakrętki M3 (x6)
    • Śruby M3 - 23 mm (x4)
    • Śruby M3 - 15 mm (x2)
  • 1N4148 Dioda sygnałowa (x1)
  • Rezystory

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

Inne części:

  • PCB (prototyp można zamówić online lub odwiedzić lokalny sklep)
  • Wycinany laserowo arkusz akrylowy

    • Przezroczysty arkusz o grubości 2 mm
    • Grubość 2,8 mm dwa różne kolory arkuszy (pomarańczowy i zielony, czerwony i zielony, to zależy od Ciebie i kolory nie mają znaczenia)
  • Dowolna 5 V (co najmniej) 1 amperowa ładowarka micro USB (do zasilania urządzenia)

Krok 2: Jak to działa

Jak to działa
Jak to działa
Jak to działa
Jak to działa

OK, chcę podać bardziej szczegółowe informacje na temat działania oprogramowania.

Oprogramowanie składa się z niektórych Usług. Każda Usługa ma swoje własne Moduły. (Można uznać usługę za klasę, a jej moduły za metody). Każdy moduł można uznać za obiekt wykonywalny. Nasze oprogramowanie składa się więc z wykonywalnych obiektów.

Oto niektóre usługi i podusługi lub ich moduły:

  • Gmail

    Nieprzeczytane wiadomości

  • Pogoda
    • Obecna temperatura
    • Stan dzisiaj
    • Dzisiaj Niska / Wysoka
    • Stan jutra
    • Jutro niski/wysoki
    • Prognoza opadów
    • Wschód zachód
  • Czas

    • Obecny czas
    • Bieżąca data
  • Narodziny i śmierć

    • Narodziny na świecie
    • Światowa śmierć

Jest w nim okrągła kolejka, w której znajdują się moduły. Nazywamy to Kolejką Operacji. Powiedziałem, że każdy moduł to obiekt wykonywalny. Tak więc, gdy naciśniesz przycisk na urządzeniu, zagląda ono do kolejki operacji i wykonuje następny moduł (lub obiekt).

Możesz edytować członków kolejki operacji w internetowym interfejsie użytkownika, który wyjaśnię później. Na razie podam przykład. Rozważ obecną kolejkę operacji w następujący sposób:

KOLEJKA (nieprzeczytane wiadomości | Prognoza opadów | Aktualny czas)

Naciskasz przycisk, Nieprzeczytane wiadomości powinny zostać wykonane.

KOLEJKA (nieprzeczytane wiadomości | Prognoza opadów | Aktualny czas)

Tak więc urządzenie użyje zebranych danych (tutaj liczba nieprzeczytanych wiadomości pobranych z kanału API poczty Google), aby porozmawiać z Tobą. Ale jak? Tutaj NodeMCU poinformuje moduł MP3, kiedy powinien odtworzyć, który kawałek MP3 ma stworzyć sensowne zdanie. Aby to osiągnąć, zaprojektowałem różne kolejki, timery i algorytmy. (Jeśli jesteś facetem od c++ i lubisz mikrokontrolery, możesz sam przestudiować kod.)

Usłyszysz, że urządzenie zaczyna mówić: masz 4 nieprzeczytane wiadomości w skrzynce odbiorczej Gmaila.

Ponownie wciskasz przycisk, następnym modułem będzie Prognoza opadów, którą należy obsłużyć.

KOLEJKA (nieprzeczytane wiadomości | Prognoza opadów | Aktualny czas)

Usłyszysz więc coś takiego: Nie zapomnij parasola, jutro będzie deszczowo. I tak dalej… Jeszcze jedna fajna rzecz: w przypadku niektórych modułów (np. prognoza opadów) można spodziewać się losowych zdań dla tych samych stanów. Na przykład, jeśli jutro będzie opady i będzie padało, a nie śnieg, możesz spodziewać się "jutro jest możliwość deszczu", "przynieś własne słońce, jutro będzie deszcz", "tut, tut, zapowiada się deszcz na jutro"., lub …

Jak otrzymujemy różne dane dla każdej usługi?

  • Gmail

    Nieprzeczytane wiadomościGoogle ma potężny interfejs API, do którego można uzyskać dostęp do różnych usług, w tym Gmaila. Ale ze względów bezpieczeństwa potrzebujesz różnych metod uwierzytelniania i autoryzacji, takich jak OAuth. ESP8266 nie jest tak potężny, aby uruchamiać różne skomplikowane algorytmy mieszające. Użyłem więc starszej i prostej technologii logowania, aby uzyskać dostęp do skrzynki odbiorczej Gmaila. Jest to kanał Google Atom, z którego mogą korzystać również czytniki RSS. Wysyłamy żądanie HTTP w celu uzyskania dostępu do kanału Gmaila, a jego odpowiedź jest w formacie XML. Tak więc liczymy ilość nieprzeczytanych wiadomości i używamy ich w naszym programie

  • PogodaUżywamy Yahoo Weather API do uzyskiwania różnych informacji o pogodzie. Ostatnio, podobnie jak Google, Yahoo zmieniło swój interfejs Weather API, więc będziesz musiał korzystać ze standardów OAuth, aby uzyskać dostęp do jego danych. Niestety ESP8266 nie radzi sobie z jego złożonością, więc użyjemy triku, aby rozwiązać problem. Zamiast bezpośredniego dostępu do Yahoo Weather API, wyślemy nasze żądanie do niestandardowego pliku na serwerze. Nasz plik pobiera dane z Yahoo Weather i po prostu wysyła je do nas.

    • Tomorrow ConditionTomorrow Condition poinformuje Cię, czy jutro będzie cieplej czy chłodniej niż dzisiaj, czy też nie będzie rozsądnych zmian temperatury. Aby to osiągnąć, porównujemy „dzisiaj niski/wysoki” z „jutro niski/wysoki”. Jak napisałem ten algorytm i jak działa, możesz sprawdzić w pliku biblioteki programu.
    • Prognoza opadówJeśli sprawdzisz dokumentację Yahoo Weather, zobaczysz tabelę kodów warunków. Jak mówi, kody warunków są używane w odpowiedzi w celu opisania bieżących warunków. Użyjemy kodów stanu jutra i ich znaczenia, aby dowiedzieć się, czy będą jakieś opady i czy będzie to deszcz, czy śnieg.
  • TimeNTP oznacza Network Time Protocol. Jest to protokół sieciowy do synchronizacji zegara między systemami komputerowymi. Ponieważ mamy dostęp do Internetu, użyjemy klienta NTP, aby uzyskać czas z serwera NTP i zsynchronizować go z wewnętrznym zegarem ESP8266 (jak ten, którego używasz z millis(), jeśli jesteś facetem z Arduino).
  • Narodziny i zgonyWyliczymy liczbę urodzeń i zgonów od początku dnia (Dzięki Klientowi NTP można łatwo uzyskać liczbę sekund od początku dnia). Wykorzystałem światowe wskaźniki urodzeń i zgonów z ekologii.

Krok 3: Skonfiguruj oprogramowanie

Skonfiguruj oprogramowanie
Skonfiguruj oprogramowanie

Użyjemy Arduino IDE, aby przesłać nasz program do NodeMCU. Możesz pobrać i zainstalować najnowsze Arduino IDE z ich oficjalnej strony:

Przed rozpoczęciem musisz skonfigurować Arduino IDE dla Nodemcu. Nie powiem ci tutaj kroków, ponieważ może to być nie na temat. Ale możesz postępować zgodnie z instrukcjami i wyjaśnieniami tego doskonałego instruktażu.

Nasz program ma pewne zależności biblioteczne. Co to jest zależność oprogramowania?

Zależność to szerokie pojęcie inżynierii oprogramowania używane w odniesieniu do sytuacji, w której część oprogramowania opiera się na innym.

Oto lista bibliotek Arduino, które musisz mieć na swoim komputerze, aby móc skompilować program Personal Assistant:

  • ArduinoJson
  • DFRobotDFPlayerMini
  • Klient NTPC

Możesz je pobrać jeden po drugim z ich strony Github, a następnie rozpakować pliki zip do katalogu biblioteki Arduino. Jego ścieżka w twoim systemie to: C: / Users [nazwa użytkownika] Documents / Arduino

Napisałem bibliotekę, aby utrzymać kod w czystości i uniknąć złożoności. Pobierz plik PersonalAssistant-Library.zip i rozpakuj go do katalogu biblioteki Arduino. Tak jak to, co zrobiłeś wcześniej dla tych trzech bibliotek.

Plik YahooWeather.php

Ponieważ ESP8266 nie jest wystarczająco wydajny, aby wykonywać algorytmy haszujące, nie możemy używać go bezpośrednio do wysyłania żądań HTTP do interfejsu Yahoo Weather API, opartego na standardach OAuth. Dlatego użyjemy pliku między naszym urządzeniem a interfejsem Yahoo Weather API. Możesz pobrać plik YahooWeather.zip, rozpakować go i umieścić plik YahooWeather.php na serwerze WWW. Na przykład, jeśli twoja domena to example.com i umieścisz plik w katalogu api, twój punkt końcowy api stanie się example.com/api/YahooWeather.php Do tego punktu końcowego będziesz wysyłać żądania danych o pogodzie.

Szkic programu i FFS (system plików Flash)

Twoja płyta NodeMCU ma system plików flash o wielkości 4 MB do przechowywania danych. Tak więc, kiedy go mamy, dlaczego z niego nie skorzystać?

Pamiętasz, jak powiedziałem, że nasze urządzenie ma dwa interfejsy użytkownika? Oprócz tego samotnego przycisku, nasz drugi interfejs użytkownika to prosta aplikacja internetowa. Dzięki tej aplikacji możesz manipulować kolejką operacji włączając/wyłączając każdy moduł, zmieniając ustawienia usługi lub konfigurację urządzenia, np. ustawiając SSID WiFi i hasło. Będziemy przechowywać wszystkie te pliki w NodeMCU Flash File System i uruchomimy lekki serwer sieciowy do obsługi żądań użytkowników z ich przeglądarki internetowej.

Edycja pliku konfiguracyjnego

Pobierz plik PersonalAssistant-Sketch.zip i rozpakuj go gdzieś na swoim komputerze. Otwórz plik config.json, który znajduje się:

PersonalAssistant/data/config.json

Możesz użyć dowolnego edytora tekstu lub kodu, takiego jak notatnik, notepad++, Atom itp. Plik jest strukturą danych json, więc jest to para klucz / wartość czytelna dla człowieka i możesz ją łatwo edytować. Możesz zmienić te pola:

  • Gmail

    • nazwa użytkownika: Twoja nazwa użytkownika Gmaila z @gmail.com
    • hasło: Twoje hasło do Gmaila
  • Pogoda
    • woeid: lokalizacja, dla której chcesz otrzymywać informacje o pogodzie. WOEID (identyfikator Where On Earth) to identyfikator referencyjny używany przez Yahoo do lokalizacji. Możesz przeprowadzić wyszukiwanie w lokalizacjach WOEID pod tym linkiem.
    • api: to punkt końcowy API. Link do Twojego pliku yahooweather.php.
    • appId, consumerKey i consumerSecret: aby uzyskać dostęp do interfejsu Yahoo Weather API, musisz utworzyć projekt na stronie programistów Yahoo. W ten sposób otrzymasz klucz klienta i klucz tajny, które są potrzebne do korzystania z interfejsu API. Aby rozpocząć, odwiedź stronę Yahoo Weather Developer i utwórz aplikację.
  • Strefa czasowa

    strefa czasowa: wprowadź strefę czasową na podstawie Twojej lokalizacji. Może to być dodatnia lub ujemna liczba zmiennoprzecinkowa, a jej jednostką są godziny

  • Wi-Fi

    • ssid: identyfikator SSID Twojej sieci.
    • hasło: hasło sieciowe. NodeMCU użyje identyfikatora ssid i hasła, aby połączyć się z siecią Wi-Fi.

Przesyłanie szkicu programu i danych FFS

Podłącz NodeMCU do komputera za pomocą kabla micro-USB do USB.

Teraz otwórz plik PersonalAssistant.ino, który znajduje się:

Osobisty Asystent/PersonalAssistant.ino

W Arduino IDE, z Tools > Board, wybierz NodeMCU 1.0 (moduł ESP-12E). W menu Tools > Port wybierz odpowiedni port. Reprezentuje twój NodeMCU.

Teraz wybierz Narzędzia > Przesyłanie danych szkicu ESP8266, spowoduje to przesłanie zawartości folderu danych do ESP8266. Poczekaj kilka chwil, aż się skończy. Następnie wybierz Szkic> Prześlij lub po prostu naciśnij przyciski Ctrl + U na klawiaturze, aby rozpocząć przesyłanie programu. Poczekaj, aż zobaczysz komunikat „przesyłanie zostało zakończone”.

Krok 4: Skonfiguruj kartę Micro SD

Używamy karty micro SD do przechowywania fragmentów plików MP3. To NodeMCU decyduje, który plik ma zostać odtworzony w jakim czasie, a DFPlayer Mini pomaga mu w ułożeniu sensownego zdania poprzez dekodowanie plików MP3.

Użyłem Amazon Polly do wygenerowania potrzebnych fragmentów głosowych.

Amazon Polly to usługa, która zamienia tekst w realistyczną mowę, umożliwiając tworzenie aplikacji, które mówią, i budowanie zupełnie nowych kategorii produktów obsługujących mowę.

Nie zapominaj, że nasze urządzenie nie używa Amazon Polly API do dynamicznego mówienia. Mamy kilka statycznych fragmentów głosowych offline, a łącząc je, tworzymy różne zdania.

Użyłem tej strony do generowania plików MP3. Wybrane przeze mnie wyjście głosowe to angielski amerykański / Salli.

Jedyne, co musisz zrobić, to pobrać plik microSD.zip, a następnie rozpakować go na kartę micro SD. Zawiera wszystkie 78 wymaganych plików MP3.

Prawdopodobnie twoja karta Micro SD jest dostarczana z adapterem. Możesz włożyć kartę Micro SD do adaptera i podłączyć ją do laptopa. Jeśli komputer nie obsługuje odczytu kart, należy użyć zewnętrznego czytnika kart.

Krok 5: Projektowanie schematów i konfiguracja płytki drukowanej

Projektowanie schematów i konfiguracja płytki drukowanej
Projektowanie schematów i konfiguracja płytki drukowanej
Projektowanie schematów i konfiguracja płytki drukowanej
Projektowanie schematów i konfiguracja płytki drukowanej
Projektowanie schematów i konfiguracja płytki drukowanej
Projektowanie schematów i konfiguracja płytki drukowanej
Projektowanie schematów i konfiguracja płytki drukowanej
Projektowanie schematów i konfiguracja płytki drukowanej

Zaprojektowałem schemat i tablicę za pomocą Autodesk EAGLE. W PersonalAssistant-PCB.zip umieściłem zarówno pliki SCH, jak i BRD. Możesz łatwo edytować i / lub wysłać go do lokalnego lub internetowego producenta PCB, aby zamówić i otrzymać swoją płytkę.

Jeszcze jedną rzeczą, o której należy wspomnieć, jest to, że ESP8266 działa w 3.3v, podczas gdy DFPlayer Mini działa w 5v. Ponieważ te dwa moduły muszą komunikować się ze sobą przez interfejs szeregowy, nie możemy bezpośrednio podłączyć wyjścia 5 V do wejścia 3,3 V, ponieważ może to spowodować uszkodzenie ESP8266. Więc będziemy potrzebować konwersji poziomów z 5v na 3,3v. Aby tak się stało, używamy diody sygnałowej i rezystora 10K.

Krok 6: Przylutuj to

Przylutuj to
Przylutuj to
Przylutuj to
Przylutuj to

Montaż płyty jest dość prosty, ponieważ masz kilka elementów. Postępuj zgodnie z projektami schematów i plansz w kroku 5, aby łatwo umieścić każdy element we właściwym miejscu.

Zacząłem od przylutowania rezystorów i diody, bo są małe. Zbędne ogonki można łatwo wyciąć za pomocą przecinaka do drutu. Od góry do dołu należy umieścić rezystor 1K, 10K i 10K.

Nie musisz lutować wszystkich pinów NodeMCU i DFPlayer Mini na płytce drukowanej. Wystarczy przylutować piny ze ścieżką.

Nie zapominaj, że głośniki i diody mają polaryzację. W swoich komponentach masz jeden głośnik i jedną diodę. W przypadku diody strona z czarną linią jest jej stroną ujemną lub katodą.

Krok 7: Obudowa

Załącznik
Załącznik
Załącznik
Załącznik
Załącznik
Załącznik

Postanowiłem zaprojektować fantazyjną obudowę w kreatywny sposób. Podczas projektowania martwiłem się o jego dziwny kształt, ale na koniec nie było tak źle. Przynajmniej wygląda jak fortepian i świetnie się trzyma w dłoni!

Zamiast klasycznego sześcianu sześciennego z 6 ścianami zaprojektowałem wielowarstwową obudowę. Od dołu do góry każda warstwa kładzie się na swojej dolnej warstwie. (nazwałem je od L0 do L6, od dołu do góry)

Kolory i grubość

Aby uzyskać najsilniejszy kontrast, możesz użyć dwóch uzupełniających się kolorów, takich jak:

  • Czerwone i zielone
  • Niebieski i pomarańczowy
  • Żółty i fioletowy
  • Niebieski i żółty

Do wykonania wierzchniej warstwy użyłem przezroczystego akrylu, dzięki czemu można zajrzeć do wnętrza urządzenia.

Grubość warstwy wierzchniej (warstwa-6) powinna wynosić 2 mm. Grubość pozostałych warstw (warstwa-0 do warstwy-5) powinna wynosić 4 mm. Jeśli chcesz zastosować osłonę z akrylu 2,8 mm, tak jak ja, nie ma problemu. Ale musisz wyciąć dwie serie z warstwy 1 i warstwy 3, aby uzyskać przesunięcie.

Aby zmontować obudowę, zacznij od dolnej warstwy (L0). Połóż na nim deskę, użyj krótszych śrub i dokręć ją za pomocą nakrętek. Możesz teraz przymocować cztery dłuższe śruby od spodu warstwy-0. Coś jak wieża. Następnie możesz łatwo kontynuować montowanie na nich innych warstw.

Uwaga: Możesz użyć opcjonalnej podkładki między dolną warstwą a płytą.

Dodałem również teksty informacyjne dla portów urządzenia (zasilanie i karta micro SD). Możesz użyć grawerowania laserowego na wierzchniej warstwie.

Dołączyłem zarówno formaty plików CDR, jak i DXF. Możesz je pobrać, edytować i używać do cięcia laserowego.

Krok 8: Dostęp do internetowego interfejsu użytkownika

Dostęp do internetowego interfejsu użytkownika
Dostęp do internetowego interfejsu użytkownika

Włącz urządzenie

Urządzenie można zasilić dowolną ładowarką micro USB 5V. Podłącz micro USB do portu zasilania urządzenia, czyli wejścia micro USB w NodeMCU.

Uzyskaj dostęp do interfejsu użytkownika

Czy pamiętasz, że przesłaliśmy jakieś pliki do systemu plików Flash ESP8266? Czas to wykorzystać. Wszystko czego potrzebujesz to adres IP przypisany do ESP8266 w sieci. Istnieje wiele różnych sposobów na znalezienie adresu IP. Poniżej wymienię niektóre z nich:

  • Na stronie konfiguracji routera, gdzieś na liście dzierżaw DHCP, możesz zobaczyć listę urządzeń wraz z ich adresami IP w sieci.
  • W Microsoft Windows i macOS możesz uruchamiać polecenia takie jak arp -a w terminalu.
  • W systemach Android i iOS możesz korzystać z aplikacji takich jak Fing. (Android / iOS)
  • W Linuksie możesz używać narzędzi takich jak Nmap.

Po znalezieniu adresu IP otwórz go za pomocą przeglądarki internetowej. Możesz manipulować kolejką operacji poprzez włączanie/wyłączanie modułów.

Krok 9: Końcowe myśli

Ten projekt był bardzo czasochłonny i energochłonny. Możesz dodać o wiele więcej opcji do osobistego asystenta. Niektóre części zostawiłem otwarte na dalszy rozwój. Niektóre części, takie jak:

  1. Dodanie kolejnych usług i modułu. Na przykład liczenie liczb, rzucanie kostką lub rzucanie monetą.
  2. Po podłączeniu do sieci urządzenie może wypowiedzieć adres IP. Możesz dodać tę opcję, aby uprościć proces wyszukiwania adresu IP.
  3. Dodanie możliwości zmiany ustawień WiFi w internetowym panelu sterowania.
  4. Dodanie możliwości zmiany ustawień serwisu w webowym panelu sterowania. (Ich formularz html jest gotowy. Musisz obsłużyć prośby)
  5. Dodanie większej liczby odpowiedzi głosowych w różnych stanach urządzenia.
  6. Dodanie strony logowania do internetowego panelu sterowania. Możesz to zrobić, dodając / porównując pliki cookie w wierszach nagłówka

I chciałbym poznać twoje pomysły na ten instruktaż.:)

Zalecana: