En aquesta practica amb la placa NodeMCU (ESP8266 ), volem publicar les lectures del sensor DH22, de temperatura i humitat a un full de càlcul de Google Sheets.
Publiquem cada 30 minuts al full de càlcul, utilitzant IFTTT.
IFTTT es un servei WEB de tercers, que serveix per integrar el ESP8266 amb Google Sheets.

1.- Placa NodeMCU en mode estació.
2.- Sensor DHT22.
3.- Resistència de 10 KOhm.
4.- IDE de Arduino.
5.- Servei WEB IFTTT.
6.- Full de càlcul de Google Sheets.
https://randomnerdtutorials.com/esp32-esp8266-publish-sensor-readings-to-google-sheets/
El diagrama seqüencial mostra tots el passos que implementem en aquesta practica.

Pas 1.- Connexió del NodeMCU a la nostre WiFi.
Pas 2.- El sensor DHT22 llegeix la temperatura i la humitat.
Pas 3.- El NodeMCU es comunica amb el servei WEB IFTTT, per publicar les lectures de temperatura i humitat a un full de càlcul de Google Sheets. Aquest full de càlcul es guarda en el Google Drive.
Pas 4.- Després de publicar, el ESP8266 es posa en mode Deep Sleep durant 30 minuts.
Pas 5.- Passats els de 30 minuts, el ESP es desperta.
Pas 6.- El ESP al despertar-se connecta amb la WiFi i torna a repetir-se el procés.
Crear un compte de IFTTT.
Entrar en https://ifttt.com
Escriu el e-mail i una contrasenya.

Crear un Applet. Click en Create.
Click en Add.
En el buscador escriu Webhooks.
Click en el icona del servei Webhooks.
Click en Receive a Web request.
Click en Connect.
Posar el nom del event, en el nostres cas posem : Lectura_DHT22
Click en That Add.
En el buscador buscar Google Sheets.
Click Google Sheets.
Click en Add row to speadsheet.
Click Connect.
Escollim el e-mail del compte de IFTTT.
Click en Permet.
<
Escriu el nom del full de càlcul, el format el deixem per defecte i la ruta del Google Drive on es guardarà.
Click en Create action.
Click en Continue.
Click en Finish.
Anar a https://ifttt.com/maker_webhooks
Anar a Documentation.
Tenim la nostre unica key.
Click en Test it. Si anat bé es mostra la seguent pantalla.

Anem a Google Drive.

Obrim el full de càlcul.

