Estudiem com tant la placa ESP8266 com la ESP32 envia les lectures del sensor BME280 de temperatura, humitat i pressió a la base de dades de Firebase.
Com instal·lar el editor VS-Code i com configurar-lo per treballar amb Firebase cal consultar la pagina de tresavis.cat:
https://tresavis.cat/VS-Code-Arduino.phpPer iniciar-se en Firebase i com programar la ESP8266 per interactuar amb la base de dades, consultar:
https://tresavis.cat/esp8266-firebase.phpUsarem la comunicació I2C de la placa amb el sensor BME280.
ESP8266 BME280
D1 SCL
D2 SDA
Esquema obtingut amb la aplicació de:
https://circuito.io
1. La placa ESP s’autentifica en Firebase amb el email i la contrasenya.
2. La ESP rep el user UID.
3. La ESP pot publicar dades de temperatura, humitat i pressió a la base de dades.
El 5 primers punts ja els tenim resolts en la practica anterior en:
https://tresavis.cat/esp8266-firebase.phpTornarem a implementar tots el passos, creant un nou projecte.
En el punt 6, per enviar les lectures del sensor a Firebase, programarem la placa ESP amb el editor VS-Code.
Per instal·lar i configurar el editor VS Code consultar:
https://tresavis.cat/VS-Code-Arduino.phpClic en “Comenzar”.
Clic en “Agregar proyecto”.
Posem nom al projecte: ESP-BME280-Firebase
Des-habilitem Google Analytic per aquest projecte.
Clic en “Crear Proyecto”.

Clic en Continuar.
Ja estem en la consola de Firebase.
Per poder autenticar-se amb el mail i contrasenya tenim que configurar el mètode, perquè la placa pugui pujar les dades al núvol.
Clic en “Agregar proyecto”.
En la consola de Firebase a l’esquerra, clic en “authentication” > ”Comenzar”
Escollim l’opció: “Correu/Contrasenya”.
Habilitar "correu/Contrasenya" i clic en "Guardar".
Ja tenim el mètode habilitat. Ara tenim que afegir un usuari.
Clic en “Users” i en “Afegir un usuari”.
Podem posar el mateix mail en que hem entrat en Firebase o un altre diferent amb una contrasenya que tenim que recordar perquè la necessitarem mes tard.
La tenim el usuari creat:
Copiem el UID del usuari, que servirà per logejar-se.
P8VEq8C9PPhmqS75O5YVrbymrKp1Clic en “Descripción general” > ”Configuración del proyecto”
En la consola de Firebase a l’esquerra, clic en “authentication” > ”Comenzar”
Copiem el API Key.
API Key: AIzaSyBLPXw1R4_wxoFV_Xquf7WmmVPfRyqLEIA
Clic en “Realtime Database” > “Crear una base de dades”.
Escollim la nostre regió, Bèlgica (Europa del oest 1).
“Comenzar en modo de prueba”. Les regles de seguretat les implementarem posteriorment.
Clic en “Habilitar”.
Copiem la URL de la base de dades, que necessitarem en el codi:
https://esp-bme280-firebase-default-rtdb.europe-west1.firebasedatabase.app/
Apliquem la seguent configuració:
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"UsersData": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
En “Realtime Database” > ”Reglas” > “Editar Reglas”, copiem el tros de codi anterior i ho publiquem:
Amb aquesta regla el usuari pot entrar a la base de dades només amb el node següent:
UserData/Usuari UID.
Ara ja podem començar a programar la ESP8266.
Per fer servir el editor VS Code per programar Arduino, és necessari instal·lar l’extensió PlatformIO.
Per instalar i configurar el editor VS-Code cal consultar:
https://tresavis.cat/VS-Code-Arduino.phpPer programar tant la ESP8266 com la ESP32 per inserir dades a la base de dades de FIREBASE, seguin les tasques:
1. Autenticar-se amb email/contrasenya
2. Enviar les lectures del sensor a la base de dades amb un usuari autoritzat.
Clic en el boto PlatformIO, PIO > Open > Projects i posem el nom del projecte, la placa i l’entorn de treball que és Arduino. La localització per defecte.

Instal·lem les següents llibreries:
1. Firebase-ESP-Client
2. Adafruit BME280
3. Adafruit Unified Sensor
1. Llibreria Firebase-ESP-Client.
Aquesta llibreria es compatible per les dues plaques, la ESP32 i la ESP8266.
Clic en PlatformIO > Pio Home > Open
Clic en Llibreries i en el buscador escrivim Firebase ESP Client.
Clic sobre la llibreria i “Add to Project”.
Tarda a carregar-se, acaba amb arxius afegits al projecte:

2. Instal·lar la llibreria BME280.
Continuant en la finestra de les llibreries escrivim en el buscador BME280.
Escollim la llibreria d’Adafruit. L’afegim al projecte “Add Project”. Pregunta el nom del projecte.
Afegim al següent línia en el arxiu platform.ini:
monitor_speed = 115200
3. Llibreria Adafruit Unified Sensor.
El arxiu platform.ini té que quedar de la seguent manera:

