Bonjour,
matériel : ESP8266.
Le but : envoyer des mesures de température, de pression ou autre sur une feuille google sheet (pour ensuite faire des graphiques).
Je n'ai pas de shield pour une SD et je voudrais que les valeurs soient disponibles délocalisées.
/*
* L'ESP32 ou ESP8266 envoie des données vers Google Sheets
*
* Pour plus de détails:
* https://electroniqueamateur.blogspot.com/2020/05/envoi-de-donnees-de-lesp32esp8266-vers.html
*
*/
#if defined ARDUINO_ARCH_ESP8266 // s'il s'agit d'un ESP8266
#include <ESP8266WiFi.h>
#elif defined ARDUINO_ARCH_ESP32 // s'il s'agit d'un ESP32
#include "WiFi.h"
#endif
#include <WiFiClientSecure.h>
const char *ssid = "*****"; // à remplacer par le nom de votre réseau WiFi
const char *password = "*****"; // à remplacer par le mot de passe WiFi
const char* host = "script.google.com";
//const char* host = "google.com";
String url;
//à remplacer par le fingerprint SHA1 de votre App Script
// utile pour l'ESP8266 mais pas pour l'ESP32
const char fingerprint[] PROGMEM = "alors là je ne suis pas sur";
int compteur = 0;
void setup()
{
Serial.begin(115200);
delay(100);
Serial.println();
Serial.println();
Serial.print("Connexion a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connecte");
}
void loop()
{
Serial.print("Connexion a ");
Serial.println(host);
//WiFiSSLClient client;
WiFiClient client;//Secure
// ligne commenté WiFiClientSecure client;
const int httpPort = 80;//443;
#if defined ARDUINO_ARCH_ESP8266 // s'il s'agit d'un ESP8266
// client.setFingerprint(fingerprint);
#endif
if (!client.connect(host, httpPort))
{
Serial.println("Echec de la connexion");
delay(10000);
return;
}
float mesure = 5.0 * sin(compteur / 20.0) * sin(compteur / 50.0); // calcul d'une valeur à envoyer
compteur++;
// à remplacer par l'url de votre web app:
//url = " /macros/s/******/exec?func=addData&val1=" + String(mesure) + "&val2=" + String(compteur);
url ="https://script.google.com/macros/s/A****/exec?func=addData&val1=5&val2=5";//" + String(mesure) + "&val2=" + String(compteur);
Serial.print("URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(500);
String section = "header";
while (client.available())
{
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println("Fermeture de la connexion.");
delay(10000); // on envoie les prochaines données dans 10 secondes
}
Voilà le code que j'utilise. J'ai remplacé les informations sensibles par ** ou ??. ?? c'est parce que je ne suis pas sur.
Sur une page web, en navigation privée, si je copie la ligne 76 j'ajoute une ligne à mon fichier Google.
Si je lance le script sur mon ESP j'ai
0:04:38.133 -> .............
10:04:45.395 -> WiFi connecte
10:04:45.395 -> Connexion a script.google.com
10:04:45.442 -> URL: https://script.google.com/macros/s/****/exec?func=addData&val1=5&val2=5
10:04:45.949 -> HTTP/1.1 400 Bad Request
10:04:45.949 -> Content-Type: text/html; charset=UTF-8
10:04:45.949 -> Referrer-Policy: no-referrer
10:04:45.949 -> Content-Length: 1555
10:04:45.949 -> Date: Sat, 18 Dec 2021 09:04:42 GMT
10:04:45.949 -> Connection: close
10:04:50.966 ->
10:04:50.966 ->
10:04:50.966 ->
10:04:50.966 ->
10:04:50.966 ->
10:04:50.966 -> Error 400 (Bad Request)!!1
10:04:50.966 ->
10:04:50.966 -> {margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px} > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
10:04:51.060 ->
10:04:51.060 ->
10:04:51.060 ->
400. That’s an error.
10:04:51.060 ->
Your client has issued a malformed or illegal request. That’s all we know.
10:04:51.107 -> Fermeture de la connexion.
Mes maigres compétences sont déjà dépassées, est ce que quelqu'un peut m'aider?
J'espère que explications sont suffisamment claires, n'hésitez pas à me demander plus de détail sinon.
Moderateur : je suis désolé mais je ne comprend pas comment formater mon texte correctement.