El webhook funciona correctament.
Hardware.
Codi.
Temperatura-google-sheets.ino
#include <ESP8266WiFi.h>
#include <Wire.h>
#include "DHT.h"
// Parametres de WiFi
const char* ssid = "mirablau";
const char* password = "Cla1DeCasa";
//IFTTT URL resource
//posem la Key del Webhooks
const char* resource = "/trigger/Lectura_DHT22/with/key/dxBHyOpcrIk149cRnZXcRA";
// Maker Webhooks IFTTT
const char* server = "maker.ifttt.com";
// temps que posem la placa a dormir DeepSleep
// Conversor de segons a micro segons
uint64_t uS_TO_S_FACTOR = 1000000;
// Dormir 30 minuts = 1800 segonds
uint64_t TIME_TO_SLEEP = 1800;
// Paràmetres del DHT
#define DHTPIN D1
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
delay(2000);
// Inicialització del DHT22
dht.begin();
initWifi();
makeIFTTTRequest();
// Deep sleep 1800 segons (30 minuts)
Serial.println("Ara a dormir...");
ESP.deepSleep(TIME_TO_SLEEP * uS_TO_S_FACTOR);
}
void loop() {
//la placa esta dormin, no arribem aqui.
}
// Estableix la connexió Wi-Fi amb el router
void initWifi() {
Serial.print("Connectan a: ");
Serial.print(ssid);
WiFi.begin(ssid, password);
int timeout = 10 * 4; // 10 segons
while(WiFi.status() != WL_CONNECTED && (timeout-- > 0)) {
delay(250);
Serial.print(".");
}
Serial.println("");
if(WiFi.status() != WL_CONNECTED) {
Serial.println("Ha fallat la connexió, a dormir...");
}
Serial.print("WiFi connectat a: ");
Serial.print(millis());
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
// Envia una petició HTTP a IFTTT web service
void makeIFTTTRequest() {
Serial.print("Connectem a ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while(!!!client.connect(server, 80) && (retries-- > 0)) {
Serial.print(".");
}
Serial.println();
if(!!!client.connected()) {
Serial.println("Ha fallat la connexió...");
}
Serial.print("Request resource: ");
Serial.println(resource);
// Temperatura in graus Celsius
String jsonObject = String("{\"value1\":\"") + dht.readTemperature()
+"\",\"value2\":\"" + (dht.readHumidity()/100.0F)
+ "\"}";
// Comment the previous line and uncomment the next line to publish temperature readings in Fahrenheit
/*String jsonObject = String("{\"value1\":\"") + (1.8 * dht.readTemperature() + 32) + "\",\"value2\":\""
+ (bme.readPressure()/100.0F) + "\",\"value3\":\"" + dht.readHumidity() + "\"}";*/
client.println(String("POST ") + resource + " HTTP/1.1");
client.println(String("Host: ") + server);
client.println("Connection: close\r\nContent-Type: application/json");
client.print("Content-Length: ");
client.println(jsonObject.length());
client.println();
client.println(jsonObject);
int timeout = 5 * 10; // 5 segons
while(!!!client.available() && (timeout-- > 0)){
delay(100);
}
if(!!!client.available()) {
Serial.println("No hi ha resposta...");
}
while(client.available()){
Serial.write(client.read());
}
Serial.println("\nTancan la connecxió");
client.stop();
}
Explicació del codi.
Incluir la unica IFTTT URL resource, que es del tipus següent:
//posem la Key del Webhooks const char* resource = "/trigger/Lectura_DHT22/with/key/**************************#34;;
Definim el sleep time en 30 minuts.
// Deep sleep 1800 segons (30 minuts)
Serial.println("Ara a dormir...");
ESP.deepSleep(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Tenim que tenir present que el servei IFTTT, no accepta dades en períodes curts de temps.
Enviament de la lectura del sensor DHT22.
// Temperatura in graus Celsius
String jsonObject = String("{\"value1\":\"") + dht.readTemperature()
+"\",\"value2\":\"" + (dht.readHumidity()/100.0F)
+ "\"}";
El objecte json que envia es similar al seguent:
{“Value1”:”20”,”Value2”:”0.60”}


El mar.
Havaneres.
Lloret antic.
Lloret avui.
De cala Morisca a Sa Carabera.
De Sa Carabera a Treumal.
Lloret en kayak.
Vígilancia remota.
Caixa-tpv.
Cambrer-app.
Client webApp.
Relats del banc del si no fos
Històries d'ahir
Vídeos antics de Lloret
El caiac
Contes de l'avi.
Control d’accés amb contrasenya.
Orgue de llums.
Comparativa de editors Arduino.
Projecte bon Nadal.
Control de la qualitat del aire interior (CO2) amb semàfor LED.
NodeMCU-ThingSpeak
ThingSpeak.
NodeMCU com AccessPoint.
Control de la llum de casa per web.
Control de un led per el mòbil.
Sistema de fitxers en ESP8266.
Altura del nivell d'aigua.
Avis d’alarma a Telegram.
Control de la intensitat de llum de un LED per Internet.
Magatzematge de temperatura i humitat en Thinger.
Publicar temperatura i humitat en Google Sheets.
ESP8266 i Firebase.
La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega.
ESP32-CAM
ESP32-CAM captura fotos per ser vistes en la WEB.
Pujar fotos a un servidor FTP amb ESP32-CAM.
MicroPython en ESP8266.
Visual Estudio Code per Arduino.
Classificador d’imatges.
Instal·lar i configurar Apache en Ubuntu.
Accés a un servidor Linux remotament.
Client i Servidor FTP.
Màquina virtual UBUNTU.
WindowsXP en Virtualbox.
Multisim, simulador de circuits electrònics.
Proteus, simulador de circuits electrònics.
MySQL. Instal·lació.
MySQL. Aplicacions.
Netbeans Maven MySQL.
Java+Netbeans+Maven+EclipseLink+Mysql
Aplicació d’escriptori JavaFX
App JavaFX amb SceneBuilder
App Java-Swing








Noves tecnologies WEB Arduino Domótica MycroPython NodeMCU IoT Java ESP8266 Lora C++ Programació Server-Client