samedi 9 mai 2020

Écrire dans un document Google Docs avec ESP32 ou ESP8266

Je continue d'explorer l'utilisation des Google Apps Scripts pour établir une connexion entre un ESP32 ou un ESP8266 et les services de Google.

Dans l'expérience d'aujourd'hui, chaque fois qu'on pressera un bouton connecté à l'ESP, l'événement sera consigné à l'intérieur d'un document "Google Docs". Il va sans dire que ce projet pourra facilement être modifié afin de répondre à un besoin plus concret, comme tenir un registre de l'utilisation d'un appareil au moyen d'une carte RFID, etc.

Le circuit

Le circuit est constitué d'un bouton poussoir et d'une résistance pull-up, branché à la broche GPIO 4 d'un ESP8266 ou d'un ESP32. Le bouton est évidemment alimenté avec 3,3 V, le niveau logique des entrées de l'ESP8266 et de l'ESP32.

Schéma du circuit avec un Wemos Mini D1 (pour ce modèle, GPIO 4 est la broche D2):

Schéma du circuit avec un module ESP32:


Création d'un document Google Docs

Nous allons ensuite sur le site Google Docs afin de créer un nouveau document Google Docs dans lequel notre ESP consignera des informations.  Vous pouvez donner à ce document le nom que vous désirez, ça n'aura pas d'importance pour la suite.  Copiez l'URL de ce nouveau document, car nous en aurons besoin dans notre script.

Rédaction d'un Apps Script

Sur le site Google Apps Scripts, nous créons un nouveau projet. Là encore, son nom n'a pas d'importance.


Voici le script à coller dans votre nouveau projet. Attention: il faut remplacer l'URL par celui de votre document Google Docs (ligne 32). Vous pourriez également préférer un autre fuseau horaire pour l'affichage de la date et de l'heure ("Europe/Paris", par exemple, plutôt que "America/Montreal").

-

-

Ce script est constitué de deux fonctions: doGet reçoit les requêtes GET émises par l'ESP et lui retourne un message pour indiquer que tout a bien fonctionné, et ecritDansGoogleDoc se chargera d'ouvrir notre document Google Docs pour y consigner de l'information.

Déploiement du script en application web

Il faut ensuite faire les réglages qui permettront à notre script d'être accessible à partir du web. Pour ce faire, nous sélectionnons "Déployer en tant qu'application Web" dans le menu "Publier" de Google Scripts.


À la question "Who has access to the app", nous répondons "Anyone, even anonymous".


Nous devons ensuite autoriser notre script à jouer dans nos fichiers sur Google Drive...



À la fin du processus, une boîte de dialogue vous confirme le déploiement de votre script, et vous fournit l'URL de votre web app: il est important de copier cette adresse car nous l'utiliserons dans le sketch de l'ESP32 / ESP8266.


Si vous le désirez, vous pouvez tester votre script à partir du navigateur web en ajoutant, à la fin de l'URL de votre web app, les informations suivantes "?func=registre&quoi=bouton".

Rédaction d'un sketch pour l'ESP32 / ESP8266

Il ne reste plus qu'à téléverser dans votre ESP32 ou ESP8266 le sketch qui enverra une requête GET à notre web app chaque fois que nous appuierons sur le bouton.

S'il s'agit de votre première occasion de programmer un ESP32 ou un ESP8266 avec l'IDE Arduino, vous trouverez la marche à suivre ici pour l'ESP32, et ici pour l'ESP8266.

Avant d'utiliser ce sketch, il est important d'y mettre certaines informations importantes:

  • le nom et le mot de passe de votre réseau Wi-Fi (lignes 20 et 21)
  • l'URL de votre application web (ligne 77)
  • si vous utilisez un ESP8266: le fingerprint SHA1 de votre app script (ligne 27)

Pour récupérer ce fingerprint SHA1, allez sur la page de votre feuille de calcul ou de votre script avec un navigateur web, cliquez sur le cadenas à gauche de l'URL, et visionnez le certificat de sécurité de google.com. Copiez les octets correspondant au fingerprint SHA1 et copiez-le dans votre sketch. Cette information n'est pas nécessaire si vous utilisez un ESP32.


-

-

Si tout fonctionne correctement, le message "On a osé appuyer sur le bouton!!!, suivi de la date et de l'heure, s'affiche dans votre document Google Docs chaque fois que vous appuyez sur le bouton.

À lire aussi:

Dans un projet très similaire, nous avons consigné dans un document Google Sheets les mesures d'un capteur branché à l'ESP32 ou à l'ESP8266. Vous serez peut-être intéressés à consulter la liste des projets impliquant l'ESP32 ou l'ESP8266.

Yves Pelletier (TwitterFacebook)

Dans un blog près de chez vous...(10)


Encore un peu de lecture...

RitonDuino

Arduiblog

Papsdroid

IDEHack

MCHobby

Bidouille2Geek

SLMédiation

Framboise 314

Yves Pelletier (TwitterFacebook)

dimanche 3 mai 2020

Envoi de données de l'ESP32 / ESP8266 vers Google Sheets

Cet article, initialement publié le 3 mai 2020, a été mis à jour le 21 décembre 2021 pour tenir compte de certains changements dans Google Sheets (il semble maintenant nécessaire d'utiliser l'ancien éditeur de script pour que ça fonctionne).

Dans ce tutoriel, un ESP32 ou un ESP8266 va envoyer des données vers une feuille de calcul Google Sheets. De cette façon, les données pourront s'accumuler sans qu'on ait à  se préoccuper de l'espace mémoire nécessaire, et nous pourrons les consulter à partir de n'importe quel appareil branché à  internet.

