ESP32, Blynk et Assistant vocal

L’objectif est de commander vocalement une sortie d’un ESP32. L’idée est d’utiliser des technologies no-code/low-code comme Blynk et IFTTT.

Le moyen le plus simple d’interagir vocalement avec l’ESP32 via Blynk est d’utiliser IFTTT. IFTTT (If This Then That) est un service web gratuit permettant de créer des chaînes d’instruction simples appelées applets. Un applet intègre un déclencheur (This) lié à une action (That). IFTTT fournit un grand nombre de déclencheurs et d’actions.

Les déclencheurs IFTTT pour assurer une commande vocale sont : Google Assistant et Alexa. Il faudra donc trouver une solution pour Siri en utilisant Webhooks.

Autre possibilités

Blynk

Mise en oeuvre de Blynk

Blynk fournit une API HTTP RESTful qui permet de piloter les entrées/sorties de l’ESP32 (ou tout autre système embarqué pris en charge par Blynk comme Arduino, Raspberry Pi, ESP8266, etc …). Il est possible d’utiliser des requêtes GET et/ou PUT :

  • Requête GET pour lire l’état d’une broche (ici D1) : http://blynk-cloud.com/auth_token/get/D1
  • Requête GET pour écrire sur une broche (ici D1) : http://blynk-cloud.com/auth_token/update/D1?value=1
  • Requête PUT pour écrire sur une broche (ici D1) : http://blynk-cloud.com/auth_token/update/D1

Tests (remplacer XXXXXXXX par le token d’authenfication) :

$ curl -X GET http://blynk-cloud.com/XXXXXXXX/update/D19?value=1
$ curl -X GET http://blynk-cloud.com/XXXXXXXX/update/D19?value=1

$ curl -X PUT -H "Content-Type: application/json" -d '["1"]' http://blynk-cloud.com/XXXXXXXX/update/D19
$ curl -X PUT -H "Content-Type: application/json" -d '["0"]' http://blynk-cloud.com/XXXXXXXX/update/D19

On utilisera cet API HTTP RESTful avec le service Webhooks d’IFTTT pour piloter l’ESP32 via une requête web (Make a web request).

Par contre, il faudra prendre l’adresse du serveur Blynk blynk-cloud.com (car il utilise différents serveurs pour différents pays) :

$ ping -c 1 blynk-cloud.com
PING blynk-cloud.com (139.59.206.133) 56(84) bytes of data.
64 bytes from 139.59.206.133 (139.59.206.133): icmp_seq=1 ttl=50 time=41.2 ms

--- blynk-cloud.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 41.218/41.218/41.218/0.000 ms

Exemple ESP32 avec PlatformIO :

  • platform.ini pour une carte ESP32 wemos et la bibliothèque Blynk :
[env:lolin_d32]
platform = espressif32
board = lolin_d32
framework = arduino
lib_deps =
  blynkkk/Blynk @ ^0.6.7
  • main.cpp :
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

//#define BLYNK_PRINT Serial

char auth[] = "";
char ssid[] = "";
char pass[] = "";

void setup() 
{
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
}

void loop() 
{
  Blynk.run();
}

Google Assistant

Le moyen le plus simple d’interagir avec l’ESP32 via Google Assistant est d’utiliser IFTTT.

IFTTT est un service web gratuit permettant de créer des chaînes d’instruction simples appelées applets.

On va par exemple créer un applet avec un déclencheur sur le service Google Assitant (This) avec une action Webhooks vers l’API HTTP RESTful de Blynk (That) :

Il faut choisir le service Google Assistant :

On sélectionne “Say a simple phrase” :

On complète :

On va ajouter le That :

On sélectionne Webhooks :

On sélectionne “Make a web request” :

On paramètre l’action :

Par contre, il faudra prendre l’adresse du serveur Blynk blynk-cloud.com (car il utilise différents serveurs pour différents pays) :

