Kontrolowanie ESP przez Google Assistant

Wstęp

Całość kursu na YouTube w języku angielskim, wszystkie kroki będą opisane w tym kursie.

W tym prostym przykładzie będziemy przez Asystanta Google sterować:

  • diodą led – włączanie/wyłączanie czyli poprostu przesyłanie wartości boolean z Asystanta Google do ESP
  • serwo mechanizmem – po komendzie głosowej serwo mechanizm przesunie się na odpowiednią pozycję – czyli przesyłaną wartość liczbową z Asystanta Google do ESP

Założenia

Wykorzystamy IFTTT i RemoteMe. W IFTTT możemy w łatwy sposób dodać komendy głosowe do swojego Asystenta Google, który wywoła “triggera” w IFTTT, a ten wywoła zapytanie http do zmiany zmiennej w RemoteMe. Zamiana RemoteMe zostanie przekazana do nasłuchującego urządzenia ESP, a to wykona odpowiednią czynność bazując na otrzymanej zmiennej.

Zaczynamy

RemoteMe

Asystant Google będzie sterował dwoma zmiennymi

  • typu boolean – do diody LED
  • typu integer – do servo Mechanizmu

Po dodaniu zmiennych ESP będzie je “obserwować” czyli każda zmiana zmiennej dokonana przez Asystant Google będzie wywoływała odpowiednie funkcje na ESP.

Dodawanie zmiennych:

Nazwa zmiennej Boolean to RELAY_01 – taka zmienna pozwoli później sterować zmienną przez aplikacja na anrdoidzie. Więcej o zmiennych tutaj

Identycznie tworzymy zmienną serwo o nazwie “servo” i typie integer. Po dodaniu otrzymamy:

Teraz musimy zaimplementować obsługę zmiennych po stronie ESP

ESP

Połączenia

  • Anoda diody do D5 katoda przez opornik do masy
  • Serwo Mechanizm
    • zasilanie 5V
    • masa do masy ESP
    • przewód kontrolujący do D1 (upewnij się, że Wasze serwo może być podpięte do ESP, które ma 3.3V, jeżeli nie – zastosuj konwerter stanów)

po stronie ESP, gdy zmienimy zmienną RELAY_01 albo servo, ESP wysteruje odpowiednio diodę albo serwomechanizm.

Zaczniemy od wygenerowania kodu z potrzebnymi funkcjami do obsługi funkcji.

Aby dodać urządzenie do RemoteMe, przechodzimy do zakładki “Devices” następnie “New Device” i “New Network Device” w oknie wpisujemy:

i klikamy Submit. Więcej o urządzeniach tutaj

Aby, wygenerować kod klikamy Burger Menu i “Code Generator Wizard”:

W pierwszym kroku zaznaczamy wszystkie zmienne, wygeneruje to odpowiedni kod gdzie będą utworzone funkcję do obługi zmeinnych ( w szczególności funkcje które zostaną wywołane po zmianie wartości zmiennych) więcej o kreatorze tutaj 

W kroku drugim wpisujemy nazwę naszej sieci i hasło do niej (możemy nic nie wpisywać i uzupełnić potem w kodzie).

W ostatnim kroku wyświetlamy wygenerowany kod i wklejamy do Arduino IDE. Poniżej kod uzupełniony o implementację sterowania serwo mechanizmu i diodą led.

Nowe linie zaznaczone //ADDED

biblioteka do sterowania serwo mechanizmem — musi być wcześniej dodana, tak samo jak bilbioteki do RemoteMe więcej  tutaj

Funkcja wywoływane, gdy Asystant Google zmieni nasze zmienne.

ustawienie odpowiednio serwo mechanizmu i pinów do kontrolowania diodą led.

Tak zmodyfikowany kod wgrywamy do naszego ESP.

Testowanie

Nasze ESP po wgraniu kodu połączy się z RemoteMe:

a po przejściu do zakładki zmienne ( variables ) i rozwinięciu ich:

ESP – w zmiennych oznacza, że nasze urządzenie nasłuchuje na zmiany zmiennych.

zmieńmy zatem zmienne i zobaczmy czy dioda i serwo mechanizm zareaguje odpowiednio. Z burger menu wybieramy opcje “Set…”

I w oknie które się pojawi zmieniamy wartość zmiennej i klikamy Submit. Nasza dioda i serwo mechanizm zareaguje.

Generowanie linków do zmiany zmiennych

IFTTT będzie podobnie jak zrobilismy to funkcją “Set…” zmieniać wartość zmiennej, jednak IFTTT będzie to robić poprzez odpowiednie wywołanie zapytania http. Wygenerujmy prosty link do wywołania metodą GET:

Z burger menu zmiennej klikamy na “Generate Set Variable Link” :

wygenerowany link :

Po skopiowaniu linku i otwarciu go w przeglądarce (nawet w trybie incognito – gdzie nie jesteśmy zalogowani nasza dioda zgaśnie, w URL jest jeden z naszych tokenów dlatego działa nawet wtedy, gdy nie jesteśmy zalogowani)