J'ai constaté que la plupart des tutos disponibles sur le web préconisent l'utilisation d'un site web intermédiaire comme par exemple IFTTT ou Temboo, en prétextant que ça simplifie les choses, surtout en ce qui concerne l'établissement d'une connexion sécurisée.

J'admets que c'est un tout petit peu plus compliqué, mais j'ai préféré utiliser une méthode sans intermédiaire: notre microcontrôleur enverra une requête "GET" qui sera traitée par un "Google app script" lié à notre feuille Google Sheet. Étant totalement néophyte dans l'art d'écrire ce genre de script (basé sur le langage javascript), j'ai utilisé, comme point de départ, cet article du blog Electrosome.

Créer une feuille Google Sheets

J'imagine qu'il n'est pas nécessaire que j'insiste outre mesure sur la nécessité d'être détenteur d'un compte Google pour réussir ce tuto... Nous allons donc sur le site de Google Sheets afin de créer une nouvelle feuille de calcul.  Vous lui donnez le nom que vous voulez et vous pouvez, si vous le désirez, écrire le nom de chaque colonne sur la première ligne


Puisque certaines des données envoyées par l'ESP seront des nombres comportant un point décimal, je dois régler ma feuille pour qu'elle utilise le point plutôt que la virgule (menu Fichier, "Paramètres").



Dans mon cas, j'ai remplacé le réglage par défaut "Canada (français)", basé sur la virgule, à "Canada (anglais)", basé sur le point. Bien entendu, ce réglage n'est pas nécessaire si votre ESP n'envoie que des nombres entiers.



Création d'un App Script

Nous allons maintenant créer le script qui gérera les messages émis par l'ESP:  menu Extensions / Apps Script .

Votre navigateur va alors ouvrir un script vide sur le site "script.google.com".  À cette étape, il est très important de cliquer sur le lien "Utiliser l'ancien éditeur" situé en haut à droite de la fenêtre.





Vous donnez à votre projet le nom que vous voulez, et vous copiez le code situé ci-dessous.



Voici le script complet:

-
-

Ce script comporte deux fonctions:  doGet reçoit les requêtes GET émises par l'ESP et lui retourne un message pour indiquer que tout a bien fonctionné, et add_data ajoute dans la feuille de calcul les nouvelles données reçues à l'intérieur de la requête GET.

Attention: vous devez modifier l'URL de la feuille de calcul sur la première ligne de la fonction add_data: il faut y placer l'URL de la feuille de calcul que nous venons de créer.

De plus, pour l'affichage de la date et de l'heure, j'ai utilisé "America/Montreal". Si vous habitez en France, vous préférerez probablement remplacer ça par "Europe/Paris".

Déploiement du script en application web

Nous allons maintenant faire en sorte que ce script soit accessible à partir du web: il s'agit du menu Publier - Déployer en tant qu'application Web...


À la question "Who has access to the app", nous sélectionnons "Anyone, even anonymous".


À partir de là, Google panique un peu et vous demande de confirmer que vous accordez à ce script non-vérifié la permission de jouer dans vos fichiers.










Finalement, une dernière boîte de dialogue vous fournit l'URL de notre application web: il est important de la copier, car nous en aurons besoin dans le sketch de l'ESP32 / ESP8266.


Notez que chaque fois que vous apporterez une modification à votre script, il sera nécessaire de le "redéployer" en tant qu'application web, en prenant bien soin de régler "Project version" à "Nouveau". Sinon, c'est l'ancienne version non-modifiée qui continuera de s'exécuter.

Test du script

Si vous le désirez, vous pouvez immédiatement vérifier le fonctionnement correct de votre script directement dans le navigateur web en ajoutant 
"?func=addData&val1=10&val2=20" à la fin de l'URL de votre script.

Ça devrait avoir pour effet d'ajouter une ligne à votre feuille de calcul.



Programmation de l'ESP32 ou de l'ESP8266

Il ne nous reste plus qu'à programmer notre ESP32 ou notre ESP8266. Pour ce faire, nous utilisons l'IDE Arduino et vous pouvez, au besoin, vous référez des précédentes publications pour voir comment procéder: ESP32 ou ESP8266.

Puisque le présent tutoriel porte sur la communication avec Google Sheets et non sur l'utilisation d'un capteur en particulier, j'ai choisi de transmettre deux valeurs obtenues au moyen d'une équation mathématique. Bien entendu, dans une application réelle, il serait plus pertinent de transmettre une ou plusieurs valeurs mesurées au moyen de capteurs branchés à l'ESP (température, luminosité, etc.).  Ces valeurs sont calculées aux lignes 68 et 69, puis intégrées à l'URL de notre requête GET sous les noms de val1 et val2 (ligne 72).

Ici encore, vous devrez modifier certaines informations dans le sketch avant de pouvoir l'utiliser:

  • le nom et le mot de passe de votre réseau Wi-Fi (lignes 17 et 18)
  • l'URL de votre application web (ligne 72)
  • si vous utilisez un ESP8266: le fingerprint SHA1 de votre app script (ligne 24)

Pour récupérer ce fingerprint SHA1, allez sur la page de votre feuille de calcul ou de votre script avec un navigateur web, cliquez sur le cadenas à gauche de l'URL, et visionnez le certificat de sécurité de google.com. Copiez les octets correspondant au fingerprint SHA1 et copiez-le dans votre sketch.





---

---

Résultat

Pendant l'exécution du sketch, toutes les 10 secondes, une nouvelle ligne s'ajoute dans la feuille de calcul.


À lire aussi:

Pour consigner des événements qui ne se destinent pas à un traitement mathématique, vous préférerez peut-être écrire dans un document Google Docs avec l'ESP32 ou l'ESP8266. Vous serez peut-être intéressés à consulter la liste des projets impliquant l'ESP32 ou l'ESP8266.

Yves Pelletier (TwitterFacebook)