Creem un nou arxiu main.cpp i copiem el següent codi:
/*
Rui Santos
Complete project details at our blog: https://RandomNerdTutorials.com/esp32-esp8266-firebase-bme280-rtdb/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <Firebase_ESP_Client.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// Provide the token generation process info.
#include "addons/TokenHelper.h"
// Provide the RTDB payload printing info and other helper functions.
#include "addons/RTDBHelper.h"
// Insert your network credentials
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
// Insert Firebase project API Key
#define API_KEY "REPLACE_WITH_YOUR_PROJECT_API_KEY"
// Insert Authorized Email and Corresponding Password
#define USER_EMAIL "REPLACE_WITH_THE_USER_EMAIL"
#define USER_PASSWORD "REPLACE_WITH_THE_USER_PASSWORD"
// Insert RTDB URLefine the RTDB URL
#define DATABASE_URL "REPLACE_WITH_YOUR_DATABASE_URL"
// Define Firebase objects
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
// Variable to save USER UID
String uid;
// Variables to save database paths
String databasePath;
String tempPath;
String humPath;
String presPath;
// BME280 sensor
Adafruit_BME280 bme; // I2C
float temperature;
float humidity;
float pressure;
// Timer variables (send new readings every three minutes)
unsigned long sendDataPrevMillis = 0;
unsigned long timerDelay = 180000;
// Initialize BME280
void initBME(){
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
}
// Initialize WiFi
void initWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
Serial.println();
}
// Write float values to the database
void sendFloat(String path, float value){
if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value)){
Serial.print("Writing value: ");
Serial.print (value);
Serial.print(" on the following path: ");
Serial.println(path);
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
}
void setup(){
Serial.begin(115200);
// Initialize BME280 sensor
initBME();
initWiFi();
// Assign the api key (required)
config.api_key = API_KEY;
// Assign the user sign in credentials
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
// Assign the RTDB URL (required)
config.database_url = DATABASE_URL;
Firebase.reconnectWiFi(true);
fbdo.setResponseSize(4096);
// Assign the callback function for the long running token generation task */
config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
// Assign the maximum retry of token generation
config.max_token_generation_retry = 5;
// Initialize the library with the Firebase authen and config
Firebase.begin(&config, &auth);
// Getting the user UID might take a few seconds
Serial.println("Getting User UID");
while ((auth.token.uid) == "") {
Serial.print('.');
delay(1000);
}
// Print user UID
uid = auth.token.uid.c_str();
Serial.print("User UID: ");
Serial.println(uid);
// Update database path
databasePath = "/UsersData/" + uid;
// Update database path for sensor readings
tempPath = databasePath + "/temperature"; // --> UsersData/<user_uid>/temperature
humPath = databasePath + "/humidity"; // --> UsersData/<user_uid>/humidity
presPath = databasePath + "/pressure"; // --> UsersData/<user_uid>/pressure
}
void loop(){
// Send new readings to database
if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)){
sendDataPrevMillis = millis();
// Get latest sensor readings
temperature = bme.readTemperature();
humidity = bme.readHumidity();
pressure = bme.readPressure()/100.0F;
// Send readings to database:
sendFloat(tempPath, temperature);
sendFloat(humPath, humidity);
sendFloat(presPath, pressure);
}
}

1. Tenim que posar les nostres credencials per la WIFI.
2. Definir la nostre API Key.
3. Inserir el "mail/contrasenya" autorizat per Firebase.
4. Inserir la nostre URL Database.
Cada 3 minuts ESP envia les lectures del sensor, de la següent manera:
// Timer variables (send new readings every three minutes)
unsigned long sendDataPrevMillis = 0;
unsigned long timerDelay = 180000;
Mètode per enviar la temperatura, humitat i pressió a la BD:
// Write float values to the database
void sendFloat(String path, float value){
if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value)){
Serial.print("Writing value: ");
Serial.print (value);
Serial.print(" on the following path: ");
Serial.println(path);
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
}
En el loop(), cada 3 minuts enviem les dades:
// Get latest sensor readings
temperature = bme.readTemperature();
humidity = bme.readHumidity();
pressure = bme.readPressure()/100.0F;
// Send readings to database:
sendFloat(tempPath, temperature);
sendFloat(humPath, humidity);
sendFloat(presPath, pressure)
La manera de pujar el codi a la placa fent servir el editor VS-Code é pot consultar en:
https://tresavis.cat/VS-Code-Arduino.phpEl monitor sèrie mostra la següent pantalla:

En el navegador posem la adreça de Firebase. Mostra els valors últims de temperatura, humitat i pressió:

Per fer aquesta practica ens basat en els següents tutories:
https://tresavis.cat/VS-Code-Arduino.php
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