Żeby wygenerować link do zaświecenia diodą – zmieniamy “boolean” na włączony i klikamy “Generate” dostaniemy link po wywołaniu którego nasza dioda się zaświeci.

IFTTT

Stwórzmy zatem Applet do sterowania głosowego

  1. dodanie Asystant Google z komendą “turn light on”
  2. dodanie połączonego “Webhooka”, który wywoła odpowiednie zapytanie na RemoteMe, podobnie jak linki z przykładu powyżej włączy diodę.

 

w IFTTT przechodzimy do My Applets, następnie New Applet, po kliknięciu na  “+this”

wybieramy Google Assistant:

A następnie “Say a simple phrase”, uzupełniamy:

(Uwaga frazy takie jak “turn light on” mogą być już przypisane do domyślnej komendy w Asystencie Google- więc gdy po wywołaniu komendy głosowej otrzymamy inna odpowiedź niż “OK preforming action” musimy wybrać inna komendę głosową )

i klikamy create trigger, następnie klikamy “+ that” i wybieramy webhooks:

i “Make a web Request” i uzupełniamy danymi wygenerowanymi z RemoteMe

wygenerujmy link :

w tym przypadku wybraliśmy opcje “use Post Method” (metoda POST jest bardziej elegancka do zmiany stanów zmiennych niż metoda GET ) i wygenerowaliśmy link i zawartość zapytania POST, który włączy diodę led

po wklejeniu do naszego webhook powinien on wyglądać następująco:

(nie zzapomnijciezmienić Method na POST i Content Type na application/json)

klikamy create action i finish. Po chwili, gdy nasze konto na Google Assistant się zaktualizuję, możemy wypowiadając “ok google, turn on ligh” włączyć naszą diodę.

Identycznie tworzymy akcje dla słowa “turn off light” pamiętając o wygenerowaniu linka w remoteMe z opcją “boolean” ustawioną na false. Teraz możemy włączać i wyłączać diodę za pomocą Asystanta Google.

IFTTT – servo

Podobnie jak diodę możemy wygenerować komendę do sterowania serwo mechanizmem, w tym jednak przypadku będziemy wypowiadali w komendzie numer, który będzie odpowiednio rozpoznawany.

Tworzymy nowy applet podobnie jak poprzednio, ale teraz w google assystant wybieramy “Say Phrase with a number” i uzupełniamy:

w komendzie “Set servo to #” zamiast # powiemy liczbę, która zostanie rozpoznana. Wstawmy URL, modyfikując “body” wygenerowane przez RemoteMe odpowiednim “znacznikiem” po wklejeniu webhook powinen wyglądać następująco:

IFTTT zastąpi w wywołanym jsonie {{NumberField}} przez liczbę wypowiedzianą przez nas do Asystenta Google.

Nasze Applety wyglądają następująco:

i z poziomy Asystenta Google możemy zmieniać naszą diodę i położenie serwo mechanizmu. Na filmie od 10:40 pokazane jest działanie:

Bonus — sterowanie przez stronę internetową

Bardzo łatwo możemy też stworzyć stronę internetową — hostowaną w chmurze RemoteMe do sterowania naszym ESP,

Wybieramy “new Device” , “New WebPage”, uzupełniamy

Po dodaniu rozwijamy stronę internetową, klikamy na index.html i wybieramy “Edit With wizard”

następnie klikamy na Insert Component i uzupełniamy:

właściwość name najlepiej wybrać klikając “lupkę” zminimalizujemy pomyłkę przy wpisywaniu nazwy zmiennej. Po kliknięciu “Insert” dodajmy komponent do sterowania serwo mechanizmem:

po dodaniu zamykamy “wizarda” , klikamy na index.html i wybieramy “Open in new Tab”

przesuwając przełącznikiem  włączamy wyłączamy naszą diodę led, a przesuwając sliderem zmieniamy pozycje serwo mecahnizmu.

Stronę internetową możemy otworzyć na telefonie komórkowym, najprościej zeskanować kod, klikając na index.html -> “Get anymous link” i klikając ikonkę QR kodu, po wyświetleniu QR kodu skanujemy go smartphonem i mamy dostęp do sterowania stroną internetową

Bonus – sterowanie przez aplikacje mobilną

Istnieje aplikacja – dostarczona przez Nguyễn Duy Hiếu dostępna tutaj

Która po podłączeniu do naszego konta umożliwia sterowanie naszą diodą — z zakładki Relays (oczywiście pod warunkiem, że na początku nazwaliśmy naszą zmienna  diody RELAY_01)

 

Podsumowanie

Ten prosty kurs pokazuje podstawy wywoływania zapytań http do zmienienia stanów zmiennych poprzez dowolne aplikacje , czyli np IFTTT.

Zachęcam do stworzenia własnych przykładów 🙂