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)



7 commentaires:

  1. Bonjour,
    J'ai réalisé votre projet en octobre. Tout a marché sans trop de problèmes.
    J'ai voulu recommencer pour un autre projet mais apparemment, Google a changé les méthodes d'édition et de publication. J'ai des messages d'erreur (auxquels je ne comprends rien).
    Je peux vous les communiquer
    Merci d'avance de votre intérêt

    RépondreSupprimer
  2. Bonjour,
    J'ai résolu le problème en revenant à l'ancien éditeur de scripts.

    RépondreSupprimer
  3. Bonjour
    Avez vous une solution pour ne pas avoir a changer le code fingerprint régulièrement ?
    Merci

    RépondreSupprimer
  4. Bonjour MarcVDB
    Je suis dans le même cas que vous
    Tout fonctionnait parfaitement sur ESP32
    Mais c'est fini
    Je suis revenu a l'ancien éditeur de script mais pas de connexion google sur le moniteur série Arduino...des idées ?

    RépondreSupprimer
  5. Super idée, merci pour le partage

    RépondreSupprimer
  6. Pour ceux qui ne veulent pas du fingerprint: https://maakbaas.com/esp8266-iot-framework/logs/https-requests/

    RépondreSupprimer
  7. Super comme solution,
    comment pourrait on faire pour ajouter une nouvelle feuille par journée écouler?

    RépondreSupprimer