$ ping -c 1 blynk-cloud.com
PING blynk-cloud.com (139.59.206.133) 56(84) bytes of data.
64 bytes from 139.59.206.133 (139.59.206.133): icmp_seq=1 ttl=50 time=41.2 ms

--- blynk-cloud.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 41.218/41.218/41.218/0.000 ms
  • Pour une requête GET :
  • Pour une requête PUT :

On termine le processus de création :

On vérifie l’état connected :

Test :

Alexa

Un moyen simple d’interagir avec l’ESP32 via Alexa est d’utiliser IFTTT.

IFTTT est un service web gratuit permettant de créer des chaînes d’instruction simples appelées applets.

On va par exemple créer un applet avec un déclencheur sur le service Alexa (This) avec une action Webhooks vers l’API HTTP RESTful de Blynk (That) :

Il faut choisir le service Alexa :

On sélectionne “Say a specific phrase” :

Il faut se connecter au service Alexa :

On autorise son compte Alexa :

On va ajouter le That en sélectionnant Webhooks :

On sélectionne “Make a web request” :

On paramètre l’action :

Par contre, il faudra prendre l’adresse du serveur Blynk blynk-cloud.com (car il utilise différents serveurs pour différents pays) :

$ ping -c 1 blynk-cloud.com
PING blynk-cloud.com (139.59.206.133) 56(84) bytes of data.
64 bytes from 139.59.206.133 (139.59.206.133): icmp_seq=1 ttl=50 time=41.2 ms

--- blynk-cloud.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 41.218/41.218/41.218/0.000 ms
  • Pour une requête GET :
  • Pour une requête PUT :

On termine le processus de création et on teste.

Siri

Siri n’est pas disponible directement dans IFTTT. Une solution simple est d’utiliser l’application Raccourcis pour iOS ce qui permettra d’envoyer une requête web vers un déclencheur Webhooks d’IFTTT.

IFTTT est un service web gratuit permettant de créer des chaînes d’instruction simples appelées applets.

On va par exemple créer un applet avec un déclencheur Webhooks (This) avec une action Webhooks vers l’API HTTP RESTful de Blynk (That) :

Il faut choisir le service Webhooks :

On crée l’évènement déclencheur :

On va ajouter ensuite le That :

Sélectionner Webhooks :

On sélectionne “Make a web request” :

On paramètre l’action :

Par contre, il faudra prendre l’adresse du serveur Blynk blynk-cloud.com (car il utilise différents serveurs pour différents pays) :

$ ping -c 1 blynk-cloud.com
PING blynk-cloud.com (139.59.206.133) 56(84) bytes of data.
64 bytes from 139.59.206.133 (139.59.206.133): icmp_seq=1 ttl=50 time=41.2 ms

--- blynk-cloud.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 41.218/41.218/41.218/0.000 ms
  • Pour une requête GET :
  • Pour une requête PUT :

On termine le processus de création.

Maintenantil faut aller dans My Services du compte IFTTT :

Puis dans Webhooks :

Et cliquer sur Documentation :

Il faut récupérer sa clé (key) et surtout l’URL en faisant copier/coller :

L’URL https://maker.ifttt.com/trigger/{event}/with/key/XXXXXXXX est nécessaire pour le raccourci que l’on va créer ensuite.

Test :

$ curl -X POST https://maker.ifttt.com/trigger/{event}/with/key/XXXXXXXX

Il faut installer l’application Raccourcis depuis l’Apple Store :

On crée un nouveau raccourci :

Il faut commencer par ajouter une action “Texte” et coller l’URL https://maker.ifttt.com/trigger/{event}/with/key/XXXXXXXX en remplaçant {event} par le nom de l’évènement créé dans IFTTT.

Il faut ensuite ajouter simplement l’action “Obtenir le contenu de l’URL”.

Dans les réglages du raccourci, il est possible de :

  • nommer le raccourci
  • l’ajouter aux widgets
  • ajouter une phrase Siri “Ajouter à Siri” pour personnaliser la commande vocale
  • l’ajouter à l’écran d’accueil

Terminer par OK et tester.