×

ARDUINO

Control d’accés amb contrasenya. Orgue de llums. Comparativa de editors Arduino. Projecte bon Nadal. Sensor de gas i de fums. Control de la qualitat del aire interior (CO2) amb semàfor LED.

NodeMCU

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 llum de casa des de 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. ESP8266-BME280 Firebase. La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega..

ESP32

ESP32-CAM, exemple de prova. Esp32-Cam captura fotos per ser vistes en la WEB. Pujar fotos a un servidor FTP amb ESP32-CAM. Foto amb ESP32-CAM i Telegram. Alarma amb avis a Telegram, utilitzant la placa ESP32-CAM.

PROGRAMACIÓ

Matemàtiques. App Inventor tutorial. MicroPython en ESP8266. Visual Estudio Code per Arduino

Intel·ligència artificial

Classificador d’imatges.

SERVIDORS

Instal·lar i configurar Apache en Ubuntu. Accés a un servidor Linux remotament. Client i Servidor FTP.

MÀQUINES VIRTUALS

Màquina virtual UBUNTU. WindowsXP en Virtualbox.

ELECTRÒNICA

Simulador Multisim. Simulador Proteus.

BASE DE DADES

MySQL. Instal·lació. MySQL. Aplicacions.

JAVA

Netbeans Maven MySQL. Java+Netbeans+Maven+EclipseLink+MySQL Aplicació d’escriptori JavaFX App JavaFX amb SceneBuilder App Java-Swing
favicon
logo

Tresavis

Benvinguts al blog de tresavis de noves tecnologies i més.

Correu : tresavis3@gmail.com

facebook   Instagram   youtube   x   tiktok

☰ Pràctiques   ☰ Articles

Components.

  • 1.- Placa NodeMCU (ESP8266).
  • 2.- Sensor de temperatura, humitat i pressió BME280.
  • 3.- Editor VS Code per programar la placa.
  • 4.- Firebase com a base de dades en el núvol.

Estudis previs.

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.php

Per iniciar-se en Firebase i com programar la ESP8266 per interactuar amb la base de dades, consultar:

https://tresavis.cat/esp8266-firebase.php

Esquema elèctric.

Usarem la comunicació I2C de la placa amb el sensor BME280.

ESP8266	        BME280
D1		SCL
D2		SDA
            
         
esquema

Esquema obtingut amb la aplicació de:

https://circuito.io

Visió general del projecte.

1

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.


Com ho farem?

  • 1. Nou projecte a Firebase.
  • 2. Configurar el mètode d’autenticació.
  • 3. Obtenir el API Key del projecte.
  • 4. Configurar la base de dades.
  • 5. Configurar les regles de seguretat de la BD.
  • 6. La ESP envia les dades del sensor a la BD.

El 5 primers punts ja els tenim resolts en la practica anterior en:

https://tresavis.cat/esp8266-firebase.php

Tornarem 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.php

Crear un projecte en Firebase.

Entrar en: Firebase amb un compte de Google i una contrasenya.

Clic en “Comenzar”.

Clic en “Agregar proyecto”.

Posem nom al projecte: ESP-BME280-Firebase

Des-habilitem Google Analytic per aquest projecte.

2

Clic en “Crear Proyecto”.

3
4

Clic en Continuar.

Ja estem en la consola de Firebase.

5

Configurar el mètode d’autenticació.

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”

6

Escollim l’opció: “Correu/Contrasenya”.

7

Habilitar "correu/Contrasenya" i clic en "Guardar".

8
9

Ja tenim el mètode habilitat. Ara tenim que afegir un usuari.

Clic en “Users” i en “Afegir un usuari”.

10

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.

11

La tenim el usuari creat:

12

Copiem el UID del usuari, que servirà per logejar-se.

P8VEq8C9PPhmqS75O5YVrbymrKp1

Obtenir la API Key.

Clic en “Descripción general” > ”Configuración del proyecto”

En la consola de Firebase a l’esquerra, clic en “authentication” > ”Comenzar”

13

Copiem el API Key.

14 API Key: AIzaSyBLPXw1R4_wxoFV_Xquf7WmmVPfRyqLEIA

Configurar la base de dades.

Clic en “Realtime Database” > “Crear una base de dades”.

15

Escollim la nostre regió, Bèlgica (Europa del oest 1).

16

“Comenzar en modo de prueba”. Les regles de seguretat les implementarem posteriorment.

17

Clic en “Habilitar”.

18

Copiem la URL de la base de dades, que necessitarem en el codi:

https://esp-bme280-firebase-default-rtdb.europe-west1.firebasedatabase.app/


Configurar les regles de seguretat de la base de dades.

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:

19

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.


Programar la ESP8266 – Firebase amb VS Code.

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.php

Per 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.         
         

Nou VS-Code projecte.

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.

20

Instal·lació de les llibreries per VS Code.

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

21

Clic en Llibreries i en el buscador escrivim Firebase ESP Client.

22

Clic sobre la llibreria i “Add to Project”.

23
24

Tarda a carregar-se, acaba amb arxius afegits al projecte:

25

2. Instal·lar la llibreria BME280.

Continuant en la finestra de les llibreries escrivim en el buscador BME280.

26

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 27

3. Llibreria Adafruit Unified Sensor.

28

El arxiu platform.ini té que quedar de la seguent manera:

29

Codi.

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);
  }
}

             
         
30

Com funciona el codi.

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)
             
         

Demostració.

La manera de pujar el codi a la placa fent servir el editor VS-Code é pot consultar en:

https://tresavis.cat/VS-Code-Arduino.php

El monitor sèrie mostra la següent pantalla:

31

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

32

Contingut.


Nosaltres

1
2
3
4
5
6
4
5
6


Tags

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